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


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

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

J. Раскраска интервалов

*особая задача жадные алгоритмы математика *2400

Арио получил замечательный подарок на свой 2418-ый день рождения — набор интервалов! Он очень обрадовался и решил поскорее раскрасить все эти интервалы. Он использует простое правило. Раскраска называется красивой, если не существует трех интервалов a, b и c таких, что следующие условия выполняются одновременно:

  • a, b и c покрашены в один цвет,
  • ,
  • ,
  • .

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

Задан набор интервалов. Определите минимальное количество цветов k, необходимое для красивой раскраски.

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

Первая строка содержит целое положительное n (1 ≤ n ≤ 103) — количество интервалов. Далее в n строках содержатся описания интервалов, по одному в строке. Каждый интервал задается парой чисел si, ei, которые обозначают координаты его концов ( - 105 < si, ei < 105, si ≤ ei). Изучите примеры для лучшего понимания формата. Квадратная скобка в описании соответствует включению границы, а круглая — нет.

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

Выведите искомое минимальное число цветов k.

A. Футболки Codehorses

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

Codehorses вот только закончил проведение второго Codehorses Cup! В этом году, как и в прошлом, организаторы дарят победителям футболки.

Валидным размером футболки называют либо «M», либо от \(0\) до \(3\) «X», за которыми следуют «S» или «L». Например, размеры «M», «XXS», «L», «XXXL» валидны, а «XM», «Z», «XXXXL» не валидны.

И в прошлом году, и в этом в кубке \(n\) победителей. У Ксении есть список размеров футболок, которые печатались к прошлому году, и теперь ей надо отправить новый список в типографию.

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

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

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

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

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

В \(i\)-й из следующих \(n\) строк записано \(a_i\) — размер \(i\)-й футболки списка прошлого года.

В \(i\)-й из следующих \(n\) строк записано \(b_i\) — размер \(i\)-й футболки списка текущего года.

Гарантируется, что все размеры футболок во входных данных валидны. Также гарантируется, что Ксения сможет сделать список \(b\) из списка \(a\).

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

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

Примечание

В первом примере Ксения может заменить «M» на «S» и «S» в одном из вхождений «XS» на «L».

Во втором примере Ксения должна заменить «L» в «XXXL» на «S».

В третьем примере списки совпадают.

B. Подсвети

жадные алгоритмы *1500

Недавно Вы купили новую умную лампу с программируемыми функциями. Первым делом Вы выставили расписание на ней. Каждый день лампа будет включать питание в момент \(0\) и выключать питание в момент \(M\). Более того, данная лампа позволяет Вам записать в нее программу, следуя которой, она будет менять свое состояние (состояниями считается «свет включен» и «свет выключен»). К сожалению, в лампу уже предустановлена некоторая программа.

Лампа принимает только хорошие программы. Хорошая программа может быть представлена непустым массивом \(a\), где \(0 < a_1 < a_2 < \dots < a_{|a|} < M\). Все \(a_i\) должны быть целыми числами. Конечно, предустановленная программа является хорошей.

Лампа выполняет заданную программу \(a\) следующим образом: в момент \(0\) она включает и питание, и свет. Далее, в момент \(a_i\) лампа переключает свое состояние на противоположное (если свет был включен, то он выключается, и наоборот). Свет переключается моментально, т. е., например, если переключить свет в момент времени \(1\) и дальше ничего не делать, то итоговое время горения лампы будет равно \(1\). Наконец, в момент \(M\) лампа отключает питание независимо от того, был ли свет включен.

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

Найдите такой способ изменить программу, что суммарное время горения лампы будет максимально. Возможно, что иногда лучше оставить программу нетронутой. (Если у лампы включен свет с момента \(x\) по момент \(y\), тогда лампа будет гореть время, равное \(y - x\). Отрезки включенного света суммируются).

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

Первая строка содержит два числа \(n\) и \(M\) (\(1 \le n \le 10^5\), \(2 \le M \le 10^9\)) — длина предустановленной программы \(a\) и момент отключения питания лампы.

Вторая строка содержит \(n\) чисел через пробел \(a_1, a_2, \dots, a_n\) (\(0 < a_1 < a_2 < \dots < a_n < M\)) — программа \(a\).

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

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

Примечание

В первом примере один из возможных оптимальных ответов — вставить значение \(x = 3\) перед \(a_1\), тогда программа будет выглядеть как \([3, 4, 6, 7]\), и суммарное время горения лампы будет равно \((3 - 0) + (6 - 4) + (10 - 7) = 8\). С другой стороны, можно, например, вставить \(x = 5\) в соответствующее место.

Во втором примере есть единственное оптимальное решение: вставить \(x = 2\) между \(a_1\) и \(a_2\). Программа примет вид \([1, 2, 10]\) и ответ будет равен \((1 - 0) + (10 - 2) = 9\).

В третьем примере оптимальным решением является совсем не трогать программу, ответ будет равен \((3 - 0) + (7 - 4) = 6\).

D. Монеты и запросы

жадные алгоритмы *1600

У Поликарпа есть \(n\) монет, достоинство \(i\)-й монеты равно \(a_i\). Гарантируется, что все достоинства являются натуральными степенями \(2\) (то есть \(a_i = 2^d\) для некоторого неотрицательного целого числа \(d\)).

Поликарп хочет знать ответы на \(q\) запросов. \(j\)-й описывается целым числом \(b_j\). Ответом на запрос является минимальное количество монет, необходимое для получения суммы \(b_j\), используя некоторое подмножество монет (Поликарп может использовать только те монеты, которые у него есть). Если Поликарп не может получить значение \(b_j\), то ответ на \(j\)-й запрос равен -1.

Запросы независимы (ответ на запрос не влияет на монеты Поликарпа).

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

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

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

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

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

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

B. Соня и выставка

жадные алгоритмы Конструктив математика реализация *1300

Соня решила провести выставку цветов. Так как девочка любит только розы и лилии, она решила, что на выставке будут только эти два вида цветов.

Выставка представляет собой ряд из \(n\) цветов. Соня может поставить на позицию \(i\) либо розу, либо лилию. Таким образом, каждая из \(n\) позиций будет содержать ровно один цветок — розу или лилию.

Она знает, что выставку посетят ровно \(m\) людей, при чем \(i\)-й посетитель будет рассматривать только цветки от \(l_i\) до \(r_i\) включительно. Девочка понимает, что у каждого подотрезка цветов есть своя красота, которая равна произведению количества роз и количества лилий.

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

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

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

Каждая из следующих \(m\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1\leq l_i\leq r_i\leq n\)), что значит, что \(i\)-й посетитель пройдет по всем цветам в диапазоне от \(l_i\) до \(r_i\) включительно.

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

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

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

Примечание

В первом примере на первой, четвертой и пятой позициях стоят розы, а на второй и третьей позициях — лилии;

  • на подотрезке \([1\ldots3]\) есть одна роза и две лилии, поэтому красота равна \(1\cdot 2=2\);
  • на подотрезке \([2\ldots4]\) есть одна роза и две лилии, поэтому красота равна \(1\cdot 2=2\);
  • на подотрезке \([2\ldots5]\) есть две розы и две лилии, поэтому красота равна \(2\cdot 2=4\).

Суммарная красота равна \(2+2+4=8\).

Во втором примере на третьей, четвертой и шестой позициях стоят розы, а на первой, второй и пятой позициях — лилии;

  • на подотрезке \([5\ldots6]\) есть одна роза и одна лилия, поэтому красота равна \(1\cdot 1=1\);
  • на подотрезке \([1\ldots4]\) есть две розы и две лилии, поэтому красота равна \(2\cdot 2=4\).
  • на подотрезке \([4\ldots6]\) есть две розы и одна лилия, поэтому красота равна \(2\cdot 1=2\).

Суммарная красота равна \(1+4+2=7\).

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.

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

C. Суммируй до степени двойки

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

Последовательность \(a_1, a_2, \dots, a_n\) называется хорошей, если для любого его элемента \(a_i\) найдется такой элемент \(a_j\) (\(i \ne j\)), что \(a_i+a_j\) является степенью двойки (то есть равен \(2^d\) для некоторого неотрицательного целого \(d\)).

Например, следующие последовательности — хорошие:

  • \([5, 3, 11]\) (например, для \(a_1=5\) можно выбрать \(a_2=3\), что сумма — степень двойки, подобную пару можно найти и для \(a_2\) и \(a_3\)),
  • \([1, 1, 1, 1023]\),
  • \([7, 39, 89, 25, 89]\),
  • \([]\).

Обратите внимание, что по определению пустая последовательность (то есть такая, длина которой равна \(0\)) является хорошей.

Например, следующие последовательности не являются хорошими:

  • \([16]\) (для \(a_1=16\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки),
  • \([4, 16]\) (для \(a_1=4\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки),
  • \([1, 3, 2, 8, 8, 8]\) (для \(a_3=2\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки).

Задана последовательность \(a_1, a_2, \dots, a_n\). Какое наименьшее количество элементов надо удалить, чтобы сделать её хорошей? Удалять можно произвольный набор элементов.

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

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

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

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

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

Примечание

В первом примере достаточно удалить один элемент \(a_4=5\). Оставшиеся элементы образуют последовательность \([4, 7, 1, 4, 9]\), которая является хорошей.

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\).

B. Тренировка Поликарпа

жадные алгоритмы реализация сортировки *1200

Поликарп тренирует свое умение решать задачи. У него есть список из \(n\) задач со сложностями \(a_1, a_2, \dots, a_n\) соответственно. Его план состоит в том, чтобы тренироваться ровно \(k\) дней. Каждый день он должен решать хотя бы одну задачу из своего списка. Поликарп решает задачи в том порядке, в котором они заданы в списке, и он не может пропустить какую-либо задачу из списка. Он должен решить ровно \(n\) задач ровно за \(k\) дней.

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

Полезность \(j\)-го дня тренировки Поликарпа равна максимальной сложности задачи среди всех задач, которые Поликарп решит в течение \(j\)-го дня (то есть если он решит задачи с номерами от \(l\) до \(r\) в течение какого-то дня, тогда полезность этого дня равна \(\max\limits_{l \le i \le r}a_i\)). Общая полезность его тренировки — это сумма полезностей по всем \(k\) дням его тренировки.

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

Например, если \(n = 8, k = 3\) и \(a = [5, 4, 2, 6, 5, 1, 9, 2]\), одним из возможных способов с максимальной общей полезностью является следующий: \([5, 4, 2], [6, 5], [1, 9, 2]\). Здесь общая полезность равна \(5 + 6 + 9 = 20\).

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

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

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

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

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

Во второй строке выведите \(k\) натуральных чисел \(t_1, t_2, \dots, t_k\) (\(t_1 + t_2 + \dots + t_k\) должно равняться \(n\)), где \(t_j\) равно количеству задач, которое Поликарп решит в \(j\)-й день, чтобы достигнуть максимальной общей полезности его тренировки.

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

Примечание

Первый тестовый пример описан в условии задачи.

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

В третьем тестовом примере лучшим ответом является распределить задачи следующим образом: \([1, 2000], [2000, 2]\). Тогда суммарная полезность будет равна \(2000 + 2000 = 4000\).

B. Поверните прямоугольники

жадные алгоритмы сортировки *1000

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

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

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

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

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

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

Выведите «YES» (без кавычек), если можно так повернуть прямоугольники, что они станут идти в порядке невозрастания высоты, иначе выведите «NO».

Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

Примечание

В первом тесте можно повернуть второй и третий прямоугольники, тогда высоты будут [4, 4, 3].

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

B. Минимальная троичная строка

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

Задана троичная строка (строка, состоящая только из символов '0', '1' и '2').

Можно обменивать местами любую пару соседних (последовательных) символов '0' и '1' (то есть заменять «01» на «10» и наоборот) или любую пару соседних (последовательных) символов '1' и '2' (то есть заменять «12» на «21» и наоборот). Другие обмены запрещены.

Например, со строкой «010210» можно проводить следующие действия:

  • «010210» \(\rightarrow\) «100210»;
  • «010210» \(\rightarrow\) «001210»;
  • «010210» \(\rightarrow\) «010120»;
  • «010210» \(\rightarrow\) «010201».

Заметим, что нельзя менять местами «02» \(\rightarrow\) «20» и наоборот. Также нельзя проводить никаких других операций со строкой, за исключением тех, что описаны выше.

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

Строка \(a\) лексикографически меньше строки \(b\) (если строки \(a\) и \(b\) имеют одинаковую длину), если найдется такая позиция \(i\) (\(1 \le i \le |a|\), где \(|s|\) — длина строки \(s\)), что для всех \(j < i\) выполняется \(a_j = b_j\), и \(a_i < b_i\).

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

Первая строка входных данных содержит строку \(s\), состоящую из символов '0', '1' и '2', ее длина от \(1\) до \(10^5\) (включительно).

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

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

C. Надоевший подарок

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

В очередной раз Алисе на день рождения вручили массив из \(n\) элементов! Уже третий год кряду!

И что еще хуже, он поразительно скучный, целиком заполнен нулями. Боб решил изменить массив некоторым образом так, чтобы развеселить Алису.

Боб выбрал \(m\) изменений следующего вида. Для некоторых целых чисел \(x\) и \(d\) он выбирает произвольную позицию \(i\) (\(1 \le i \le n\)) и для всех \(j \in [1, n]\) прибавляет \(x + d \cdot dist(i, j)\) к значению \(j\)-й ячейки. \(dist(i, j)\) — это расстояние между позициями \(i\) и \(j\) (т.е. \(dist(i, j) = |i - j|\), где \(|x|\) — модуль числа \(x\)).

Например, если у Алисы в данный момент есть массив \([2, 1, 2, 2]\), и Боб выбирает позицию \(3\) для \(x = -1\) и \(d = 2\), то массив становится \([2 - 1 + 2 \cdot 2,~1 - 1 + 2 \cdot 1,~2 - 1 + 2 \cdot 0,~2 - 1 + 2 \cdot 1]\) = \([5, 2, 1, 3]\). Обратите внимание, что Боб не может выбрать позицию \(i\) вне границ массива (то есть, меньше \(1\) или больше \(n\)).

Алиса будет наиболее счастлива, если элементы массива будут как можно больше. Боб решил, что среднее арифметическое отлично подойдет в качестве метрики.

Какое максимальное значение среднего арифметического Боб может получить?

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

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

В каждой из следующих \(m\) строк записаны по два целых числа \(x_i\) и \(d_i\) (\(-10^3 \le x_i, d_i \le 10^3\)) — параметры для \(i\)-го изменения.

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

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

Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не будет превосходить \(10^{-6}\).

D. Взаимно простой граф

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

Назовем неориентированный граф \(G = (V, E)\) взаимно простым, если для каждого ребра \((v, u) \in E\)  \(GCD(v, u) = 1\) (наибольший общий делитель \(v\) и \(u\) равен \(1\)). Если между некоторой парой вершин \(v\) и \(u\) нет ребра, то значение \(GCD(v, u)\) не важно. Вершины нумеруются от \(1\) до \(|V|\).

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

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

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

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

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

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

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

В противном случае выведите ответ в следующем формате:

В первой строке должно быть записано слово «Possible».

В \(i\)-й из следующих \(m\) строк должно содержаться \(i\)-е ребро \((v_i, u_i)\) полученного графа (\(1 \le v_i, u_i \le n, v_i \neq u_i\)). Для каждой пары \((v, u)\) не должно больше содержаться пар \((v, u)\) или \((u, v)\). Вершины нумеруются от \(1\) до \(n\).

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

Примечание

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

G. Разрешенные буквы

битмаски графы жадные алгоритмы Паросочетания Потоки *2400

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

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

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

Наконец, Поликарп уверен, что минимальное лексикографически название — лучшее название. (Ну так а почему, думаете, Google решил стать Alphabet?)

Формально, вам дана строка, состоящая из строчных латинских букв от «a» to «f». Можно менять местами буквы на любых позициях произвольное количество раз (можно и ноль).

Какое минимальное лексикографически название получить такое, что буква на каждой позиции в нем находится среди разрешенных букв?

Если Поликарп не может получить ни одного корректного названия, то выведите «Impossible».

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

В первой строке содержится строка \(s\) (\(1 \le |s| \le 10^5\)) — название, которое придумал Поликарп. Строка состоит только из строчных латинских букв от «a» to «f».

Во второй строке записано одно целое число \(m\) (\(0 \le m \le |s|\)) — количество инвесторов.

В \(i\)-й из следующих \(m\) строк записано целое число \(pos_i\) и непустая строка разрешенных символов для \(pos_i\) (\(1 \le pos_i \le |s|\)). Каждая строка содержит попарно различные буквы от «a» to «f». \(pos_1, pos_2, \dots, pos_m\) попарно различны. Если какая-либо позиция в строке не содержится в требованиях инвесторов, то любая буква может стоять на этой позиции.

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

Если Поликарп не может составить никакого корректного названия, то выведите «Impossible».

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

A. Домашнее задание

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

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

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

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

В первой строке входных данных дана строка длины n (1 ≤ n ≤ 105), состоящая из строчных букв латинского алфавита. Во второй строке дано число k (0 ≤ k ≤ 105).

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

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

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

Примечание

В первом примере строка состоит из пяти одинаковых букв, но удалить разрешается только 4, так что хотя бы одна буква останется. Таким образом, правильный ответ — 1 и любая строка из симолов «a» длины от 1 до 5.

Во втором примере разрешается удалить 4 символа. Все символы удалить не получится, потому что строка имеет длину 7. Но можно удалить все символы, кроме «a». Соответственно, можно, например, удалить все символы, кроме «a», благо их не больше четырех, и получить строку «aaaa».

В третьем примере дана строка длины 8, а k = 10, так что можно удалить всю строку. Правильный ответ — 0 и пустая строка.

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 минуты.

A. Ступени

жадные алгоритмы реализация сортировки *900

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

Всего на складе есть \(n\) ступеней. Ракета должна содержать ровно \(k\) из них. Ступени в ракете должны быть упорядочены по весу. После ступени с некоторой буквой можно ставить только ступень с буквой, идущей хотя бы на две позиции позже в алфавите (то есть через одну букву или более). Например, после буквы 'c' нельзя ставить буквы 'a', 'b', 'c' и 'd', зато можно ставить 'e', 'f', ..., 'z'.

Чтобы ракета летела максимально далеко, нужно, чтобы её вес был минимален. Вес ракеты равен сумме весов её ступеней. Ступень весит столько тонн, каков номер её буквы в алфавите. Иными словами, ступень 'a' весит одну тонну, 'b' весит две тонны, а 'z' — \(26\) тонн.

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

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

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

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

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

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

Примечание

В первом примере условию удовлетворяют такие ракеты:

  • «adx» (вес равен \(1+4+24=29\));
  • «ady» (вес равен \(1+4+25=30\));
  • «bdx» (вес равен \(2+4+24=30\));
  • «bdy» (вес равен \(2+4+25=31\)).

Минимальный вес имеет ракета «adx», следовательно ответ равен \(29\).

Во втором примере искомая ракета — «belo». Её вес — \(2+5+12+15=34\).

В третьем примере \(n=k=2\), поэтому ракета должна содержать обе ступени: 'a' и 'b'. Такая ракета не удовлетворяет условию, поскольку эти буквы стоят в алфавите рядом. Ответ — -1.

B. И

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

Есть массив a1, a2, ..., an и число x.

За одну операцию можно выбрать произвольный ai и заменить его на ai & x, где & означает побитовое "И" двух чисел.

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

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

Первая строка содержит числа n и x (2 ≤ n ≤ 100 000, 1 ≤ x ≤ 100 000) — число элементов в массиве и число, с которым можно делать побитовое "и".

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

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

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

Примечание

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

Во втором примере массив уже содержит два совпадающих элемента.

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

D. Между домами

жадные алгоритмы Конструктив *1600

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

Вы хотите совершить \(k\) переходов между домами. Переходом является ходьба от текущего дома к другому дому. Вы не можете стоять на месте (то есть во время каждого перехода другой дом должен отличаться от текущего). Если вы идете от дома \(x\) до дома \(y\), дистанция, которую вы прошли, увеличивается на \(|x-y|\) единиц, где \(|a|\) — абсолютная величина (модуль числа) \(a\). Разрешается посещать один и тот же дом несколько раз (но нельзя посещать один и тот же дом два раза подряд).

Ваша задача — пройти суммарно ровно \(s\) единиц дистанции.

Если это невозможно, выведите «NO». Иначе выведите «YES» и один из возможных способов сделать это. Помните, что вы должны совершить ровно \(k\) переходов.

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

Первая строка входных данных содержит три целых числа \(n\), \(k\), \(s\) (\(2 \le n \le 10^9\), \(1 \le k \le 2 \cdot 10^5\), \(1 \le s \le 10^{18}\)) — количество домов, количество переходов и суммарная дистанция, которую вы должны пройти.

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

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

Иначе выведите «YES» в первой строке и затем выведите ровно \(k\) целых чисел \(h_i\) (\(1 \le h_i \le n\)) во второй строке, где \(h_i\) — дом, к которому вы переходите на \(i\)-м шаге.

Для каждого \(j\) от \(1\) до \(k-1\) должно выполняться следующее условие: \(h_j \ne h_{j + 1}\). Также должно выполняться \(h_1 \ne 1\).

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

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

A. Тетрадь Смерти

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

Вам досталась тетрадь, которая называется Тетрадь Смерти. В ней бесконечное количество страниц. На последней странице этой тетради (хех) написано правило. Оно гласит: «Вы должны записывать в эту тетрадь имена в течение \(n\) последовательных дней. В течение \(i\)-го дня вы должны записать ровно \(a_i\) имен.». Вы очень испугались (конечно вы испугались, кто бы не испугался, если бы он получил тетрадь, которая называется Тетрадь Смерти, с каким-то странным правилом, написанным в ней?).

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

Теперь вас интересует следующий вопрос: сколько раз вы перевернете страницу в течение каждого дня? Вы заинтересованы в количестве переворотов страницы в течение каждого дня от \(1\) до \(n\).

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

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

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

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

Выведите \(n\) целых чисел \(t_1, t_2, \dots, t_n\), где \(t_i\) означает количество переворотов страницы в течение \(i\)-го дня.

Примечание

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

C. Телефонный номер

жадные алгоритмы Конструктив *1600

Миссис Смит пытается связаться со своим мужем, мистером Смитом, но она забыла его секретный телефонный номер!

Единственное, что помнит миссис Смит, это то, что любая перестановка из \(n\) чисел может быть секретным номером телефона. Но только те перестановки, которые имеют минимальное секретное значение, могут быть номером телефона её мужа.

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

Секретным значением перестановки называется сумма длин наибольшей возрастающей подпоследовательности (НВП) и наибольшей убывающей подпоследовательности (НУП).

Подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\), где \(1\leq i_1 < i_2 < \ldots < i_k\leq n\) называется возрастающей, если \(a_{i_1} < a_{i_2} < a_{i_3} < \ldots < a_{i_k}\). Если \(a_{i_1} > a_{i_2} > a_{i_3} > \ldots > a_{i_k}\), то подпоследовательность называется убывающей. Возрастающая/убывающая подпоследовательность называется наибольшей, если она обладает максимальной длиной среди всех возрастающих/убывающих подпоследовательностей.

Например, если есть перестановка \([6, 4, 1, 7, 2, 3, 5]\), НВП этой перестановки будет \([1, 2, 3, 5]\), а длина НВП будет \(4\). НУП может быть \([6, 4, 1]\), \([6, 4, 2]\) или \([6, 4, 3]\), значит длина НУП равна \(3\).

Обратите внимание, что длины НВП и НУП могут быть различны.

Помогите, пожалуйста, миссис Смит найти перестановку, которая дает минимальную сумму длин НВП и НУП.

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

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина перестановки, которую вам нужно найти.

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

Выведите перестановку, которая дает минимальную сумму длин НВП и НУП.

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

Примечание

В первом примере вы можете построить перестановку \([3, 4, 1, 2]\). НВП — \([3, 4]\) (или \([1, 2]\)), значит длина НВП равна \(2\). НУП может быть любой из \([3, 1]\), \([4, 2]\), \([3, 2]\) и \([4, 1]\). Длина НУП тоже равна \(2\). Сумма равна \(4\). Обратите внимание, что \([3, 4, 1, 2]\) не единственная перестановка, которая подходит.

Во втором примере вы можете построить перестановку \([2, 1]\). НВП — \([1]\) (или \([2]\)), значит длина НВП равна \(1\). НУП — \([2, 1]\), значит длина НУП равна \(2\). Сумма равна \(3\). Обратите внимание, что перестановка \([1, 2]\) тоже подходит.

A. Выборы

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

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

Скоро должны пройти выборы. Вы знаете количество избирателей и количество партий — \(n\) и \(m\) соответственно. Также, для каждого избирателя вы знаете, за какую партию он собирается голосовать. Однако, при наличии определённой суммы денег, это всё поправимо. В частности, если заплатить \(i\)-му избирателю \(c_i\) байткоинов, можно сделать так, чтобы тот проголосовал за любую партию по вашему усмотрению.

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

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

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

Каждая из следующих \(n\) строк содержит числа \(p_i\) и \(c_i\) (\(1 \le p_i \le m\), \(1 \le c_i \le 10^9\)) — номер партии, за которую собирается голосовать очередной избиратель, а второе — количество байткоинов, за которое он готов изменить своё мнение.

Объединённая Партия Государства Берляндии имеет номер \(1\).

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

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

Примечание

В первом тесте из условия Объединённая Партия выигрывает выборы, не покупая голоса избирателей.

Во втором тесте из условия Объединённая Партия может перекупить голоса первого и четвёртого избирателя. Таким образом, она наберёт два голоса, партии номер \(3\), \(4\) и \(5\) по одному, партия номер \(2\) не получит ни одного голоса.

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

C. Скобочная подпоследовательность

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

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

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

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

Гарантируется, что такая последовательность всегда существует.

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(n\) и \(k\) четные) — длина \(s\) и длина последовательности, которую требуется найти.

Во второй строке содержится строка \(s\) — правильная скобочная последовательность длины \(n\).

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

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

Гарантируется, что такая последовательность всегда существует.

B. Ослабленный Общий Делитель

жадные алгоритмы Перебор теория чисел *1600

В процессе исследования свойств наибольшего общего делителя (НОД) набора чисел известный математик Ильдар предложил новую концепцию ослабленного общего делителя (ООД) набора пар чисел.

Для заданного набора пар целых чисел \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) их ООД называется произвольное число превосходящее \(1\), которое делит хотя бы один элемент в каждой паре. ОДД может и не существовать для некоторых наборов.

Например, если набор пар имеет вид \([(12, 15), (25, 18), (10, 24)]\), то их ОДД может быть равен \(2\), \(3\), \(5\) или \(6\) (каждое из этих чисел строго больше \(1\) и делит хотя бы одно число в каждой паре).

Вы — аспирант Ильдара, и ваша задача помочь ему с вычислением ООД. Поможете ему с эффективной реализацией вычисления ООД?

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

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

В каждой из следующих \(n\) строк задано по два целых числа \(a_i\), \(b_i\) (\(2 \le a_i, b_i \le 2 \cdot 10^9\)).

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

Выведите единственное число — ООД списка пар.

Если возможных ответов несколько, выведите любой; если ответа не существует, выведите \(-1\).

Примечание

В первом примере одним из возможных ООД является число \(6\). В первой паре оно делит \(18\), во второй — \(24\), а в третьей — \(12\).

Во втором примере ни одно число, большее \(1\), не удовлетворяет условию.

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

C. Прямоугольник минимальной стоимости

жадные алгоритмы *1600

У вас есть \(n\) палочек заданных длин.

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

Пусть \(S\) будет площадью прямоугольника, а \(P\) — его периметром.

Выбранный прямоугольник должен иметь минимально возможное значение \(\frac{P^2}{S}\). К значению не применяется никакое округление.

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

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

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

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

Затем следуют \(2T\) строк — строки \((2i - 1)\) и \(2i\) из них описывают \(i\)-й список. В первой строке пары записано одно целое число \(n\) (\(4 \le n \le 10^6\)) — количество палочек в \(i\)-м списке. Во второй строке пары записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_j \le 10^4\)) — длины палочек в \(i\)-м списке.

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

Суммарное количество палочек во всех \(T\) списках не превосходит \(10^6\) в каждом тесте.

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

Выведите \(T\) строк. В \(i\)-й строке должен содержаться ответ для \(i\)-го списка входных данных. Ответ — это длины четырех палочек, которые надо выбрать из \(i\)-го списка, чтобы они образовывали прямоугольник и чтобы значение \(\frac{P^2}{S}\) этого прямоугольника было минимально возможным. Эти длины можно выводить в произвольном порядке.

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

Примечание

В первом списке существует только один способ выбрать четыре палочки, они образуют прямоугольник со сторонами \(2\) и \(7\), его площадь равна \(2 \cdot 7 = 14\), периметр равен \(2(2 + 7) = 18\). \(\frac{18^2}{14} \approx 23.143\).

Второй список содержит поднаборы из четырех палочек, которые могут образовать прямоугольники со сторонами \((1, 2)\), \((2, 8)\) и \((1, 8)\). Их значения — \(\frac{6^2}{2} = 18\), \(\frac{20^2}{16} = 25\) и \(\frac{18^2}{8} = 40.5\), соответственно. Минимальное из них у прямоугольника \((1, 2)\).

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

D. Книга заявок

жадные алгоритмы Комбинаторика Структуры данных *2100

Рассмотрим упрощенную версию книги заявок некоторой акции.

Книга заявок — это список заявок (предложений) от людей, которые хотят купить или продать одну акцию, каждая заявка описывается направлением (BUY или SELL) и ценой.

В каждый момент времени у любой SELL заявки цена больше, чем у любой BUY заявки.

В этой задаче цены всех когда-либо существовавших заявок различны.

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

Данная книга заявок говорит, что кто-то хочет продать акцию по цене \(12\), и это лучшее предложение с направлением SELL, потому что у других двух заявок с этим направлением цена выше. У лучшего BUY предложения цена \(10\).

В книге заявок возможны два события:

  1. Кто-то добавил новую заявку с некоторым направлением и некоторой ценой
  2. Кто-то принял лучшее SELL или BUY предложение (совершил сделку). Нельзя принять не лучшее предложение (совершать сделку по менее выгодной цене). После того, как лучшее предложение принято, оно навсегда удаляется из книги заявок.

Можно добавлять новые заявки BUY только с ценами ниже лучшего SELL предложения (если вы хотите купить по более высокой цене, то вместо постановки заявки нужно принять лучшее SELL предложение). Аналогично нельзя добавлять SELL заявки с ценами меньшими или равными лучшему предложению BUY. К примеру, нельзя добавить заявку "SELL \(20\)", если уже есть заявка "BUY \(20\)" или "BUY \(25\)" — в этом случае нужно просто принять лучшее предложение BUY.

У вас есть поврежденный лог событий в книге заявок (в начале никаких заявок в книге нет). В логе есть события двух типов:

  1. "ADD \(p\)" означает добавление новой заявки с ценой \(p\) и неизвестным направлением. Заявка не должна противоречить еще не удаленным заявкам в книге заявок.
  2. "ACCEPT \(p\)" означает принятие существующего лучшего предложения с ценой \(p\) и неизвестным направлением.

Направления всех заявок (BUY или SELL) в логе утеряны. Не всегда по имеющимся данным можно однозначно восстановить эти направления. Посчитайте количество способов корректно восстановить направления ADD заявок так, что описанные условия всегда выполнены. Ответ может быть очень большим, поэтому выведите его по модулю \(10^9 + 7\). Если невозможно корректно восстановить направления, то выведите \(0\).

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

В первой строке задано целое число \(n\) (\(1 \le n \le 363\,304\)) — количество событий в логе.

Каждая из следующих \(n\) строк содержит слово "ACCEPT" или "ADD" и целое число \(p\) (\(1 \le p \le 308\,983\,066\)), описывающих тип события и цену.

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

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

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

Примечание

В первом примере каждая из заявок может быть и BUY, и SELL.

Во втором примере заявка с ценой \(1\) должна иметь направление BUY, заявка с ценой \(3\) должна иметь направление SELL.

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]\).

C. Максимальное пересечение

жадные алгоритмы математика сортировки *1600

Заданы \(n\) отрезков на числовой прямой; границы каждого отрезка имеют целочисленные координаты. Некоторые отрезки могут вырождаться в точки. Отрезки могут пересекаться, вкладываться друг в друга или даже совпадать.

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

Например, пересечение отрезков \([1;5]\) и \([3;10]\) — это \([3;5]\) (длина \(2\)), пересечение отрезков \([1;5]\) и \([5;7]\) — это \([5;5]\) (длина \(0\)) и пересечение отрезков \([1;5]\) и \([6;6]\) — это пустое множество (длина \(0\)).

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

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

В первой строке записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество отрезков в последовательности.

В каждой следующих \(n\) строк записаны по два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 10^9\)) — описание \(i\)-го отрезка.

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

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

Примечание

В первом примере необходимо удалить отрезок \([3;3]\), пересечение станет \([2;3]\) (длина \(1\)). Удаление любого другого отрезка приведет к пересечению \([3;3]\) (длина \(0\)).

Во втором примере необходимо удалить отрезок \([1;3]\) или отрезок \([2;6]\), пересечение станет \([2;4]\) (длина \(2\)) или \([1;3]\) (длина \(2\)), соответственно. Удаление любого другого отрезка приведет к пересечению \([2;3]\) (длина \(1\)).

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

В четвертом примере вы получите пересечение \([3;10]\) (длина \(7\)) после удаления отрезка \([1;5]\) или же пересечение \([1;5]\) (длина \(4\)) после удаления отрезка \([3;10]\).

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)\).

A. Проверка штанов на унылость

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

Реквестирую набор задач про штаны шахтера.
freopen

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

Тест состоит из n вопросов, отвечать на них необходимо строго по порядку: с 1-го до n-го. В i-ом вопросе ai вариантов ответа, ровно один из которых является верным.

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

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

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

В первой строке дано целое число n (1 ≤ n ≤ 100) — количество вопросов в тесте. Во второй строке записаны через пробел n целых чисел ai (1 ≤ ai ≤ 109) — количество вариантов ответа на i-ый вопрос.

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

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

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

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

C. Русская рулетка

жадные алгоритмы Конструктив *1900

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

Саша выбирает k из n слотов по своему желанию и кладёт в них патроны. Рома раскручивает барабан так, что любой из n циклических сдвигов положения барабана равновероятен. Потом начинается игра, играют поочередно, первым делает ход Саша: он приставляет револьвер к виску и делает выстрел. Если напротив курка не было патрона, то барабан сдвигается на одну позицию, а оружие передается Роме для такого же хода. Игра продолжается до тех пор, пока кто-нибудь не застрелится, выживший считается победителем.

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

Более формально барабан на n зарядов, заряженный k патронами, можно представить в виде строки из n символов, ровно k из которых — «X» (заряженные слоты), а остальные — «.» (незаряженные слоты).

Опишем подробнее выстрел из револьвера. Предположим, что курок расположен напротив первого символа строки (первого слота барабана). Если выстрел никого не убивает, и барабан сдвигается на одну позицию, то строка сдвигается влево. То есть первый символ становится последним, второй — первым, и так далее. Курок при этом остается на месте — напротив первого символа получившейся строки.

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

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

В первой строке дано три целых числа n, k и p (1 ≤ n ≤ 1018, 0 ≤ k ≤ n, 1 ≤ p ≤ 1000) — количество слотов в барабане, количество патронов и количество запросов. Далее следует p строк — запросы. Каждая строка содержит одно целое число xi (1 ≤ xi ≤ n) — номер слота, содержимое которого необходимо вывести.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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

На каждый из запросов выведите «.», если слот должен быть пустым и «X», если слот должен быть заряжен.

Примечание

Лексикографическое сравнение реализует оператор < в современных языках программирования. Строка a лексикографически меньше строки b, если существует такое i (1 ≤ i ≤ n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj.

C. Успеть все

жадные алгоритмы *1600

В далекой-далекой галактике студент Леша узнал, что через два дня у него экзамен. Так получилось, что за весь год он ни разу не сходил на занятия. Леша не отчаялся и решил рационально распределить оставшееся время до экзамена на подготовку.

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

Таким образом, Леша должен прочитать несколько конспектов целиком в первый день, затратив на это не более \(a\) часов суммарно, и несколько конспектов целиком во второй день, затратив на это не более \(b\) часов. Сколько максимум конспектов успеет прочитать Леша за оставшееся время до экзамена? Какие конспекты он должен читать в первый день, а какие — во второй?

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

Единственная строка входных данных содержит два целых числа: \(a\) и \(b\) (\(0 \leq a, b \leq 10^{9}\)) — количество часов, которое Леша может потратить на подготовку к экзамену сегодня, и количество часов, в течение которых Леша может готовиться завтра.

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

В первой строке выведите единственное целое число \(n\) (\(0 \leq n \leq a\)) — количество конспектов, которые Леша должен прочитать в первый день. Во второй строке выведите \(n\) целых различных чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq a\)), сумма всех \(p_i\) должна быть не больше \(a\).

В третьей строке выведите единственное целое число \(m\) (\(0 \leq m \leq b\)) — количество конспектов, которые Леша должен прочитать во второй день. В четвертой строке выведите \(m\) целых различных чисел \(q_1, q_2, \ldots, q_m\) (\(1 \leq q_i \leq b\)), сумма всех \(q_i\) должна быть не больше \(b\).

Среди всех чисел \(p_i\) и \(q_i\) не должно быть пары совпадающих чисел. Сумма \(n + m\) должна быть максимально возможной.

Примечание

В первом примере Леша в первый день должен прочитать третий конспект за \(3\) часа, а во второй день должен прочитать первый и второй конспекты за один и два часа соответственно, потратив \(3\) часа на подготовку. Обратите внимание, что Леша может сделать наоборот, то есть прочитать в первый день первый и второй конспекты, а во второй день прочитать третий конспект.

Во втором примере Леша в первый день прочитает третий и шестой конспект, потратив на это \(9\) часов. Во второй день Леша читает первый, второй, четвертый и пятый конспект за \(12\) часов суммарно.

D. Минимальный путь

жадные алгоритмы *1900

Вам дана матрица размера \(n \times n\), заполненная строчными латинскими буквами. Вы можете изменить не более \(k\) букв в этой матрице.

Рассмотрим все пути из верхней левой клетки в правую нижнюю, в которых каждая следующая клетка является соседней справа или снизу с предыдущей. Каждому пути соответствует строка, которая получается выписыванием подряд букв во всех клетках, через которые проходит этот путь. Таким образом длина каждого пути равна \(2n - 1\).

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

Строка \(a\) лексикографически меньше строки \(b\), если первая различная в \(a\) и \(b\) буква меньше в строке \(a\).

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2000\), \(0 \le k \le n^2\)) — размер матрицы и число букв, которые вы можете изменить.

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

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

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

Примечание

В первом примере можно изменить буквы «b» в клетках \((2, 1)\) и \((3, 1)\) на «a», тогда лексикографически минимальный путь проходит через клетки \((1, 1), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), (4, 4)\). Первая координата описывает номер строки, вторая — номер столбца.

D. Вася и массивы

жадные алгоритмы *1600

У Васи есть два массива \(A\) и \(B\) длины \(n\) и \(m\) соответственно.

Он может проделать следующую операцию любое количество раз (возможно и ноль): взять любой подотрезок массива и заменить его на один элемент, равный сумме всех элементов на этом подотрезке. Например из массива \([1, 10, 100, 1000, 10000]\) Вася может получить массив \([1, 1110, 10000]\), а из массива \([1, 2, 3]\) – массив \([6]\).

Два массива \(A\) и \(B\) считаются одинаковыми тогда и только тогда, когда они равной длины и для каждого корректного \(i\) \(A_i = B_i\).

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

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

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

В первой строке задано целое число \(n~(1 \le n \le 3 \cdot 10^5)\) – длина первого массива.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \cdots, a_n~(1 \le a_i \le 10^9)\) – элементы массива \(A\).

В третьей строке задано целое число \(m~(1 \le m \le 3 \cdot 10^5)\) – длина второго массива.

В четвертой строке задано \(m\) целых чисел \(b_1, b_2, \cdots, b_m~(1 \le b_i \le 10^9)\) – элементы массива \(B\).

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

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

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

A. Пакеты с монетами

жадные алгоритмы Конструктив математика *1300

У вас есть \(n\) монет, каждая из них имеет номинал \(1\).

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

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

Найдите минимальное количество в пакетов в таком распределении.

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

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — количество монет, которые у вас есть.

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

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

Примечание

В первом примере, три пакета с \(1\), \(2\) и \(3\) монетами могут быть использованы чтобы набрать любую сумму \(x\) (\(1\leq x\leq 6\)).

  • Чтобы набрать \(1\) можно воспользоваться пакетом с \(1\) монетой.
  • Чтобы набрать \(2\) можно воспользоваться пакетом с \(2\) монетой.
  • Чтобы набрать \(3\) можно воспользоваться пакетом с \(3\) монетой.
  • Чтобы набрать \(4\) можно воспользоваться пакетами с \(1\) и \(3\) монетами.
  • Чтобы набрать \(5\) можно воспользоваться пакетами с \(2\) и \(3\) монетами.
  • Чтобы набрать \(6\) можно воспользоваться всеми пакетами.

Во втором примере, два пакета с \(1\) и \(1\) монетами могут быть использованы чтобы набрать любую сумму \(x\) (\(1\leq x\leq 2\)).

B. Достигнуть медианы

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

Вам дан массив \(a\), состоящий из \(n\) чисел и число \(s\). Гарантируется, что \(n\) является нечётным.

За одно действие вы можете понизить или повысить любой элемент на один. Вычислите минимальное количество действий, которое нужно проделать, чтобы сделать медиану массива равной \(s\).

Медиана массива нечётной длины определяется как значение элемента, который будет расположен на центральной позиции после сортировки массива. Например, медиана массива \(6, 5, 8\) равна \(6\), потому что если мы отсортируем этот массив, то мы получим \(5, 6, 8\), и \(6\) расположена на центральной позиции.

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

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

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

Гарантируется, что \(n\) является нечётным.

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

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

Примечание

В первом примере \(6\) можно увеличить дважды. Тогда массив превратится в \(8, 5, 8\), который становится равным \(5, 8, 8\) после сортировки, значит медиана равна \(8\).

Во втором примере можно один раз увеличить \(19\) и пять раз увеличить \(15\). Тогда массив становится равным \(21, 20, 12, 11, 20, 20, 12\). Если его отсортировать, то получится \(11, 12, 12, 20, 20, 20, 21\), а значит медиана равна \(20\).

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\).

C. Азартные игры

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

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

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

В случае если в списке есть несколько одинаковых элементов, только один из них будет задействован в какой-то операции. Например, если список состоит из элементов \(\{1, 2, 2, 3\}\) и вы решили выбрать \(2\) для следующего хода, только один экземпляр \(2\) будет удалён (и добавлен к очкам, если это требуется).

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

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

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

В первой строке входного файла записано целое число \(n\) (\(1 \le n \le 100\,000\)) — размер списков.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^6\)), описывающих список игрока A, который ходит первым.

Вторая строка содержит \(n\) целых чисел \(b_i\) (\(1 \le b_i \le 10^6\)), описывающих список игрока B.

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

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

Примечание

В первом примере, игра может выглядеть так:

  • A удаляет \(5\) из списка B.
  • B удаляет \(4\) из списка A.
  • A прибавляет к своим очкам \(1\), и удаляет ее из списка.
  • B прибавляет к своим очкам \(1\), и удаляет ее из списка..

Таким образом, очки A равны \(1\), очки B равны \(1\) и разница \(0\).

Есть также другие варианты оптимальной игры, например:

  • A удаляет \(5\) из списка B.
  • B удаляет \(4\) из списка A.
  • A удаляет \(1\) из списка B.
  • B удаляет \(1\) из списка A.

Разница между очками также \(0\).

Во втором примере, вне зависимости от ходов, в итоге каждый участник добавит к своим очкам одинаковое количество чисел, а значит очки у обоих игроков будут одинаковыми, поэтому разница \(0\).

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\).

A. Расписание автобусов

жадные алгоритмы Конструктив математика Структуры данных *2300

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

На каждой из остановок можно прочитать упорядоченный список моментов времени, когда на эту остановку приходит автобус, обозначим как \(a_1 < a_2 < \ldots < a_n\) список для остановки A и как \(b_1 < b_2 < \ldots < b_n\) список для остановки B. Автобусы всегда отъезжают от остановки A и всегда прибывают на остановку B вовремя, но порядок прибытия автобусов может отличаться от порядка отправления. Будем называть порядок прибытия корректным, если для каждого автобуса время его прибытия хотя бы на \(t\) позже, чем время отправления.

Известно, что для соблюдения расписания автобус, отправляющийся в момент времени \(a_i\), должен приехать не позже, чем в момент времени \(b_{x_i}\), то есть \(x_i\)-м по счету. Иными словами, для каждого \(i\) существует такой корректный порядок прибытия автобусов, где \(i\)-й отправленный автобус прибывает \(x_i\)-м (а остальные — как угодно), но не существует корректного порядка, где \(i\)-й отправленный автобус прибывает \((x_i + 1)\)-м.

Формально, назовем перестановку \(p_1, p_2, \ldots, p_n\) корректной, если \(b_{p_i} \ge a_i + t\) для всех \(i\). Тогда \(x_i\) — максимальное значение \(p_i\) среди всех корректных перестановок.

Вам известны числа \(a_1, a_2, \ldots, a_n\) и \(x_1, x_2, \ldots, x_n\), но не известны времена прибытия автобусов. Найдите какое-нибудь подходящее расписание \(b_1, b_2, \ldots, b_n\), или определите, что такого расписания не существует.

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

В первой строке записаны два числа \(n\) и \(t\) (\(1 \leq n \leq 200\,000\), \(1 \leq t \leq 10^{18}\)) — количество автобусов в расписании на обеих остановках и минимальное возможное время поездки автобуса от А до B.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_1 < a_2 < \ldots < a_n \leq 10^{18}\)), определяющие времена отправления автобусов от остановки A.

В третьей строке записаны \(n\) чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq n\)), \(i\)-е из которых означает максимально допустимую позицию в расписании автобусов на остановке B, которую мог занять автобус, отъехавший \(i\)-м от остановки A.

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

Если решение существует, в первой строке выведите слово «Yes» (без кавычек).

Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_1 < b_2 < \ldots < b_n \leq 3 \cdot 10^{18}\)). Можно показать, что если решение существует, то существует и решение, удовлетворяющее данному ограничению на значения \(b_i\). Если правильных ответов несколько, то разрешается вывести любой из них.

Если подходящего расписания не существует, выведите слово «No» (без кавычек) в единственной строке вывода.

Примечание

Рассмотрим первый пример и расписание \(b_1, b_2, \ldots, b_n\) из примера.

Чтобы получить \(x_1 = 2\) можно взять порядок прибытия автобусов \((2, 1, 3)\). Чтобы получить \(x_2 = 2\) и \(x_3 = 3\) можно выбрать порядок прибытия \((1, 2, 3)\). \(x_1\) не равно \(3\), потому что перестановки \((3, 1, 2)\) и \((3, 2, 1)\) (все возможные, в которых \(1\)-й автобус приезжает \(3\)-м по порядку) некорректны (некоторые автобусы приедут слишком рано), по тем же причинам \(x_2\) не равно \(3\).

A. Танец-палиндром

жадные алгоритмы *1000

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

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

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

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

В первой строке содержатся три целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 20\), \(1 \leq a, b \leq 100\)) — количество танцоров, стоимость одного белого костюма и стоимость одного чёрного костюма.

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

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

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

Примечание

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

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

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

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\) окажется в исходном состоянии.

A. Кража в магазине

жадные алгоритмы реализация сортировки *800

В магазине компьютерной техники ночью произошла кража.

До этого все клавиатуры, которые продавались в магазине, были пронумерованы по очереди, начиная с некоторого натурального числа \(x\). Например, если \(x = 4\) и в магазине продавалось \(3\) клавиатуры, то они имели номера \(4\), \(5\) и \(6\), а если \(x = 10\) и в магазине продавалось \(7\) клавиатур, то они имели номера \(10\), \(11\), \(12\), \(13\), \(14\), \(15\) и \(16\).

После кражи в магазине осталось \(n\) клавиатур с номерами \(a_1, a_2, \dots, a_n\). Определите минимальное количество клавиатур, которые могли быть украдены, если никто из сотрудников магазина не помнит значение \(x\).

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

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

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

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

Выведите минимальное количество клавиатур, которые могли быть украдены, если никто из сотрудников магазина не помнит значение \(x\).

Примечание

В первом примере, если \(x=8\), то минимальное количество клавиатур, украденных из магазина, равно \(2\). То есть были украдены компьютеры с номерами \(9\) и \(11\).

Во втором примере, если \(x=4\), то ни одна клавиатура не была украдена из магазина.

C. Перерывы на кофе

Бинарный поиск жадные алгоритмы Структуры данных *1600

Монокарп недавно устроился на работу, его рабочий день длится \(m\) минут. Также известны \(n\) минут \(a_1, a_2, \dots, a_n\), в которые он хочет сделать перерыв на кофе (в этой задаче считаем, что Монокарп пьет кофе ровно минуту).

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

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

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

Первая строка содержит три целых числа \(n\), \(m\), \(d\) \((1 \le n \le 2\cdot10^{5}, n \le m \le 10^{9}, 1 \le d \le m)\) — количество перерывов, длина рабочего дня и минимальное количество минут между двумя перерывами на кофе.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le m)\), где \(a_i\) равно минуте рабочего дня, в которую Монокарп хочет пить кофе.

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

В первую строку выведите минимальное количество дней, в которые Монокарп успеет сделать описанные \(n\) перерывов на кофе.

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

Примечание

В первом примере Монокарп может сделать два перерыва на кофе в первый день (в минуты \(1\) и \(5\), между ними пройдёт \(3\) минуты), один перерыв на кофе во второй день (в минуту \(2\)) и один перерыв на кофе в третий день (в минуту \(3\)).

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

E. Восстановление дерева

графы жадные алгоритмы Конструктив Структуры данных *1900

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

Монокарп дал вам список из \(n - 1\) пар чисел. По этому списку он просит вас определить, существует ли дерево, для которого мог быть записан именно такой список пар, и если оно существует, предоставить пример.

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

В первой строке содержится одно число \(n\) (\(2 \le n \le 1\,000\)) — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)) — максимумы в тех компонентах, на которые распадается дерево при удалении \(i\)-го ребра.

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

Если дерево, для которого мог быть получен данный список пар, не существует, выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), после чего выведите \(n - 1\) строку с описанием рёбер. В каждой из этих \(n - 1\) строк должны быть записаны два числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)) — номера вершин, соединяемых очередным ребром.

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

Примечание

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

C. Произведение массива

жадные алгоритмы Конструктив математика *1700

Задан массив \(a\), состоящий из \(n\) целых чисел. С ним могут производиться следующие операции:

  1. Выбрать позиции \(i\) и \(j\) (\(1 \le i, j \le n, i \ne j\)), записать произведение \(a_i \cdot a_j\) в ячейку \(j\) и удалить число из позиции \(i\);
  2. Выбрать позицию \(i\) и удалить число из позиции \(i\) (провести такую операцию можно не более одного раза в любой момент времени, не обязательно в самом начале).

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

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

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

В первой строке входных данных следует одно целое число \(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 - 1\) строку. В \(k\)-й строке должна содержаться одна из двух описанных операций.

Операция первого типа должна выглядеть следующим образом: \(1~ i_k~ j_k\), где \(1\) — тип операции, \(i_k\) и \(j_k\) — индексы выбранных элементов.

Операция второго типа должна выглядеть следующим образом: \(2~ i_k\), где \(2\) — тип операции, \(i_k\) — индекс выбранного элемента. Обратите внимание, что таких операций должно быть не более одной.

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

Примечание

Будем обозначать за X удаленное число в массиве. Рассмотрим все тестовые примеры:

В первом тестовом примере последовательность преобразований массива может выглядеть как: \([5, -2, 0, 1, -3] \to [5, -2, X, 1, -3] \to [X, -10, X, 1, -3] \to\) \([X, X, X, -10, -3] \to [X, X, X, X, 30]\). Таким образом, максимально возможный ответ равен \(30\). Обратите внимание, что другие последовательности, приводящие к ответу \(30\), также допустимы.

Во втором тестовом примере последовательность преобразований массива может выглядеть как: \([5, 2, 0, 4, 0] \to [5, 2, X, 4, 0] \to [5, 2, X, 4, X] \to [X, 10, X, 4, X] \to\) \([X, X, X, 40, X]\). Также допустима, например, следующая последовательность:


1 5 3
1 4 2
1 2 1
2 3

Тогда последовательность преобразований массива будет выглядеть как: \([5, 2, 0, 4, 0] \to [5, 2, 0, 4, X] \to [5, 8, 0, X, X] \to [40, X, 0, X, X] \to\) \([40, X, X, X, X]\).

В третьем тестовом примере последовательность преобразований массива может выглядеть как: \([2, -1] \to [2, X]\).

В четвертом тестовом примере последовательность преобразований массива может выглядеть как: \([0, -10, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]\).

В пятом тестовом примере последовательность преобразований массива может выглядеть как: \([0, 0, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]\).

F. Множества листьев

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

Вам дано неориентированное дерево, состоящее из \(n\) вершин.

Назовём вершину листом, если она соединена ровно с одной другой вершиной.

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

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

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

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

В первой строке следуют два целых числа \(n\) и \(k\) (\(3 \le n \le 10^6\), \(1 \le k \le 10^6\)) — количество вершин в дереве и максимальное расстояние между парой листьев, принадлежащих одному красивому множеству.

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

Гарантируется, что описанные рёбра формируют дерево.

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

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

Примечание

Картинка описывает разбиение дерева из первого примера.

C. Наименьшее слово

жадные алгоритмы Конструктив реализация *1500

У IA есть невероятно много цветных магнитиков на её холодильнике. На каждом магнитике написана одна буква «a» или «b». Она любит играть с ними, располагая все магнитики в ряд. Однако девочка быстро устаёт и начинает думать, как сделать её развлечение ещё более интересным.

Сегодня, когда IA взглянула на холодильник, она заметила, что слово, образованное магнитиками, выглядит достаточно сомнительно. «Пожалуй, будет гораздо лучше, если я поменяю некоторые из них местами, — думает она, — но как это сделать?». Через некоторое время к ней пришла неплохая идея. IA будет рассматривать все префиксы с длинами от \(1\) до длины всего слова и для каждого префикса будет выбирать, стоит ли его развернуть или оставить как есть. Она будет рассматривать префиксы в фиксированном порядке: начнет с кратчайшего и закончит самым длинным. Она хочет получить в итоге лексикографически минимальное возможное слово. Можете ли вы помочь ей, сказав, какие именно из префиксов следует развернуть?

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

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

Первая и единственная строка содержит строку \(s\) (\(1 \le |s| \le 1000\)), задающую исходную строку, образованную магнитиками. Строка \(s\) состоит только из символов «a» и «b».

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

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

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

Примечание

В первом примере IA может развернуть второй и третий префикс, получив строку «abbb». Она не может получить ответ лучше, так как это наименьшая строка, которую можно получить перестановкой символов в исходной строке.

Во втором примере, она может перевернуть любое подмножество префиксов — все буквы равны «a».

E. Тренируйcя усердно, выигрывай легко

жадные алгоритмы Конструктив математика сортировки *1900

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

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

Мы знаем, что \(i\)-й участник наберёт ровно \(x_i\) очков, если будет писать первую задачу, и ровно \(y_i\), если будет писать вторую. Можно считать, что все участники знают способности друг друга и во время контеста распределят задачи таким образом, чтобы минимизировать их итоговый счёт. Напомним, каждый участник напишет ровно одну задачу за контест.

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 300\,000\), \(0 \le m \le 300\,000\)) — количество участников и количество пар людей, которые не будут писать контест вместе.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — очки, которые \(i\)-й участник наберёт на первой задаче и на второй. Гарантируется, что у никаких двух участников не совпадает одновременно и \(x_i\), и \(y_i\).

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)) — номера людей, которые не будут писать контест вместе. Каждая неупорядоченная пара людей встречает не более одного раза.

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

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

Примечание

В первом примере может быть только одна команда, состоящая из участников \(1\) и \(3\). В данной команде оптимальное стратегией будет отдать первую задачу участнику \(3\), а вторую задачу участнику \(1\), это приведёт к сумме очков равной \(1 + 2 = 3\).

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

C. Формула в космосе

жадные алгоритмы *1400

Должностные лица Формулы 1 решили провести новое соревнование. Автомобили заменяются космическими кораблями, а количество набранных очков может меняться от гонки к гонке.

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

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

В первой строке входного файла записаны два целых числа \(N\) (\(1 \leq N \leq 200000\)), описывающее количество космонавтов F1, и текущая позиция космонавта \(D\) (\(1 \leq D \leq N\)) для которого вы хотите определить место (ни у кого другого космонавта не будет столько же очков до начала гонки).

Вторая строка содержит \(N\) целых чисел \(S_k\) (\(0 \leq S_k \leq 10^8\), \(k=1...N\)) разделенных пробелами, описывающих текущий рейтинг космонавтов. Очки рейтинга отсортированы в порядке невозрастания.

Третья строка содержит \(N\) целых чисел \(P_k\) (\(0 \leq P_k \leq 10^8\), \(k=1...N\)) разделенных пробелами, описывающих количество очков за каждое из мест на следующей гонке. Очки отсортированы в порядке невозрастания, так что победитель гонки получит максимальное число очков.

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

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

Примечание

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

A. Вася и пароль

жадные алгоритмы реализация Строки *1200

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

Но так как EatForces заботится о безопасности своих пользователей, пароли пользователей должны содержать минимум одну цифру, минимум одну заглавную латинскую букву и минимум одну строчную латинскую букву. Например пароли «abaCABA12», «Z7q» и «3R24m» допустимы, а пароли «qwerty», «qwerty12345» и «Password» — нет.

Подстрока строки \(s\) — строка \(x = s_l s_{l + 1} \dots s_{l + len - 1} (1 \le l \le |s|, 0 \le len \le |s| - l + 1)\). \(len\) — длина подстроки. Обратите внимание, что пустая строка так же считается подстрокой строки \(s\), и имеет длину \(0\).

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

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

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

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

Следующие \(T\) строк содержат изначальный пароль \(s~(3 \le |s| \le 100)\), состоящий из строчных и заглавных латинских букв, а также цифр.

Для взломов разрешается только \(T = 1\).

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

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

Длина замененной подстроки подсчитывается следующим способом: выпишем все измененные позиции. Если таких нет, то длина равна \(0\). В противном случае длина равна разности первой и последней измененной позиции плюс один. Например, длина измененной подстроки между паролями "abcdef" \(\rightarrow\) "a7cdEf" равна \(4\), потому что измененные позиции — это \(2\) и \(5\), соответственно, длина \((5 - 2) + 1 = 4\).

Гарантируется, что всегда существует подходящий пароль.

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

Примечание

В первом тестовом примере в Васином пароле не хватает цифры, он заменяет подстроку «C» на «4», и получает пароль «abcD4E». Таким образом, он заменил подстроку длины 1.

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

B. Взаимно простые пары

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

Задан набор из всех целых чисел от \(l\) до \(r\) включительно, \(l < r\), \((r - l + 1) \le 3 \cdot 10^5\) и \((r - l)\) всегда нечетно.

Вы хотите разделить эти числа на ровно \(\frac{r - l + 1}{2}\) пар таким образом, чтобы в каждой паре \((i, j)\) наибольший общий делитель \(i\) и \(j\) равен \(1\). Каждое число должно встретиться ровно в одной паре.

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

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

В единственной строке записаны два целых числа \(l\) и \(r\) (\(1 \le l < r \le 10^{18}\), \(r - l + 1 \le 3 \cdot 10^5\), \((r - l)\) нечетно).

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

Если существует некоторое решение, то выведите "YES" в первой строке. В каждой из следующих \(\frac{r - l + 1}{2}\) строк выведите некоторую пару чисел. НОД чисел в каждой паре должен быть равен \(1\). Все \((r - l + 1)\) чисел должны быть попарно различны, а также должны иметь значения от \(l\) до \(r\) включительно.

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

Если решений не существует, то выведите "NO".

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\) в том порядке, в каком они заданы во входном файле.

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

G. Дистинктификация

жадные алгоритмы снм Структуры данных *2900

Допустим, у вас есть последовательность \(S\) из \(k\) пар целых чисел \((a_1, b_1), (a_2, b_2), \dots, (a_k, b_k)\).

Вы можете совершать с ней следующие операции:

  1. Выбрать некоторую позицию \(i\) и увеличить \(a_i\) на \(1\). Эту операцию можно делать только в том случае, если существует хотя бы одна позиция \(j\), такая, что \(i \ne j\) и \(a_i = a_j\). Стоимость такой операции равна \(b_i\);
  2. Выбрать некоторую позицию \(i\) и уменьшить \(a_i\) на \(1\). Эту операцию можно делать только в том случае, если существует хотя бы одна позиция \(j\), такая, что \(a_i = a_j + 1\). Стоимость такой операции равна \(-b_i\).

Каждая операция может быть использована любое количество раз (возможно, ноль).

Обозначим за \(f(S)\) такое минимально возможное \(x\), что существует последовательность операций с суммарной стоимостью \(x\), после которой все \(a_i\) в \(S\) станут попарно различными.

А теперь, собственно, сама задача.

Вам дана последовательность \(P\), состоящая из \(n\) пар целых чисел \((a_1, b_1), (a_2, b_2), \dots, (a_n, b_n)\). Все значения \(b_i\) попарно различны. Пусть \(P_i\) — это последовательность, состоящая из первых \(i\) пар из \(P\). Ваша задача — подсчитать \(f(P_1), f(P_2), \dots, f(P_n)\).

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

В первой строке записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество пар в последовательности \(P\).

Следующие \(n\) строк задают элементы \(P\): \(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le 2 \cdot 10^5\), \(1 \le b_i \le n\)). Гарантируется, что все значения \(b_i\) различны.

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

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

D. Изменения массива

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

На перемене Ваня зашел в класс и увидел на доске массив из \(n\) целых неотрицательных \(k\)-битных чисел \(a_1, a_2, \ldots, a_n\). Число \(x\) называется \(k\)-битным, если \(0 \leq x \leq 2^k - 1\).

Естественно, Ваня не удержался и стал менять числа, написанные на доске. Для того, чтобы никто ничего не заметил, Ваня разрешил себе сделать несколько следующих изменений: выбрать индекс массива \(i\) (\(1 \leq i \leq n\)) и заменить число \(a_i\) на число \(\overline{a_i}\). Будем обозначать за \(\overline{x}\) для \(k\)-битного числа \(x\) такое \(k\)-битное число, что все его \(k\) битов отличаются от соответствующих битов числа \(x\).

Ване очень не нравится число \(0\). Поэтому ему нравятся такие отрезки \([l, r]\) (\(1 \leq l \leq r \leq n\)), что \(a_l \oplus a_{l+1} \oplus \ldots \oplus a_r \neq 0\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Определите, какое максимальное количество таких отрезков он сможет получить, выполнив несколько (возможно, ноль) операций, описанных выше.

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

В первой строке входных данных находятся два целых числа \(n\) и \(k\) (\(1 \leq n \leq 200\,000\), \(1 \leq k \leq 30\)).

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 2^k - 1\)), разделённых пробелами — массив из \(k\)-битных чисел.

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

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

Примечание

В первом тесте можно не делать операций, тогда мы получим, что у нас \(5\) отрезков, которые нравятся Ване. Если сделать операцию с \(i = 2\), то получится массив \([1, 0, 0]\), так как \(\overline{3} = 0\) при \(k = 2\). У такого массива будет \(3\) подотрезка, которые нравятся Ване. Можно получить массив с \(5\) подотрезками, которые нравятся Ване, если сделать операцию с \(i = 3\) и операцию с \(i = 2\). Тогда получится массив \([1, 0, 3]\). Можно доказать, что \(6\) и более отрезков, которые будут нравиться Ване, получить невозможно.

Во втором тесте, чтобы получить \(19\) подотрезков, которые нравятся Ване, можно сделать \(4\) операции с \(i = 3\), \(i = 4\), \(i = 5\) и \(i = 6\). Получится массив \([1, 4, 3, 0, 4, 3]\).

G. Новая дорожная система

жадные алгоритмы Конструктив математика *3300

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

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

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

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

Каждый тест содержит один или несколько тестовых случаев.

На первой строке входного файла находится единственное число \(t\) (\(1 \leq t \leq 2000\)) — количество тестовых случаев.

В следующих строках следуют описания этих тестовых случаев в следующем формате.

На первой строке находятся два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000\)) — количество жителей в стране и количество тайных обществ.

В следующих \(m\) строках находится описание тайных обществ. В \(i\)-й из этих строк находится строка \(s_i\) длины \(n\), состоящая из символов «0» и «1». Житель с номером \(j\) принадлежит \(i\)-му тайному обществу тогда и только тогда, когда \(s_{{i}{j}}=1\). Гарантируется, что в строке \(s_i\) есть хотя бы один символ «1» для любого \(1 \leq i \leq m\).

Гарантируется, что сумма всех \(n\) для всех тестовых случаев не превосходит \(2000\) и сумма всех \(m\) для всех тестовых случаев не превосходит \(2000\).

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

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

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

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

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

Проведенные дороги должны образовывать дерево, и домики каждого общества должны образовывать связное поддерево.

Примечание

В первом тестовом случае можно построить такую дорожную систему:

Легко убедиться, что для каждого тайного общества все домики его жителей образуют связное поддерево. Например, во \(2\)-м тайном обществе состоят жители с номерами \(1\), \(2\), \(3\). Они образуют связное поддерево, так как если оставить только домики \(1\), \(2\), \(3\) и дороги между ними, то останутся две дороги: между \(1\) и \(3\) и между \(2\) и \(3\), то есть связный граф.

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

D. Рефакторинг

жадные алгоритмы реализация Строки *2400

Алиса написала программу, и теперь всячески работает над улучшением её читаемости. Один из способов улучшить читаемость — давать переменным подходящие имена, поэтому Алиса хочет переименовать часть переменных в своей программе. В её среде разработке есть команда под названием «масштабный рефакторинг», которая позволяет менять сразу имена многим переменным. Для этого нужно выбрать две строки \(s\) и \(t\), после чего для всех переменных выполняется следующий алгоритм: если название переменной содержит \(s\) как подстроку, то первое (и только первое) вхождение \(s\) заменяется на \(t\), а если не содержит \(s\), то оно остаётся прежним.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3000\)) — количество переменных в программе Алисы.

Следующие \(n\) строк содержат исходные названия переменных \(w_1, w_2, \ldots, w_n\) по одному в строке. Затем идут ещё \(n\) строк, \(i\)-я из них содержит требуемое название \(i\)-й переменной \(w'_i\). Гарантируется, что \(1 \le |w_i| = |w'_i| \le 3000\).

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

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

Если произвести переименование всех переменных за один вызов команды «масштабный рефакторинг» невозможно, выведите «NO» (без кавычек).

Иначе на первой строке выведите «YES» (без кавычек), а на следующих строках \(s\) и \(t\) (\(1 \le |s|, |t| \le 5000\)), которые необходимо использовать для замены. Строки \(s\) и \(t\) должны состоять только из строчных букв латинского алфавита.

Если существует несколько способов провести «масштабный рефакторинг», то можно воспользоваться любым из них.

C. Выбери героев

жадные алгоритмы интерактив реализация сортировки *1700

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

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

Друзья оценивают силу \(i\)-го героя как \(p_i\). Каждая команда хочет максимизировать суммарную силу своих героев. Однако, есть одно исключение: есть \(m\) пар героев, которые особенно сильны друг против друга, поэтому когда одна команда выбирает героя из пары, другая команда на своем ходу обязана выбрать другого героя из пары. Каждый герой входит максимум в одну такою пару.

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

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

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

Следующая строка содержит \(2n\) целых чисел \(p_1, p_2, \ldots, p_{2n}\) (\(1 \le p_i \le 10^3\)) — силы героев.

Каждая из следующих \(m\) строк содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 2n\), \(a \ne b\)) — пару героев, которые особенно сильны друг против друга. Гарантируется, что каждый герое встречается не более одного раза в этом списке.

Следующая строка содержит одно целое число \(t\) (\(1 \le t \le 2\)) — номер команды, за которую вы должны играть. Если \(t = 1\), то первый ход ваш, иначе ваш ход — второй.

Взломы

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

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

Когда очередь ходить ваша, выведите одно целое число \(x\) (\(1 \le x \le 2n\)) — индекс героя, которого вы выбираете. Обратите внимание, вы не можете выбрать героя, которого ранее выбрали вы либо другой игрок, и вы должны следовать правилу о специальных парах героев.

Когда очередь ходить вашему сопернику, считайте одно целое число \(x\) (\(1 \le x \le 2n\)) — индекс героя, выбранного другой командой. Гарантируется, что выбранный герой не будет выбран ранее; гарантируется, что соперник будет следовать правилу о специальных парах героев.

После последнего хода вы должны завершиться, не выводя ничего.

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

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

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

Примечание

В первом примере первый ход ваш. В примере вы выбираете \(6\), другая команда обязана выбрать \(2\). Вы выбираете \(5\), другая команда выбирает \(4\). Наконец, вы выбираете \(3\), а другая команда выбирает \(1\).

Во втором примере вы ходите вторыми. Соперник выбирает \(6\), вы выбираете \(5\), заставляя соперника выбрать \(1\). Затем вы выбираете \(4\), другая команда выбирает \(3\) и вы выбираете \(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\).

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\}\).

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

B. Максимальная сумма цифр

жадные алгоритмы *1100

Дано целое положительное число \(n\).

Обозначим за \(S(x)\) сумму цифр в десятичной записи \(x\), например, \(S(123) = 1 + 2 + 3 = 6\), \(S(0) = 0\).

Ваша задача — найти два целых числа \(a, b\), таких, что \(0 \leq a, b \leq n\), \(a + b = n\) и \(S(a) + S(b)\) максимально.

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

В единственной строке записано целое число \(n\) \((1 \leq n \leq 10^{12})\).

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

Выведите максимальное \(S(a) + S(b)\) среди всех пар целых чисел \(a, b\), таких, что \(0 \leq a, b \leq n\) и \(a + b = n\).

Примечание

В первом тестовом примере можно выбрать, например, \(a = 17\) и \(b = 18\), получив \(S(17) + S(18) = 1 + 7 + 1 + 8 = 17\). Можно показать, что больший ответ получить нельзя.

Во втором тестовом примере можно выбрать, например, \(a = 5000000001\), \(b = 4999999999\), получив \(S(5000000001) + S(4999999999) = 91\). Можно показать, что ответ больше получить нельзя.

D. Стулья и круги

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

Вы пригласили \(n\) гостей на вечеринку! Вы планируете сделать один или несколько кругов из стульев. На некоторые стулья сядут гости. На каждом стуле может сидеть не более одного гостя.

Так как гости немного стеснительные, \(i\)-й из них хочет иметь хотя бы \(l_i\) свободных стульев слева от себя, и хотя бы \(r_i\) свободных стульев справа. Направления «влево» и «вправо» отсчитываются в предположении, что все гости смотрят в центр своего круга. Обратите внимание, что если в круге сидит только один гость, то среди \(l_i\) стульев слева и \(r_i\) стульев справа могут быть пересечения.

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

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

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

Следующие \(n\) строк содержат \(n\) пар чисел \(l_i\) и \(r_i\), разделенных пробелами (\(0 \leqslant l_i, r_i \leqslant 10^9\)).

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

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

Примечание

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

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

A. Монеты

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

У вас есть неограниченное количество монет с номиналами \(1, 2, \ldots, n\). Вы хотите выбрать некоторый набор монет имеющий суммарную стоимость \(S\).

Разрешается чтобы в наборе были монеты имеющие одну и ту же стоимость. Какое минимальное количество монет нужно, чтобы набрать сумму \(S\)?

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

Единственная строка входных данных содержит два целых числа \(n\) и \(S\) (\(1 \le n \le 100\,000\), \(1 \le S \le 10^9\))

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

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

Примечание

Некоторые из способов набрать сумму \(11\) в первом примере с помощью \(3\) монет перечислены ниже:

  • \((3, 4, 4)\)
  • \((2, 4, 5)\)
  • \((1, 5, 5)\)
  • \((3, 3, 5)\)

Набрать сумму \(11\) меньше чем за \(3\) монеты нельзя.

Во втором примере некоторые из способов набрать \(16\) используя \(3\) монеты такие:

  • \((5, 5, 6)\)
  • \((4, 6, 6)\)

Набрать сумму \(16\) меньше чем за \(3\) монеты нельзя.

B. Экспонат

жадные алгоритмы реализация сортировки *1400

Вы пришли на выставку и один экспонат привлёк ваше внимание. Он состоит из \(n\) колонн, где \(i\)-я колонна состоит из \(a_i\) блоков стоящих на полу.

Высота экспоната равна \(m\), а значит количество блоков в каждой колонне не превосходит \(m\).

На потолке есть камера, которая снимает вид экспонат сверху, а также ещё одна камера расположена сбоку и снимает боковой вид этого экспоната.

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

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\,000\), \(1 \le m \le 10^9\)) — количество колонн и высота всего экспоната.

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

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

Выведите одно целое число — наибольшее количество блоков, которое можно удалить.

Примечание

Следующие картинки иллюстрируют первый пример и его возможное решение.

Синие клетки иллюстрируют удалённые блоки. Всего есть \(10\) синих клеток, а значит ответ \(10\).

D. Телепередачи

жадные алгоритмы реализация сортировки Структуры данных *2000

Есть \(n\) телепередач, которые вы хотите посмотреть. Предположим, что всё время разбито на равные отрезки называемые «минутами». Тогда \(i\)-я телепередача идёт с \(l_i\)-й по \(r_i\)-ю минуту, оба конца включительно.

Конечно, чтобы посмотреть телепередачу нужен телевизор, а также нельзя смотреть две телепередачи идущие одновременно на одном телевизоре. Из-за этого, возможно, в некоторые минуты вам понадобится более одного телевизора. В частности, если отрезки \([l_i, r_i]\) и \([l_j, r_j]\) пересекаются, то телепередачи \(i\) и \(j\) нельзя смотреть одновременно на одном телевизоре.

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

К счастью, рядом с вами есть магазин по аренде телевизоров. Он сдаёт телевизор в аренду за \(x\) рупий и взимает \(y\) (\(y < x\)) рупий за каждую следующую минуту, в течении которой вы держите телевизор у себя. В частности, чтобы арендовать один телевизор на время \([a; b]\) нужно заплатить \(x + y \cdot (b - a)\) рупий.

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

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

Первая строка содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \le n \le 10^5\), \(1 \le y < x \le 10^9\)) — количество телепередач, стоимость аренды телевизора в первую минуту и cтоимость аренды телевизора в каждую последующую минуту.

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

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

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

Примечание

В первом примере оптимально арендовать \(3\) телевизора и посмотреть:

  • Телепередачу \([1, 2]\) на первом телевизоре,
  • Телепередачу \([4, 10]\) на втором телевизоре,
  • Тепередачи \([2, 4], [5, 9], [10, 11]\) на третьем телевизоре.

Таким образом, стоимость аренды первого телевизора равна \(4 + 3 \cdot (2 - 1) = 7\), второго \(4 + 3 \cdot (10 - 4) = 22\) и треьего \(4 + 3 \cdot (11 - 2) = 31\), что в сумме составляет \(60\) рупий.

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

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

A. Пранк

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

JATC и его друг Giraffe сейчас находятся в своей комнате и решают задачи. Giraffe написал на доске массив \(a_1\), \(a_2\), ..., \(a_n\) из целых чисел, такой что \(1 \le a_1 < a_2 < \ldots < a_n \le 10^3\), а затем вышел в ванную.

JATC хочет разыграть своего друга удалив несколько последовательных элементов массива. Так как он не хочет, чтобы этот пранк вышел из под контроля, он собирается удалять элементы только таким образом, что Giraffe всё равно сможет восстановить исходный массив, пользуясь информацией о сохранившихся элементах. Так как Giraffe создал исходный массив, то он также знает, что этот массив возрастающий, и что все числа целые и лежат в диапазоне \([1, 10^3]\).

JATC хочет узнать, какое наибольшее количество элементов он может удалить?

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

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

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

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

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

Если нельзя удалить даже один элемент, выведите \(0\).

Примечание

В первом примере JATC может удалить третий и четвёртый элемент, превратив массив в \([1, 3, \_, \_, 6, 9]\). Как можно заметить, есть только один способ заполнить пустоты.

Во втором примере JATC может удалить второй и третий элемент. Массив тем самым превратится в \([998, \_, \_]\). Так как все элементы должны быть меньше или равны \(1000\), то массив всё равно может быть одозначно восстановлен. Заметим, что удалить первые \(2\) элемента нельзя.

В третьем примере JATC может удалить первые \(4\) элемента. Так как все элементы больше или равны \(1\), то Giraffe всё равно может восстановить массив. Заметим, что удалить последние \(4\) элемента нельзя.

B. Математика

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

Учитель JATC по математике всегда даёт их классу разные интересные математические задачки, чтобы им не было скучно. Сегодня задачка выглядит следующим образом. Дано целое число \(n\), вы можете выполнить следующие операции ноль или более раз:

  • mul \(x\): умножает \(n\) на \(x\) (где \(x\) является произвольным положительным целым числом).
  • sqrt: заменяет \(n\) на \(\sqrt{n}\) (эту операцию можно выполнить только если \(\sqrt{n}\) является целым числом).

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

Похоже, что никто в классе не умеет решать эту задачу. Может быть вы можете им помочь?

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

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

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

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

Примечание

В первом примере можно применить операцию mul \(5\), чтобы получить \(100\), а затем sqrt, чтобы получить \(10\).

Во втором примере можно сначала применить sqrt, чтобы получить \(72\), затем выполнить mul \(18\), чтобы получить \(1296\), и в конце ещё две операции sqrt, чтобы получить \(6\).

Обратите внимание, что не смотря на то, что изначальное значение значение \(n\) не превосходит \(10^6\), оно вполне может становится больше \(10^6\) после выполнения одной или нескольких операций.

C. Бань-ми

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

JATC любит Бань-ми (вьетнамское блюдо). Его привязанность к Бань-ми настолько велика, что он ест Бань-ми каждый день на завтрак. Сегодня утром, как обычно, он купил Бань-ми, но собирается насладиться им необычным образом.

Сначала, он разбивает Бань-ми на \(n\) кусочков, выкладывает их в ряд и нумерует от \(1\) до \(n\). Для каждого кусочка \(i\) он определяет его вкусность как \(x_i \in \{0, 1\}\). JATC собирается съесть все кусочки один за другим. Каждый раз он выбирает произвольный из оставшихся кусочков и съедает его. Пусть этот кусочек был под номером \(i\), тогда его удовольствие от Бань-ми увеличивается на \(x_i\), вкусность каждого из оставшихся кусочков также увеличивается на \(x_i\). Изначально удовольствие JATC равно \(0\).

Например, пусть есть \(3\) кусочка с вкусностями \([0, 1, 0]\). Если JATC съест второй кусочек, то его удовольствие станет равно \(1\), а вкусность оставшихся кусочков будет равна \([1, \_, 1]\). Затем, если он съест первый кусочек, то его удовольствие станет равна \(2\), а вкусность оставшихся кусочков станет \([\_, \_, 2]\). После того как JATC съест последний кусочек, его удовольствие станет равно \(4\).

Однако JATC не хочет съесть сразу все кусочки, оставив часть на будущее. Он дал вам \(q\) запросов, каждый из которых задаётся двумя целыми числам \(l_i\) и \(r_i\). Для каждого запроса выясните какое наибольшее удовольствие он может получить, если съест все кусочки в отрезке \([l_i, r_i]\) в каком-то порядке.

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

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

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

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

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

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

Выведите \(q\) строчек, где \(i\)-я из них содержит одно целое число — ответ на \(i\)-й запрос по модулю \(10^9 + 7\).

Примечание

В первом примере:

  • В запросе \(1\), одним из оптимальных порядков поедания является следующий: \(1\), \(4\), \(3\), \(2\).
  • В запросе \(2\): и порядок \(3\), \(4\), и порядок \(4\), \(3\) приводят к одному и тому же ответу.

Во втором примере любой порядок поедания кусочков приведёт к одному и тому же ответу.

E. Компания

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

У компании \(X\) есть \(n\) сотрудников, пронумерованных от \(1\) до \(n\). У каждого сотрудника \(u\) есть его прямой начальник \(p_u\) (\(1 \le p_u \le n\)), кроме сотрудника \(1\), у которого начальника нет. Гарантируется, что значения \(p_i\) образуют дерево. Сотрудник \(u\) называется ответственным за сотрудника \(v\), если \(u\) является прямым начальником \(v\) или есть такой сотрудник \(w\), что \(w\) ответственен за \(v\), и \(u\) является прямым начальником \(w\). Любой сотрудник также считается ответственным за самого себя.

Также, для каждого сотрудника \(u\) мы определим его уровень \(lv(u)\) следующим образом:

  • \(lv(1)=0\)
  • \(lv(u)=lv(p_u)+1\) если \(u \neq 1\)

У компании есть \(q\) возможных планов на ближайшее будущее. При чём \(i\)-й из них задаётся двумя числа \(l_i\) и \(r_i\), означающими что в этом плане принимают участие все сотрудники в отрезке \([l_i, r_i]\) и только они. Чтобы всё прошло гладко, у плана должен быть проектный менеджер, который является ответственным за всех сотрудников в этом плане. Более формально, если сотрудник \(u\) выбирается как проектный менеджер \(i\)-го плана, то для каждого сотрудника \(v \in [l_i, r_i]\), \(u\) должен быть ответственен за \(v\). Заметим, что при этом не обязательно \(u\) сам должен находится в отрезке \([l_i, r_i]\). Также, \(u\) всегда выбирается таким образом, что \(lv(u)\) является максимально возможным (чем больше уровень, тем меньше компания может платить сотруднику).

До того как любой план начнёт выполняться, компания позволила JATC заглянуть в свои планы. С первого взгляда он заметил, что для каждого плана можно уменьшить количество вовлечённых в него сотрудников ровно на один без каких-либо проблем. Будучи жадной, компания спрашивает у JATC: какого же именно сотрудника надо выкинуть из плана, чтобы уровень менеджера проекта был максимально возможным? JATC уже выяснил ответ и теперь предлагает это сделать и вам.

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

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

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

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

Каждая из \(q\) следующих строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i<r_i \le n\)) — отрезок сотрудников, вовлечённых в соответствующий план.

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

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

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

Примечание

В примере:

В первом запросе мы можем выбрать \(4\), \(5\) или \(6\) и менеджером проекта в таком случае будет \(3\).

Во втором запросе, если мы выберем любого сотрудника кроме сотрудника \(8\), то менеджером проекта будет сотрудник \(1\), если же мы выберем сотрудника \(8\), то проектным менеджером будет \(3\). Так как \(lv(3)=1 > lv(1)=0\), то оптимальным ответом будет выбрать сотрудника \(8\).

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

В четвёртом запросе, если мы выберем \(9\) или \(10\), то менеджером проекта будет \(3\), если же мы выберем \(11\), то проектным менеджером окажется \(7\). Так как \(lv(7)=3>lv(3)=1\), то оптимальным ответом будет выбрать сотрудника \(11\).

C. Выравниваем высоты

жадные алгоритмы *1600

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

Объявим операцию срезания по некоторой высоте \(H\) следующим образом: для каждой башни \(i\), если её текущая высота больше \(H\), то уберем несколько верхних кубиков так, чтобы высота башни стала равна \(H\). Стоимость одного «срезания» равна суммарному количеству убранных кубиков со всех башен.

Назовем срез хорошим, если его стоимость меньше или равна \(k\) (\(k \ge n\)).

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

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

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

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 2 \cdot 10^5\)) — первоначальные высоты башен.

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

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

Примечание

В первом примере выгодно сделать \(2\) операции срезания. Первый срез по высоте \(2\) (его стоимость равна \(3\)) и второй по высоте \(1\) (его стоимость равна \(4\)).

B. Обогреватели

жадные алгоритмы *1500

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

Каждый обогреватель имеет характеристику \(r\) (\(r\) одинаково для всех обогревателей). Эта характеристика значит, что обогреватель в позиции \(pos\) может обогревать все элементы в отрезке \([pos - r + 1; pos + r - 1]\).

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

Цель Вовы — обогреть весь дом (все элементы массива), то есть если \(n = 6\), \(r = 2\) и обогреватели находятся в позициях \(2\) и \(5\), тогда Вова может обогреть весь дом, если он включит все обогреватели в доме (тогда первые \(3\) элемента будет обогревать первый обогреватель, а последние \(3\) элемента будет обогревать второй обогреватель).

Изначально все обогреватели выключены.

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

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

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

Первая строка входных данных содержит два целых числа \(n\) и \(r\) (\(1 \le n, r \le 1000\)) — количество элементов в массиве и характеристика обогревателей.

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

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

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

Примечание

В первом тестовом примере обогреватель в позиции \(2\) обогревает элементы \([1; 3]\), обогреватель на позиции \(3\) обогревает точки \([2, 4]\) и обогреватель на позиции \(6\) обогревает точки \([5; 6]\), таким образом ответ равен \(3\).

Во втором тестовом примере обогреватель в позиции \(1\) обогревает элементы \([1; 3]\) и обогреватель на позиции \(5\) обогревает точки \([3; 5]\), таким образом ответ равен \(2\).

В третьем тестовом примере нет обогревателей, таким образом ответ равен -1.

В четвертом тестовом примере обогреватель в позиции \(3\) обогревает элементы \([1; 5]\), обогреватель в позиции \(6\) обогревает элементы \([4; 8]\) и обогреватель в позиции \(10\) обогревает элементы \([8; 10]\), таким образом ответ равен \(3\).

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}\).

B. Berkomnadzor

жадные алгоритмы Структуры данных *2400

Berkomnadzor — Federal Service for Supervision of Communications, Information Technology and Mass Media — is a Berland federal executive body that protects ordinary residents of Berland from the threats of modern internet.

Berkomnadzor maintains a list of prohibited IPv4 subnets (blacklist) and a list of allowed IPv4 subnets (whitelist). All Internet Service Providers (ISPs) in Berland must configure the network equipment to block access to all IPv4 addresses matching the blacklist. Also ISPs must provide access (that is, do not block) to all IPv4 addresses matching the whitelist. If an IPv4 address does not match either of those lists, it's up to the ISP to decide whether to block it or not. An IPv4 address matches the blacklist (whitelist) if and only if it matches some subnet from the blacklist (whitelist). An IPv4 address can belong to a whitelist and to a blacklist at the same time, this situation leads to a contradiction (see no solution case in the output description).

An IPv4 address is a 32-bit unsigned integer written in the form \(a.b.c.d\), where each of the values \(a,b,c,d\) is called an octet and is an integer from \(0\) to \(255\) written in decimal notation. For example, IPv4 address \(192.168.0.1\) can be converted to a 32-bit number using the following expression \(192 \cdot 2^{24} + 168 \cdot 2^{16} + 0 \cdot 2^8 + 1 \cdot 2^0\). First octet \(a\) encodes the most significant (leftmost) \(8\) bits, the octets \(b\) and \(c\) — the following blocks of \(8\) bits (in this order), and the octet \(d\) encodes the least significant (rightmost) \(8\) bits.

The IPv4 network in Berland is slightly different from the rest of the world. There are no reserved or internal addresses in Berland and use all \(2^{32}\) possible values.

An IPv4 subnet is represented either as \(a.b.c.d\) or as \(a.b.c.d/x\) (where \(0 \le x \le 32\)). A subnet \(a.b.c.d\) contains a single address \(a.b.c.d\). A subnet \(a.b.c.d/x\) contains all IPv4 addresses with \(x\) leftmost (most significant) bits equal to \(x\) leftmost bits of the address \(a.b.c.d\). It is required that \(32 - x\) rightmost (least significant) bits of subnet \(a.b.c.d/x\) are zeroes.

Naturally it happens that all addresses matching subnet \(a.b.c.d/x\) form a continuous range. The range starts with address \(a.b.c.d\) (its rightmost \(32 - x\) bits are zeroes). The range ends with address which \(x\) leftmost bits equal to \(x\) leftmost bits of address \(a.b.c.d\), and its \(32 - x\) rightmost bits are all ones. Subnet contains exactly \(2^{32-x}\) addresses. Subnet \(a.b.c.d/32\) contains exactly one address and can also be represented by just \(a.b.c.d\).

For example subnet \(192.168.0.0/24\) contains range of 256 addresses. \(192.168.0.0\) is the first address of the range, and \(192.168.0.255\) is the last one.

Berkomnadzor's engineers have devised a plan to improve performance of Berland's global network. Instead of maintaining both whitelist and blacklist they want to build only a single optimised blacklist containing minimal number of subnets. The idea is to block all IPv4 addresses matching the optimised blacklist and allow all the rest addresses. Of course, IPv4 addresses from the old blacklist must remain blocked and all IPv4 addresses from the old whitelist must still be allowed. Those IPv4 addresses which matched neither the old blacklist nor the old whitelist may be either blocked or allowed regardless of their accessibility before.

Please write a program which takes blacklist and whitelist as input and produces optimised blacklist. The optimised blacklist must contain the minimal possible number of subnets and satisfy all IPv4 addresses accessibility requirements mentioned above.

IPv4 subnets in the source lists may intersect arbitrarily. Please output a single number -1 if some IPv4 address matches both source whitelist and blacklist.

Input

The first line of the input contains single integer \(n\) (\(1 \le n \le 2\cdot10^5\)) — total number of IPv4 subnets in the input.

The following \(n\) lines contain IPv4 subnets. Each line starts with either '-' or '+' sign, which indicates if the subnet belongs to the blacklist or to the whitelist correspondingly. It is followed, without any spaces, by the IPv4 subnet in \(a.b.c.d\) or \(a.b.c.d/x\) format (\(0 \le x \le 32\)). The blacklist always contains at least one subnet.

All of the IPv4 subnets given in the input are valid. Integer numbers do not start with extra leading zeroes. The provided IPv4 subnets can intersect arbitrarily.

Output

Output -1, if there is an IPv4 address that matches both the whitelist and the blacklist. Otherwise output \(t\) — the length of the optimised blacklist, followed by \(t\) subnets, with each subnet on a new line. Subnets may be printed in arbitrary order. All addresses matching the source blacklist must match the optimised blacklist. All addresses matching the source whitelist must not match the optimised blacklist. You can print a subnet \(a.b.c.d/32\) in any of two ways: as \(a.b.c.d/32\) or as \(a.b.c.d\).

If there is more than one solution, output any.

C. Cloud Computing

жадные алгоритмы Структуры данных *2000

Buber is a Berland technology company that specializes in waste of investor's money. Recently Buber decided to transfer its infrastructure to a cloud. The company decided to rent CPU cores in the cloud for \(n\) consecutive days, which are numbered from \(1\) to \(n\). Buber requires \(k\) CPU cores each day.

The cloud provider offers \(m\) tariff plans, the \(i\)-th tariff plan is characterized by the following parameters:

  • \(l_i\) and \(r_i\) — the \(i\)-th tariff plan is available only on days from \(l_i\) to \(r_i\), inclusive,
  • \(c_i\) — the number of cores per day available for rent on the \(i\)-th tariff plan,
  • \(p_i\) — the price of renting one core per day on the \(i\)-th tariff plan.

Buber can arbitrarily share its computing core needs between the tariff plans. Every day Buber can rent an arbitrary number of cores (from 0 to \(c_i\)) on each of the available plans. The number of rented cores on a tariff plan can vary arbitrarily from day to day.

Find the minimum amount of money that Buber will pay for its work for \(n\) days from \(1\) to \(n\). If on a day the total number of cores for all available tariff plans is strictly less than \(k\), then this day Buber will have to work on fewer cores (and it rents all the available cores), otherwise Buber rents exactly \(k\) cores this day.

Input

The first line of the input contains three integers \(n\), \(k\) and \(m\) (\(1 \le n,k \le 10^6, 1 \le m \le 2\cdot10^5\)) — the number of days to analyze, the desired daily number of cores, the number of tariff plans.

The following \(m\) lines contain descriptions of tariff plans, one description per line. Each line contains four integers \(l_i\), \(r_i\), \(c_i\), \(p_i\) (\(1 \le l_i \le r_i \le n\), \(1 \le c_i, p_i \le 10^6\)), where \(l_i\) and \(r_i\) are starting and finishing days of the \(i\)-th tariff plan, \(c_i\) — number of cores, \(p_i\) — price of a single core for daily rent on the \(i\)-th tariff plan.

Output

Print a single integer number — the minimal amount of money that Buber will pay.

D. Garbage Disposal

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

Enough is enough. Too many times it happened that Vasya forgot to dispose of garbage and his apartment stank afterwards. Now he wants to create a garbage disposal plan and stick to it.

For each of next \(n\) days Vasya knows \(a_i\) — number of units of garbage he will produce on the \(i\)-th day. Each unit of garbage must be disposed of either on the day it was produced or on the next day. Vasya disposes of garbage by putting it inside a bag and dropping the bag into a garbage container. Each bag can contain up to \(k\) units of garbage. It is allowed to compose and drop multiple bags into a garbage container in a single day.

Being economical, Vasya wants to use as few bags as possible. You are to compute the minimum number of bags Vasya needs to dispose of all of his garbage for the given \(n\) days. No garbage should be left after the \(n\)-th day.

Input

The first line of the input contains two integers \(n\) and \(k\) (\(1 \le n \le 2\cdot10^5, 1 \le k \le 10^9\)) — number of days to consider and bag's capacity. The second line contains \(n\) space separated integers \(a_i\) (\(0 \le a_i \le 10^9\)) — the number of units of garbage produced on the \(i\)-th day.

Output

Output a single integer — the minimum number of bags Vasya needs to dispose of all garbage. Each unit of garbage should be disposed on the day it was produced or on the next day. No garbage can be left after the \(n\)-th day. In a day it is allowed to compose and drop multiple bags.

F. Debate

жадные алгоритмы *1500

Elections in Berland are coming. There are only two candidates — Alice and Bob.

The main Berland TV channel plans to show political debates. There are \(n\) people who want to take part in the debate as a spectator. Each person is described by their influence and political views. There are four kinds of political views:

  • supporting none of candidates (this kind is denoted as "00"),
  • supporting Alice but not Bob (this kind is denoted as "10"),
  • supporting Bob but not Alice (this kind is denoted as "01"),
  • supporting both candidates (this kind is denoted as "11").

The direction of the TV channel wants to invite some of these people to the debate. The set of invited spectators should satisfy three conditions:

  • at least half of spectators support Alice (i.e. \(2 \cdot a \ge m\), where \(a\) is number of spectators supporting Alice and \(m\) is the total number of spectators),
  • at least half of spectators support Bob (i.e. \(2 \cdot b \ge m\), where \(b\) is number of spectators supporting Bob and \(m\) is the total number of spectators),
  • the total influence of spectators is maximal possible.

Help the TV channel direction to select such non-empty set of spectators, or tell that this is impossible.

Input

The first line contains integer \(n\) (\(1 \le n \le 4\cdot10^5\)) — the number of people who want to take part in the debate as a spectator.

These people are described on the next \(n\) lines. Each line describes a single person and contains the string \(s_i\) and integer \(a_i\) separated by space (\(1 \le a_i \le 5000\)), where \(s_i\) denotes person's political views (possible values — "00", "10", "01", "11") and \(a_i\) — the influence of the \(i\)-th person.

Output

Print a single integer — maximal possible total influence of a set of spectators so that at least half of them support Alice and at least half of them support Bob. If it is impossible print 0 instead.

Note

In the first example \(4\) spectators can be invited to maximize total influence: \(1\), \(2\), \(3\) and \(6\). Their political views are: "11", "10", "01" and "00". So in total \(2\) out of \(4\) spectators support Alice and \(2\) out of \(4\) spectators support Bob. The total influence is \(6+4+3+9=22\).

In the second example the direction can select all the people except the \(5\)-th person.

In the third example the direction can select people with indices: \(1\), \(4\), \(5\) and \(6\).

In the fourth example it is impossible to select any non-empty set of spectators.

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:

D. Берляндская ярмарка

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1700

XXI Ежегодная Всеберляндская ярмарка уже совсем на носу! Традиционно ярмарка включает в себя \(n\) киосков, расположенных по кругу. Киоски пронумерованы от \(1\) до \(n\) по часовой стрелке, киоск номер \(n\) стоит рядом с номером \(1\). В \(i\)-м киоске продаются конфеты по цене \(a_i\) бурлей за штуку. В каждом киоске неограниченный запас конфет.

Поликапр решил потратить не более \(T\) бурлей на ярмарке. Однако, у него также есть план, как он будет перемещаться между киосками:

  • сначала он посещает киоск номер \(1\);
  • если у него хватает бурлей на покупку ровно одной конфеты в текущем киоске, то он ее сразу же покупает;
  • далее он переходит к следующему киоску по часовой стрелке (вне зависимости от того, купил ли он конфету или нет).

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

Посчитайте количество конфет, которые купит Поликарп.

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

В первой строке записаны два целых числа \(n\) и \(T\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le T \le 10^{18}\)) — количество киосков на ярмарке и начальное количество бурлей у Поликарпа.

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

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

Выведите одно целое число — итоговое количество конфет, которые купит Поликарп.

Примечание

Рассмотрим первый пример. Какие ходы делал Поликарп, пока у него не закончились деньги:

  1. Киоск \(1\), покупает конфету за \(5\), \(T = 33\);
  2. Киоск \(2\), покупает конфету за \(2\), \(T = 31\);
  3. Киоск \(3\), покупает конфету за \(5\), \(T = 26\);
  4. Киоск \(1\), покупает конфету за \(5\), \(T = 21\);
  5. Киоск \(2\), покупает конфету за \(2\), \(T = 19\);
  6. Киоск \(3\), покупает конфету за \(5\), \(T = 14\);
  7. Киоск \(1\), покупает конфету за \(5\), \(T = 9\);
  8. Киоск \(2\), покупает конфету за \(2\), \(T = 7\);
  9. Киоск \(3\), покупает конфету за \(5\), \(T = 2\);
  10. Киоск \(1\), не покупает конфету, недостаточно денег;
  11. Киоск \(2\), покупает конфету за \(2\), \(T = 0\).

Больше нельзя купить конфет. Итоговое число купленных конфет — \(10\).

Во втором примере у него остается \(1\) бурль после посещения киосков, нельзя купить ни одну конфету за столько.

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\).

A. Минимизация строки

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

Задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

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

Строка \(s = s_1 s_2 \dots s_n\) лексикографически меньше строки \(t = t_1 t_2 \dots t_m\), если \(n < m\) и \(s_1 = t_1, s_2 = t_2, \dots, s_n = t_n\) или найдется такое число \(p\), что \(p \le min(n, m)\) и \(s_1 = t_1, s_2 = t_2, \dots, s_{p-1} = t_{p-1}\) и \(s_p < t_p\).

Например, «aaa» меньше, чем «aaaa», «abb» меньше, чем «abc», «pqr» меньше, чем «z».

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

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

Вторая строка входных данных содержит ровно \(n\) строчных букв латинского алфавита — строку \(s\).

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

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

Примечание

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

Во втором тестовом примере «abca» < «abcd» < «abcda» < «abda» < «acda» < «bcda».

D. Удаление ребер

графы жадные алгоритмы кратчайшие пути *1800

Задан неориентированный связный взвешенный граф, состоящий из \(n\) вершин и \(m\) ребер. Определим длину кратчайшего пути из вершины \(1\) в вершину \(i\) как \(d_i\).

Требуется удалить несколько ребер графа так, чтобы осталось не более \(k\) ребер. Назовем вершину \(i\) хорошей, если после удаления ребер все еще существует путь из \(1\) в \(i\) длины \(d_i\).

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

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

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(2 \le n \le 3 \cdot 10^5\), \(1 \le m \le 3 \cdot 10^5\), \(n - 1 \le m\), \(0 \le k \le m\)) — количество вершин и ребер в графе, а также максимальное количество ребер, которые могут остаться в графе, соответственно.

Затем следуют \(m\) строк, в каждой содержатся по три целых числа \(x\), \(y\), \(w\) (\(1 \le x, y \le n\), \(x \ne y\), \(1 \le w \le 10^9\)), задающие ребро между вершинами \(x\) и \(y\) веса \(w\).

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

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

В первой строке выведите \(e\) — количество ребер, которые останутся в графе (\(0 \le e \le k\)).

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

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\) формул подряд.

B. Обеспокоенные жильцы

жадные алгоритмы *1000

На главной улице Берлятова стоит одноэтажный дом, в котором есть \(n\) квартир. Вова наблюдает за этим домом каждую ночь. Дом может быть представлен как массив, состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i = 1\), если в \(i\)-й квартире включен свет, и \(a_i = 0\) иначе.

Вова думает, что жильцы \(i\)-й квартиры обеспокоены и не могут спать тогда и только тогда, когда \(1 < i < n\) и \(a_{i - 1} = a_{i + 1} = 1\) и \(a_i = 0\).

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

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

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

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_i \in \{0, 1\}\)), где \(a_i\) — состояние света в \(i\)-й квартире.

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

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

Примечание

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

Во втором и третьем тестовых примерах нет обеспокоенных жильцов.

E. Тематические контесты

жадные алгоритмы сортировки *1800

Поликарп подготовил \(n\) задач по программированию, \(i\)-я задача имеет тему \(a_i\). Темы задач могут совпадать.

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

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

  • количество задач в каждом контесте было ровно вдвое больше количества задач в предыдущем контесте (т.е. день назад), количество задач в первом контесте может быть любым;
  • общее суммарное количество задач во всех контестах серии должно быть максимально.

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

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

В первой строке записано одно целое число \(n\) (\(1 \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\)-й задачи.

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

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

Примечание

В первом примере оптимальная серия контестов — \(2\) задачи на тему \(1\), \(4\) задачи на тему \(2\), \(8\) задач на тему \(10\).

В втором примере оптимальная серия контестов — \(3\) задачи на тему \(3\), \(6\) задач на тему \(6\).

В третьем примере Поликарп проведёт один контест из \(3\) задач на тему \(1337\). Таким образом, ответ равен \(3\).

E. Недостающие числа

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

Chouti работает над странной математической задачей.

Была некоторая последовательность из \(n\) положительных целых чисел \(x_1, x_2, \ldots, x_n\), где число \(n\) чётное. Последовательность была очень особенной, а именно для каждого целого \(t\) от \(1\) до \(n\), \(x_1+x_2+...+x_t\) является квадратом некоторого целого числа (то есть полным квадратом).

Неведомым образом, числа с нечётными индексами пропали, то есть известны только числа с чётными индексами, другими словами \(x_2, x_4, x_6, \ldots, x_n\). Задача состоит в том, чтобы восстановить изначальную последовательность. Он снова просит у вас помощи с решением этой задачи.

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

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

В первой строке записано одно целое чётное число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке записаны \(\frac{n}{2}\) положительных целых чисел \(x_2, x_4, \ldots, x_n\) (\(1 \le x_i \le 2 \cdot 10^5\)).

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

Если не существует ни одной подходящей последовательности, выведите «No».

Иначе, выведите «Yes» и \(n\) положительных целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \le x_i \le 10^{13}\)) в следующей строке, при этом \(x_2, x_4, \ldots, x_n\) должны совпадать с числами во входных данных. Если существует несколько возможных ответов, выведите любой.

Заметьте, что ограничение на \(x_i\) больше, чем во входных данных. Можно доказать, что если ответ существует, то существует и последовательность, удовлетворяющая \(1 \le x_i \le 10^{13}\).

Примечание

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

  • \(x_1=4\)
  • \(x_1+x_2=9\)
  • \(x_1+x_2+x_3=25\)
  • \(x_1+x_2+x_3+x_4=36\)
  • \(x_1+x_2+x_3+x_4+x_5=100\)
  • \(x_1+x_2+x_3+x_4+x_5+x_6=144\)
Все эти числа являются полными квадратами.

Во втором примере, \(x_1=100\), \(x_1+x_2=10000\). Эти числа являются полными квадратами. Существуют и другие возможные ответы. Например, \(x_1=22500\) является другим возможным ответом.

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

B. Вова и кубки

жадные алгоритмы *1600

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

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

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

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

Первая строка содержит число \(n\) (\(2 \le n \le 10^5\)) — количество выигранных Вовой кубков.

Вторая строка содержит последовательность из \(n\) символов G и S. Если \(i\)-й символ равен G, то \(i\)-й кубок золотой, иначе — серебряный.

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

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

Примечание

В первом примере Вове нужно поменять местами кубки с номерами \(4\) и \(10\). Таким образом, он получит последовательность GGGGGGGSGS, в которой длина максимального подотрезка из золотых кубков равна \(7\).

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

В третьем примере, независимо от действий Вовы, длина максимального подотрезка из золотых кубков будет равна \(0\).

C. Мультипредметная олимпиада

жадные алгоритмы сортировки *1600

Мультипредметная олимпиада приближается! Соревнование проводится по \(m\) различным предметам, давая свободу выбора самим участникам. И теперь Александру (тренеру) необходимо собрать делегацию для поездки на олимпиаду среди своих воспитанников.

У Александра на выбор есть \(n\) кандидатов. Для \(i\)-го человека Алекс знает предмет \(s_i\) на котором данный кандидат специализируется и \(r_i\) — уровень его навыка в данной специализации (этот уровень даже может быть отрицательным!).

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

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

(Конечно, у Александра нет лишних денег, поэтому все выбранные делегаты должны участвовать в олимпиаде).

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

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

Следующие \(n\) строк содержат по два целых числа: \(s_i\) и \(r_i\) (\(1 \le s_i \le m\), \(-10^4 \le r_i \le 10^4\)) — предмет специализации и соответствующий уровень навыка \(i\)-го кандидата.

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

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

Примечание

В первом примере выгодно выбрать кандидатов \(1\), \(2\), \(3\), \(4\), по двое во \(2\)-м и \(3\)-м предметах. Общая сумма равна \(6 + 6 + 5 + 5 = 22\).

Во втором примере выгодно выбрать кандидатов \(1\), \(2\) и \(5\). По одному делегату в каждом предмете и общая сумма равна \(6 + 6 + 11 = 23\).

В третьем примере невозможно получить неотрицательную сумму.

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]\).

B. Орехус и строки

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

Недавно Орехус написал \(k\) строк длины \(n\), состоящих из букв «a» и «b». Он посчитал \(c\) — количество строк, которые являются префиксами хотя бы одной из написанных. Каждая строка была посчитана ровно один раз.

Затем, он потерял листочек со строками. Он помнит, что все написанные строки были лексикографически не меньше строки \(s\) и не больше строки \(t\). Ему интересно: какое максимально возможное \(c\) он мог получить.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 5 \cdot 10^5\), \(1 \leq k \leq 10^9\)).

Вторая строка содержит строку \(s\) (\(|s| = n\)) — строка, из букв «a» и «b».

Третья строка содержит строку \(t\) (\(|t| = n\)) — строка, из букв «a» и «b».

Гарантируется, что строка \(s\) лексикографически не больше \(t\).

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

Выведите одно число — максимально возможное \(c\).

Примечание

В первом примере Орехус мог записать строки «aa», «ab», «ba», «bb». Тогда эти \(4\) строки являются префиксами одной из записанных, а кроме них ещё строки «a» и «b». Всего \(6\) строк.

Во втором примере Орехус мог записать строки «aba», «baa», «bba».

В третьем примере есть всего две различные строки, которые мог записать Орехус. Если обе из них написаны, \(c=8\).

B. Квас и Орехус

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

Орехус очень любит квас. На день рождения родители подарили ему \(n\) бочонков, в \(i\)-м из которых \(v_i\) литров кваса. На каждом из них есть рычажок, потянув за который Орехус может налить себе в стакан ровно \(1\) литр кваса. Так как Орехус большой любитель этого напитка, он хочет налить себе в стакан \(s\) литров кваса. Но он хочет это сделать таким образом, чтобы объем кваса в минимальном из бочонков был максимален.

Помогите Орехусу узнать, какой максимальный объем кваса может быть в минимальном из бочонков или определите, что налить \(s\) литров кваса невозможно!

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

Первая строка содержит два целых числа \(n\) и \(s\) (\(1 \le n \le 10^3\), \(1 \le s \le 10^{12}\)) — количество бочонков и объем стакана.

Вторая строка содержит \(n\) целых чисел \(v_1, v_2, \ldots, v_n\) (\(1 \le v_i \le 10^9\)) — объем кваса в \(i\)-м бочонке.

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

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

Примечание

В первом примере ответ \(3\). Орехус может налить из первого бочонка \(1\) литр кваса, а из третьего \(2\) литра. Во всех бочонках будет по \(3\) литра.

Во втором примере ответ \(2\), Орехус может налить из первого бочонка \(3\) литра и из второго \(1\) литр.

В третьем примере Орехус не может налить себе \(7\) литров кваса, поэтому ответ \(-1\).

E. Вася и паттерны

жадные алгоритмы реализация Строки *2300

У Васи есть три строки \(s\), \(a\) и \(b\), состоящие из первых \(k\) букв латинского алфавита.

Назовем паттерном строку длины \(k\), где каждая из первых \(k\) букв латинского алфавита встречается ровно один раз (таким образом, существует ровно \(k!\) различных паттернов). Применение паттерна \(p\) к строке \(s\) — это замена каждой буквы строки \(s\) на \(p_i\), где \(i\) – это порядковый номер этой буквы в латинском алфавите. Например, применив паттерн «bdca» к строке «aabccd» мы получим строку «bbdcca».

Васю интересует, существует ли такой паттерн, применив который к строке \(s\), он получит строку, лексикографически больше либо равную строки \(a\) и лексикографически меньше либо равную строки \(b\).

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

Строка \(a\) лексикографически меньше строки \(b\), если существует такое \(i\) (\(1 \le i \le n\)), что \(a_i < b_i\), а для любого \(j\) (\(1 \le j < i\)) \(a_j = b_j\).

В этой задаче вам необходимо ответить на \(t\) независимых тестовых наборов.

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

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

Во взломах можно использовать только \(t = 1\).

Каждая из следующих \(t\) строк содержит описание тестового набора в следующем формате:

Первая строка тестового набора содержит целое число \(k\) (\(1 \le k \le 26\)) — длина необходимого паттерна.

Вторая строка тестового набора содержит строку \(s\) (\(1 \le |s| \le 10^6\)).

Третья строка тестового набора содержит строку \(a\).

Четвертая строка тестового набора содержит строку \(b\).

Строки \(s\), \(a\) и \(b\) имеют одинаковую длину (\(|s| = |a| = |b|\)) и состоят из первых \(k\) букв латинского алфавита, все буквы строчные.

Гарантируется, что строка \(a\) лексикографически меньше либо равна строке \(b\).

Также гарантируется, что сумма длин строк по всем тестовым наборам не превосходит \(3 \cdot 10^6\).

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

На каждый тестовый набор выведите ответ в следующем формате:

Если не существует подходящего паттерна, то в первой строке выведите «NO».

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

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

C. Ехаб и задача с двумя операциями

жадные алгоритмы Конструктив математика *1400

Дан массив \(a\) длины \(n\). Вы можете выполнять на нем следующие операции:

  • выбрать индекс \(i\) \((1 \le i \le n)\), целое число \(x\) \((0 \le x \le 10^6)\), и заменить \(a_j\) на \(a_j+x\) для всех \((1 \le j \le i)\), то есть добавить \(x\) ко всем элементам на отрезке с начала массива по \(i\)-й его элемент.
  • выбрать индекс \(i\) \((1 \le i \le n)\), целое число \(x\) \((1 \le x \le 10^6)\), и заменить \(a_j\) на \(a_j \% x\) для всех \((1 \le j \le i)\), то есть заменить каждый элемент на отрезке с начала массива по \(i\)-й его элемент на его остаток при делении на \(x\).

Можете ли вы сделать массив строго возрастающим не более, чем за \(n+1\) операцию?

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

В первой строке записано целое число \(n\) \((1 \le n \le 2000)\), количество элементов в массиве \(a\).

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\dots\), \(a_n\) \((0 \le a_i \le 10^5)\), элементы массива \(a\).

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

На первой строке выведите количество операций. Далее выведите операции, по одной в строке.

Чтобы вывести операцию добавления, используйте формат "\(1\) \(i\) \(x\)".

Чтобы вывести операцию взятия по модулю, используйте формат "\(2\) \(i\) \(x\)".

Если \(i\) или \(x\) не соответствуют ограничениям, приведенным в условии, или вы используете более \(n+1\) операции, вы получите вердикт Неверный ответ.

Примечание

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

Во втором примере:

На первом шаге: массив становится равен \([8,6,3]\).

На втором шаге: массив становится равен \([0,2,3]\).

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.

B. Новый год и местоположение сокровища

жадные алгоритмы Конструктив Перебор реализация *1200

Боб — пират, ищущий величайшее сокровище, которое когда-либо видел мир. Известно, что сокровище расположено в точке \(T\), координаты которой только предстоит узнать.

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

Как известно, мир — это двумерная плоскость. \(i\)-й обелиск находится в целочисленных координатах \((x_i, y_i)\). \(j\)-я подсказка состоит из \(2\) целых чисел \((a_j, b_j)\) и принадлежит обелиску \(p_j\), где \(p\) — некоторая (неизвестная) перестановка из \(n\) элементов. Это означает, что сокровище находится в точке \(T=(x_{p_j} + a_j, y_{p_j} + b_j)\). Эта точка \(T\) должно быть одинакова для всех подсказок.

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

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

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество обелисков, оно же равно количество подсказок.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(-10^6 \leq x_i, y_i \leq 10^6\)) — координаты \(i\)-го обелиска. Все координаты различны, то есть \(x_i \neq x_j\) или \(y_i \neq y_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(-2 \cdot 10^6 \leq a_i, b_i \leq 2 \cdot 10^6\)) — направление \(i\)-й подсказки. Все координаты различны, то есть \(a_i \neq a_j\) или \(b_i \neq b_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Гарантируется, что существует перестановка \(p\) такая, что для каждой пары \(i,j\) правда, что \(\left(x_{p_i} + a_i, y_{p_i} + b_i\right) = \left(x_{p_j} + a_j, y_{p_j} + b_j\right)\).

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

Выведите два числа \(T_x, T_y\) — координаты сокровища.

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

Примечание

Поскольку \(n = 2\), мы можем рассмотреть все перестановки двух элементов.

Если \(p = [1, 2]\), то обелиск \((2, 5)\) содержит подсказку \((7, -2)\), которая значит, что сокровище спрятано в \((9, 3)\). Второй обелиск \((-6, 4)\) содержал бы подсказку \((-1,-3)\) и сокровище было бы в \((-7, 1)\). Однако оба обелиска должны указывать одно и то же местоположение, поэтому это явно неправильная перестановка.

Если же спрятанная перестановка — это \([2, 1]\), тогда первая подсказка принадлежит второму обелиску, а вторая подсказка первому обелиску. Поэтому \((-6, 4) + (7, -2) = (2,5) + (-1,-3) = (1, 2)\), значит \(T = (1,2)\) — это местоположение сокровища.

Во втором примере скрытая перестановка — \([2, 3, 4, 1]\).

E. Новый год и оценка знакомых

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

Боб — активный пользователь социальной сети Faithbug. В этой сети люди могут становиться взаимными друзьями. То есть, если \(a\) является другом \(b\), то \(b\) также является другом \(a\). Таким образом у каждого пользователя есть неотрицательное количество друзей.

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

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

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

Вторая строка содержит \(n\) целых чисел \(a_1,a_2, \dots, a_n\) (\(0 \leq a_i \leq n\)), где \(a_i\) — количество друзей у \(i\)-го человека.

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

Выведите все возможные значения \(a_{n+1}\) — количества людей, с которыми Боб может быть друзями, в порядке возрастания.

Если ни одного решения не существует, выведите \(-1\).

Примечание

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

Во втором примере есть три возможных решения (кроме симметричных):

  • \(a\) — друг \(b\), \(c\) — друг \(d\), а у Боба нет друзей, или
  • \(a\) — друг \(b\), а также и \(c\), и \(d\) — друзья Боба, или
  • Боб — друг каждому.

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

F. Новый год и экспедиция кряквы

жадные алгоритмы Конструктив *2600

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

Утка — высшее животное! (Автор изображения — See Bang)

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

Боб может передвигаться тремя способами: плаванием, ходьбой и полетом. Он может переключаться между ними или менять свое направление в любой момент времени (даже если он находится в нецелой координате), и для этого не требуется дополнительное время. Боб может плавать только по воде, ходить только по траве и летать над любой местностью. Чтобы пролететь один метр, нужна \(1\) секунда. Чтобы проплыть один метр, нужно \(3\) секунды. И, чтобы пройти один метр, нужно \(5\) секунд.

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

За какое минимальное время Боб может достичь гнезда Алисы?

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

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

Вторая строка содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \leq l_i \leq 10^{12}\)), где \(l_i\) — длина \(i\)-го отрезка в метрах.

Третья строка содержит строку \(s\), состоящую из \(n\) символов «G», «W», «L», которые обозначают траву (Grass), воду (Water) и лаву (Lava), соответственно.

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

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

Выведите одно целое число \(t\) — минимальное количество времени, которое нужно Бобу, чтобы добраться до гнезда Алисы.

Примечание

В первом примере Боб сначала проходит \(5\) метров за \(25\) секунд. После этого он пролетает оставшиеся \(5\) метров за \(5\) секунд.

Во втором примере Боб сначала проплывает \(10\) метров за \(30\) секунд. После этого он пролетает над лавой за \(10\) секунд.

В третьем примере водный пруд намного меньше. Боб сначала проплывает по нему за \(3\) секунды. Однако он пока что не может пролететь над лавой, так как у него только одна единица энергии, а ему нужно две. Поэтому он проплывет полметра назад, а потом вернется вперед. Это займет \(3\) секунды. Теперь у него есть \(2\) единицы энергии, значит он сможет пролететь лаву за \(2\) секунды.

В четвертом примере он будет ходить \(50\) секунд, летать \(10\) секунд, плавать \(15\) секунд и в конце летать \(5\) секунд.

D1. Великая Вовина Стена (Версия 1)

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

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

На данный момент стена может быть представлена в виде последовательности \(a\) из \(n\) целых чисел, где \(a_i\) — это высота \(i\)-й части стены.

Вова может класть лишь только кирпичи \(2 \times 1\) в стену (однако их запас у него не ограничен).

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

Следующий абзац есть только в версии 1 задачи.

Вова также может класть кирпичи вертикально. То есть увеличивать высоту любой части стены на 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\)) — начальные высоты частей стены.

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

Выведите «YES», если Вова может завершить постройку стены, использовав произвольное количество кирпичей (возможно ноль).

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

Примечание

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

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

В третьем примере стена уже завершена.

E. Лес минимального диаметра

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

Задан лес — неориентированный граф из \(n\) вершин такой, что каждая его компонента связности является деревом.

Диаметр (также «длиннейший кратчайший путь») связного неориентированного графа — это максимальное число ребер на кратчайшем пути между всеми парами вершин.

Ваша задача — добавить несколько ребер (возможно ноль) в граф так, чтобы он стал деревом, а диаметр этого дерева был минимально возможным.

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

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 1000\), \(0 \le m \le n - 1\)) — количество вершин графа и количество ребер, соответственно.

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

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

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

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

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

Полученный граф должен быть деревом, а его диаметр должен был минимально возможным.

Eсли \(m = n - 1\), то, очевидно, ребра не будут добавлены и весь вывод состоит из одного числа — диаметра заданного дерева.

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

Примечание

В первом примере добавление ребер (1, 4) или (3, 4) приведет к диаметру 3. Добавление ребра (2, 4), однако, сделает диаметр равным 2.

Ребро (1, 2) — это единственный вариант добавляемого ребра для второго примера. Диаметр равен 1.

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

B. Перестановка букв

жадные алгоритмы Конструктив сортировки Строки *900

Задана строка \(s\), состоящая только из строчных букв латинского алфавита.

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

Назовем строку хорошей, если она не является палиндромом. Палиндром — это строка, которая читается слева направо также, как и справа налево. Например, строки «abacaba», «aa» и «z» являются палиндромами, а строки «bba», «xd» — нет.

Вам необходимо ответить на \(t\) независимых запросов.

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

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

Каждая из следующих \(t\) строк содержит по одной строке. \(i\)-я строка содержит строку \(s_i\), состоящую только из строчных букв латинского алфавита. Гарантируется, что длина \(s_i\) находится в отрезке от \(1\) до \(1000\) (включительно).

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

Выведите \(t\) строк. В \(i\)-й строке выведите ответ на \(i\)-й запрос: -1, если невозможно получить хорошую строку при помощи перестановки букв строки \(s_i\), иначе любую хорошую строку, которую можно получить из заданной (при помощи перестановки букв).

Примечание

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

Другие примеры (не все) корректных ответов на второй запрос: «ababaca», «abcabaa», «baacaba».

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

C. Мишка и последний экзамен

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

Мишка очень сильно старается не вылететь из университета. В частности, он не делал абсолютно ничего в течение всего семестра, каким-то чудесным образом сдал некоторые экзамены, так что остался всего один.

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

Звучит довольно просто для тех, кто посещал все пары, не так ли?

Разумеется, Мишка не был ни на одной из пар. Однако профессор оставил некоторые подсказки по значениям \(a\) для таких нерадивых студентов, как Мишка:

  • \(a\) отсортирована в неубывающем порядке (\(a_1 \le a_2 \le \dots \le a_n\));
  • \(n\) четно;
  • сформирована последовательность \(b\), состоящая из \(\frac n 2\) элементов, и выдана студентам: \(b_i = a_i + a_{n - i + 1}\).

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

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

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

В первой строке записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина последовательности \(a\). \(n\) всегда четно.

Во второй строке записаны \(\frac n 2\) целых чисел \(b_1, b_2, \dots, b_{\frac n 2}\) (\(0 \le b_i \le 10^{18}\)) — последовательность \(b\), где \(b_i = a_i + a_{n - i + 1}\).

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

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

Выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{18}\)) в одной строке.

\(a_1 \le a_2 \le \dots \le a_n\) должно выполняться.\(b_i = a_i + a_{n - i + 1}\) должно выполняться для всех валидных \(i\).

C. Степени двойки

битмаски жадные алгоритмы *1400

Положительное целое число \(x\) называется степенью двойки, если его можно представить как \(x = 2^y\), где \(y\) — неотрицательное целое число. Иными словами, степени двойки — это числа \(1, 2, 4, 8, 16, \dots\).

Вам даны два положительных целых числа \(n\) и \(k\). Представьте \(n\) как сумму ровно \(k\) степеней двойки.

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

В единственной строке входных данных заданы два числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 2 \cdot 10^5\)).

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

Если невозможно представить \(n\) как сумму \(k\) степеней двойки, выведите NO.

Иначе выведите YES, а затем — \(k\) положительных целых чисел \(b_1, b_2, \dots, b_k\), таких, что \(b_i\) являются степенями двойки, и \(\sum \limits_{i = 1}^{k} b_i = n\). Если ответов несколько, выведите любой из них.

F. Сделай связным

графы жадные алгоритмы снм *1900

Вам дан неориентированный граф, состоящий из \(n\) вершин. На каждой вершине записано число; число, записанное на вершине \(i\), равно \(a_i\). Изначально в графе нет ни одного ребра.

Вы можете добавлять ребра в граф за определенную стоимость. За добавление ребра между вершинами \(x\) и \(y\) надо заплатить \(a_x + a_y\) монет. Также существует \(m\) специальных предложений, каждое из которых характеризуется тремя числами \(x\), \(y\) и \(w\), и означает, что можно добавить ребро между вершинами \(x\) и \(y\) за \(w\) монет. Эти специальные предложения не обязательно использовать: если существует такая пара вершин \(x\) и \(y\), такая, что для нее существует специальное предложение, можно все равно добавить ребро между ними за \(a_x + a_y\) монет.

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

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

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

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

Затем следуют \(m\) строк, в каждой из которых заданы три целых числа \(x\), \(y\) и \(w\) (\(1 \le x, y \le n\), \(1 \le w \le 10^{12}\), \(x \ne y\)), обозначающие спецпредложение: можно добавить ребро между вершинами \(x\) и \(y\) за \(w\) монет.

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

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

Примечание

В первом примере из условия можно соединить \(1\) и \(2\) при помощи \(2\)-го спецпредложения, а затем \(1\) и \(3\) без использования спецпредложения.

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

A. Найди кратные

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

Задан отрезок положительных целых чисел от \(l\) до \(r\).

Найдите такую пару целых чисел \((x, y)\), что \(l \le x, y \le r\), \(x \ne y\) и \(x\) делит \(y\).

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

Также требуется ответить на \(T\) независимых запросов.

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

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

В каждой из следующих \(T\) строк записаны по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 998244353\)) — включительные границы отрезка.

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

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

Выведите \(T\) строк, в каждой строке должен быть записан ответ — два целых числа \(x\) и \(y\) таких, что \(l \le x, y \le r\), \(x \ne y\) и \(x\) делит \(y\). Ответ в \(i\)-й строке должен относиться к \(i\)-му запросу из входных данных.

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

C. Yuhao и скобки

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

Однажды Yuhao попалась задача о проверке скобочной последовательности на правильность.

Скобочная последовательность называется правильной скобочной последовательностью, если её можно превратить в корректное математическое выражение, вставив в неё некоторое количество символов «+» и «1». Например, последовательности «(())()», «()» и «(()(()))» являются правильными, а «)(», «(()» и «(()))(» — нет.

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

Эта задача оказалась слишком сложной для Yuhao. Можете ли вы помочь ему и решить её?

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

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

Каждая из следующих \(n\) строк содержит одну непустую строку, состоящую из символов «(», «)».

Сумма длин всех скобочных последовательностей не превосходит \(5 \cdot 10^5\).

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

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

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

Примечание

В первом примере, оптимально составить пары «((     )())» и «(     )».

E. Егор и RPG игра

жадные алгоритмы Конструктив *3400

Одним субботним вечером Егор играл в свою любимую RPG игрушку. Исследуя новые края и земли, он наткнулся на такой знак:

Егор — увлечённый игрок, но ещё и алгоритмист. Поэтому он моментально заметил 4 повторяющиеся буквы на знаке. Более того, если мы переставим буквы «R», «E», «G», «O» из первого слова, то мы получим буквы «O», «G», «R», «E» во втором слове. Егор вдохновился знаком и тотчас придумал задачу о перестановках.

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

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

Количество подпоследовательностей в разбиении должно быть не очень большим. Пусть \(f(n)\) — это минимальное целое число \(k\) такое, что любую перестановку длины \(n\) можно разбить на не более, чем \(k\) монотонных подпоследовательностей.

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

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

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

Во взломах вы можете использовать только \(t = 1\).

Далее следуют описания \(t\) тестов.

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

Сумма значений \(n\) по всем тестам не превосходит \(10^5\).

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

Для каждого теста выведите ответ в следующем формате:

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

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

Примечание

В примере мы можем разбить следующим образом:

  • \([4, 3, 1, 2]\) на \([4, 3, 1]\), \([2]\)
  • \([4, 5, 6, 1, 3, 2]\) на \([4, 1]\), \([5, 6]\) и \([3, 2]\)
  • \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\) на \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\)

Разумеется, есть много других возможных вариантов разбиения.

A. Сумма в дереве

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

У Мити есть корневое дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), причем корень дерева имеет номер \(1\). В каждой его вершине \(v\) было записано целое число \(a_v \ge 0\). Для каждой вершины \(v\) Митя вычислил величину \(s_v\): сумму чисел, записанных на пути от вершины \(v\) до корня, а также \(h_v\) — глубину вершины \(v\), то есть количество вершин на пути от вершины \(v\) до корня (таким образом, \(s_1=a_1\), \(h_1=1\)).

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

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

В первой строке содержится число \(n\) — число вершин в дереве (\(2 \le n \le 10^5\)). В следующей строке заданы числа \(p_2\), \(p_3\), ... \(p_n\), где \(p_i\) обозначает номер вершины, которая является предком вершины \(i\) в дереве (\(1 \le p_i < i\)). В последней строке входных данных содержатся целые числа \(s_1\), \(s_2\), ..., \(s_n\) (\(-1 \le s_v \le 10^9\)), где уничтоженные значения заменены на \(-1\).

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

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

B. Хорошая таблица

жадные алгоритмы Конструктив математика Перебор *2100

Вам дана таблица \(n \times m\), состоящая из букв «A», «G», «C», «T». Назовем таблицу красивой, если любой квадрат \(2 \times 2\) в ней состоит из различных символов. Ваша задача — найти красивую таблицу, также состоящую из букв «A», «G», «C», «T», которая отличается от данной в минимальном числе символов.

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

В первой строке входных данных записаны два положительных целых числа \(n\) и \(m\) — количество строк и столбцов в данной таблице (\(2 \leq n, m, n \times m \leq 300\,000\)). В каждой из следующих \(n\) строк записано по \(m\) символов — содержимое таблицы. Гарантируется, что в таблице встречаются только символы «A», «G», «C», «T».

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

Выведите \(n\) строк, по \(m\) символов в каждой. Выведенная таблица должна быть красивой и отличаться от данной в минимальном количестве символов.

Примечание

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

C. Построй дерево

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

Погуляв по заснеженному лесу, Миша очень полюбил деревья и решил нарисовать своё!

Это дерево состоит из \(n\) вершин, пронумерованных различными целыми числами от \(1\) до \(n\). В этом дереве вершина \(1\) является корнем, а у любой другой вершины \(i\) есть непосредственный предок \(p_{i}\) (при этом \(i\) — непосредственный потомок \(p_{i}\)).

Вершина \(u\) лежит в поддереве вершины \(v\), если переходя по непосредственным предкам из вершины \(u\) (\(u\), \(p_{u}\), \(p_{p_{u}}\), ...), можно попасть в вершину \(v\). В частности, любая вершина \(v\) лежит в поддереве самой себя. Число вершин в поддереве вершины \(v\) называется размером поддерева. Миша рассматривает только те деревья, в которых все вершины лежат в поддереве вершины \(1\).

На рисунке ниже изображено дерево из \(6\) вершин. Поддерево вершины \(2\) состоит из вершин \(2\), \(3\), \(4\), \(5\). Таким образом, размер поддерева этой вершины равен \(4\).

Назовём разветвлённостью дерева максимальное количество непосредственных потомков какой-то из его вершин. Так, разветвлённость дерева на рисунке выше равна 2. Помогите Мише построить дерево из \(n\) вершин, в котором сумма размеров всех поддеревьев равна в точности \(s\), а разветвлённость — минимально возможная.

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

В первой и единственной строке входных данных записаны два целых числа \(n\) и \(s\) — число вершин в дереве и требуемая сумма размеров поддеревьев (\(2 \le n \le 10^5\); \(1 \le s \le 10^{10}\)).

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

Если требуемого дерева не существует, выведите «No». Иначе в первой строке выходных данных выведите «Yes», а в следующей строке выведите числа \(p_2\), \(p_3\), ..., \(p_n\), где вершина с номером \(p_i\) является непосредственным предком вершины с номером \(i\).

Примечание

Для первого примера одним из оптимальных деревьев изображено ниже. Сумма размеров поддеревьев в этом дереве равна \(3 + 1 + 1 = 5\), а разветвлённость равна \(2\).

Для третьего примера одним из оптимальных деревьев изображено ниже. В этом дереве сумма размеров поддеревьев равна \(6 + 3 + 2 + 1 + 2 + 1 = 15\), а разветвлённость равна \(2\).

E. Шагом марш!

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

Добро пожаловать в армию, сынок. Джек служит рядовым и у него проблемы со строевой подготовкой. У него никак не получается делать как все: шаг левой, шаг правой, шаг левой, шаг правой и т.д. Заместо этого он запомнил некоторую последовательность действий и повторят ее по циклу. Например, он может запомнить «правой, левой, пропустить» и это значит, что первый шаг он сделает правой ногой, потом сделает шаг левой ногой, а потом и вовсе возьмет перерыв в то время как все остальные в строю делают очередной шаг. Затем он начнет повторять свои действия далее по циклу. Марширую таким образом он будет попадать в общий шаг лишь только в одной трети случаев.

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

Спасите рядового Джека. Задана текущая последовательность шагов. Вычислите какую наибольшую долю попаданий в общий шаг он может иметь после модификации ее.

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

Входные данные состоят из единственной непустой строки, состоящий из символов 'L', 'R' и 'X', где 'L' обозначает шаг левой ногой, 'R' — правой, а 'X' — отдых на время одного шага. Длина заданной последовательности не превосходит 106.

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

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

Примечание

Во втором примере, если добавить две паузы, чтобы получить LXXRXR, то Джек будет маршировать: LXXRXRLXXRXRL... заместо LRLRLRLRLRLRL... и будет делать верный шаг в половине случаев. Если же не добавить пауз вообще, то получится некорректная последовательность шагов, так как Джек будет подряд делать шаг справа.

F. Ваня и бургеры

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

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

У Вани есть \(q\) друзей, \(i\)-й друг предложил Ване встретиться у бургерной с номером \(l_i\) и прогуляться до бургерной \(r_i\) \((l_i \leq r_i)\). Во время прогулки с \(i\)-м другом Ваня может зайти во все бургерные с номерами \(x\) такими, что \(l_i \leq x \leq r_i\).

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

Пусть до покупки у Вани было \(d\) бурлей и Ваня потратил \(c\) бурлей в бургерной, тогда после этих действий у Вани на счете останется \(d \oplus c\) бурлей, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Сейчас на счету Вани \(2^{2^{100}} - 1\) бурлей и он уже собирается на прогулку. Помогите Ване узнать, какое максимальное количество денег он сможет потратить, если пойдет гулять с другом под номером \(i\). Количество бурлей, потраченных Ваней, определяется как разность между начальным количеством бурлей на счете Вани и конечным количеством бурлей на его счете.

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

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 500\,000\)) — количество бургерных.

В следующей строке содержится \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq 10^6\)), где \(c_i\) — стоимость самого дорого бургера в бургерной под номером \(i\).

В третьей строке находится одно целое число \(q\) (\(1 \leq q \leq 500\,000\)) — количество друзей Вани.

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

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

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

Примечание

В первом тесте для того, чтобы потратить максимальное количество денег с первым и третьим другом, Ване достаточно зайти в первую бургерную. Со вторым другом Ване достаточно зайти в третью бургерную. Во втором тесте для третьего друга (который собирается прогуляться от первой до третьей бургерной) всего есть 8 вариантов потратить деньги — \(0\), \(12\), \(14\), \(23\), \(12 \oplus 14 = 2\), \(14 \oplus 23 = 25\), \(12 \oplus 23 = 27\), \(12 \oplus 14 \oplus 23 = 20\). Максимальное количество денег получается потратить, если зайти в первую и третью бургерную — \(12 \oplus 23 = 27\).

B. Баян

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

— Почему они постоянно пишут, что задачи, которые я придумываю, — баяны? Да они настоящего баяна не видели!
BledDest

Баян — это строка (да, в реальном мире баяны — это музыкальные инструменты, но давайте на время забудем об этом), являющаяся конкатенацией следующих символов: открывающей квадратной скобки (ASCII код этого символа — \(091\)), двоеточия (ASCII код — \(058\)), нескольких (возможно, ни одного) символов вертикальной черты (ASCII код — \(124\)), еще одного двоеточия и закрывающей квадратной скобки (ASCII код — \(093\)). Длина баяна — это количество символов в нем.

Например, [::], [:||:] и [:|||:] — баяны длины \(4\), \(6\) и \(7\), соответственно. (:|:), {:||:}, [:], ]:||:[ баянами не являются.

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

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

Во входных данных записана строка \(s\) (\(1 \le |s| \le 500000\)). Она состоит из строчных букв латинского алфавита, а также символов [, ], : и |.

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

Если невозможно преобразовать \(s\) в баян удалением символов, выведите \(-1\). Иначе выведите максимально возможную длину баяна, который можно получить.

B. K-покраска массива

жадные алгоритмы сортировки *1400

Задан массив \(a\), состоящий из \(n\) целых чисел.

Вам необходимо покрасить этот массив в \(k\) цветов таким образом, чтобы:

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

Очевидно, что такой раскраски может не существовать. В этом случае выведите «NO». Иначе выведите «YES» и любую раскраску (то есть числа \(c_1, c_2, \dots c_n\), где \(1 \le c_i \le k\), а \(c_i\) означает цвет \(i\)-го элемента заданного массива), удовлетворяющую ограничениям, описанным выше. Если существует несколько возможных ответов, выведите любой.

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

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

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 5000\)) — элементы массива \(a\).

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

Если ответа не существует, выведите «NO». Иначе выведите «YES» и любую раскраску (то есть числа \(c_1, c_2, \dots c_n\), где \(1 \le c_i \le k\), а \(c_i\) означает цвет \(i\)-го элемента заданного массива), удовлетворяющую ограничениям, описанным выше. Если существует несколько возможных ответов, выведите любой.

Примечание

В первом тестовом примере также допустим ответ \(2~ 1~ 2~ 1\).

Во втором тестовом примере также допустим ответ \(1~ 1~ 1~ 2~ 2\).

Также существуют другие возможные ответы на оба тестовых примера.

D. Сбалансированная троичная строка

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

Задана строка \(s\), состоящая ровно из \(n\) символов '0', '1' и '2'. Такие строки называются троичными.

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

Среди всех сбалансированных троичных строк вам необходимо получить лексикографически (алфавитно) минимальную.

Заметьте, что вы не можете удалять символы из строки и добавлять символы в строку. Также заметьте, что вы можете заменять заданные символы только на символы '0', '1' и '2'.

Гарантируется, что ответ существует.

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

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

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) символов '0', '1' и '2'.

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

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

Так как \(n\) делится на \(3\), то очевидно, что ответ существует. Также очевидно, что существует только один возможный ответ.

C. Лунный новый год и разделение чисел

жадные алгоритмы математика реализация сортировки *900

Приближается лунный новый год, а Боб все еще мучается со своей домашней работой — задачей о разделении чисел.

Даны \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\), где \(n\) всегда четно. Боб должен разделить эти числа на группы, причем каждая группа должна содержать хотя бы \(2\) числа. Предположим, что числа разделены на \(m\) групп, и сумма чисел в \(j\)-й группе равна \(s_j\). Цель Боба — минимизировать сумму квадратов \(s_j\), то есть \(\)\sum_{j = 1}^{m} s_j^2.\(\)

Боб никак не может решить эту задачу. Можете ему помочь?

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

Первая строка содержит четное целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)), обозначающее, что в домашней работе Боба даны \(n\) чисел.

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

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

Выведите одно целое число, равное минимальной возможной сумме \(s_j\), то есть \(\)\sum_{i = j}^{m} s_j^2,\(\) где \(m\) — число групп чисел.

Примечание

В первом примере одно из оптимальных решений — разделить эти \(4\) числа на \(2\) две группы: \(\{2, 8\}, \{5, 3\}\). Ответ равен \((2 + 8)^2 + (5 + 3)^2 = 164\).

Во втором примере одно из оптимальных решений — разделить эти \(6\) чисел на \(3\) группы: \(\{1, 2\}, \{1, 2\}, \{1, 2\}\). Ответ равен \((1 + 2)^2 + (1 + 2)^2 + (1 + 2)^2 = 27\).

D. Лунный новый год и прогулка

графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное Структуры данных *1500

Приближается лунный новый год, а Боб решил отправиться на прогулку в ближайший парк.

Парк может быть представлен как связный граф из \(n\) вершин и \(m\) неориентированных ребер. Изначально Боб находился в вершине \(1\) и записал \(1\) в свою записную книжку. Он может переходить из одной вершины в другую по данным ребрам. Каждый раз, когда он посещает вершину, еще не записанную в его книжку, он записывает ее. После того, как он посетит все вершины как минимум по разу, он закончит прогулку, а в его книжке будет записана перестановка вершин \(a_1, a_2, \ldots, a_n\).

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

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\) (обратите внимание, в этой задаче такое невозможно, так как все рассматриваемые последовательности имеют одинаковую длину);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) элемент меньше, чем соответствующий элемент в \(y\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — числе вершин и ребер в графе, соответственно.

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

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

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

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

Примечание

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

Во втором примере Боб может пойти по пути \(1 \rightarrow 4 \rightarrow 3 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 1 \rightarrow 5\). Тогда он запишет последовательность \(\{1, 4, 3, 2, 5\}\), которая является лексикографически наименьшей.

A. Разбиение последовательности цифр

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

Вам задана последовательность \(s\), состоящая из \(n\) цифр от \(1\) до \(9\).

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

Более формально: если результирующее разбиение последовательности — это \(t_1, t_2, \dots, t_k\), где \(k\) — количество элементов в разбиении, то для каждого \(i\) от \(1\) до \(k-1\) должно выполняться условие \(t_{i} < t_{i + 1}\) (используется численное сравнение, то есть сравниваются численные интерпретации строк).

Например, если \(s=654\), то вы можете разбить ее на части \([6, 54]\) и это будет являться подходящим разбиением. Но если вы разобьете ее на части \([65, 4]\), то это будет являться плохим разбиением, потому что \(65 > 4\). Если \(s=123\), то вы можете разбить его на части \([1, 23]\) и \([1, 2, 3]\), но не на части \([12, 3]\).

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

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 300\)) — количество запросов.

Первая строка \(i\)-го запроса содержит одно целое число \(n_i\) (\(2 \le n_i \le 300\)) — количество цифр в \(i\)-м запросе.

Вторая строка \(i\)-го запроса содержит одну строку \(s_i\) длины \(n_i\), состоящую только из цифр от \(1\) до \(9\).

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

Если последовательность цифр \(i\)-го запроса не может быть разбита на хотя бы две части способом, описанном в условии задачи, выведите единственную строку «NO» для этого запроса.

Иначе в первой строке ответа на этот запрос выведите «YES», во второй строке выведите \(k_i\) — количество элементов в вашем разбиении последовательности \(i\)-го запроса и в третьей строке выведите \(k_i\) строк \(t_{i, 1}, t_{i, 2}, \dots, t_{i, k_i}\) — ваше разбиение. Части должны быть выведены в порядке следования цифр в заданной строке. Это означает, что если записать выведенные подстроки одну за другой, сохранив их порядок, то получится строка \(s_i\).

Посмотрите в примеры для лучшего понимания.

C. Brutality

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

Вы играете в новую часть знаменитого файтинга: Kortal Mombat XII. Вы хотите совершить brutality на персонаже вашего противника.

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

Вам задана последовательность ударов, \(i\)-й удар наносит \(a_i\) единиц урона персонажу противника. Чтобы совершить \(i\)-й удар, вам необходимо нажать кнопку \(s_i\) на вашем геймпаде. Удары пронумерованы от \(1\) до \(n\).

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

Чтобы совершить brutality, вам необходимо нанести некоторые удары из заданной последовательности. Вы можете пропустить любой из них, но менять изначальный порядок ударов вам запрещено. Суммарный нанесенный урон равен сумме \(a_i\) по всем \(i\) среди ударов, которые не были пропущены.

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

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

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \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\)-го удара.

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

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

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

Примечание

В первом тестовом примере вы можете выбрать удары с номерами \([1, 3, 4, 5, 6, 7]\) с суммарным уроном \(1 + 16 + 18 + 7 + 2 + 10 = 54\).

Во втором тестовом примере вы можете выбрать все удары, таким образом максимальный урон равен \(2 + 4 + 1 + 3 + 1000 = 1010\).

В третьем тестовом примере вы можете выбрать все удары кроме третьего, таким образом максимальный урон равен \(2 + 4 + 3 + 1000 = 1009\).

В четвертом тестовом примере вы можете выбрать удары с номерами \([2, 3, 6, 8]\). Только таким способом вы можете достичь максимального суммарного урона \(15 + 2 + 8 + 16 = 41\).

В пятом тестовом примере вы можете выбрать только удары с номерами \([2, 4, 6]\) с максимальным суммарным уроном \(18 + 19 + 15 = 52\).

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

B. Делители двух целых чисел

жадные алгоритмы математика Перебор теория чисел *1100

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

Например, если \(x=4\), а \(y=6\), то заданным списком может быть любая перестановка списка \([1, 2, 4, 1, 2, 3, 6]\). Некоторые примеры возможных списков: \([1, 1, 2, 4, 6, 3, 2]\), \([4, 6, 1, 1, 2, 3, 2]\) или \([1, 6, 3, 2, 4, 1, 2]\).

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

Гарантируется, что ответ существует, то есть заданный список делителей соответствует каким-то положительным целым числам \(x\) и \(y\).

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 128\)) — количество делителей \(x\) и \(y\).

Вторая строка входных данных содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^4\)), где \(d_i\) является либо делителем \(x\), либо делителем \(y\). Если число является делителем сразу обоих чисел \(x\) и \(y\), то в списке находятся две его копии.

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

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

C. Красивая гирлянда

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

У вас есть гирлянда, состоящая из \(n\) ламп. Каждая лампа — красная, зеленая или синяя. Цвет \(i\)-й лампы равен \(s_i\) ('R', 'G' и 'B' — цвета ламп в гирлянде).

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

Гирлянда называется красивой, если две любые лампы одинакового цвета находятся на расстоянии, делящемся на три. То есть если получилась гирлянда \(t\), тогда для всех \(i, j\) таких, что \(t_i = t_j\), должно выполняться \(|i-j|~ mod~ 3 = 0\). Значение \(|x|\) означает абсолютную величину \(x\), операция \(x~ mod~ y\) означает остаток от деления \(x\) на \(y\).

Например, следующие гирлянды являются красивыми: «RGBRGBRG», «GB», «R», «GRBGRBG», «BRGBRGB». Следующие гирлянды не являются красивыми: «RR», «RGBG».

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

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

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

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B' — цвета ламп в гирлянде.

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

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

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

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

E1. Массив и отрезки (легкая версия)

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

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Задан массив \(a\), состоящий из \(n\) целых чисел. Значение \(i\)-го элемента массива равно \(a_i\).

Также задан набор из \(m\) отрезков. \(j\)-й отрезок равен \([l_j; r_j]\), где \(1 \le l_j \le r_j \le n\).

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

Вам необходимо выбрать какое-то подмножество заданного множества отрезков (каждый отрезок может быть выбран не более одного раза) таким образом, что если вы примените этот набор отрезков к массиву \(a\) и получите массив \(b\), то значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) будет максимально возможным.

Заметим, что вы можете выбрать пустое множество.

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

Если вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 300, 0 \le m \le 300\)) — длина массива \(a\) и количество отрезков, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_i \le 10^6\)), где \(a_i\) — значение \(i\)-го элемента массива \(a\).

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

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

В первой строке выходных данных выведите одно целое число \(d\)максимально возможное значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\), если \(b\) — это массив, полученный применением некоторого поднабора заданных отрезков к массиву \(a\).

Во второй строке выходных данных выведите одно целое число \(q\) (\(0 \le q \le m\)) — количество отрезков, которые вы собираетесь применить.

В третьей строке выведите \(q\) различных целых чисел \(c_1, c_2, \dots, c_q\) в любом порядке (\(1 \le c_k \le m\)) — номера отрезков, которые вы собираетесь применить к массиву \(a\), чтобы значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) полученного массива \(b\) было максимально возможным.

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

Примечание

В первом тестовом примере полученный массив \(b\) будет равен \([0, -4, 1, 1, 2]\), таким образом ответ равен \(6\).

Во втором тестовом примере полученный массив \(b\) будет равен \([2, -3, 1, -1, 4]\), таким образом ответ равен \(7\).

В третьем тестовом примере вы не можете ничего сделать, таким образом ответ равен \(0\).

F. Унификация MST

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

Задан неориентированный взвешенный связный граф, состоящий из \(n\) вершин и \(m\) ребер без петель и кратных ребер.

\(i\)-е ребро — \(e_i = (u_i, v_i, w_i)\); расстояние между вершинами \(u_i\) и \(v_i\) по ребру \(e_i\) равно \(w_i\) (\(1 \le w_i\)). Граф является связным, то есть для каждой пары вершин существует хотя бы один путь между ними, состоящий только из ребер заданного графа.

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

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

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

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

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

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

The next \(m\) строк содержат по три целых числа. \(i\)-я строка содержит описание \(i\)-го ребра \(e_i\). Оно определяется тремя целыми числами \(u_i, v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n, u_i \ne v_i, 1 \le w \le 10^9\)), где \(u_i\) и \(v_i\) — вершины, соединяемые \(i\)-м ребром, а \(w_i\) — вес этого ребра.

Гарантируется, что заданный граф не содержит петель и кратных ребер (то есть для каждого \(i\) от \(1\) до \(m\) \(u_i \ne v_i\) и для каждой неориентированной пары \((u, v)\) существует не более одного ребра, соединяющего эту пару вершин). Также гарантируется, что заданный граф является связным.

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

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

Примечание

Картинка, соответствующая первому тестовому примеру:

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

Картинка, соответствующая последнему тестовому примеру:

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

A. Петя и неравенства

жадные алгоритмы *1400

Маленький Петя любит неравенства. Помогите ему найти n положительных целых чисел a1, a2, ..., an, таких, что выполняются два условия:

  • a12 + a22 + ... + an2 ≥ x
  • a1 + a2 + ... + an ≤ y
Входные данные

В первой строке через пробел записано три целых числа n, x и y (1 ≤ n ≤ 105, 1 ≤ x ≤ 1012, 1 ≤ y ≤ 106).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных целых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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

Выведите n положительных целых чисел, удовлетворяющих условиям, по одному в строке. Если таких чисел не существует, выведите одно число «-1». Если решений несколько, выведите любое.

B. Лента

жадные алгоритмы сортировки *1400

У вас есть длинная палка, состоящая из \(m\) отрезков, пронумерованных от \(1\) до \(m\). Каждый отрезок имеет длину равную \(1\) сантиметру. Однако, некоторые отрезки сломались и требуют починки.

У вас также есть бесконечно-длинная ремонтная лента. Вы хотели бы вырезать несколько кусочков из этой ленты так, чтобы покрыть все сломанные отрезки. В частности, если разместить кусок ленты целой длины \(t\) в позиции \(s\), то отрезки \(s, s+1, \ldots, s+t-1\) окажутся покрытыми.

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

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

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

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

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le m\)) — позиции сломанных отрезков. Эти числа даны в возрастающем порядке, то есть \(b_1 < b_2 < \ldots < b_n\).

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

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

Примечание

В первом примере вы можете использовать кусок длины \(11\), чтобы покрыть сломанные отрезки \(20\) и \(30\), и ещё один кусок длины \(6\), чтобы покрыть \(75\) и \(80\), так что суммарная длина равна \(17\).

Во втором примере вы можете вырезать кусок длины \(4\), чтобы покрыть сломанные отрезки \(1\), \(2\), \(4\), и два куска длины \(1\), чтобы покрыть \(60\) и \(87\).

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\).

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

B. Саша и магнитные установки

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

Однажды Саша посетил фермера 2D и его знаменитую магнитную ферму. На этой ферме урожай растёт благодаря воздействию специального магнитного поля. Поддержание магнитного поля на ферме обеспечивают \(n\) установок, причём мощность \(i\)-й установки равна \(a_i\).

В этом году 2D решил выращивать новую культуру, но какую, он не рассказал. Для успешного роста новой культуры необходимо слегка изменить мощности установок. 2D может не более одного раза выбрать произвольное целое число \(x\), затем уменьшить мощность одной из установок в \(x\) раз, а мощность какой-либо другой увеличить в \(x\) раз, при этом, мощности всех установок должны оставаться целыми и положительными числами. Обратите внимание, что он может этого не делать, если захочет. Более формально, 2D может выбрать две различные установки \(i\) и \(j\), а также число \(x\) такое, что \(a_i\) делится на \(x\), и заменить мощности следующим образом: \(a_i = \frac{a_i}{x}\), \(a_j = a_j \cdot x\).

Саша — очень любопытный, поэтому решил посчитать, какую минимальную суммарную мощность может достичь фермер. Так как установок слишком много, то Саша не справится с расчётами сам, помогите ему!

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

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

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

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

Выведите одно целое число — минимальную суммарную мощность.

Примечание

В первом примере фермер может уменьшить мощность установки с номером \(4\) в \(2\) раза, при этом увеличив мощность установки с номером \(1\) в \(2\) раза, тогда мощности установок будут выглядеть так: \([2, 2, 3, 2, 5]\).

Во втором примере фермер может уменьшить мощность установки с номером \(3\) в \(2\) раза, при этом увеличив мощность установки с номером \(2\) в те же \(2\) раза. А также можно ничего не делать, ответ все равно не изменится.

В третьем примере лучше всего оставить всё как есть.

A. Виноград

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

Для простоты будем считать, что есть виноградинки только трёх типов: зелёные, фиолетовые и чёрные.

Андрей, Дмитрий и Михаил обожают виноград, однако их вкусы достаточно различны. Чтобы все трое из них были счастливы нужно чтобы произошло следующее:

  • Андрей, Дмитрий и Михаил должны съесть \(x\), \(y\) и \(z\) виноградинок соответственно.
  • Андрей питает особую близость к зелёному винограду, а потому готов есть только зелёные виноградинки.
  • С другой стороны, Дмитрий не особый фанат чёрных виноградинок, и готов есть любые виноградинки, кроме чёрных. Другими словами, он готов есть зелёные и фиолетовые виноградинки.
  • Михаил же сохраняет здравый смысл и готов есть любые виноградинки — лишь бы количество было достаточным.

Зная страсть своих друзей к винограду, Аки решил организовать для них виноградную вечеринку. Он также приготовил к ней коробку с \(a\) зелёными, \(b\) фиолетовыми и \(c\) чёрными виноградинками.

Однако Аки не уверен, будет ли достаточно тех виноградинок, что он подготовил. Не могли бы вы помочь ему и выяснить можно ли распределить виноградинки таким образом, что все трое останутся довольны, или же Аки понадобится купить ещё виноградинок?

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

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

Первая строка содержит три целых числа \(x\), \(y\) и \(z\) (\(1 \le x, y, z \le 10^5\)) — количество виноградинок, которые Андрей, Дмитрий и Михаил хотят съесть.

Вторая строка содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 10^5\)) — количество зелёных, фиолетовых и чёрных виноградинок в коробке.

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

Если существует распределение виноградинок, которое сделает всех счастливыми, выведите "YES". Иначе выведите "NO".

Примечание

В первом примере есть только одно возможное распределение:

Андрей должен съесть \(1\) зелёную виноградинку, Дмитрий должен съесть \(3\) оставшиеся зелёных виноградинки и \(3\) фиолетовых виноградинки, а Михаил должен съесть \(2\) из \(3\) чёрных виноградинок.

Во втором примере нет подходящего распределения, так как Андрей не сможет съесть достаточное количество зелёных виноградинок. :(

B. Очередная задача про разбиение массива

жадные алгоритмы Конструктив сортировки *1500

Массив \(b\) называется подмассивом массива \(a\), если он образует непрерывный подотрезок \(a\), то есть равен \(a_l\), \(a_{l + 1}\), \(\ldots\), \(a_r\) для некоторых \(l, r\).

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

  • Если массив \(x = [4, 3, 1, 5, 2]\) и \(m = 3\), то \(3\) наибольших элемента \(x\) равны \(5\), \(4\) и \(3\), тем самым симпатичность \(x\) равна \(5 + 4 + 3 = 12\).
  • Если массив \(x = [10, 10, 10]\) и \(m = 2\), то симпатичность \(x\) равна \(10 + 10 = 20\).

Вам дан массив \(a_1, a_2, \ldots, a_n\), значение константы \(m\) и целое число \(k\). Вам нужно разбить массив \(a\) на ровно \(k\) подмассивов таких, что:

  • Каждый элемент \(a\) принадлежит ровно одному подмассиву.
  • Каждый подмассив содержит хотя бы \(m\) элементов.
  • Суммарная симпатичность всех \(k\) подмассивов в разбиении является наибольшей возможной.
Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m\), \(2 \le k\), \(m \cdot k \le n\)) — количество элементов в \(a\), константа \(m\) в условии и количество подмассивов, на которые нужно разбить.

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

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

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

Во второй строке выведите \(k-1\) целых чисел \(p_1, p_2, \ldots, p_{k-1}\) (\(1 \le p_1 < p_2 < \ldots < p_{k-1} < n\)) определяющих разбиение массива.

  • В первый подмассив попадают элементы с индексами от \(1\) до \(p_1\).
  • Во второй подмассив попадают элементы с индексами от \(p_1 + 1\) до \(p_2\).
  • \(\ldots\).
  • Все элементы с индексами от \(p_{k-1} + 1\) до \(n\) попадают в последний, \(k\)-й подмассив.

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

Примечание

В первом примере одно из оптимальных разбиений выглядит как \([5, 2, 5]\), \([2, 4]\), \([1, 1, 3, 2]\).

  • Симпатичность подмассива \([5, 2, 5]\) равна \(5 + 5 = 10\).
  • Симпатичность подмассива \([2, 4]\) равна \(2 + 4 = 6\).
  • Симпатичность подмассива \([1, 1, 3, 2]\) равна \(3 + 2 = 5\).

Таким образом, суммарная симпатичность равна \(10 + 6 + 5 = 21\).

Во втором примере одно из оптимальных разбиений выглядит как \([4]\), \([1, 3]\), \([2, 2]\), \([3]\).

B. Эмоции

жадные алгоритмы математика сортировки *1000

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

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

Заметим, что две эмоции \(i\) и \(j\) (\(i \ne j\)) такие, что \(a_i = a_j\), являются различными.

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

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

Первая строка входных данных содержит три целых числа \(n, m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le k \le m \le 2 \cdot 10^9\)) — количество эмоций, количество раз, которое вы можете использовать эмоции и максимальное количество использований одной и той же эмоции подряд.

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

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

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

Примечание

В первом примере можно использовать эмоции в соответствии со следующей последовательностью: \(4, 4, 5, 4, 4, 5, 4, 4, 5\).

D1. Кофе и курсовая работа (легкая версия)

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

Единственное отличие между легкой и сложной версиями — ограничения.

Поликарпу нужно написать курсовую работу. Курсовая работа состоит из \(m\) страниц.

У Поликарпа также есть \(n\) чашек кофе. Кофе в \(i\)-й чашке содержит \(a_i\) кофеина. Поликарп может выпить некоторые чашки кофе (каждую не более одного раза). Он может пить чашки в любом порядке. Поликарп пьет каждую чашку мгновенно и полностью (то есть он не может разделить какую-либо чашку на несколько дней).

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

Рассмотрим какой-нибудь день работы Поликарпа. Пусть Поликарп выпил \(k\) чашек кофе, а количества кофеина в чашках, которые Поликарп выпил в течение этого дня, равны \(a_{i_1}, a_{i_2}, \dots, a_{i_k}\). Тогда первая чашка, которую он выпьет, даст ему энергию на написание \(a_{i_1}\) страниц курсовой работы, вторая чашка даст ему энергию на написание \(max(0, a_{i_2} - 1)\) страниц, третья чашка даст ему энергию на написание \(max(0, a_{i_3} - 2)\) страниц, ..., и \(k\)-я чашка даст ему энергию на написание \(max(0, a_{i_k} - k + 1)\) страниц.

Если Поликарп не пьет кофе в течение какого-либо дня, то он вообще не может писать курсовую работу в течение этого дня.

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

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 10^4\)) — количество чашек кофе и количество страниц в курсовой работе.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) равно количеству кофеина, содержащегося в \(i\)-й чашке.

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

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

Примечание

В первом тестовом примере Поликарп может выпить четвертую чашку в течение первого дня (и написать \(1\) страницу), первую и вторую чашки в течение второго дня (и написать \(2 + (3 - 1) = 4\) страницы), пятую чашку в течение третьего дня (и написать \(2\) страницы) и третью чашку в течение четвертого дня (и написать \(1\) страницу), таким образом, ответ равен \(4\). Очевидно, что невозможно написать курсовую за три дня или быстрее.

Во втором тестовом примере Поликарп может выпить третью, четвертую и вторую чашки в течение первого дня (и написать \(4 + (2 - 1) + (3 - 2) = 6\) станиц) и шестую чашку в течение второго дня (и написать \(4\) страницы), таким образом, ответ равен \(2\). Очевидно, что Поликарп не может написать курсовую работу полностью за один день в этом тесте.

В третьем тестовом примере Поликарп может выпить все чашки кофе в течение первого дня и написать \(5 + (5 - 1) + (5 - 2) + (5 - 3) + (5 - 4) = 15\) страниц курсовой работы.

В четвертом тестовом примере Поликарп не может выпить все чашки кофе в течение первого дня и должен выпить одну из них в течение второго дня. Таким образом, В течение первого дня он напишет \(5 + (5 - 1) + (5 - 2) + (5 - 3) = 14\) страниц курсовой работы, а в течение второго дня он напишет \(5\) страниц курсовой работы. Этого достаточно, чтобы завершить ее.

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

D2. Кофе и курсовая работа (сложная версия)

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

Единственное отличие между легкой и сложной версиями — ограничения.

Поликарпу нужно написать курсовую работу. Курсовая работа состоит из \(m\) страниц.

У Поликарпа также есть \(n\) чашек кофе. Кофе в \(i\)-й чашке содержит \(a_i\) кофеина. Поликарп может выпить некоторые чашки кофе (каждую не более одного раза). Он может пить чашки в любом порядке. Поликарп пьет каждую чашку мгновенно и полностью (то есть он не может разделить какую-либо чашку на несколько дней).

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

Рассмотрим какой-нибудь день работы Поликарпа. Пусть Поликарп выпил \(k\) чашек кофе, а количества кофеина в чашках, которые Поликарп выпил в течение этого дня, равны \(a_{i_1}, a_{i_2}, \dots, a_{i_k}\). Тогда первая чашка, которую он выпьет, даст ему энергию на написание \(a_{i_1}\) страниц курсовой работы, вторая чашка даст ему энергию на написание \(max(0, a_{i_2} - 1)\) страниц, третья чашка даст ему энергию на написание \(max(0, a_{i_3} - 2)\) страниц, ..., и \(k\)-я чашка даст ему энергию на написание \(max(0, a_{i_k} - k + 1)\) страниц.

Если Поликарп не пьет кофе в течение какого-либо дня, то он вообще не может писать курсовую работу в течение этого дня.

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

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

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

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно количеству кофеина, содержащегося в \(i\)-й чашке.

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

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

Примечание

В первом тестовом примере Поликарп может выпить четвертую чашку в течение первого дня (и написать \(1\) страницу), первую и вторую чашки в течение второго дня (и написать \(2 + (3 - 1) = 4\) страницы), пятую чашку в течение третьего дня (и написать \(2\) страницы) и третью чашку в течение четвертого дня (и написать \(1\) страницу), таким образом, ответ равен \(4\). Очевидно, что невозможно написать курсовую за три дня или быстрее.

Во втором тестовом примере Поликарп может выпить третью, четвертую и вторую чашки в течение первого дня (и написать \(4 + (2 - 1) + (3 - 2) = 6\) станиц) и шестую чашку в течение второго дня (и написать \(4\) страницы), таким образом, ответ равен \(2\). Очевидно, что Поликарп не может написать курсовую работу полностью за один день в этом тесте.

В третьем тестовом примере Поликарп может выпить все чашки кофе в течение первого дня и написать \(5 + (5 - 1) + (5 - 2) + (5 - 3) + (5 - 4) = 15\) страниц курсовой работы.

В четвертом тестовом примере Поликарп не может выпить все чашки кофе в течение первого дня и должен выпить одну из них в течение второго дня. Таким образом, В течение первого дня он напишет \(5 + (5 - 1) + (5 - 2) + (5 - 3) = 14\) страниц курсовой работы, а в течение второго дня он напишет \(5\) страниц курсовой работы. Этого достаточно, чтобы завершить ее.

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

A. Илья и красочная прогулка

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

Илья живет в прекрасном городе Хордальске.

На его улице расположено \(n\) домов, пронумерованных по порядку от \(1\) до \(n\), причем расстояние между двумя соседними домами равно \(1\). Соседними домами являются \(1\) и \(2\), \(2\) и \(3\), ..., \(n-1\) и \(n\). Дома \(n\) и \(1\) соседними не являются.

Дома покрашены в цвета \(c_1, c_2, \ldots, c_n\), то есть \(i\)-й дом покрашен в цвет \(c_i\). Известно, что Хордальск не является скучным городом, поэтому найдутся хотя бы два дома, покрашенные в разные цвета.

Илья хочет выбрать два дома \(i\) и \(j\) таких, что \(1 \leq i < j \leq n\), а цвета этих домов отличаются: \(c_i \neq c_j\). Затем он пройдет от дома \(i\) до дома \(j\) расстояние \((j-i)\).

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

Помогите Илье, найдите, чему равно это максимальное расстояние.

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

В первой строке записано одно целое число \(n\) (\(3 \leq n \leq 300\,000\)) — количество домов на улице Ильи в Хордальске.

Во второй строке записаны \(n\) целых чисел, разделенных пробелами \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq n\)) — цвета домов на описываемой улице.

Гарантируется, что найдется хотя бы одна пара \(i\) и \(j\) такая, что \(1 \leq i < j \leq n\) и \(c_i \neq c_j\).

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

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

Примечание

В первом примере оптимальным является маршрут от первого дома до последнего, в котором Илья пройдет расстояние, равное \(5-1 = 4\).

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

В третьем примере оптимальным является маршрут от третьего дома до последнего, на котором Илья пройдет расстояние \(7-3 = 4\).

B. Алена и узкий холодильник

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

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

Пример холодильника с \(h = 7\) и двумя полками. Полки показаны черным. Рисунок соответствует первому примеру.

У Алены есть \(n\) бутылок молока, она хочет поставить их в холодильник. Высота \(i\)-й бутылки равна \(a_i\) клеток, а ширина любой бутылки равна \(1\) клетке. Алена может поставить бутылку на полку, если высота свободного пространства над этой полкой не меньше высоты бутылки. Она не может ставить бутылки друг на друга (если, конечно, между ними нет полки). Бутылки не могут занимать общие клетки в таблице.

Алена хочет найти максимальное целое число \(k\) такое, что она может одновременно поставить бутылки с номерами \(1\), \(2\), ..., \(k\) в холодильник. Найдите это наибольшее \(k\).

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

Первая строка содержит два целых числа \(n\) и \(h\) (\(1 \le n \le 10^3\), \(1 \le h \le 10^9\)) — количество бутылок и высота холодильника, соответственно.

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

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

Выведите одно целое число \(k\) — максимальное целое число такое, что Алена может одновременно поставить бутылки с номерами \(1\), \(2\), ..., \(k\) в холодильник. Если Алена может поставить все бутылки, выведите \(n\). Легко понять, что Алена всегда может поставить хотя бы одну бутылку в холодильник.

Примечание

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

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

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

C. Рамзес и инвертирование углов

жадные алгоритмы Конструктив математика реализация *1500

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

Даны две матрицы \(A\) и \(B\) размера \(n \times m\), каждая состоит только из \(0\) и \(1\). Рамзес может сколько угодно раз применять к матрице \(A\) следующую операцию: взять любую подматрицу матрицы \(A\), содержащую хотя бы две строки и два столбца, и инвертировать значение в её углах (то есть все углы подматрицы, в которых раньше стоял \(0\), после операции будут содержать \(1\), а все углы подматрицы, в которых раньше стояла \(1\), после операции будут содержать \(0\)). Требуется ответить, можно ли из матрицы \(A\) получить матрицу \(B\).

Пример операции. Выбранная подматрица выделена голубым и желтым, ее углы выделены желтым.

Так как Рамзес не хочет выполнять эти операции вручную, он просит вас ответить на этот вопрос.

Подматрицей матрицы \(M\) называется матрица, образованная элементами на пересечении множества строк с номерами \(x_1, x_1+1, \ldots, x_2\) матрицы \(M\) и множества столбцов с номерами \(y_1, y_1+1, \ldots, y_2\) матрицы \(M\), где \(x_1, x_2, y_1, y_2\) — крайние строки и столбцы подматрицы. Иными словами, подматрица — это набор ячеек исходной матрицы, которые образуют сплошной (без пустот) прямоугольник со сторонами, параллельными сторонам исходной матрицы, углами подматрицы являются клетки \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\), где клетка \((i,j)\) обозначает клетку на пересечении \(i\)-й строки и \(j\)-го столбца.

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

В первой строке находятся два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 500\)) — количество строк и столбцов в матрицах \(A\) и \(B\) соответственно.

В следующих \(n\) строках находятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(A\) (\(0 \leq A_{ij} \leq 1\)).

В следующих \(n\) строках находятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(B\) (\(0 \leq B_{ij} \leq 1\)).

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

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

Примечание

Примеры объяснены на рисунках ниже.

Пример 1.
Пример 2.
Пример 3.

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)\).

A1. Игрушечный поезд (упрощённая версия)

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

Это упрощённая версия задачи Toy Train. Эти две версии отличаются только в ограничениях. Взломы для этой версии отключены.

Боб подарил Алисе набор Toy Train™ (игрушечный поезд). Он состоит из одного поезда и связной железной дороги из \(n\) станций, пронумерованных от \(1\) до \(n\). Поезд занимает одну станцию в один момент времени и перемещается по железнодорожной сети станций по кругу. Более точно, поезд посетит станцию \(i+1\) сразу после станции \(i\), если \(1 \leq i < n\), или станцию \(1\), если \(i = n\). Поезду требуется \(1\) секунда, чтобы по описанному процессу переместиться на следующую станцию.

Боб оставил Алисе интересную задачку перед уходом: доставить \(m\) конфет, которые исходно находятся на некоторых станциях, на их независимые места назначения с помощью поезда. Конфеты пронумерованы от \(1\) до \(m\). Конфета \(i\) (\(1 \leq i \leq m\)), сейчас находящаяся на станции \(a_i\), должна быть доставлена на станцию \(b_i\) (\(a_i \neq b_i\)).

Синие числа на конфетах соответствуют значениям \(b_i\). Картинка соответствует примеру \(1\).

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

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

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

Первая строка содержит два целых числа \(n\) и \(m\), разделенных пробелами (\(2 \leq n \leq 100\); \(1 \leq m \leq 200\)) — количество станций и количество конфет, соответственно.

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(a_i\) и \(b_i\), разделенных пробелами (\(1 \leq a_i, b_i \leq n\); \(a_i \neq b_i\)) — станция, на которой исходно находится конфета \(i\) и ее местоположение, соответственно.

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

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

Примечание

Рассмотрим второй пример.

Если поезд начнет со станции \(1\), будет следующая оптимальная стратегия:

  1. Загрузить первую конфету в поезд.
  2. Добраться до станции \(2\). Это займет \(1\) секунду.
  3. Доставить первую конфету.
  4. Добраться до станции \(1\). Это займет \(1\) секунду.
  5. Загрузить вторую конфету в поезд.
  6. Добраться до станции \(2\). Это займет \(1\) секунду.
  7. Доставить вторую конфету.
  8. Добраться до станции \(1\). Это займет \(1\) секунду.
  9. Загрузить третью конфету в поезд.
  10. Добраться до станции \(2\). Это займет \(1\) секунду.
  11. Доставить третью конфету.

Таким образом, поезду требуется \(5\) секунд чтобы завершить задания.

Если поезд стартует на станции \(2\), ему нужно будет добраться до станции \(1\) перед загрузкой первой конфеты, на что потребуется еще одна секунда. Таким образом, ответ в этом случае будет \(5+1 = 6\) секунд.

A2. Игрушечный поезд

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

Боб подарил Алисе набор Toy Train™ (игрушечный поезд). Он состоит из одного поезда и связной железной дороги из \(n\) станций, пронумерованных от \(1\) до \(n\). Поезд занимает одну станцию в один момент времени и перемещается по железнодорожной сети станций по кругу. Более точно, поезд посетит станцию \(i+1\) сразу после станции \(i\), если \(1 \leq i < n\), или станцию \(1\), если \(i = n\). Поезду требуется \(1\) секунда, чтобы по описанному процессу переместиться на следующую станцию.

Боб оставил Алисе интересную задачку перед уходом: доставить \(m\) конфет, которые исходно находятся на некоторых станциях, на их независимые места назначения с помощью поезда. Конфеты пронумерованы от \(1\) до \(m\). Конфета \(i\) (\(1 \leq i \leq m\)), сейчас находящаяся на станции \(a_i\), должна быть доставлена на станцию \(b_i\) (\(a_i \neq b_i\)).

Синие числа на конфетах соответствуют значениям \(b_i\). Картинка соответствует примеру \(1\).

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

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

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

Первая строка ввода содержит два целых числа \(n\) и \(m\), разделенных пробелами (\(2 \leq n \leq 5\,000\); \(1 \leq m \leq 20\,000\)) — количество станций и количество конфет, соответственно.

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(a_i\) и \(b_i\), разделенных пробелами (\(1 \leq a_i, b_i \leq n\); \(a_i \neq b_i\)) — станция, на которой исходно находится конфета \(i\) и ее местоположение, соответственно.

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

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

Примечание

Рассмотрим второй тестовый пример.

Если поезд начнет со станции \(1\), будет следующая оптимальная стратегия:

  1. Загрузить первую конфету в поезд.
  2. Добраться до станции \(2\). Это займет \(1\) секунду.
  3. Доставить первую конфету.
  4. Добраться до станции \(1\). Это займет \(1\) секунду.
  5. Загрузить вторую конфету в поезд.
  6. Добраться до станции \(2\). Это займет \(1\) секунду.
  7. Доставить вторую конфету.
  8. Добраться до станции \(1\). Это займет \(1\) секунду.
  9. Загрузить третью конфету в поезд.
  10. Добраться до станции \(2\). Это займет \(1\) секунду.
  11. Доставить третью конфету.

Таким образом, поезду требуется \(5\) секунд чтобы завершить задания.

Если поезд стартует на станции \(2\), ему нужно будет добраться до станции \(1\) перед загрузкой первой конфеты, на что потребуется еще одна секунда. Таким образом, ответ в этом случае будет \(5+1 = 6\) секунд.

B. Два торта

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

Саша и Дима хотят купить два \(n\)-ярусных торта. Каждый торт должен состоять из \(n\) различных ярусов: от размера \(1\) до размера \(n\). Ярусы должны идти в порядке от меньшего к большему (сверху вниз).

Они живут на одной улице, на ней расположены подряд слева направо \(2 \cdot n\) домов. В каждом доме находится кондитерская, в которой можно купить ярус торта. К сожалению, в каждой кондитерской можно купить только один ярус и только одного конкретного размера: в \(i\)-м доме можно купить ярус размера \(a_i\) (\(1 \le a_i \le n\)).

Так как ребята носят уже купленные ярусы торта с собой, а вставлять новый ярус в середину торта невозможно, они договорились покупать ярусы от меньших к большим. То есть каждый из них покупает ярусы в порядке: размера \(1\), затем \(2\), затем \(3\) и так далее до \(n\).

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

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

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

Во второй строке находится \(2 \cdot n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le n\)), где \(a_i\) равно размеру яруса, который можно купить в \(i\)-м доме. Помните, что в каждом доме можно приобрести только один ярус. Гарантируется, что каждое число от \(1\) до \(n\) встречается в \(a\) ровно два раза.

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

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

Примечание

В первом примере возможна такая последовательность действий:

  • Саша покупает ярус размера \(1\) около \(1\)-го дома (\(a_1=1\));
  • Дима перемещается к дому номер \(2\);
  • Дима покупает ярус размера \(1\) около \(2\)-го дома (\(a_2=1\));
  • Саша перемещается к дому номер \(4\);
  • Саша покупает ярус размера \(2\) около \(4\)-го дома (\(a_4=2\));
  • Саша перемещается к дому номер \(5\);
  • Саша покупает ярус размера \(3\) около \(5\)-го дома (\(a_5=3\));
  • Дима перемещается к дому номер \(3\);
  • Дима покупает ярус размера \(2\) около \(3\)-го дома (\(a_3=2\));
  • Дима перемещается к дому номер \(6\);
  • Дима покупает ярус размера \(3\) около \(6\)-го дома (\(a_6=3\)).

Итого, Саша проходит расстояние \(3+1=4\), а Дима проходит расстояние \(1+1+3=5\). Суммарно они проходят расстояние \(4+5=9\). Можно убедиться, что при любой другой последовательности действий они пройдут неменьшее расстояние.

B. Ничья!

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

У вас осталась частичная информация о счете во время исторического футбольного матча. Вам задан набор пар \((a_i, b_i)\), обозначающих, что во время матча на табло был счет «\(a_i\): \(b_i\)». Известно, что если текущий счёт «\(x\):\(y\)», то после гола он сменится на «\(x+1\):\(y\)» или «\(x\):\(y+1\)». Какое наибольшее количество раз на табло могла появиться ничья?

Пары «\(a_i\): \(b_i\)» заданы в хронологическом порядке (увеличения времени), но вам заданы только некоторые моменты времени. Последняя пара обязательно соответствует окончанию матча.

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

В первой строке записано целое число \(n\) (\(1 \le n \le 10000\)) — количество сохранившихся записей о счете в матче. В следующих \(n\) строках записано по два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)), обозначающие счет на табло (т.е. число голов, забитых первой командой, и число голов, забитое второй командой). Эти записи перечислены в хронологическом порядке, т.е. последовательности \(x_i\) и \(y_j\) неубывающие. Последняя запись означает финальный счет матча.

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

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

Примечание

В первом примере одна из возможных последовательностей изменения счета с наибольшем количеством ничьих следующая: 0:0, 1:0, 2:0, 2:1, 3:1, 3:2, 3:3, 3:4.

C. День рождения

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

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

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

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

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

В первой строке содержится одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество детей, которые пришли на день рождения ковбоя Влада.

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) задающие рост каждого рёбенка.

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

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

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

Примечание

В первом примере неудобство хоровода равно \(1\), так как разности ростов между соседними детьми равны \(1\), \(1\), \(1\) и \(0\). Обратите внимание, что последовательности \([2, 3, 2, 1, 1]\), \([3, 2, 1, 1, 2]\) задают те же хороводы и отличаются лишь началом отсчёта.

Во втором примере неудобство хоровода равно \(20\), так как разность ростов детей с ростами \(10\) и \(30\) равна \(20\).

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».

A. Правильная скобочная последовательность

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

Строка называется скобочной последовательностью, если в ней нет символов, отличных от «(» и «)». Скобочная последовательность называется правильной, если можно получить из нее корректное математическое выражение путем вставки в нее символов «+» и «1». Например, «», «(())» и «()()» — правильные скобочные последовательности; «))» и «)((» — скобочные последовательности, не являющиеся правильными, а «(a)» и «(1)+(1)» — не скобочные последовательности.

У вас есть несколько строк, каждая строка является скобочной последовательностью длины \(2\). Всего у вас \(cnt_1\) строк «((», \(cnt_2\) строк «()», \(cnt_3\) строк «)(» и \(cnt_4\) строк «))». Вы хотите записать эти строки в некотором порядке друг за другом; после этого у вас получится длинная скобочная последовательность из \(2(cnt_1 + cnt_2 + cnt_3 + cnt_4)\) символов. Вам необходимо ответить на следующий вопрос: можно ли выбрать некоторый порядок строк, что в итоге получится правильная скобочная последовательность? Обратите внимание: нельзя ни удалять, ни добавлять новые символы или строки.

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

Входные данные — четыре строки, в \(i\)-й из которых записано одно целое число \(cnt_i\) (\(0 \le cnt_i \le 10^9\)).

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

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

Примечание

В первом примере можно построить строку «(())()(()((()()()())))», которая является правильной скобочной последовательностью.

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

B. Скидки

жадные алгоритмы сортировки *900

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

У вас есть \(m\) разных купонов, позволяющих покупать шоколадки на особых условиях. \(i\)-й купон позволяет купить \(q_i\) шоколадок, при этом заплатив только за \(q_i - 1\) наиболее дорогих из них (то есть самая дешевая из \(q_i\) шоколадок вам достанется бесплатно).

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

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

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

В первой строке записано одно целое число \(n\) (\(2 \le n \le 3 \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 n - 1\)) — количество купонов.

В четвертой строке записаны \(m\) целых чисел \(q_1\), \(q_2\), ..., \(q_m\) (\(2 \le q_i \le n\)), где \(q_i\) — количество шоколадок, которые вы должны купить при помощи \(i\)-го купона (и самую дешевую из них вы получите бесплатно). Все значения \(q_i\) попарно различны.

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

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

Примечание

Рассмотрим первый пример.

Если мы используем первый купон, можно выбрать шоколадки под номерами \(1\), \(6\) и \(7\), и мы заплатим \(18\) монет за них и \(9\) монет за все остальные.

Если мы используем второй купон, можно выбрать шоколадки под номерами \(1\), \(5\), \(6\) и \(7\), и мы заплатим \(25\) монет за них и \(5\) монет за все остальные.

D. Напряженная тренировка

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

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

Пусть студенты пронумерованы от \(1\) до \(n\). Ноутбук \(i\)-го студента заряжен на \(a_i\) в начале контеста, и он использует \(b_i\) заряда в минуту (то есть, если заряд ноутбука \(c\) в начале некоторой минуты, то он становится \(c - b_i\) к началу следующей минуты). Контест длится \(k\) минут.

Поликарп (тренер Берляндского ГУ) решил купить ровно одно зарядное устройство так, чтобы все студенты смогли успешно завершить контест. Он покупает зарядное устройство в момент начала контеста.

Поликарп может купить зарядное устройство любой неотрицательной (нулевой или больше) целой мощности. Мощность выбирается до покупки, она не может быть изменена позднее. Пусть выбранная мощность \(x\). В начале каждой минуты (от минуты начала контеста до последней минуты контеста) он может подключить зарядное устройство в ноутбук любого из студентов и заряжать его целое число минут. Если ноутбук потребляет \(b_i\) заряда в минуту, то потребление становится \(b_i - x\) в минуту, когда подключено зарядное устройство. Отрицательное потребление значит, что заряд ноутбука увеличивается. Заряд любого ноутбука не ограничен, он может быть бесконечно большим. Зарядное устройство может быть включено не более чем в один ноутбук в одно и то же время.

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

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

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

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

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

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^7\)) — потребление ноутбука каждого из студентов.

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

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

Если такого зарядного устройства не существует, то выведите -1.

Примечание

Взглянем на состояние ноутбуков в начале каждый минуты в первом примере с зарядным устройством мощности \(5\):

  1. заряд: \([3, 2]\), подключим зарядное устройство в ноутбук 1;
  2. заряд: \([3 - 4 + 5, 2 - 2] = [4, 0]\), подключим зарядное устройство в ноутбук 2;
  3. заряд: \([4 - 4, 0 - 2 + 5] = [0, 3]\), подключим зарядное устройство в ноутбук 1;
  4. заряд: \([0 - 4 + 5, 3 - 2] = [1, 1]\).

Контест завершается после четвертой минуты.

Однако, рассмотрим зарядное устройство мощности \(4\):

  1. заряд: \([3, 2]\), подключим зарядное устройство в ноутбук 1;
  2. заряд: \([3 - 4 + 4, 2 - 2] = [3, 0]\), подключим зарядное устройство в ноутбук 2;
  3. заряд: \([3 - 4, 0 - 2 + 4] = [-1, 2]\), у первого ноутбука становится отрицательный заряд, поэтому первый студент не может успешно завершить контест.

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

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\) в наборе.

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

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

F2. Покрывающее дерево с одной фиксированной степенью

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

Задан неориентированный невзвешенный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Гарантируется, что в графе отсутствуют петли и кратные ребра.

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

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

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(D\) (\(2 \le n \le 2 \cdot 10^5\), \(n - 1 \le m \le min(2 \cdot 10^5, \frac{n(n-1)}{2}), 1 \le D < n\)) — количество вершин, количество ребер и необходимая степень первой вершины соответственно.

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

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

Если не существует покрывающего дерева, удовлетворяющего условию задачи выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и затем выведите \(n-1\) строк, описывающих ребра такого покрывающего дерева, что степень первой вершины (вершины с номером \(1\)) равна \(D\). Убедитесь, что ребра выводимого покрывающего дерева представляют собой подмножество ребер входных данных (порядок ребер не важен, также ребро \((v, u)\) может быть выведено как \((u, v)\)).

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

Примечание

Картинка, соответствующая первому и второму тестовым примерам:

Картинка, соответствующая третьему тестовому примеру:

D. Настя идет в столовую

жадные алгоритмы *1800

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

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

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

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

В первой строке вводится два целых числа \(n\), \(m\), разделенных пробелом (\(1 \leq n \leq 3 \cdot 10^{5}\), \(0 \leq m \leq 5 \cdot 10^{5}\)) — количество людей в очереди и количество пар людей, в которых первый человек может пропустить второго, если первый стоит непосредственно перед вторым.

В следующей строке вводятся \(n\) различных целых чисел \(p_1\), \(p_2\), ..., \(p_n\) — изначальное положение людей в очереди от начала к концу (\(1 \leq p_i \leq n\), \(p\) — перестановка чисел от \(1\) до \(n\)). Иными словами, \(p_i\) — номер человека, стоящего \(i\)-м в очереди.

В \(i\)-й из следующих \(m\) строк вводятся два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n, u_i \neq v_i\)), обозначающие, что человек с номером \(u_i\) готов пропустить человека с номером \(v_i\), если \(u_i\) стоит прямо перед человеком \(v_i\) в очереди. Гарантируется, что если \(i \neq j\), то \(v_i \neq v_j\), либо \(u_i \neq u_j\). Заметьте, что в одной паре людей возможно такое, что оба готовы пропустить друг друга.

Настя — последний человек в очереди (то есть человек с номером \(p_n\)).

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

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

Примечание

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

Во втором примере можно, чтобы сначала поменялись местами школьники с номерами \(1\) и \(3\), потом \(3\) и \(2\), потом \(1\) и \(2\). Очередь будет выглядеть как \([3, 1, 2]\), затем \([1, 3, 2]\), затем \([1, 2, 3]\) и наконец \([2, 1, 3]\).

B. Расписание смены

жадные алгоритмы Строки хэши *1600

В известной на всю страну Весенней компьютерной школе скоро начнется новая смена, и в связи с этим весь дружный состав преподавателей и кураторов начал составлять ее расписание. В процессе обсуждения они пришли к расписанию \(s\), которое может быть представлено в виде бинарной строки, в которой на \(i\)-й позиции стоит «1», если ученики в \(i\)-й день пишут контест, и «0», если отдыхают.

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

Сможете ли вы переставить порядок дней в расписании оптимальным образом?

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

Первая строка содержит строку \(s\) (\(1 \leqslant |s| \leqslant 500\,000\)), задающую текущий проект расписания смены.

Вторая строка содержит строку \(t\) (\(1 \leqslant |t| \leqslant 500\,000\)), задающую оптимальное расписание согласно Глебу.

Строки \(s\) и \(t\) состоят только из символов «0» и «1».

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

В единственной строке выведите расписание, количество вхождений \(t\) как подстроки в которое максимально. Выведенное расписание должно состоять только из «0» и «1», причём количество нулей должно совпадать с количеством нулей в \(s\), а количество единиц — с количеством единиц в \(s\).

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

Примечание

В первом примере два вхождения, начинающихся с первой и четвертой позиции.

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

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

E. Выбор вагона

жадные алгоритмы Структуры данных *2700

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

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

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

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

Чтобы выбрать, в каком вагоне ехать, Вася ввёл для каждого вагона величину \(A_i\) (где \(i\) — номер вагона), которая вычисляется следующим образом:

  • В начале поездки \(A_i=0\), это также верно для новых вагонов в момент их добавления.
  • Во время очередного пересчёта Вася выбирает целые положительные числа \(b\) и \(s\) и прибавляет к \(A_i\) величину \(b + (i - 1) \cdot s\).

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

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

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

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

  • «\(1\) \(k\)» (\(1 \le k \le 10^9\)), нужно подцепить к голове поезда \(k\) вагонов.
  • «\(2\) \(k\)» (\(1 \le k \le 10^9\)), нужно подцепить к хвосту поезда \(k\) вагонов.
  • «\(3\) \(b\) \(s\)» (\(1 \le b, s \le 10^9\)), нужно пересчитать удобство всех вагонов поезда.

Гарантируется, что в любой момент времени времени длина поезда не превышает \(10^9\). Также гарантируется, что числа \(A_i\) не станут слишком большими. Формально, гарантируется, что если просуммировать по всем запросам \(3\)-го типа самое большое прибавление (то есть \(b + (n - 1) \cdot s\), где \(n\) — это количество вагонов в момент этого запроса), то такая сумма не будет превосходить \(10^{18}\).

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

После каждого из \(m\) запросов выведите два целых числа: \(j\) и \(A_j\) — номер наиболее близкого к голове поезда вагона, что его значение \(A_j\) минимально, и само значение \(A_j\).

Примечание
  • Изначально поезд состоит из одного вагона \(A_1 = 0\), обозначим для простоты его как \([0]\).
  • После прицепления одного вагона к голове, получается поезд \([0, 0]\).
  • После уточнения с параметрами \(b=1, s=1\), получается поезд \([1, 2]\).
  • После ещё одного уточнения с параметрами \(b=1, s=1\), получается поезд \([2, 4]\).
  • После подцепления одного вагона в конец, получается поезд \([2, 4, 0]\).
  • После ещё одного подцепления одного вагона в конец, получается поезд \([2, 4, 0, 0]\).
  • После уточнения с параметрами \(b=1\), \(s=1\), получается поезд \([3, 6, 3, 4]\).
  • После подцепления одного вагона в конец, получается поезд \([3, 6, 3, 4, 0]\).
  • После уточнения с параметрами \(b=1\), \(s=5\), получается поезд \([4, 12, 14, 20, 21]\).

A. Суши для двоих

Бинарный поиск жадные алгоритмы реализация *900

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

Суши бывают двух видов: либо с тунцом, либо с угрем. Обозначим тип \(i\)-го слева суши как \(t_i\), где \(t_i = 1\) обозначает, что это суши с тунцом, а \(t_i = 2\) означает, что оно с угрем.

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

Найдите длину наибольшего подотрезка из подряд идущих суши, который может заказать Аркадий.

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

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

Вторая строка содержит \(n\) целых чисел \(t_1\), \(t_2\), ..., \(t_n\) (\(t_i = 1\), что означает суши с тунцом, или \(t_i = 2\), что означает суши с угрем), обозначающие типы суши слева направо.

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

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

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

Примечание

В первом примере Аркадий может выбрать подотрезок \([2, 2, 1, 1]\) или подотрезок \([1, 1, 2, 2]\), длина которых \(4\).

Во втором примере невозможно выбрать что-то другое, кроме \([2, 1]\) или \([1, 2]\), длина которых \(2\).

В третьем примере лучший выбор Аркадия — подотрезок \([1, 1, 1, 2, 2, 2]\).

B. Цирк

жадные алгоритмы математика Перебор Строки *1800

Это просто цирк какой-то!

Поликарп — руководитель труппы небольшого цирка. Всего в труппе \(n\) — четное число — артистов. Про \(i\)-го артиста известно, может ли он на манеже выступить как клоун (если да, то \(c_i = 1\), иначе \(c_i = 0\)), и может ли он выступить на манеже как акробат (если да, то \(a_i = 1\), иначе \(a_i = 0\)).

Разделите артистов на два выступления так, чтобы:

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

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

Вторая строка содержит \(n\) цифр \(c_1 c_2 \ldots c_n\), \(i\)-я из которых равна \(1\), если \(i\)-й артист может выступить как клоун, и \(0\) иначе.

Третья строка содержит \(n\) цифр \(a_1 a_2 \ldots a_n\), \(i\)-я из которых равна \(1\), если \(i\)-й артист может выступить как акробат, и \(0\) иначе.

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

Выведите \(\frac{n}{2}\) различных чисел — номера артистов, которые должны войти в первое выступление, в любом порядке.

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

Если решения не существует, выведите одно целое число \(-1\).

Примечание

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

Во втором примере не существует ни одного подходящего разделения.

В третьем примере одно из подходящих разделений следующее: в первом выступлении выступают артисты \(3\) и \(4\). Тогда в первом выступлении количество артистов, которые могут быть клоунами, равно \(2\). Количество артистов во втором выступлении, которые могут быть акробатами, также равно \(2\).

B. Шоколадки

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

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

У вас есть неограниченное количество денег (так что никаие цены не являются ограничивающим фактором) и вы хотите купить как можно больше шоколадок. Однако, если вы купите \(x_i\) шоколадок типа \(i\) (очевидно, \(0 \le x_i \le a_i\)), то для каждого \(1 \le j < i\) должно быть верно хотя бы одно из двух:

  • \(x_j = 0\) (вы купили ноль шоколадок типа \(j\))
  • \(x_j < x_i\) (вы купили меньше шоколадок типа \(j\), чем типа \(i\))

Например, массив \(x = [0, 0, 1, 2, 10]\) удовлетворяет условию выше (в предположении, что все \(a_i \ge x_i\)), а массивы \(x = [0, 1, 0]\), \(x = [5, 5]\) и \(x = [3, 2]\) нет.

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

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

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

Следующая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — количество шоколадок каждого вида.

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

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

Примечание

В первом примере оптимально купить: \(0 + 0 + 1 + 3 + 6\) шоколадок.

Во втором примере оптимально купить: \(1 + 2 + 3 + 4 + 10\) шоколадок.

В третьем примере оптимально купить: \(0 + 0 + 0 + 1\) шоколадок.

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\).

D. Цветные ботинки

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

Заданы \(n\) левых и \(n\) правых ботинок. Каждый ботинок имеет цвет, который задан строчной буквой латинского алфавита или знаком вопроса ('?'). Таким образом, вам заданы две строки \(l\) и \(r\), каждая имеет длину \(n\), где буква \(l_i\) обозначает цвет \(i\)-го левого ботинка, а буква \(r_i\) обозначает цвет \(i\)-го правого ботинка.

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

Например, следующие пары цветов совместимы: ('f', 'f'), ('?', 'z'), ('a', '?') и ('?', '?'). Следующие пары цветов не совместимы: ('f', 'g') и ('a', 'z').

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

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

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

В первой строке записано целое число \(n\) (\(1 \le n \le 150000\)) — количество ботинок на каждую ногу (то есть количество левых и правых ботинок).

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

Третья строка содержит \(r\), её длина равна \(n\). Она содержит лишь строчные буквы латинского алфавита или знаки вопроса, \(i\)-й символ строки соответствует цвету \(i\)-го правого ботинка.

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

Выведите \(k\) — максимальное количество пар ботинок вида «левый и правый ботинок» совместимых цветов, которые можно собрать из заданного набора.

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

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

F1. Блоки равной суммы (простая редакция)

жадные алгоритмы *1900

Эта задача дана в двух редакциях, которые различаются исключительно ограничением на число \(n\).

Дан массив целых чисел \(a[1], a[2], \dots, a[n].\) Назовём его блоком (подмассивом) последовательность подряд идущих элементов \(a[l], a[l+1], \dots, a[r]\) (\(1 \le l \le r \le n\)). Таким образом, блок определяется парой индексов его границ \((l, r)\).

Найдите такой набор блоков \((l_1, r_1), (l_2, r_2), \dots, (l_k, r_k)\), что:

  • Они не пересекаются (то есть нет пары пересекающихся блоков). Формально, для любой пары блоков \((l_i, r_i)\) и \((l_j, r_j\)), где \(i \neq j\), либо \(r_i < l_j\) либо \(r_j < l_i\).
  • Блоки имеют одинаковую сумму элементов. Формально, \(\)a[l_1]+a[l_1+1]+\dots+a[r_1]=a[l_2]+a[l_2+1]+\dots+a[r_2]=\(\) \(\)\dots =\(\) \(\)a[l_k]+a[l_k+1]+\dots+a[r_k].\(\)
  • Количество блоков в наборе максимально возможное. Формально, не существует такого набора блоков \((l_1', r_1'), (l_2', r_2'), \dots, (l_{k'}', r_{k'}')\), который удовлетворяет паре условий выше и \(k' > k\).
Картинка соответствует первому примеру. Синие прямоугольники иллюстрируют блоки.

Напишите программу, которая выводит искомый набор блоков.

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

Первая строка содержит целое \(n\) (\(1 \le n \le 50\)) — длину заданного массива. Вторая строка содержит последовательность элементов массива — целые числа \(a[1], a[2], \dots, a[n]\) (\(-10^5 \le a_i \le 10^5\)).

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

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

F2. Блоки равной суммы (усложненная редакция)

жадные алгоритмы Структуры данных *1900

Эта задача дана в двух редакциях, которые различаются исключительно ограничением на число \(n\).

Дан массив целых чисел \(a[1], a[2], \dots, a[n].\) Назовём его блоком (подмассивом) последовательность подряд идущих элементов \(a[l], a[l+1], \dots, a[r]\) (\(1 \le l \le r \le n\)). Таким образом, блок определяется парой индексов его границ \((l, r)\).

Найдите такой набор блоков \((l_1, r_1), (l_2, r_2), \dots, (l_k, r_k)\), что:

  • Они не пересекаются (то есть нет пары пересекающихся блоков). Формально, для любой пары блоков \((l_i, r_i)\) и \((l_j, r_j\)), где \(i \neq j\), либо \(r_i < l_j\) либо \(r_j < l_i\).
  • Блоки имеют одинаковую сумму элементов. Формально, \(\)a[l_1]+a[l_1+1]+\dots+a[r_1]=a[l_2]+a[l_2+1]+\dots+a[r_2]=\(\) \(\)\dots =\(\) \(\)a[l_k]+a[l_k+1]+\dots+a[r_k].\(\)
  • Количество блоков в наборе максимально возможное. Формально, не существует такого набора блоков \((l_1', r_1'), (l_2', r_2'), \dots, (l_{k'}', r_{k'}')\), который удовлетворяет паре условий выше и \(k' > k\).
Картинка соответствует первому примеру. Синие прямоугольники иллюстрируют блоки.

Напишите программу, которая выводит искомый набор блоков.

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

Первая строка содержит целое \(n\) (\(1 \le n \le 1500\)) — длину заданного массива. Вторая строка содержит последовательность элементов массива — целые числа \(a[1], a[2], \dots, a[n]\) (\(-10^5 \le a_i \le 10^5\)).

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

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

G. Приватизация дорог в Древляндии

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

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

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

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

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

Картинка иллюстрирует первый пример (\(n=6, k=2\)). Ответ на этот тест содержит \(r=2\) компании. Числа на рёбрах соответствуют номерам дорог. Цвета рёбер соответствуют компаниям: красный цвет обозначает первую компанию, синий цвет обозначает вторую компанию. Серая вершина (с номером \(3\)) соответвует городу, который не является хорошим. Количество таких вершин (в данном случае, только одна) не превосходит \(k=2\). Невозможно получить не более \(k=2\) таких вершин, если ответ содержит только одну компанию.
Входные данные

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

Следующие \(n-1\) строк содержат описания дорог, по одному описанию в строке. Каждая строка содержит пару целых чисел \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\)), где \(x_i\), \(y_i\) — номера городов, которые соединены \(i\)-й дорогой.

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

В первую строку выведите искомое число \(r\) (\(1 \le r \le n - 1\)). Во вторую строку выведите \(n-1\) целое число \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le r\)), где \(c_i\) — это номер компании, которая должна владеть \(i\)-й дорогой. Если ответов несколько, то выведите любой из них.

B. Удаления с меняющейся четностью

жадные алгоритмы реализация сортировки *900

У Поликарпа есть массив \(a\), состоящий из \(n\) целых чисел.

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

Формально:

  • Если сейчас первый ход, он выбирает элемент и удаляет его;
  • Если это второй или любой следующий ход:
    • если последний удаленный элемент был нечетным, Поликарп выбирает любой четный элемент и удаляет его;
    • если последний удаленный элемент был четным, Поликарп выбирает любой нечетный элемент и удаляет его.
  • Если после какого-то хода Поликарп не может сделать ход, игра заканчивается.

Цель Поликарпа — минимизировать сумму неудаленных элементов массива после конца игры. Если Поликарп может удалить массив целиком, тогда сумма неудаленных элементов равна нулю.

Помогите Поликарпу найти это значение.

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

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

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^6\)), где \(a_i\)\(i\)-й элемент \(a\).

Выходные данные

Выведите одно целое число — минимально возможную сумму неудаленных элементов массива после конца игры.

D. Приравняй их все

жадные алгоритмы Конструктив *1400

Задан массив \(a\), состоящий из \(n\) целых чисел. Вы можете выполнять следующие операции любое количество раз (возможно, нулевое):

  1. Выбрать пару индексов \((i, j)\) таких, что \(|i-j|=1\) (индексы \(i\) и \(j\) являются соседними) и присвоить \(a_i := a_i + |a_i - a_j|\);
  2. Выбрать пару индексов \((i, j)\) таких, что \(|i-j|=1\) (индексы \(i\) и \(j\) являются соседними) и присвоить \(a_i := a_i - |a_i - a_j|\).

Значение \(|x|\) означает абсолютную величину \(x\). Например, \(|4| = 4\), \(|-3| = 3\).

Ваша задача — найти минимальное количество операций, необходимых для того, чтобы получить массив, состоящий из одинаковых чисел и вывести порядок операций, чтобы это сделать.

Гарантируется, что вы всегда сможете получить массив, состоящий из одинаковых чисел, при помощи таких операций.

Заметьте, что после каждой операции каждый элемент текущего массива не должен превосходить \(10^{18}\) по абсолютной величине.

Входные данные

Первая строка входных данных содержит одно целое число \(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\).

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальное количество операций, необходимое для того, чтобы получить массив, состоящий из одинаковых чисел.

В следующих \(k\) строках выведите сами операции. \(p\)-я операция должна быть выведена в виде тройки целых чисел \((t_p, i_p, j_p)\), где \(t_p\) равно либо \(1\), либо \(2\) (\(1\) означает, что Вы выполняете операцию первого типа, а \(2\) означает, что Вы выполняете операцию второго типа), а \(i_p\) и \(j_p\) — индексы соседних элементов массива такие, что \(1 \le i_p, j_p \le n\), \(|i_p - j_p| = 1\). Смотрите в примеры для лучшего понимания.

Заметьте, что после каждой операции каждый элемент текущего массива не должен превосходить \(10^{18}\) по абсолютной величине.

Если существует несколько возможных ответов, выведите любой.

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\) в ином случае. Обратите внимание, что пустая последовательность и последовательность, состоящая из одного числа, тоже являются как строго возрастающими, так и строго убывающими последовательностями.

A. Another One Bites The Dust

жадные алгоритмы *800

Назовём строку хорошей, если и только если она состоит из двух типов букв — «a» и «b», и любые две соседние буквы различны. Например «baba» и «aba» — хорошие строки, а «abb» — плохая строка.

У вас есть \(a\) строк «a», \(b\) строк «b» и \(c\) строк «ab». Вы можете выбрать произвольное подмножество этих строк и сконкатенировать их в произвольном порядке.

Чему равна длина наибольшей хорошей строки, которую вы можете получить?

Входные данные

Первая строка содержит три целых положительных числа \(a\), \(b\), \(c\) (\(1 \leq a, b, c \leq 10^9\)) — количество строк «a», «b» и «ab» соответственно.

Выходные данные

Выведите единственное число — максимальную возможную длину хорошей строки.

Примечание

В первом примере оптимальная строка — «baba».

Во втором примере оптимальная строка — «abababa».

В третьем примере оптимальная строка — «bababababab».

В четвёртом примере оптимальная строка — «ababab».

D. Dirty Deeds Done Dirt Cheap

жадные алгоритмы сортировки *1800

Вам дано \(n\) пар целых чисел \((a_1, b_1), (a_2, b_2), \ldots, (a_n, b_n)\). Все элементы в парах различны и лежат в диапазоне от \(1\) до \(2 \cdot n\) включительно.

Назовём последовательность чисел \(x_1, x_2, \ldots, x_{2k}\) хорошей, если выполняется одно из двух:

  • \(x_1 < x_2 > x_3 < \ldots < x_{2k-2} > x_{2k-1} < x_{2k}\), или
  • \(x_1 > x_2 < x_3 > \ldots > x_{2k-2} < x_{2k-1} > x_{2k}\).

Вам нужно выбрать какое-то подмножество различных индексов \(i_1, i_2, \ldots, i_t\) и их порядок так, что если записать все числа из соответствующих пар в одну последовательность (эта последовательность будет \(a_{i_1}, b_{i_1}, a_{i_2}, b_{i_2}, \ldots, a_{i_t}, b_{i_t}\)), то эта последовательность будет хорошей.

Какое наибольшее по размеру подмножество пар можно выбрать? Вам также нужно построить соответствующую последовательность индексов \(i_1, i_2, \ldots, i_t\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — количество пар.

В следующих \(n\) строках вводятся два числа — \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 2 \cdot n\)) — элементы очередной пары.

Гарантируется, что все числа в парах различны. Иначе говоря, каждое число от \(1\) до \(2 \cdot n\) упомянуто ровно один раз.

Выходные данные

В первой строке выведите целое число \(t\) — искомое число пар.

В следующей строке выведите \(t\) различных целых чисел \(i_1, i_2, \ldots, i_t\) — индексы пар в том порядке, в котором получается хорошая последовательность.

Примечание

Итоговая последовательность в первом тесте из условия: \(1 < 7 > 3 < 5 > 2 < 10\).

Итоговая последовательность во втором тесте из условия: \(6 > 1 < 3 > 2 < 5 > 4\).

E. Earth Wind and Fire

жадные алгоритмы Конструктив математика сортировки *2300

На числовой прямой расположены \(n\) камней. Изначально \(i\)-й камень находится в точке с координатой \(s_i\). В одной точке может находиться более одного камня одновременно.

Вы можете выполнить ноль или более операций следующего вида:

  • взять два камня с индексами \(i\) и \(j\) такими, что \(s_i \leq s_j\), выбрать целое число \(d\) (\(0 \leq 2 \cdot d \leq s_j - s_i\)) и заменить координату \(s_i\) на \((s_i + d)\), а координату \(s_j\) на \((s_j - d)\). Другими словами, подвинуть камни друг к другу.

Вы хотите подвинуть камни так, чтобы они находились в позициях \(t_1, t_2, \ldots, t_n\). Порядок камней не важен — требуется лишь, чтобы мультимножество координат камней в конце совпадало с мультимножеством, состоящим из \(t_1, t_2, \ldots, t_n\).

Выясните, возможно ли сдвинуть камни требуемым образом, и если да, то найдите способ это сделать. Минимизировать число операций не нужно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) – количество камней.

Вторая строка содержит целые числа \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 10^9\)) — изначальные позиции камней.

Третья строка содержит целые числа \(t_1, t_2, \ldots, t_n\) (\(1 \le t_i \le 10^9\)) — требуемые позиции камней.

Выходные данные

В случае, если невозможно подвинуть камни требуемым образом, выведите «NO».

Иначе на первой строке выведите «YES», на второй строке выведите количество операций \(m\) (\(0 \le m \le 5 \cdot n\)), которое нужно сделать. Вам не нужно минимизировать число операций.

Затем выведите \(m\) строк, каждая из которых содержит три целых числа \(i, j, d\) (\(1 \le i, j \le n\), \(s_i \le s_j\), \(0 \leq 2 \cdot d \leq s_j - s_i\)), обозначающие операцию, которую нужно сделать.

Можно показать, что если какой-то ответ существует, то существует и ответ, использующий не более чем \(5 \cdot n\) операций.

Примечание

Рассмотрим первый пример.

  • После первой операции позиции камней равны \([2, 2, 6, 5, 9]\).
  • После второй операции позиции камней равны \([2, 3, 5, 5, 9]\).
  • После третьей операции позиции камней равны \([2, 5, 5, 5, 7]\).
  • После последней операции позиции камней равны \([4, 5, 5, 5, 5]\).

A. Простые префиксные суммы

жадные алгоритмы Конструктив математика теория чисел *1200

Мы раздаем огромные красивые мешки, содержащие плитки с числами!

Мешок, который мы хотим вам подарить, содержит \(n\) плиток. На каждой из них записано одно число — \(1\) или \(2\).

Тем не менее, есть одно условие, которое вы должны выполнить, чтобы получить приз.

Вам нужно выложить все плитки из сумки в ряд в любом порядке, в котором вы пожелаете. Затем, мы посчитаем суммы на всех префиксах последовательности, а затем посчитаем, сколько из этих сумм являются простыми числами. Если вы хотите получить приз, вы должны максимизировать количество простых чисел, которые у вас получатся.

Сможете ли вы выиграть приз? Спешите, мешки ждут!

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 200\,000\)) — количество плиток с числами в сумке.

В следующей строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_i \in \{1, 2\}\)) — значения, записанные на плитках.

Выходные данные

Выведите перестановку \(b_1, b_2, \dots, b_n\) данной последовательности \((a_1, a_2, \dots, a_n)\), максимизирующую количество префиксных сумм, которые являются простыми числами.

Если есть несколько оптимальных перестановок, вы можете вывести любую.

Примечание

В первом примере оптимально выложить плитки так, чтобы префиксные суммы были равны \(1, \mathbf{\color{blue}{2}}, \mathbf{\color{blue}{3}}, \mathbf{\color{blue}{5}}, \mathbf{\color{blue}{7}}\) (четыре простых числа).

Во втором примере оптимально выложить плитки так, чтобы префиксные суммы были равны \(1, \mathbf{\color{blue}{2}}, \mathbf{\color{blue}{3}}, \mathbf{\color{blue}{5}}, 6, \mathbf{\color{blue}{7}}, 8, 10, \mathbf{\color{blue}{11}}\) (пять простых).

Простые числа отмечены жирно и синим цветом. В каждом из этих случаев количество полученных простых является максимально возможным.

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\).

B. Газонокосилка

жадные алгоритмы сортировки *1500

У вас есть сад, в котором растет трава и сорняки. Ваш сад представляет собой клетчатое поле размером n × m. Строки пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Каждая клетка обозначается парой (r, c), где r — номер строки, в которой расположены клетка, а c — номер столбца. Каждая клетка содержит либо траву, либо сорняк. Например, сад размера 4 × 5 может выглядеть следующим образом (пустые клетки обозначают траву):

У вас есть газонокосилка, и вы хотите скосить все сорняки. Изначально вы и ваша газонокосилка находитесь в левом верхнем углу сада, то есть в клетке (1, 1). В каждый момент времени вы смотрите либо направо, либо налево. Изначально вы смотрите направо.

За один ход вы можете сделать одно из двух:

1) Пойти на одну клетку в ту сторону, куда вы смотрите.

  • если вы смотрите направо: пойти из клетки (r, c) в клетку (r, c + 1)

  • если вы смотрите налево: пойти из клетки (r, c) в клетку (r, c - 1)

2) Пойти на одну клетку вниз (то есть из клетки (r, c) в клетку (r + 1, c)) и развернуться в другую сторону.

  • если вы смотрели направо, вы будете смотреть налево

  • если вы смотрели налево, вы будете смотреть направо

Вы не можете выходить за пределы поля. Чтобы скосить сорняк, вы должны оказаться в одной клетке с ним (при этом не имеет значения, в какую сторону вы смотрите). На это действие ход не тратится.

Какое наименьшее количество ходов потребуется, чтобы скосить все сорняки?

Входные данные

В первой строке содержится два целых числа n и m (1 ≤ n, m ≤ 150) — количество строк и столбцов соответственно. Далее следует n строк по m символов в каждой — описание сада. «G» обозначает, что данная клетка содержит траву. «W» обозначает, что данная клетка содержит сорняк.

Гарантируется, что верхняя левая клетка поля содержит траву.

Выходные данные

Выведите одно целое число — минимальное количество ходов, которое требуется, чтобы скосить все сорняки.

Примечание

В первом примере начальное состояние поля выглядит следующим образом:

Одно из возможных решений:

A. Арбитраж акций

жадные алгоритмы реализация *800

Добро пожаловать на фондовую биржу Codeforces! Сейчас мы довольно ограничены в ресурсах, поэтому в настоящее время разрешаем торговать только акциями компании Codeforces Ltd. Мы надеемся, что вы все равно сможете получать прибыль с рынка!

Утром у вас есть \(n\) возможностей купить акции, \(i\)-я из них позволяет купить столько акций, сколько вы захотите, по цене \(s_i\) бурлей за штуку.

Вечером у вас есть \(m\) возможностей продать акции, \(i\)-я из них позволяет продать столько акций, сколько вы хотите, каждую по цене \(b_i\) бурлей за штуку. Вы не можете продать больше акций, чем у вас есть.

Сейчас утро, у вас есть \(r\) бурлей и нет акций.

Какое максимальное количество бурлей у вас может быть после вечера?

Входные данные

В первой строке записаны три целых числа \(n, m, r\) (\(1 \leq n \leq 30\), \(1 \leq m \leq 30\), \(1 \leq r \leq 1000\)) — количество возможностей покупки, количество возможностей продажи и количество бурлей, которое у вас сейчас есть, соответственно.

В следующей строке записаны \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(1 \leq s_i \leq 1000\)), где \(s_i\) обозначает, что утром можно купить акции за цену \(s_i\) бурлей.

В следующей строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \leq b_i \leq 1000\)), где \(b_i\) обозначает, что вечером можно продать акции по цене \(b_i\) бурлей.

Выходные данные

Выведите одное целое число — максимальное количество бурлей, которое вы можете иметь после вечера.

Примечание

В первом примере, утром у вас есть \(11\) бурлей.

Оптимально купить \(5\) акций по цене \(2\) бурля у второго продавца утром, а затем продать их все третьему продавцу по цене \(5\) бурлей вечером. Таким образом, после вечера у вас будет \(26\) бурлей.

Во втором примере оптимально не покупать и не продавать акции.

B. Испытание замощением

жадные алгоритмы реализация *900

Однажды Алиса делала уборку в своем подвале и заметила кое-что любопытное: бесконечное множество одинаковых деревянных фигур! Каждая фигура была сделана из пяти квадратных плиток, одна из была центральной, а остальные четыре примыкали к ней:

Около кусочков лежала большая квадратная доска. Доска разделена на \(n^2\) клеток, расположенных в \(n\) строках и \(n\) столбцах. Некоторые клетки уже заняты плитками, прибитыми к клеткам. Остальные клетки свободны.

Алиса подумала, сможет ли она заполнить доску полностью, используя найденные фигуры? Конечно, каждая фигура должна покрывать ровно пять ячеек доски, никакие две фигуры не должны перекрываться и ни одна фигура не должна вылезать за пределы доски. Однако доска была слишком большой, и Алиса не смогла покрыть ее вручную. Можете ли вы помочь ей определить, возможно ли полностью покрыть доску фигурами?

Входные данные

В первой строке записано одно целое число \(n\) (\(3 \leq n \leq 50\)) — размер доски. В следующих \(n\) строках записано описание доски. В \(i\)-й строке (\(1 \leq i \leq n\)) записана строка длины \(n\). Её \(j\)-й символ (\(1 \leq j \leq n\)) равен «.» если клетка в \(i\)-й строке и \(j\)-м столбце свободна, и равен «#» если она занята.

Гарантируется, что доска содержит хотя бы одну свободную ячейку.

Выходные данные

Выведите «YES» если доска может быть полностью покрыта фигурами Алисы и «NO» иначе. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

Следующие иллюстрации описывают доски из примера и их замощения, если они существуют:

D. Стас и очередь в буфет

жадные алгоритмы математика сортировки *1600

На перемене в буфете научного лицея Королевства Кремляндия образовалась очередь из \(n\) лицеистов, пронумерованных от \(1\) до \(n\). Изначально каждый ученик \(i\) стоит на позиции \(i\). Каждый ученик \(i\) характеризуется двумя числами — \(a_i\) и \(b_i\). Недовольство лицеиста \(i\) равняется произведению \(a_i\) на количество людей, стоящих слева от его позиции, прибавить произведение \(b_i\) на количество людей, стоящих справа от его позиции. Формально, недовольство ученика \(i\), который стоит на позиции \(j\), равняется \(a_i \cdot (j-1) + b_i \cdot (n-j)\).

Директор поручил Стасу задание: переставить людей в очереди так, чтобы минимизировать суммарное недовольство.

Хоть Стас и умеет решать подобные задачи, но эта ему не далась. Он обратился за помощью к вам.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество человек в очереди.

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq 10^8\)) — характеристика ученика \(i\), изначально стоящего на позиции \(i\).

Выходные данные

Выведите одно целое число — минимальное суммарное недовольство которого можно достичь, переставляя людей в очереди.

Примечание

В первом примере оптимально поставить людей в таком порядке: (\(3, 1, 2\)). Первый человек стоит на позиции \(2\), тогда его недовольство будет равно \(4 \cdot 1+2 \cdot 1=6\). Второй человек стоит на позиции \(3\), его недовольство будет равно \(2 \cdot 2+3 \cdot 0=4\). Третий человек стоит на позиции \(1\), его недовольство будет равно \(6 \cdot 0+1 \cdot 2=2\). Суммарное недовольство равно \(12\).

Во втором примере необходимо поставить людей в таком порядке: (\(3, 2, 4, 1\)). Суммарное недовольство равно \(25\).

A. Неко и виноград

жадные алгоритмы математика реализация *800

Однажды Неко нашёл \(n\) сундуков с сокровищами и \(m\) ключей. На \(i\)-м сундуке было написано целое число \(a_i\), а на \(j\)-м ключе написано целое число \(b_j\). Неко знает, что эти сундуки содержат волшебный виноград удивительной магической силы, так что он хочет открыть как можно больше сундуков.

Как оказалось, \(j\)-й ключ может открыть \(i\)-й сундук если (и только если) сумма чисел на ключе и на сундуке является нечётным числом. Иначе говоря, \(a_i + b_j \equiv 1 \pmod{2}\). Один ключ может открыть не более одного сундука, а один сундук нельзя открыть более одного раза.

Выясните максимальное количество сундуков, которое можно открыть.

Входные данные

Первая строка содержит целые числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — количество сундуков и количество ключей.

Вторая строка содержит \(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\)) — числа записанные на ключах.

Выходные данные

Выведите одно число — максимальное количество сундуков, которое вы сможете открыть.

Примечание

В первом примере один из способов открыть \(3\) сундука выглядит следующим образом:

  • Использовать первый ключ чтобы открыть пятый сундук,
  • Использовать третий ключ, чтобы открыть второй сундук,
  • Использовать четвёртый ключ, чтобы открыть первый сундук.

Во втором примере вы можете использовать единственный ключ, чтобы открыть один произвольный сундук (обратите внимание что один ключ нельзя использовать дважды).

В третьем примере ни один из ключей не поможет открыть сундук.

D. Неко и пранк

Деревья дп жадные алгоритмы *2100

Неко играл в свои игрушки на заднем дворе дома Аки. Аки решил его разыграть и подбросил в его игрушки немного кошачей мяты. К сожалению он немного переборщил и случайно подбросил целый пакет мяты...

Неко понадобилось больше дня чтобы вернутся в нормальное состояние, после чего он рассказал, что увидел за это время много странных вещей, например он видел бор всех правильных скобочных последовательностей длины \(2n\).

Правильные скобочные последовательности определяются следующим образом:

  • Пустая последовательность является правильной скобочной последовательностью.
  • Если \(s\) является правильной скобочной последовательностью, то \((\,s\,)\) тоже является правильной скобочной последовательностью,
  • Если \(s\) и \(t\) образуют правильную скобочную последовательность, то \(st\) тоже является правильной скобочной последовательностью.

Например, строки «(())» и «()()» образуют правильную скобочную последовательность, а строки «)(» и «((» нет.

Аки затем придумал интересную задачку. Он хочет узнать чему равен размер максимального паросочетания (то есть множества рёбер с непересекающимися концами) в этом дереве? Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Выходные данные

Выведите одно число — размер наибольшего паросочетания в дереве. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Примечание

Картинки ниже иллюстрируют бор в первом и втором примере (для наглядности круглые скобки заменены на угловые). Максимальное паросочетание обозначено синим.

 

B. Сервал и игрушечные кубики

жадные алгоритмы Конструктив *1200

К счастью Сервалу повезло попасть на нужный автобус, и он успел приехать в детский сад вовремя. В детском саду ему сразу же понравились игрушечные кубики.

У него есть интересное хобби — придумывать разные задачки и давать их решать другим. В этот раз с помощью кубиков \(1 \times 1 \times 1\) он построил трехмерную фигуру. Эту фигуру можно описать матрицей \(n \times m\), что на клетке \((i,j)\) стоят друг на друге \(h_{i,j}\) кубиков.

Сервал не расскажет вам \(h_{i,j}\), он даст вам только вид спереди, вид слева, и вид сверху этой фигуры, и попросит вас восстановить фигуру. Вид спереди описывается \(m\) столбцами, и высота \(i\)-го из них равна максимуму среди \(h_{1,i},h_{2,i},\dots,h_{n,i}\). Аналогично описывается и вид слева, он задан \(n\) столбцами. Вид сверху описывается матрицей \(n \times m\) \(t_{i,j}\), где \(t_{i,j}\) равно \(0\) или \(1\). \(t_{i,j}\), равное \(1\), означает, что \(h_{i,j}>0\), иначе \(h_{i,j}=0\).

К сожалению, Сервалу очень одиноко, потому что все устали от его прошлых неразрешимых задач. Они отказываются решать эту даже несмотря на то, что в этот раз он обещает, что найдется хотя бы одна фигура, подходящая под все данные виды. Как его лучший друг, может быть, вы ее решите?

Входные данные

В первой строке записаны три положительных целых числа, разделенных пробелами \(n, m, h\) (\(1\leq n, m, h \leq 100\)) — длина, ширина, и высота.

Во второй строке записаны \(m\) неотрицательных целых чисел, разделенных пробелами, \(a_1,a_2,\dots,a_m\), \(a_i\) равно высоте \(i\)-го слева столбца в виде спереди (\(0\leq a_i \leq h\)).

В третьей строке записаны \(n\) неотрицательных целых чисел, разделенных пробелами, \(b_1,b_2,\dots,b_n\), \(b_j\) равно высоте \(j\)-го слева столбца в виде слева (\(0\leq b_j \leq h\)).

В каждой из следующих \(n\) строк записано по \(m\) целых чисел, каждое из которых равно \(0\) или \(1\), описывающих матрицу. Если \(h_{i, j}>0\), то \(j\)-е число в \(i\)-й строке равно \(1\), и \(0\) иначе.

Гарантируется, что существует хотя бы одна фигура, удовлетворяющая всем трем видам.

Выходные данные

Выведите \(n\) строк, по \(m\) целых чисел в каждой, \(j\)-е число в \(i\)-й строке должно быть равно высоте фигуры в соотвествующей позиции. Если существует несколько подходящих фигур, вы можете вывести любую.

Примечание

На приведенной выше иллюстрации изображена фигура из первого примера.

На первой из двух этих иллюстраций изображена фигура из второго примера, а на второй изображены три ее вида.

C. Сервал и скобочная последовательность

жадные алгоритмы Строки *1700

Сервал попрощался с детским садом Джапари и начал свою школьную жизнь в школе Джапари.

На его любимом уроке математики учитель рассказал ему следующие интересные определения.

Скобочной последовательностью называется строка, состоящая только из символов «(», «)».

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+». Например, скобочные последовательности «()()», «(())» — правильные (полученные выражения: «(1+1)+(1+1)», «((1+1)+1)»), а «)(» и «)» — нет. Пустая строка является правильной скобочной последовательностью по определению.

Обозначим за \(|s|\) длину строки \(s\). Собственным префиксом \(s[1\dots l]\) \((1\leq l< |s|)\) строки \(s = s_1s_2\dots s_{|s|}\) назовем строку \(s_1s_2\dots s_l\). Обратите внимание, что пустая строка и вся строка не являются собственными префиксами по определению.

Изучив эти определения, он придумал новую задачу. Он выписал строку \(s\), состоящую только из символов «(», «)», «?». Теперь он хочет заменить каждый из «?» в \(s\) независимо на один из символов «(» или «)», чтобы все собственные префиксы строки не являлись правильной скобочной последовательностью, а сама строка являлась.

В конце концов Сервал всего лишь ученик начальной школы, поэтому эта задача для него слишком трудная. Как его лучший друг, может быть, вы поможете ему заменить знаки вопроса? Если существует несколько решений, вы можете найти любое.

Входные данные

В первой строке записано одно целое число \(|s|\) (\(1\leq |s|\leq 3 \cdot 10^5\)) — длина строки.

Вторая строка содержит строку \(s\), которая содержит только символы «(», «)», «?».

Выходные данные

Выведите одну строку, содержащую ответ на задачу.

Если возможных решений несколько, вы можете вывести любое.

Если решения не существует, выведите единственную строку, содержащую «:(» (без кавычек).

Примечание

Можно доказать, что не существует ответа на второй тест из примера, поэтому требуется вывести «:(».

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\).

D. Идущий робот

жадные алгоритмы *1500

Робот стоит в точке \(X=0\) координатной оси \(Ox\). Он хочет дойти до точки \(X=n\). Вы контролируете этого робота и контролируете то, как он ходит. У робота есть батарея и аккумулятор, который можно подзаряжать от солнечного света.

\(i\)-й отрезок пути (от \(X=i-1\) до \(X=i\)) может быть либо освещен солнечным светом, либо нет. Массив \(s\) обозначает, какие отрезки освещены солнечным светом: если отрезок \(i\) освещен, тогда \(s_i = 1\), иначе \(s_i = 0\).

У робота есть одна батарея емкости \(b\) и один аккумулятор емкости \(a\). Вы должны выбрать для каждого отрезка, какой тип хранилища энергии робот будет использовать для того, чтобы добраться до следующей точки (это может быть либо батарея, либо аккумулятор). Если робот идет, используя батарею, то текущий заряд батареи уменьшается на единицу (робот не может использовать батарею, если ее заряд равен нулю). И если же робот идет, используя аккумулятор, то текущий заряд аккумулятора уменьшается на единицу (и робот не может использовать аккумулятор, если его заряд равен нулю).

Если текущий отрезок освещен солнечным светом и робот проходит его, используя батарею, то заряд аккумулятора увеличивается на единицу (конечно, он не может превысить максимальную емкость аккумулятора).

Если для движения используется аккумулятор, его заряд уменьшается на 1 (вне зависимости от того, освещен ли отрезок или нет).

Вы понимаете, что не всегда возможно дойти до \(X=n\). Вы хотите, чтобы Ваш робот прошел так далеко, как только возможно. Найдите максимальное количество отрезков пути, которое робот может пройти, если вы будете контролировать его оптимально.

Входные данные

Первая строка входных данных содержит три целых числа \(n, b, a\) (\(1 \le n, b, a \le 2 \cdot 10^5\)) — точку назначения робота, заряд батареи и заряд аккумулятора.

Вторая строка входных данных содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(0 \le s_i \le 1\)), где \(s_i\) равно \(1\), если \(i\)-й отрезок пути освещен солнечным светом, и \(0\) иначе.

Выходные данные

Выведите одно целое число — максимальное количество отрезков, которое робот сможет пройти, если вы будете контролировать его оптимально.

Примечание

В первом тестовом примере робот может пройти первый отрезок, используя аккумулятор, и заряды станут равны \(b=2\) и \(a=0\). Второй отрезок робот может пройти, используя батарею, и заряды станут равны \(b=1\) и \(a=1\). Третий отрезок робот может пройти, используя аккумулятор, и заряды станут равны \(b=1\) и \(a=0\). Четвертый отрезок робот может пройти, используя батарею, и заряды станут равны \(b=0\) и \(a=1\). И пятый отрезок робот может пройти, используя батарею.

Во втором тестовом примере робот может пройти максимальное количество отрезков, используя батарею два раза и аккумулятор один раз в любом порядке.

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\).

G. Минимально возможный LCM

жадные алгоритмы математика Перебор теория чисел *2200

Задан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Ваша задача — найти такую пару индексов \(i, j\) (\(1 \le i < j \le n\)), что \(lcm(a_i, a_j)\) минимально возможно.

\(lcm(x, y)\) — это наименьшее общее кратное \(x\) и \(y\) (минимально возможное положительное число такое, что и \(x\) и \(y\) являются делителями этого числа).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)), где \(a_i\) — это \(i\)-й элемент массива \(a\).

Выходные данные

Выведите два целых числа \(i\) и \(j\) (\(1 \le i < j \le n\)) такие, что значение \(lcm(a_i, a_j)\) минимально среди всех корректных пар \(i, j\). Если существует несколько возможных ответов, выведите любой.

B. Игра с телефонным номером

жадные алгоритмы игры реализация *1200

Телефонный номер — это последовательность из ровно \(11\) цифр, в которой первая цифра это 8.

Вася и Петя играют в игру. Изначально у них есть строка \(s\) длины \(n\) (\(n\) нечетно), состоящая из десятичных цифр. Игроки ходят по очереди, первым ходит Вася. Во время своего хода игрок должен удалить символ из строки по своему выбору. Например, строка 1121 после хода игрока может превратиться в строки 112, 111 или 121. Игра заканчивается, когда длина строки \(s\) становится равной 11. Если получившаяся строка является телефонным номером, то выиграл Вася, иначе — Петя.

Вам нужно определить, есть ли у Васи выигрышная стратегия (т. е. может ли победить Вася вне зависимости от того, как будет действовать Петя).

Входные данные

Первая строка содержит число \(n\) (\(13 \le n < 10^5\), \(n\) нечетно) — длина строки \(s\).

Вторая строка содержит саму строку \(s\) (\(|s| = n\)), состоящую только из десятичных цифр.

Выходные данные

Если у Васи есть стратегия, гарантирующая ему победу, выведите YES.

Иначе выведите NO.

Примечание

В первом тестовом примере Васе нужно удалить второй символ строки. В этом случае Петя не может удалить символ из оставшейся строки 880011223344 так, чтобы она стала не телефонным номером.

Во втором примере после хода Васи Пете нужно удалить единственную цифру 8. Таким образом, результирующая строка не сможет стать телефонным номером, поскольку в ней вообще нет цифры 8.

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.

B. Противные пары

жадные алгоритмы поиск в глубину и подобное реализация сортировки Строки *1800

Задана строка, состоящая из строчных латинских букв.

Пара соседних букв в строке считается противной, если данные буквы так же соседние в алфавите. Например, строка «abaca» содержит противные пары на позициях \((1, 2)\) — «'ab» и \((2, 3)\) — «ba». Буквы 'a' и 'z' не считаются соседними в алфавите.

Можете ли вы так переставить местами буквы в данном строке, чтобы в ней не было противных пар? Выбирая новый порядок, помните, что нельзя добавлять в строку новые буквы или удалять уже имеющиеся. Также можно сохранить начальный порядок.

Если существует несколько ответов, выведите любой из них.

Также требуется ответить на \(T\) независимых запросов.

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \le T \le 100\)) — количество запросов.

В каждой из следующих \(T\) строк записана строка \(s\) \((1 \le |s| \le 100)\) — очередной запрос. Гарантируется, что она содержит только строчные латинские буквы.

Обратите внимание, во взломах можно использовать только \(T = 1\).

Выходные данные

Выведите \(T\) строк. В \(i\)-й строке должен быть записан ответ на \(i\)-й запрос.

Если ответ на \(i\)-й запрос существует, то выведите строку с новым порядком букв такую, что она не содержит противных пар. Выбирая новый порядок, помните, что нельзя добавлять в строку новые буквы или удалять уже имеющиеся. Также можно сохранить начальный порядок.

Если существует несколько ответов, выведите любой из них.

Если ответа на запрос нет, выведите «No answer».

Примечание

В первом примере ответ «bdac» также корректен.

Второй пример показывает, что только соседние буквы в алфавите неприемлемы. Одинаковые подходят.

В третьем примере множество правильных ответов.

C. Соединение точек

Бинарный поиск жадные алгоритмы сортировки Тернарный поиск *2000

Вам дан набор точек \(x_1\), \(x_2\), ..., \(x_n\) на числовой прямой.

Две точки \(i\) и \(j\) могут быть соединены друг с другом при выполнении следующих условий:

  • Ни \(i\), ни \(j\) не соединены ни с какими другими точками;
  • \(|x_i - x_j| \ge z\).

Какое максимальное количество пар точек вы можете соединить друг с другом?

Входные данные

Первая строка содержит два целых числа \(n\) и \(z\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le z \le 10^9\)) — количество точек и ограничение на дистанцию между соединяемыми точками, соответственно.

Вторая строка содержит \(n\) целых чисел \(x_1\), \(x_2\), ..., \(x_n\) (\(1 \le x_i \le 10^9\)).

Выходные данные

Выведите одно целое число — максимальное количество пар точек, которое вы можете соединить друг с другом.

Примечание

В первом примере вы можете соединить точку \(1\) с точкой \(2\) (\(|3 - 1| \ge 2\)), и точку \(3\) с точкой \(4\) (\(|7 - 3| \ge 2\)).

Во втором примере вы можете соединить точку \(1\) с точкой \(3\) (\(|5 - 10| \ge 5\)).

G. Оптимизатор

графы жадные алгоритмы реализация хэши *2700

Рассмотрим программу, написанную на каком-то странном языке программирования. Переменные в этом языке имеют идентификаторы длиной от \(1\) до \(4\) символов, и каждый символ — это либо латинская буква (строчная или прописная), либо цифра. Дополнительное условие: первый символ в идентификаторе не может быть цифрой.

В программе используются четыре типа операций, обозначаемых символами: $, ^, # и &.

Каждая строка программы записана в одном из следующих форматов:

  • <lvalue>=<rvalue>, где <lvalue> и <rvalue> — корректные идентификаторы переменных;
  • <lvalue>=<arg1><op><arg2>, где <lvalue>, <arg1> и <arg2> — корректные идентификаторы переменных, а <op> — символ операции.

Программа исполняется последовательно, строка за строкой, и результат исполнения записан в переменной res. Если res в ходе программы никогда не переприсваивается, результат — это значение res до исполнения программы.

Две программы называются эквивалентными, если вне зависимости от смысла операций $, ^, # и & (но, очевидно, одна и та же операция с одним и тем же набором аргументов должна давать один и тот же результат) и значений переменных до запуска программы значение res после исполнения первой программы равно значению res после исполнения второй программы (программы исполняются независимо).

Вам дана программа из \(n\) строк. Ваша задача — написать программу с минимально возможным количеством строк, которая эквивалентна данной.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 1000\)) — количество строк в программе.

Затем следуют \(n\) строк — сама программа. Каждая строка задается в формате, описанном в условии, и не содержит пробелов.

Выходные данные

В первой строке выведите \(k\) — минимальное количество строк в эквивалентной программе.

Затем выведите \(k\) строк без пробелов — эквивалентную программу ровно из \(k\) строк в том же формате, который описан в условии.

B. Длинное число

жадные алгоритмы *1300

Вам дано длинное десятичное число \(a\), состоящее из \(n\) цифр от \(1\) до \(9\). Также мы определили функцию \(f\), которая отображает каждую цифру от \(1\) до \(9\) в какую-то (возможно, ту же самую) цифру от \(1\) до \(9\).

Вы можете применить следующую операцию не более одного раза: выбрать непустой непрерывный подотрезок цифр из \(a\), и заменить каждую цифру \(x\) из этого подотрезка на \(f(x)\). Например, если \(a = 1337\), \(f(1) = 1\), \(f(3) = 5\), \(f(7) = 3\), и вы замените подотрезок из трех последних цифр, результатом будет число \(1553\).

Какое максимальное число вы можете получить, если примените эту операцию не более одного раза?

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество цифр в \(a\).

Во второй строке записана последовательность из \(n\) символов — число \(a\). Каждый символ — это цифра от \(1\) до \(9\).

В третьей строке заданы ровно \(9\) целых чисел \(f(1)\), \(f(2)\), ..., \(f(9)\) (\(1 \le f(i) \le 9\)).

Выходные данные

Выведите максимальное число, которое вы можете получить, применив операцию, описанную в условии, не более одного раза.

C1. Возрастающая подпоследовательность (упрощенная версия)

жадные алгоритмы *1300

Единственное отличие в задачах C1 и C2 состоит в том, что все входные значения в C1 различны (в задаче C2 это условие может не выполняться).

Задана последовательность \(a\), состоящая из \(n\) целых чисел. Все эти числа различны, каждое значение от \(1\) до \(n\) встречается в последовательности ровно один раз.

Вы совершаете последовательность ходов. В течение каждого хода вы должны взять либо самый левый, либо самый правый элемент последовательности, выписать его и удалить из последовательности. Ваша задача — выписать строго возрастающую последовательность, и среди всех таких последовательностей вы должны выбрать самую длинную (длина последовательности равна количеству элементов в ней).

Например, для последовательности \([2, 1, 5, 4, 3]\) ответ равен \(4\) (вы берете \(2\), последовательность превращается в \([1, 5, 4, 3]\), затем вы берете правый элемент \(3\) и последовательность превращается в \([1, 5, 4]\), затем вы берете \(4\) и последовательность превращается в \([1, 5]\) и, наконец, вы берете \(5\) и последовательность превращается в \([1]\), получившаяся возрастающая последовательность равна \([2, 3, 4, 5]\)).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равно \(i\)-му элементу \(a\). Все эти числа попарно различны.

Выходные данные

В первой строке выведите \(k\) — максимальное количество элементов в строго возрастающей последовательности, которое вы можете получить.

Во второй строке выведите строку \(s\) длины \(k\), где \(j\)-й символ строки \(s_j\) должен быть равен 'L', если вы берете самый левый элемент в течение \(j\)-го хода, и 'R' в ином случае. Если существует несколько возможных ответов, вы можете вывести любой из них.

Примечание

Первый тестовый пример разобран в условии задачи.

C2. Возрастающая подпоследовательность (усложнённая версия)

жадные алгоритмы *1700

Единственное отличие в задачах C1 и C2 состоит в том, что все входные значения в C1 различны (в задаче C2 это условие может не выполняться).

Задана последовательность \(a\), состоящая из \(n\) целых чисел.

Вы совершаете последовательность ходов. В течение каждого хода вы должны взять либо самый левый, либо самый правый элемент последовательности, выписать его и удалить из последовательности. Ваша задача — выписать строго возрастающую последовательность, и среди всех таких последовательностей вы должны выбрать самую длинную (длина последовательности равна количеству элементов в ней).

Например, для последовательности \([1, 2, 4, 3, 2]\) ответ равен \(4\) (вы берете \(1\), последовательность превращается в \([2, 4, 3, 2]\), затем вы берете правый элемент \(2\) и последовательность превращается в \([2, 4, 3]\), затем вы берете \(3\) и последовательность превращается в \([2, 4]\) и, наконец, вы берете \(4\) и последовательность превращается в \([2]\), получившаяся возрастающая последовательность равна \([1, 2, 3, 4]\)).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Выходные данные

В первой строке выведите \(k\) — максимальное количество элементов в строго возрастающей последовательности, которое вы можете получить.

Во второй строке выведите строку \(s\) длины \(k\), где \(j\)-й символ строки \(s_j\) должен быть равен 'L', если вы берете самый левый элемент в течение \(j\)-го хода, и 'R' в ином случае. Если существует несколько возможных ответов, вы можете вывести любой из них.

Примечание

Первый тестовый пример разобран в условии задачи.

D. N задач за K дней

жадные алгоритмы Конструктив математика *1900

Поликарп хочет решить ровно \(n\) задач, чтобы прокачать свое умение программировать перед важным соревнованием по программированию. Но это соревнование начнется очень скоро, более точно, оно начнется через \(k\) дней. Это означает, что у Поликарпа есть ровно \(k\) дней на тренировки!

Поликарп не хочет прокрастинировать, поэтому он хочет решать хотя бы по одной задаче в течение каждого из \(k\) дней. Он также не хочет переутомляться, поэтому если он решает \(x\) задач в течение какого-то дня, он должен решать не более, чем \(2x\) задач в течение следующего дня. И, наконец, он хочет прокачивать свое умение программировать, поэтому если он решает \(x\) задач в течение какого-либо дня, он должен решать хотя бы \(x+1\) задачу в течение следующего дня.

Более формально: пусть \([a_1, a_2, \dots, a_k]\) — массив количеств решенных Поликарпом задач. \(i\)-й элемент этого массива равен количеству задач, которые Поликарп решает в течение \(i\)-го дня его тренировок. Тогда должны быть соблюдены следующие условия:

  • сумма всех \(a_i\) для всех \(i\) от \(1\) до \(k\) должна быть равна \(n\);
  • \(a_i\) должно быть больше нуля для всех \(i\) от \(1\) до \(k\);
  • должно выполняться условие \(a_i < a_{i + 1} \le 2 a_i\) для всех \(i\) от \(1\) до \(k-1\).

Ваша задача — найти любой массив \(a\) длины \(k\), удовлетворяющий условиям выше, или сказать, что это невозможно сделать.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9, 1 \le k \le 10^5\)) — количество задач, которые Поликарп хочет решить и количество дней, которые Поликарп хочет тренироваться.

Выходные данные

Если невозможно найти никакой массив \(a\) длины \(k\), удовлетворяющий правилам тренировок Поликарпа, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке, затем выведите \(k\) целых чисел \(a_1, a_2, \dots, a_k\) во второй строке, где \(a_i\) должно быть равно количеству задач, которые Поликарп должен решать в течение \(i\)-го дня. Если существует несколько возможных ответов, вы можете вывести любой из них.

E. Минимальный массив

Бинарный поиск жадные алгоритмы Структуры данных *1700

Вам даны два массива \(a\) и \(b\), в каждом из которых по \(n\) элементов. Все элементы не меньше \(0\) и не больше \(n-1\).

Вы можете переставить элементы массива \(b\) (можно и оставить порядок тем же самым). После этого будет создан новый массив \(c\) из элементов \(n\), \(i\)-й элемент которого равен \(c_i = (a_i + b_i) \% n\), где \(x \% y\) — остаток от деления \(x\) на \(y\).

Ваше задание — переставить элементы массива \(b\) таким образом, чтобы получить лексикографически минимальный массив \(c\).

Массив \(x\) длины \(n\) лексикографически меньше, чем массив \(y\) длины \(n\), если существует такой индекс \(i\) (\(1 \le i \le n\)), что \(x_i < y_i\), и для всех индексов \(j\) (\(1 \le j < i\)) \(x_j = y_j\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\), \(b\) и \(c\).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < n\)), где \(a_i\)\(i\)-й элемент массива \(a\).

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < n\)), где \(b_i\)\(i\)-й элемент массива \(b\).

Выходные данные

Выведите лексикографически минимальный массив \(c\). Напоминаем, ваша задача состоит в том, чтобы переставить элементы массива \(b\) и получить лексикографически минимальный массив \(c\), где \(i\)-й элемент \(c\) — это \(c_i = (a_i + b_i) \% n\).

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\).

A. Праздник и конфеты

Бинарный поиск жадные алгоритмы Конструктив математика реализация сортировки *1500

На праздник пришло \(n\) мальчиков и \(m\) девочек. Каждый мальчик подарил каждой девочке некоторое целое количество конфет (возможно ноль). Пронумеруем мальчиков целыми числами от \(1\) до \(n\) и девочек целыми числами от \(1\) до \(m\). Для всех \(1 \leq i \leq n\) минимальное количество конфет, которое подарил мальчик с номером \(i\) какой-то девочке равно \(b_i\) и для всех \(1 \leq j \leq m\) максимальное количество конфет, которое получила девочка с номером \(j\) от какого-то мальчика равно \(g_j\).

Более формально, Обозначим за \(a_{i,j}\) количество конфет, которое \(i\)-й мальчик подарил \(j\)-й девочке. Тогда \(b_i\) равно минимуму среди значений \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) И \(g_j\) равно максимуму среди значений \(b_{1,j}, b_{2,j}, \ldots, b_{n,j}\).

Вам стало интересно, какое минимальное суммарное количество конфет могли подарить мальчики, то есть вы хотите минимизировать сумму \(a_{i,j}\) по всем таким \((i,j)\), что \(1 \leq i \leq n\) и \(1 \leq j \leq m\). По числам \(b_1, \ldots, b_n\) и \(g_1, \ldots, g_m\) определите это число.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\), разделенные пробелом — количество мальчиков и девочек, соответственно (\(2 \leq n, m \leq 100\,000\)). Во второй строке находятся \(n\) целых чисел \(b_1, \ldots, b_n\), разделенных пробелами — \(b_i\) равно минимальному количеству конфет, подаренных \(i\)-м мальчиком какой-то девочке (\(0 \leq b_i \leq 10^8\)). В третьей строке находятся \(m\) целых чисел \(g_1, \ldots, g_m\), разделенных пробелами — \(g_j\) равно максимальному количеству конфет, полученному \(j\)-й девочкой от какого-то мальчика (\(0 \leq g_j \leq 10^8\)).

Выходные данные

Если не могло быть такой ситуации выведите \(-1\). Иначе выведите минимальное суммарное количество конфет, которое могли подарить мальчики и при этом все условия были бы выполнены.

Примечание

В первом тесте минимальное суммарное количество конфет, которое могли подарить мальчики равно \(12\). Такое могло быть, например, если первый мальчик подарит \(1\) и \(4\) конфеты, второй мальчик подарит \(3\) и \(2\) конфеты и третий мальчик подарит \(1\) и \(1\) конфету первой и второй девочке, соответственно. Легко видеть, что все условия выполнены и суммарно будет подарено \(12\) конфет.

Во втором тесте мальчики не могли подарить конфеты так, чтобы условия были выполнены.

В третьем тесте минимальное суммарное количество конфет, которое могли подарить мальчики равно \(4\). Такое могло быть, например, если первый мальчик подарит \(1\), \(1\), \(2\) конфет первой, второй и третьей девочке, соответственно, а второй мальчик не подарит никому конфет. Легко видеть, что все условия выполнены и суммарно будет подарено \(4\) конфеты.

C. Восстановление перестановки

графы жадные алгоритмы Конструктив математика поиск в глубину и подобное сортировки Структуры данных *2100

Вася написал в тетради некоторую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), то есть для всех \(1 \leq i \leq n\) выполнено \(1 \leq p_i \leq n\), и все \(p_1, p_2, \ldots, p_n\) различны. После этого он записал \(n\) значений \(next_1, next_2, \ldots, next_n\). Значение \(next_i\) равно минимальному индексу \(i < j \leq n\), такому что \(p_j > p_i\). Если такого \(j\) не существует, то определим значение как \(next_i = n + 1\).

Вечером Вася шел домой из школы, и из-за дождя тетрадь намокла. Теперь некоторые написанные числа невозможно разобрать. Перестановка, а также некоторые значения \(next_i\) полностью утеряны! Если для какого-то \(i\) значение \(next_i\) теперь неизвестно, то скажем, что \(next_i = -1\).

Вам даны значения \(next_1, next_2, \ldots, next_n\) (возможно, некоторые числа теперь равны \(-1\)). Помогите Васе найти любую такую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), что он может записать её в тетрадь, и все значения \(next_i\), не равные \(-1\), будут посчитаны правильно.

Входные данные

В первой строке находится одно целое число \(t\) — количество тестовых случаев (\(1 \leq t \leq 100\,000\)).

В следующих \(2 \cdot t\) строках находится описание тестовых случаев, по две строки на каждый. В первой из этих строк находится единственное целое число \(n\) — количество чисел в перестановке, выписанной Васей (\(1 \leq n \leq 500\,000\)). В следующей строке находится \(n\) целых чисел \(next_1, next_2, \ldots, next_n\), разделенных пробелами (\(next_i = -1\) или \(i < next_i \leq n + 1\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(500\,000\).

Во взломах разрешается использовать только один тестовый случай, то есть \(T = 1\).

Выходные данные

Выведите \(T\) строк, в \(i\)-й ответ на \(i\)-й тестовый случай.

Если таких перестановок \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), которые мог выписать Вася не существует, то выведите единственное число \(-1\).

Иначе выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\), разделённых пробелами (\(1 \leq p_i \leq n\)). Все определённые значения \(next_i\), не равные \(-1\), должны быть вычислены верно из перестановки \(p_1, p_2, \ldots, p_n\) по определению из условия задачи. Если существует несколько таких перестановок, найдите любую.

Примечание

В первом тестовом случае для перестановки \(p = [1, 2, 3]\) получится \(next = [2, 3, 4]\), так как каждый элемент перестановки меньше следующего. Можно заметить, что это единственная подходящая перестановка.

Во третьем тестовом случае подойдет любая перестановка, так как все значения \(next_i\) неизвестны.

В четвертом тестовом случае не существует ни одной подходящей перестановки, поэтому ответ \(-1\).

D. Извилистая ломаная

геометрия жадные алгоритмы Конструктив математика *2600

У Васи есть \(n\) различных точек \(A_1, A_2, \ldots A_n\) на плоскости. Никакие три из них не лежат на одной прямой. Он хочет расположить их в некотором порядке \(A_{p_1}, A_{p_2}, \ldots, A_{p_n}\), где \(p_1, p_2, \ldots, p_n\) — это некоторая перестановка чисел от \(1\) до \(n\).

Сделав так, он нарисует ориентированную ломаную на этих вершинах, проведя направленные отрезки из каждой точки в следующую в выбранном порядке точку. То есть для всех \(1 \leq i \leq n-1\) он проведет направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\). Он хочет, чтобы получившаяся ломаная удовлетворяла \(2\)-м условиям:

  • она будет несамопересекающейся, то есть любые \(2\) отрезка, которые не являются соседними, не имеют общих точек.
  • она будет извилистой.

У Васи есть строка \(s\), состоящая из \((n-2)\)-х символов "L" или "R". Будем называть направленную ломаную извилистой, если её \(i\)-й поворот будет налево, если \(s_i = \) "L" и направо, если \(s_i = \) "R". Более формально: \(i\)-й поворот ломаной будет в точке \(A_{p_{i+1}}\), в ней направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\) поменяется на направленный отрезок из точки \(A_{p_{i+1}}\) в точку \(A_{p_{i+2}}\). Обозначим вектор \(\overrightarrow{v_1} = \overrightarrow{A_{p_i} A_{p_{i+1}}}\) и вектор \(\overrightarrow{v_2} = \overrightarrow{A_{p_{i+1}} A_{p_{i+2}}}\). Тогда если для того, чтобы повернуть вектор \(\overrightarrow{v_1}\) на наименьший возможный угол, чтобы его направление совпало с направлением вектора \(\overrightarrow{v_2}\) надо сделать поворот против часовой стрелки, то будем говорить, что \(i\)-й поворот налево, а иначе направо. Для лучшего понимания посмотрите картинки, на которых изображены различные варианты поворотов:

На этой картинке изображены повороты налево
На этой картинке изображены повороты направо

Вам даны координаты точек \(A_1, A_2, \ldots A_n\) на плоскости и строка \(s\). Найдите перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), такую что ломаная, которую нарисует Вася, будет удовлетворять двум заданным условиям.

Входные данные

В первой строке написано одно целое число \(n\) — количество точек (\(3 \leq n \leq 2000\)). В следующих \(n\) строках написаны по два целых числа \(x_i\) и \(y_i\), разделённые пробелом — координаты точки \(A_i\) на плоскости (\(-10^9 \leq x_i, y_i \leq 10^9\)). В последней строке написана строка \(s\) из символов "L" и "R" длины \((n-2)\). Гарантируется, что все точки различны и и никакие три точки не лежат на одной прямой.

Выходные данные

Если подходящей перестановки не существует выведите \(-1\). Иначе выведите \(n\) чисел \(p_1, p_2, \ldots, p_n\) — найденную перестановку (\(1 \leq p_i \leq n\) и все \(p_1, p_2, \ldots, p_n\) различны). Если подходящих перестановок несколько, выведите любую.

Примечание

Вот картинка, изображающая ломаную из \(1\) теста:

Как мы видим, эта ломаная несамопересекающаяся, а также извилистая, так как поворот в точке \(2\) налево.

Вот картинка, изображающая ломаную из \(2\) теста:

B. Поросята и волки

жадные алгоритмы реализация *1100

Давным давно на клетчатом поле размера n × m жили поросята и волки. Каждая клетка поля либо была пуста, либо содержала одного поросенка, либо содержала одного волка.

Поросенок и волк считаются соседями, если клетки, на которых они расположены, имеют общую сторону. Поросята боятся волков, поэтому каждый поросенок имеет не более одного соседа-волка, но волк может иметь сколько угодно соседей-поросят.

Поросята и волки живут мирно уже несколько лет. Но сегодня волки проголодались. Каждый волк выбирает одного соседа-поросенка (если такие имеются) и съедает его. Этот процесс не повторяется, то есть в итоге каждый волк может съесть не более одного поросенка. Как только волк съедает поросенка, этот поросенок исчезает, и никакой другой волк не может его съесть повторно.

Какое наибольшее количество поросят могут съесть волки?

Входные данные

Первая строка содержит целые числа n и m (1 ≤ n, m ≤ 10) — количество строк и столбцов в клетчатом поле, соответственно. Далее следует n строк по m символов в каждой — описание поля. «.» обозначает пустую клетку. «P» обозначает клетку, содержащую поросенка. «W» обозначает клетку, содержащую волка.

Гарантируется, что каждый поросенок имеет не более одного соседа-волка.

Выходные данные

Выведите одно целое число — максимальное число поросят, которое могут съесть волки.

Примечание

В первом примере волки съедают двух поросят. Один из возможных способов это сделать:

B. Двойная матрица

жадные алгоритмы Перебор *1400

Вам даны две матрицы с размерами \(n \times m\), содержащие целые числа. Последовательность целых чисел строго возрастает, если каждое следующее число больше предыдущего. Строка строго возрастает, если все числа слева направо строго возрастают. Столбец строго возрастает, если все числа сверху вниз строго возрастают. Матрица возрастает, если все строки строго возрастают и все столбцы строго возрастают.

Например, матрица \(\begin{bmatrix} 9&10&11\\ 11&12&14\\ \end{bmatrix}\) возрастает, потому что каждая отдельная строка и столбец строго возрастает. А вот матрица \(\begin{bmatrix} 1&1\\ 2&3\\ \end{bmatrix}\) не возрастает, потому что первая строка не строго возрастает.

Пусть позиция в \(i\)-й строке (сверху) и \(j\)-м столбце (слева) в матрице обозначается как \((i, j)\).

За одну операцию вы можете выбрать любые два числа \(i\) и \(j\) и поменять местами число, расположенное в \((i, j)\) в первой матрице, с числом в \((i, j)\) во второй матрице. Другими словами, вы можете поменять местами два числа в разных матрицах, если они расположены в соответствующих позициях.

Вы хотели бы сделать так, чтобы обе матрицы строго возрастали, выполнив некоторое количество операций (возможно, нулевое). Определите, возможно ли это сделать. Если это так, выведите «Possible», в противном случае выведите «Impossible».

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n,m \leq 50\)) — размеры каждой матрицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{im}\) (\(1 \leq a_{ij} \leq 10^9\)) — число, которое находится в позиции \((i, j)\) в первой матрице.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i1}, b_{i2}, \ldots, b_{im}\) (\(1 \leq b_{ij} \leq 10^9\)) — число, которое находится в позиции \((i, j)\) во второй матрице.

Выходные данные

Выведите либо «Impossible», либо «Possible».

Примечание

В первом примере мы можем выполнить операцию в верхней левой и нижней правой ячейках матриц. Полученные матрицы будут \(\begin{bmatrix} 9&10\\ 11&12\\ \end{bmatrix}\) и \(\begin{bmatrix} 2&4\\ 3&5\\ \end{bmatrix}\).

Во втором примере нам не нужно делать никаких операций.

В третьем примере, независимо от того, что мы поменяем, мы не сможем сделать так, чтобы первая строка строго возрастала в обеих матрицах.

A. Поедание Супа

жадные алгоритмы математика *900

Три друга, Куро, Широ и Кэти встретелись снова! Настало время для вечеринки...

Что обычно делают кошки, когда они встречаются? Правильно, собираются на вечеринку. Так как они хотели развлечься максимально сильно, они пригласили на вечеринку всех своих друзей. В итоге, на вечеринку пришло \(n\) кошек. Они сели в круг и стали есть суп. Правила просты: каждый кто закончил есть свой суп, покидает круг.

Кэти заметила, что когда кошка покидает круг, то на месте, на котором она сидела, образуется пустое место, в частности круг разбивается на несколько непрерывных групп кошек, сидящих рядом друг с другом. Кэти заметила, что к текущему моменту круг покинуло \(m\) кошек. Теперь она интересуется, на какое наибольшее количество групп разбился круг.

Не могли бы вы удовлетворить её любопытство?

Вы можете ознакомится с примерами и их описаниями с картинками в разделе «Примечание».

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 1000\), \(0 \leq m \leq n\)) — количество кошек на вечеринке и количество кошек, которые покинули круг к моменту, наблюдаемым Кэти.

Выходные данные

Выведите одно целое число — максимальное количество групп кошек в момент, наблюдаемый Кэти.

Примечание

В первом примере изначально было \(7\) кошек, сидящих как показано на картинке ниже, они образовывали одну группу.

К наблюдаемому моменту \(4\) кошки покинули круг. Предположим, что это были кошки \(2\), \(3\), \(5\) и \(7\). Тогда осталось \(3\) группы кошек. Можно показать, что это наибольшее возможное количество оставшихся групп.

Во втором примере изначально было \(6\) кошек, сидящих как показано на картинке ниже:

К наблюдаемому моменту \(2\) кошки покинули круг. Если это были кошки \(3\) и \(6\), то останется \(2\) группы кошек (\(\{1, 2\}\) и \(\{4, 5\}\)). Можно показать, что \(2\) это наибольшее возможное количество оставшихся групп.

В третьем примере ни одна кошка не покинула круг, так что есть ровно \(1\) группа, состоящая из всех кошек.

В четвёртом примере все кошки покинули круг, так что есть осталось ровно \(0\) групп кошек.

B. Тренировки Поликарпа

жадные алгоритмы сортировки Структуры данных *1000

Поликарп хочет потренироваться перед очередным важным соревнованием по программированию. В течение первого дня его тренировок он хочет решить ровно \(1\) задачу, в течение второго дня — ровно \(2\) задачи, в течение третьего дня — ровно \(3\) задачи, и так далее. В течение \(k\)-го дня он хочет решить ровно \(k\) задач.

У Поликарпа есть список из \(n\) контестов, \(i\)-й контест состоит из \(a_i\) задач. В течение каждого дня Поликарп будет выбирать ровно один из контестов, который он еще не решал до этого, и решать его. Он решает ровно \(k\) задач из этого контеста. Остальные задачи исключаются из контеста. Если контестов, состоящих из не менее \(k\) задач, которые Поликарп еще не решал, в течение \(k\)-го дня нет, то Поликарп прекращает тренироваться.

Как много дней Поликарп сможет тренироваться, если будет выбирать контесты оптимально?

Входные данные

Первая строка входных данных содержит одно целое число \(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\)) — количество задач в \(i\)-м контесте.

Выходные данные

Выведите одно целое число — максимальное количество дней, которое Поликарп сможет тренироваться, если он будет выбирать контесты оптимально.

C. Хорошая строка

жадные алгоритмы *1300

Давайте назовем (ага, опять) строку хорошей, если ее длина четна, и каждый нечетный символ этой строки отличается от следующего за ним (первый символ отличается от второго, третий — от четвертого, и так далее). Например, строки good, string и xyyx — хорошие, а строки bad, aa и aabc — нет. Обратите внимание, что пустая строка является хорошей строкой.

Вам дана строка \(s\). Удалите из нее минимальное количество символов так, чтобы она стала хорошей.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество символов в строке \(s\).

Во второй строке записана \(s\), состоящая из \(n\) строчных букв латинского алфавита.

Выходные данные

В первой строке выведите одно целое число \(k\) (\(0 \le k \le n\)) — минимальное количество символов, которые надо удалить из \(s\), чтобы она стала хорошей.

Во второй строке выведите \(s\) после всех удалений. Если она пустая, то можете вывести пустую строку, или не выводить вторую строку вообще.

E. Два массива и сумма функций

жадные алгоритмы математика сортировки *1600

Задано два массива \(a\) и \(b\), оба длины \(n\).

Давайте определим функцию \(f(l, r) = \sum\limits_{l \le i \le r} a_i \cdot b_i\).

Ваша задача — переупорядочить элементы (выбрать произвольный порядок элементов) массива \(b\), чтобы минимизировать значение \(\sum\limits_{1 \le l \le r \le n} f(l, r)\). Так как ответ может быть очень большим, вам необходимо вывести его по модулю \(998244353\). Заметьте, что вы должны минимизировать ответ, а не его остаток.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\) и \(b\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Третья строка входных данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_j \le 10^6\)), где \(b_j\) равно \(j\)-му элементу \(b\).

Выходные данные

Выведите одно целое число — минимально возможное значение \(\sum\limits_{1 \le l \le r \le n} f(l, r)\) после перестановки элементов массива \(b\), взятое по модулю \(998244353\). Заметьте, что вы должны минимизировать ответ, а не его остаток.

F1. Микротранзакции (упрощенная версия)

Бинарный поиск жадные алгоритмы *2000

Единственное отличие между легкой и сложной версиями — ограничечния.

Иван играет в компьютерную игру, содержащую микротранзакции для улучшения внешнего вида персонажей. Так как Иван хочет, чтобы его персонаж выглядел очень круто, он хочет использовать некоторые из этих микротранзакций — и он не хочет начинать играть до того момента, пока не получит их все.

Каждый день (с утра) Иван зарабатывает ровно один бурль.

Всего в игре есть \(n\) типов микротранзакций. Каждая микротранзакция обычно стоит \(2\) бурля и \(1\) бурль, если она на распродаже. Иван хочет использовать ровно \(k_i\) микротранзакций \(i\)-го типа (он покупает микротранзакции вечером).

Иван может использовать любое (возможно, нулевое) количество микротранзакций любых типов в течение любого дня (конечно, если ему хватает денег, чтобы это сделать). Если микротранзакция, которую он хочет использовать, находится на распродаже, то он может использовать ее за \(1\) бурль, иначе он может использовать ее за \(2\) бурля.

Также в игровом магазине есть \(m\) специальных предложений. \(j\)-е предложение \((d_j, t_j)\) означает, что микротранзакции \(t_j\)-го типа находятся на распродаже в течение \(d_j\)-го дня.

Иван хочет использовать все микротранзакции как можно раньше. Ваша задача — найти минимальный номер дня, когда он сможет использовать все микротранзакции, которые он хочет, и действительно сможет начать играть.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\)) — количество типов микротранзакций и количество специальных предложений в игровом магазине.

Вторая строка входных данных содержит \(n\) целых чисел \(k_1, k_2, \dots, k_n\) (\(0 \le k_i \le 1000\)), где \(k_i\) означает количество копий микротранзакции \(i\)-го типа, которое Иван хочет использовать. Гарантируется, что сумма всех \(k_i\) не меньше \(1\) и не больше \(1000\).

Следующие \(m\) строк содержат специальные предложения. \(j\)-я из этих строк содержит \(j\)-е специальное предложение. Оно задано в виде пары целых чисел \((d_j, t_j)\) (\(1 \le d_j \le 1000, 1 \le t_j \le n\)) и означает, что микротранзакции \(t_j\)-го типа находятся на распродаже в течение \(d_j\)-го дня.

Выходные данные

Выведите одно целое число — минимальный номер дня, когда Иван сможет использовать все микротранзакции, которые он хочет, и действительно сможет начать играть.

F2. Микротранзакции (усложненная версия)

Бинарный поиск жадные алгоритмы реализация *2000

Единственное отличие между легкой и сложной версиями — ограничечния.

Иван играет в компьютерную игру, содержащую микротранзакции для улучшения внешнего вида персонажей. Так как Иван хочет, чтобы его персонаж выглядел очень круто, он хочет использовать некоторые из этих микротранзакций — и он не хочет начинать играть до того момента, пока не получит их все.

Каждый день (с утра) Иван зарабатывает ровно один бурль.

Всего в игре есть \(n\) типов микротранзакций. Каждая микротранзакция обычно стоит \(2\) бурля и \(1\) бурль, если она на распродаже. Иван хочет использовать ровно \(k_i\) микротранзакций \(i\)-го типа (он покупает микротранзакции вечером).

Иван может использовать любое (возможно, нулевое) количество микротранзакций любых типов в течение любого дня (конечно, если ему хватает денег, чтобы это сделать). Если микротранзакция, которую он хочет использовать, находится на распродаже, то он может использовать ее за \(1\) бурль, иначе он может использовать ее за \(2\) бурля.

Также в игровом магазине есть \(m\) специальных предложений. \(j\)-е предложение \((d_j, t_j)\) означает, что микротранзакции \(t_j\)-го типа находятся на распродаже в течение \(d_j\)-го дня.

Иван хочет использовать все микротранзакции как можно раньше. Ваша задача — найти минимальный номер дня, когда он сможет использовать все микротранзакции, которые он хочет, и действительно сможет начать играть.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество типов микротранзакций и количество специальных предложений в игровом магазине.

Вторая строка входных данных содержит \(n\) целых чисел \(k_1, k_2, \dots, k_n\) (\(0 \le k_i \le 2 \cdot 10^5\)), где \(k_i\) означает количество копий микротранзакции \(i\)-го типа, которое Иван хочет использовать. Гарантируется, что сумма всех \(k_i\) не меньше \(1\) и не больше \(2 \cdot 10^5\).

Следующие \(m\) строк содержат специальные предложения. \(j\)-я из этих строк содержит \(j\)-е специальное предложение. Оно задано в виде пары целых чисел \((d_j, t_j)\) (\(1 \le d_j \le 2 \cdot 10^5, 1 \le t_j \le n\)) и означает, что микротранзакции \(t_j\)-го типа находятся на распродаже в течение \(d_j\)-го дня.

Выходные данные

Выведите одно целое число — минимальный номер дня, когда Иван сможет использовать все микротранзакции, которые он хочет, и действительно сможет начать играть.

A. Тихий класс

жадные алгоритмы Комбинаторика *900

В первый класс школы в Нлогонии набрали \(n\) учеников. Директор хочет разделить их в два класса, каждый ученик должен оказаться ровно в одном из этих классов. Если в один класс попадут два школьника, имена которых начинаются с одной и той же буквы, то они будут слишком много болтать друг с другом (ведь наверняка у них много общего). Обозначим за \(x\) количество таких пар учеников в некотором разбиении на два класса. Пары \((a, b)\) и \((b, a)\) считаются одинаковыми и учитываются один раз.

Например, если всего в классе \(6\) учеников — «olivia», «jacob», «tanya», «jack», «oliver» и «jessica», то:

  • разделение на два класса («jack», «jacob», «jessica», «tanya») и («olivia», «oliver») даст \(x=4\) (\(3\) пары будут болтать в первом классе, \(1\) пара будет болтать во втором классе),
  • разделение на два класса («jack», «tanya», «olivia») и («jessica», «oliver», «jacob») даст \(x=1\) (\(0\) пар будут болтать в первом классе, \(1\) пара будет болтать во втором классе).

Вам дан список из \(n\) имен. Какое минимальное значение \(x\) мы можем получить, распределив этих школьников на два класса?

Обратите внимание, не запрещается распределять всех учеников в один и тот же класс, оставив другой пустым.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n \leq 100\)) — количество школьников.

Далее следуют \(n\) строк.

\(i\)-я из этих строк содержит имя \(i\)-го ученика.

Гарантируется, что каждое имя записано строчкой из строчных латинских букв и имеет длину не более \(20\). Обратите внимание, что у некоторых школьников могут быть одинаковые имена.

Выходные данные

Выведите одно целое число \(x\) — минимально возможное количество пар учеников, которые будут болтать друг с другом.

Примечание

В первом примере минимально возможное число пар равно \(1\). Такого можно добиться, например, распределив всех кроме jose в один класс, а jose — в другой, так что болтать будут только jorge и jerry.

Во втором примере минимально возможное число пар равно \(2\). Такого можно добиться, например, распределив kambei, gorobei, shichiroji и kyuzo в один класс, а heihachi, katsushiro и kikuchiyo в другой. В этом случае болтать будут kambei с kyuzo, а также katsushiro с kikuchiyo.

В третьем примере минимально возможное число пар равно \(4\). Этого можно добиться, распределив трех школьников с именем mike в один класс, а остальных двух — в другой. Тогда в одном классе будет три болтающих пары, а в другом — одна.

D. Милые последовательности

Бинарный поиск жадные алгоритмы математика Перебор *2200

Пусть зафиксировано целое положительное число \(m\). Мы называем последовательность \(x_1, x_2, \dots, x_n\) положительных чисел \(m\)-милой, если для всех индексов \(i\) таких, что \(2 \le i \le n\), выполняется \(x_i = x_{i - 1} + x_{i - 2} + \dots + x_1 + r_i\), где \(r_i\) — некоторое положительное целое число, удовлетворяющее \(1 \le r_i \le m\).

Вам даны \(q\) запросов, каждый из которых описывается тремя целыми числами \(a\), \(b\) и \(m\). Для каждого запроса нужно определить, существует ли \(m\)-милая последовательность, первый член которой равен \(a\), а последний равен \(b\). Если такая последовательность существует, вы должны найти пример такой последовательности.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^3\)) — количество запросов.

Каждая из следущих \(q\) строк содержит три целых числа \(a\), \(b\) и \(m\) (\(1 \le a, b, m \le 10^{14}\), \(a \leq b\)), описывающих один запрос.

Выходные данные

Для каждого запроса, если \(m\)-милой последовательности, первый член которой равен \(a\), а последний — \(b\) не существует, выведите \(-1\).

Иначе выведите целое число \(k\) (\(1 \le k \leq 50\)), а затем \(k\) целых чисел \(x_1, x_2, \dots, x_k\) (\(1 \le x_i \le 10^{14}\)). Должно быть выполнено \(x_1 = a\), \(x_k = b\), а последовательность \(x_1, x_2, \dots, x_k\) должна быть \(m\)-милой.

Можно показать, что в пределах ограничений данной задачи для каждого запроса либо не существует \(m\)-милой последовательности, либо существует такая, которая содержит не более \(50\) членов.

Если существуют несколько решений, выведите любое из них.

Примечание

Рассмотрим первый пример. В первом запросе последовательность \(5, 6, 13, 26\) корректно, так как \(6 = 5 + \bf{\color{blue} 1}\), \(13 = 6 + 5 + {\bf\color{blue} 2}\), и \(26 = 13 + 6 + 5 + {\bf\color{blue} 2}\). Все выделенные жирным значения лежат в пределах от \(1\) до \(2\), поэтому последовательность является \(2\)-милой. Существуют и другие коррестные последовательности, например, \(5, 7, 13, 26\), они тоже будут приняты.

Во втором примере единственная \(1\)-милая последовательность, начинающаяся с \(3\), это \(3, 4, 8, 16, \dots\), она не содержит числа \(9\).

A. Телефонный номер

жадные алгоритмы Перебор Строки *800

Телефонный номер — это последовательность длины ровно 11 из цифр, где первая цифра — это 8. Например, последовательность 80011223388 является телефонным номером, но последовательности 70011223388 и 80000011223388 — не являются телефонными номерами.

Вам дана строка \(s\) длины \(n\), состоящая только из цифр.

За одну операцию вы можете удалить любой символ из строки \(s\). Например, из строки 1121 вы можете получить строку 112, 111 или 121.

Вам нужно определить, существует ли такая последовательность операций (возможно пустая), после которой строка \(s\) станет телефонным номером.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество тестовых примеров.

В первой строке каждого тестового примера содержится число \(n\) (\(1 \le n \le 100\)) — длина строки \(s\).

Во второй строке каждого тестового примера содержится строка \(s\) (\(|s| = n\)), состоящая только из цифр.

Выходные данные

Для каждого тестового примера выведите ответ в отдельной строке. Если существует последовательность операций, превращающая строку \(s\) в телефонный номер, выведите YES. Иначе выведите NO.

Примечание

В первом тестовом примере вам нужно удалить первую и третью цифры. Тогда строка 7818005553535 превратится в 88005553535.

D. Двухцветная ПСП

жадные алгоритмы Конструктив *1500

Строка называется скобочной последовательностью, если она не содержит никаких символов, кроме «(» и «)». Скобочная последовательность называется правильной (кратко, ПСП), если из нее возможно получить корректное арифметическое выражение, вставляя символы «+» и «1». Например, «», «(())» и «()()» являются ПСП, а «)(» и «(()» не являются ПСП.

Легко заметить, что в ПСП каждой открывающей скобке ставится в пару некоторая закрывающая скобка. Используя данный факт, можно определить вложенность ПСП как максимальное количество пар скобок, таких, что \(2\)-я пара лежит внутри \(1\)-й, \(3\)-я — внутри \(2\)-й, и так далее. Например, вложенность «» равна \(0\), «()()()» — \(1\) и «()((())())» — \(3\).

Теперь, вам задана ПСП \(s\) четной длины \(n\). Вам нужно покрасить каждую скобку \(s\) в один из двух цветов: красный или синий. Скобочная последовательность \(r\), состоящая только из красных скобок, должна быть ПСП, а также скобочная последовательность \(b\), состоящая только из синих скобок, должна быть ПСП. Любая из них может быть пустой. Вам запрещается менять местами символы в \(s\), \(r\) или \(b\). Все скобки должны быть покрашены.

Среди всех возможных вариантов вы должны выбрать такой, что минимизирует максимум из вложенности \(r\) и \(b\). Если существует несколько ответов, вы можете вывести любой.

Входные данные

В первой строке задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина ПСП \(s\).

Во второй строке задана правильная скобочная последовательность \(s\) (\(|s| = n\), \(s_i \in \{\)«(», «)»\(\}\)).

Выходные данные

Выведите единственную строку \(t\) длины \(n\), состоящую из «0» и «1». Если \(t_i\) равно «0», то символ \(s_i\) принадлежит ПСП \(r\), иначе \(s_i\) принадлежит \(b\).

Примечание

В первом примере одно из оптимальных решений следующее: \(s = \) «\(\color{blue}{()}\)». \(r\) — пустое и \(b = \) «\(()\)». Ответ равен \(\max(0, 1) = 1\).

Во втором примере выгодно сделать, например, \(s = \) «\(\color{red}{(}\color{blue}{(}\color{red}{)}\color{blue}{)}\)». \(r = b = \) «\(()\)» и ответ равен \(1\).

В третьем примере можно сделать \(s = \) «\(\color{red}{(}\color{blue}{((}\color{red}{)()}\color{blue}{)())}\)». \(r = \) «\(()()\)» и \(b = \) «\((()())\)», и ответ равен \(2\).

A. Возрастание по модулю

Бинарный поиск жадные алгоритмы *1700

У жабы Зитца есть массив целых чисел, каждое число в нем находится в пределах от \(0\) до \(m-1\) включительно. Это числа \(a_1, a_2, \ldots, a_n\).

За одну операцию Зитц может выбрать целое число \(k\) и \(k\) таких индексов \(i_1, i_2, \ldots, i_k\), что \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\). Затем он должен заменить \(a_{i_j}\) на \(((a_{i_j}+1) \bmod m)\) для каждого выбранного индекса \(i_j\). Целое число \(m\) фиксировано для всех операций и индексов.

Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Зитц хочет сделать массив неубывающим за минимальное количество таких операций. Найдите это минимальное число операций.

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 300\,000\)) — количество чисел в массиве и параметр \(m\).

В следующей строке записаны \(n\) целых чисел, разделенных пробелами \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < m\)) — данный массив.

Выходные данные

Выведите одно целое число: минимальное количество описанных операций, которое должен сделать Зитц, чтобы сделать его массив неубывающим. Если делать операций не требуется, выведите \(0\).

Легко показать, что такими операциями Зитц всегда может сделать массив неубывающим.

Примечание

В первом примере массив уже не убывает, поэтому ответ \(0\).

Во втором примере вы можете выбрать \(k=2\), \(i_1 = 2\), \(i_2 = 5\), массив станет \([0,0,1,3,3]\). Он неубывающий, поэтому ответ \(1\).

F. Колеса

*особая задача Бинарный поиск жадные алгоритмы

У Поликарпа есть \(n\) колес и машина с \(m\) колесами. Изначальное давление в \(i\)-м колесе равно \(a_i\).

Цель Поликарпа — взять ровно \(m\) колес среди заданных \(n\) колес и приравнять давления в них (тогда он сможет поставить эти колеса на свою машину и затем использовать ее для поездок). За одну минуту он может уменьшить или увеличить давление в любом (одном) колесе на \(1\). Он может увеличивать давление суммарно не более, чем \(k\) раз, потому что накачивать колеса — тяжелая работа.

Помогите Поликарпу и найдите минимальное количество минут, которое ему нужно потратить на то, чтобы приравнять давления хотя бы в \(m\) колесах среди заданных \(n\) колес.

Входные данные

Первая строка входных данных содержит три целых числа \(n, m\) и \(k\) (\(1 \le m \le n \le 2 \cdot 10^5, 0 \le k \le 10^9\)) — количество колес, количество колес в машине и количество раз, которое суммарно Поликарп может увеличить давление на \(1\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно давлению в \(i\)-м колесе.

Выходные данные

Выведите одно целое число — минимальное количество минут, которое Поликарпу нужно потратить на то, чтобы приравнять давления хотя бы в \(m\) колесах среди заданных \(n\) колес.

A. Nauuo и карты

жадные алгоритмы реализация *1800

Nauuo — девочка, которая любит карты.

Однажды она играла в карты и заметила, что с ее картами были также замешаны какие-то пустые карты.

Всего есть \(n\) карт, пронумерованных целыми числами от \(1\) до \(n\), и с ними были перемешаны \(n\) пустых карт. Nauuo сложила эти \(2n\) карт в колоду и взяла \(n\) из них. Вам даны эти \(n\) карт в руках Nauuo. Оставшиеся \(n\) карт в колоде также даны в порядке сверху вниз.

За одну операцию Nauuo может выбрать одну карту в своей руке и сыграть ее — положить на дно колоды, а затем достать из колоды самую верхнюю карту.

Nauuo хочет, чтобы \(n\) карт с числами лежали в колоде в возрастающем порядке (\(i\)-я сверху карта в колоде должна быть \(i\)). Можете ли вы сказать ей, какое минимальное число операций ей для этого потребуется?

Входные данные

В первой строке записано одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество карт с числами.

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i\le n\)) — карты, которые были на руках у Nauuo изначально. \(0\) обозначает пустую карту.

В третьей строке записаны \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(0\le b_i\le n\)) — карты, которые были в колоде изначально, в порядке сверху вниз. \(0\) обозначает пустую карту.

Гарантируется, что каждое число от \(1\) до \(n\) встречается ровно один раз, либо в \(a_{1..n}\), либо в \(b_{1..n}\).

Выходные данные

Выведите одно целое число — минимальное число операций, которое нужно, чтобы \(n\) карт с числами лежали в колоде в возрастающем порядке.

Примечание

Пример 1

Мы можем сыграть карту \(2\) и взять карту \(3\) на первой операции. После этого у нас на руках карты \([0,3,0]\), а карты в колоде сверху вниз — \([0,1,2]\).

Затем мы можем сыграть карту \(3\) на второй операции. Карты в колоде \([1,2,3]\) они разложены в возрастающем порядке.

Пример 2

Сыграйте пустую карту и возьмите карту \(1\), а затем сыграйте по порядку \(1\), \(2\), \(3\).

A. Nauuo и голоса

жадные алгоритмы *800

Nauuo — девочка, которая любит комментарии.

Однажды она выложила комментарий на Codeforces и заинтересовалась, как ее пост воспримет аудитория.

Известно, что есть \(x\) человек, которые поставят плюс, \(y\) человек, которые поставят минус, и \(z\) человек, которые будут независимо голосовать неизвестным вам образом (либо минусовать, либо плюсовать). Обратите внимание, что каждый из этих \(x+y+z\) человек проголосует ровно один раз.

По итогам голосования может быть три разных результата: если плюсов больше, чем минусов, результат будет «+»; если минусов больше, чем плюсов, результат будет «-»; в противном случае результат будет «0».

Из-за \(z\) человек, которые голосуют неизвестным вам образом, результат может быть неоднозначен (т. е. может быть более одного возможного результата). Более формально, результат неоднозначен тогда и только тогда, когда существуют два варианта голосов этих \(z\) людей, при которых получатся разные результаты.

Найдите для Nauuo результат голосования или сообщите, что он неоднозначен.

Входные данные

В первой строке записаны три целых числа \(x\), \(y\), \(z\) (\(0\le x,y,z\le100\)), соответствующее числу людей, которые поставят плюс, поставят минус, и будут голосовать неизвестно, соответственно.

Выходные данные

Если существует ровно один возможный результат, выведите его: «+», «-», или «0».

Иначе выведите «?», чтобы сообщить, что результат неоднозначен.

Примечание

В первом примере Nauuo обязательно получит три плюса и семь минусов, поэтому единственный возможный результат это «-».

Во втором примере вне зависимости от того, как проголосует человек, голосующий неизвестно, Nauuo получит больше плюсов, чем минусов. Так что единственный возможный результат «+».

В третьем примере Nauuo обязательно получит один плюс и один минус, поэтому единственный возможный результат это «0».

В четвертом примере если единственный человек поставит плюс, результат будет «+», а иначе он будет «-». Существует два возможных результата, так что ответ не определен.

B. Nauuo и шахматы

жадные алгоритмы Конструктив *1100

Nauuo — девочка, которая любит играть в шахматы.

Однажды она сама придумала игру, для которой нужны \(n\) шахматных фигур на доске \(m\times m\). Строки и столбцы пронумерованы целыми числами от \(1\) до \(m\). Обозначим клетку на пересечении \(r\)-й строки и \(c\)-го столбца как \((r,c)\).

Цель игры — расставить на доске \(n\) шахматных фигур, пронумерованных целыми числами от \(1\) до \(n\). Пусть \(i\)-я фигура находится в клетке \((r_i,\,c_i)\). Должно соблюдаться следующее правило: для каждой пары фигур \(i\) и \(j\) должно выполняться \(|r_i-r_j|+|c_i-c_j|\ge|i-j|\). Здесь \(|x|\) обозначает абсолютное значение числа \(x\).

Вскоре Nauuo поняла, что иногда она не сможет найти решение игры, ведь доска может быть слишком маленькой.

Она хочет найти самую маленькую шахматную доску, на которой можно правильно расставить \(n\) фигур.

Nauuo также интересует, как следует расставлять фигуры на доске. Можете ли вы помочь ей?

Входные данные

В первой строке записано единственное целое число \(n\) (\(1\le n\le 1000\)) — количество шахматных фигур для игры.

Выходные данные

Выведите одно целое число — минимальное значение \(m\), где \(m\) это длина стороны подходящей шахматной доски.

В \(i\)-й из следующих \(n\) строк выведите два целых числа \(r_i\) и \(c_i\) (\(1\le r_i,c_i\le m\)) — координаты \(i\)-й шахматной фигуры.

Если существует несколько подходящих ответов, вы можете вывести любой.

Примечание

В первом примере вы не можете расставить фигуры на доске \(1\times1\) без нарушения описанных правил. Но вы можете расставить их на доске \(2\times2\) следующим образом:

Во втором примере вы не можете расставить фигуры на доске \(2\times2\) без нарушения описанных правил. Например, если вы расставите их следующим образом:

то \(|r_1-r_3|+|c_1-c_3|=|1-2|+|1-1|=1\), \(|1-3|=2\), \(1<2\), а также \(|r_1-r_4|+|c_1-c_4|=|1-2|+|1-2|=2\), \(|1-4|=3\), \(2<3\), это нарушает правило.

Однако вы можете расставить их на доске \(3\times3\) следующим образом:

A. Ихаб не может стать Таносом

жадные алгоритмы Конструктив сортировки *1000

Вам дан массив \(a\) длины \(2n\). Возможно ли поменять числа местами так, чтобы сумма первых \(n\) чисел не была равна сумме последних \(n\) чисел?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)), где \(2n\) — это количество чисел в массиве \(a\).

Вторая строка содержит \(2n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{2n}\) (\(1 \le a_i \le 10^6\)) — числа в массиве \(a\).

Выходные данные

Если решения не существует, выведите «-1» (без кавычек). Иначе выведите \(2n\) целых чисел. Эти числа должны быть перестановкой массива \(a\). Вы можете не менять порядок чисел.

Примечание

В первом примере первые \(n\) чисел имеют сумму \(2+1+3=6\), а последнее \(n\) чисел сумму \(1+1+2=4\). Суммы разные.

Во втором примере ответа не существует.

C. Электрификация

Бинарный поиск жадные алгоритмы Перебор *1600

Поначалу у задачи была легенда, связанная с ее названием, но было решено оставить только формальное условие.

Вам заданы \(n\) точек \(a_1, a_2, \dots, a_n\) на оси \(OX\). И теперь вам необходимо найти такую целочисленную точку \(x\) (также на оси \(OX\)), что значение \(f_k(x)\) — минимально возможное.

Функцию \(f_k(x)\) можно описать следующим образом:

  • создадим список расстояний \(d_1, d_2, \dots, d_n\) где \(d_i = |a_i - x|\) (т.е. расстояние между \(a_i\) и \(x\));
  • отсортируем список \(d\) в неубывающем порядке;
  • возьмем в качестве результата значение \(d_{k + 1}\).

Если существует несколько оптимальных ответов, выведите любой.

Входные данные

В первой строке задано единственное число \(T\) (\( 1 \le T \le 2 \cdot 10^5\)) — количество запросов. Следующие \(2 \cdot T\) строк содержат описание запросов. Запросы независимы.

В первой строке каждого запроса заданы два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le k < n\)) — количество точек и константа \(k\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 < a_2 < \dots < a_n \le 10^9\)) — точки в возрастающем порядке.

Гарантируется, что \(\sum{n}\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) целых чисел — соответствующие точки \(x\), которые имеют минимально возможное значение \(f_k(x)\). Если существует несколько ответов — выведите любой из них.

D. Разделение массива

жадные алгоритмы сортировки *1900

Вам заданы массив \(a_1, a_2, \dots, a_n\) и число \(k\).

Вам нужно разделить массив на \(k\) непустых последовательных подотрезков. Каждый элемент в массиве должен быть покрыт ровно одним подотрезком. Пусть \(f(i)\) равно индексу подотрезка, которому принадлежит \(i\)-й элемент. Подотрезки нумеруются слева направо и от \(1\) до \(k\).

Тогда цена конкретного разбиения будет равна \(\sum\limits_{i=1}^{n} (a_i \cdot f(i))\). Например, если \(a = [1, -2, -3, 4, -5, 6, -7]\), и мы разделили его на \(3\) подотрезка следующим способом: \([1, -2, -3], [4, -5], [6, -7]\), тогда цена разбиения будет равна \(1 \cdot 1 - 2 \cdot 1 - 3 \cdot 1 + 4 \cdot 2 - 5 \cdot 2 + 6 \cdot 3 - 7 \cdot 3 = -9\).

Посчитайте максимальную цену, которую вы можете получить, разделив массив \(a\) на \(k\) непустых последовательных подотрезков.

Входные данные

Первая строка содержит два числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\( |a_i| \le 10^6\)).

Выходные данные

Выведите максимальную цену, которую вы можете получить, разделив массив \(a\) на \(k\) непустых последовательных подотрезков.

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\) не покрыта, например.

A. Дели!

жадные алгоритмы Перебор реализация *800

Вам задано целое число \(n\).

Вы можете выполнять любую из следующих операций над ним любое (возможно, нулевое) количество раз:

  1. Заменить \(n\) на \(\frac{n}{2}\), если \(n\) делится на \(2\);
  2. Заменить \(n\) на \(\frac{2n}{3}\), если \(n\) делится на \(3\);
  3. Заменить \(n\) на \(\frac{4n}{5}\), если \(n\) делится на \(5\).

Например, Вы можете заменить \(30\) на \(15\) при помощи первой операции, на \(20\) при помощи второй операции или на \(24\) при помощи третьей операции.

Ваша задача — найти минимальное количество операций, необходимое для того, чтобы получить \(1\) из \(n\), или сказать, что это невозможно сделать.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов.

Следующие \(q\) строк содержат запросы. В каждом запросе задано целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

На каждый запрос выведите ответ на новой строке. Если невозможно получить \(1\) из \(n\), выведите -1. Иначе выведите минимальное количество операций, необходимое, чтобы сделать это.

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\).

Выходные данные

Выведите одно целое число — минимальное количество элементов, которое необходимо удалить, чтобы получить хороший массив.

D. Восстанавливай!

графы жадные алгоритмы поиск в глубину и подобное сортировки теория чисел *1800

Авторы загадали массив \(a\), состоящий из \(n\) целых чисел; каждое число не меньше \(2\) и не больше \(2 \cdot 10^5\). Вы не знаете его, но Вы знаете массив \(b\), который был получен из массива \(a\) при помощи следующей последовательности операций:

  1. Сначала весь массив \(b\) равен массиву \(a\);
  2. Затем для каждого \(i\) от \(1\) до \(n\):
    • если \(a_i\) является простым числом, тогда число \(p_{a_i}\) добавляется в массив \(b\), где \(p\) — бесконечная последовательность простых чисел (\(2, 3, 5, \dots\));
    • иначе (если \(a_i\) не является простым числом), наибольший делитель \(a_i\), не равный \(a_i\), добавляется в \(b\);
  3. Затем получившийся массив длины \(2n\) перемешивается и дается Вам во входных данных.

Здесь \(p_{a_i}\) означает \(a_i\)-е простое число. Первое простое число \(p_1 = 2\), второе простое число \(p_2 = 3\), и так далее.

Ваша задача — восстановить любой подходящий массив \(a\), который формирует заданный массив \(b\). Гарантируется, что ответ существует (таким образом, массив \(b\) получен из какого-либо подходящего массива \(a\)). Если существует несколько возможных ответов, Вы можете вывести любой.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(2n\) целых чисел \(b_1, b_2, \dots, b_{2n}\) (\(2 \le b_i \le 2750131\)), где \(b_i\) равно \(i\)-му элементу \(b\). \(2750131\) является \(199999\)-м простым числом.

Выходные данные

В единственной строке выходных данных выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 2 \cdot 10^5\)) в любом порядке — массив \(a\), из которого можно получить массив \(b\) при помощи последовательности ходов, описанных в условии задачи. Если существует несколько возможных ответов, Вы можете вывести любой.

A. Премьер-министр

жадные алгоритмы *800

Алиса — лидер Государственной рефакторинговой партии, и она близка к тому, чтобы стать Премьер-министром.

Только что прошли выборы. Всего было \(n\) партий, последовательно пронумерованных от \(1\) до \(n\). \(i\)-я партия получила \(a_i\) мест в парламенте.

Партия Алисы имеет номер \(1\). Чтобы стать Премьер-министром, ей нужно создать коалицию, которая состоит из ее партии и, возможно, других партий. Есть два ограничения на создание коалиции:

  • Коалиция должна иметь большинство в парламенте, другими словами, суммарное количество мест всех партий коалиции должно быть строго больше половины мест в парламенте. Например, если в парламенте \(200\) (или \(201\)) мест, то большинство — это \(101\) и больше мест.
  • Партия Алисы должна иметь хотя бы в \(2\) раза больше мест в парламенте, чем любая другая партия в коалиции. Например, чтобы взять в коалицию партию с \(50\) местами, у партии Алисы должно быть как минимум \(100\) мест.

Например, если \(n=4\) и \(a=[51, 25, 99, 25]\) (обратите внимание, что партия Алисы получила \(51\) место), то следующий набор \([a_1=51, a_2=25, a_4=25]\) может являться коалицией, так как удовлетворяет обоим условиям, а следующие наборы — нет:

  • \([a_2=25, a_3=99, a_4=25]\) — так как не содержит партию Алисы;
  • \([a_1=51, a_2=25]\) — так как коалиция должна иметь строгое большинство мест;
  • \([a_1=51, a_2=25, a_3=99]\) — так как партия Алисы должна иметь хотя бы в \(2\) раза больше мест в парламенте, чем любая другая партия в коалиции.

Алиса может не минимизировать количество партий в коалиции. Она может пригласить сколько угодно партий, если оба условия будут выполнены. С другой стороны, если партия Алисы имеет достаточное количество мест в парламенте для выполнения первого условия, она может и не приглашать другие партии.

Обратите внимание, что Алиса может либо взять всю партию в коалицию, либо никого из той партии. Нельзя взять только несколько (не всех) депутатов (мест) в другой партии. Другими словами, если она берет партию в коалицию, то она берет всех ее депутатов.

Найдите любую подходящую коалицию.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество партий.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 100\)) — количество мест \(i\)-й партии в парламенте.

Выходные данные

Если невозможно создать такую коалицию, то выведите \(0\).

В противном случае, пусть \(k\) (\(1 \leq k \leq n\)) — количество партий в коалиции (Алиса может не минимизировать количество партий в коалиции), а \(c_1, c_2, \dots, c_k\) (\(1 \leq c_i \leq n\)) — номера этих партий. В первой строке выведите \(k\), а во второй \(c_1, c_2, \dots, c_k\).

Вы можете выводить партии в любом порядке. Партия Алисы (номер \(1\)) должна быть в этом списке. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Алиса пригласила вторую партию. Обратите внимание, она также могла пригласить как третью партию, так и обе эти партии. Но она не смогла бы стать Премьер-министром, не приглашая ни одну партию, потому что \(100\) мест мало для того, чтобы гарантировать большинство в парламенте, где \(200\) мест.

Во втором примере невозможно создать коалицию, так как любая партия слишком большая для того, чтобы пригласить ее в коалицию.

В третьем примере одной лишь партии Алисы достаточно для коалиции.

Четвертый пример объяснен в условии.

C. Плитки

жадные алгоритмы Комбинаторика математика *1300

Боб украшает свою кухню, если точнее, то пол. Он уже выбрал, какую именно плитку будет использовать. Это — квадратные плитки, разделенные диагонально на белую и черную части. Вот так:

Размер этой плитки идеально подходит для кухни, так как Бобу нужно ровно \(w \times h\) плиток, чтобы покрыть всю кухню. То есть ширина кухни — \(w\) плиток, а длина — \(h\). Каждую плитку можно вращать, всего есть четыре способа, как можно это сделать. Бобу все еще нужно решить, как именно он будет покрывать кухню. Есть один обязательный эстетический критерий: любые две соседние плитки должны иметь разные цвета на той стороне, которая их соединяет. Другими словами, с одной стороны должен быть белый цвет, а с другой — черный.

На рисунке слева показан пример правильного покрытия кухни размером \(3 \times 2\). На рисунке справа показан пример неправильного покрытия, так как есть плитки, которые соприкасаются сторонами одного цвета.

Найдите количество способов покрыть кухню. Так как ответ может быть очень большим, выведите остаток от его деления на \(998244353\) (простое число).

Входные данные

Первая строка содержит два целых числа \(w\), \(h\) (\(1 \leq w,h \leq 1\,000\)) — ширина и длина кухни в плитках.

Выходные данные

Выведите одно целое число \(n\) — остаток от деления количества способов покрыть кухню на \(998244353\).

D. Простой граф

жадные алгоритмы Конструктив математика теория чисел *1500

Все любят простые числа. Алиса тоже. Боб хотел вручить ей подарок, но не смог придумать ничего оригинального. Поэтому он решил подарить ей граф. Как изобретательно, Боб! Алисе точно понравится.

При построении графа Бобу нужно выполнить следующие четыре требования:

  • Это должен быть простой неориентированный граф, то есть без петель и кратных (параллельных) ребер.
  • Количество вершин должно быть ровно \(n\) — число, которое выбрал Боб. Это число не обязательно простое.
  • Количество ребер должно быть простым числом.
  • Степень (т.е. количество рёбер, которые соприкасаются с вершиной) каждой вершины должна быть простым числом.

Ниже представлен пример для \(n = 4\). Первый граф (слева) неправильный, так как степень вершины \(2\) (так же как и \(4\)) равна \(1\), а это число не является простым. Второй граф (посередине) неправильный, так как в нем \(4\) ребра, что также не является простым числом. Третий граф (справа) правильный для \(n = 4\).

Обратите внимание, что граф может быть несвязным.

Пожалуйста, помогите Бобу найти любой такой граф!

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

Выходные данные

Если нет такого графа, для которого выполняются все условия, то выведите \(-1\).

Иначе в первой строке выведите простое число \(m\) (\(2 \leq m \leq \frac{n(n-1)}{2}\)) — количество ребер в графе. После этого выведите \(m\) строк, в \(i\)-й из которых выведите два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), которые значат, что есть ребро между вершинами \(u_i\) и \(v_i\). Степень каждой вершины должна быть простым числом. Не должно быть петель и кратных (параллельных) ребер.

Если существует несколько решений, выведите любое из них.

Обратите внимание, что граф может быть несвязным.

Примечание

Первый пример объяснен в легенде.

Во втором примере степени вершин равны \([7, 5, 2, 2, 3, 2, 2, 3]\). Каждое из этих чисел простое. Кроме того, количество ребер равно \(13\), что тоже является простым числом, поэтому все условия выполнены.

E. Археология

жадные алгоритмы Конструктив Перебор Строки *1900

После того, как Алиса купила подписку на Congo Prime Video, она начала смотреть документальный фильм об археологических находках с острова Фактор на озере Лох Катрин в Шотландии. Археологи нашли книгу, возраст и происхождение которой неизвестны. Возможно Алиса сможет расшифровать ее?

В книжке записано только одно слово, которое состоит из символов «a», «b» и «c». Было замечено, что нет двух последовательных одинаковых символов. Так же было предположено, что в этой строке есть длинная подпоследовательность, которая читается слева направо так же, как и справа налево.

Помогите Алисе найти любую такую подпоследовательность, которая содержит как минимум половину (округленную вниз) символов из начальной строки. Обратите внимание, что вам не нужно максимизировать ее длину.

Строка \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Первая строка содержит строку \(s\) (\(2 \leq |s| \leq 10^6\)). Строка \(s\) состоит только из символов «a», «b», «c». Гарантируется, что нет двух последовательных одинаковых символов.

Выходные данные

Выведите палиндром \(t\), который является подпоследовательностью строки \(s\) и \(|t| \geq \lfloor \frac{|s|}{2} \rfloor\).

Если существует несколько решений, выведите любое из них. Обратите внимание, что вам не нужно максимизировать длину \(t\).

Если решения не существует, выведите «IMPOSSIBLE» (без кавычек).

Примечание

В первом примере другими возможными ответами могут быть «cacac», «caac», «aca» и «ccc».

C. Сергей и школьная столовая

Бинарный поиск Деревья жадные алгоритмы математика Паросочетания реализация Структуры данных *2200

Сергей пришел в школьную столовую и с ужасом обнаружил, что там уже очередь из целых \(m\) человек! Теперь он не уверен, стоит ли дожидаться конца этой очереди, поэтому хочет узнать, какое же блюдо ему достанется, если он это сделает. Так как Сергей устал после занятий, он попросил вас посчитать это за него.

Всего в столовой есть \(n\) блюд со стоимостями \(a_1, a_2, \ldots, a_n\). Также есть очередь из \(m\) человек, у которых есть \(b_1, \ldots, b_m\) тугриков (школьники пронумерованы в том же порядке, как они стоят в очереди, то есть \(b_1\) означает, сколько тугриков у школьника, который стоит в очереди первым, а \(b_m\) — сколько у школьника, стоящего последним).

Считается, что чем дороже блюдо, тем оно вкуснее, поэтому каждый школьник, когда подходит его очередь, просто покупает самое дорогое блюдо, на которое у него хватит денег (каждое блюдо в столовой есть только в одном экземпляре, поэтому после того, как один школьник купил блюдо, его уже никто не может купить), если же денег не хватает ни на одно из блюд, школьник так и уходит голодным (жестокий капитализм).

Но для Сергея деньги не проблема, поэтому, когда подойдет его очередь, он, если еще не уйдет, просто купит самое дорогое из оставшихся блюд.

Еще в школе Сергея сейчас нестабильная экономическая ситуация, поэтому, иногда могут изменяться стоимости некоторых блюд или количество денег у некоторых школьников. Поэтому вам нужно обработать \(q\) запросов двух типов:

  • изменить \(a_i\) на \(x\). То есть стоимость \(i\) блюда становится равна \(x\).
  • изменить \(b_i\) на \(x\). То есть у \(i\) школьника становится \(x\) тугриков.

После каждого запроса нужно вывести стоимость блюда, которое получит Сергей, если дождется своей очереди, или \(-1\), если к этому моменту уже ничего не останется.

Входные данные

В первой строке вводятся числа \(n\) и \(m\) (\(1 \leq n, m \leq 300\ 000\)) — количество блюд и количество школьников в очереди. Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^{6}\)) — элементы массива \(a\). В третьей строке вводятся \(m\) целых чисел \(b_1, b_2, \ldots, b_{m}\) (\(1 \leq b_i \leq 10^{6}\)) — элементы массива \(b\). В четвертой строке вводится целое число \(q\) (\(1 \leq q \leq 300\ 000\)) — количество запросов.

В следующих \(q\) строках вводятся запросы одного из двух типов, по одному в строке:

  • если запрос первого типа, то вводится \(1\), затем вводятся целые числа \(i\) и \(x\) (\(1 \leq i \leq n\), \(1 \leq x \leq 10^{6}\)), что значит, что \(a_i\) становится равно \(x\).
  • если запрос второго типа, то вводится \(2\), затем вводятся целые числа \(i\) и \(x\) (\(1 \leq i \leq m\), \(1 \leq x \leq 10^{6}\)), что значит, что \(b_i\) становится равно \(x\).
Выходные данные

Выведите \(q\) строк, \(i\)-я из которых содержит ответ на вопрос Сергея после \(i\) изменения (стоимость блюда, которое получит Сергей, если дождется своей очереди, или \(-1\), если к этому моменту уже ничего не останется).

Примечание

В первом примере после первого запроса в столовой есть одно блюдо стоимостью \(100\) тугриков и один школьник с одним тугриком, поэтому Сергей купит блюдо со стоимостью \(100\).

Во втором примере после первого запроса есть одно блюдо со стоимостью один тугрик и один школьник, у которого есть \(100\) тугриков, поэтому Сергей ничего не получит.

В третьем примере после первого запроса никто не сможет купить блюдо стоимостью \(8\), так что его получит Сергей. После второго запроса все блюда уже будут куплены до того, как настанет очередь Сергея. После третьего запроса запросе третий и пятый школьники купят соответственно первое и второе блюдо, а четвертое уже не купит никто.

C. Модный номер

жадные алгоритмы Перебор сортировки Строки *1900

Номер машины в Берляндии состоит ровно из n цифр. Номер называется красивым, если в нем есть хотя бы k одинаковых цифр. Вася хочет поменять цифры в номере своей машины так, чтобы он стал красивым. За замену одной из n цифр номера нужно заплатить сумму денег, равную модулю разности старой и новой цифры.

Помогите Васе: найдите минимальную стоимость замены номера Васиной машины на красивый. Также требуется найти получившийся в итоге красивый номер. Если таких несколько, нужно вывести лексикографически наименьший.

Входные данные

В первой строке через пробел записаны два целых числа n и k (2 ≤ n ≤ 104, 2 ≤ k ≤ n) — количество цифр в номере и необходимое количество одинаковых цифр в красивом номере. Вторая строка состоит из n цифр. Она задает старый номер Васиной машины. Гарантируется, что номер не содержит пробелов и состоит только из цифр.

Выходные данные

В первой строке выведите минимальное количество денег, которые потребуются Васе для замены номера. Во второй строке выведите новый номер машины. Если решений несколько, выведите лексикографически наименьшее.

Примечание

В первом примере замена второй цифры на «8» стоит |9 - 8| = 1. Замена пятой цифры на «8» стоит столько же. Замена шестой цифры стоит |6 - 8| = 2. В итоге Вася заплатит 1 + 1 + 2 = 4 чтобы получить красивый номер «888188».

Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка x лексикографически меньше строки y, если существует такое i (1 ≤ i ≤ n), что xi < yi, а для любого j (1 ≤ j < i) xj = yj. Сравниваемые строки в этой задаче всегда имеют длину n.

B. Коля и массив

жадные алгоритмы реализация *1500

На свой \(5\) день рождения Коля получил от мамы в подарок новенький массив \(a=[a_1, a_2, \dots, a_n]\)! Он уже собирался хорошенько изучить его различные свойства, однако распаковав массив, он заметно расстроился, так как произведение его элементов \(a_1 \cdot a_2 \cdot \dots a_n\) показалось ему недостаточно большим.

Он уже было собирался выбросить массив в окно, но мама сказала ему, что массив не очень испортится, если он сделает следующую операцию: выберет произвольный индекс \(i\) (\(1 \le i \le n\)) и выполнит присваивание \(a_i := -a_i - 1\).

Например он может превратить массив \([3, -1, -4, 1]\) в массив \([-4, -1, 3, 1]\) применив эту операцию к индексам \(i=1\) и \(i=3\).

Коля сразу понял, что в некоторых случаях таким образом можно заметно увеличить произведение чисел массива. На следующий день после дня рождения он решил, что хочет получить массив с как можно большим произведением чисел, используя только вышеупомянутую операцию (возможно, ноль, один либо несколько раз), не запрещено применять эту операцию несколько раз к одному элементу.

Помогите маленькому Коле и выведите массив, который может быть получен из исходного многократным применением вышеупомянутой операции, имеющий максимально возможное произведение элементов \(a_1 \cdot a_2 \cdot \dots a_n\).

Если существуют несколько ответов, выведите любой из них.

Входные данные

В первой строке вводится число \(n\) (\(1 \leq n \leq 10^{5}\)) — количество элементов в массиве.

Во второй строке вводятся \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{6} \leq a_i \leq 10^{6}\)) — элементы массива

Выходные данные

Выведите через пробел \(n\) чисел — массив, который может быть получен из исходного многократным применением вышеупомянутой операции, имеющий максимально возможное произведение чисел.

Если существуют несколько ответов, выведите любой из них.

A. Чунга-Чанга

жадные алгоритмы математика *1000

Наше счастье постоянно — жуй кокосы, ешь бананы,

Жуй кокосы, ешь бананы, Чунга-чанга!

м/ф «Катерок»

После открытия острова «Чунга-Чанга» туда постепенно начала пробираться цивилизация и даже стала развиваться рыночная экономика. Появилась и новая валюта — чижик. Теперь для того, чтобы счастливо жевать кокосы, их нужно сначала купить под пальмой.

Саша и Маша проходили мимо пальмы, под которой продаются кокосы по цене \(z\) чижиков за штуку. У Саши есть \(x\) чижиков, а у Маши \(y\). Каждая из девочек собирается купить максимальное число кокосов, на которое у неё хватит денег. Обсудив планы о покупке кокосов, девочки заметили, что если одна из них передаст какое-то количество чижиков другой, то суммарное количество кокосов, которое они купят, может от этого увеличиться (а может и уменьшиться). Кокосы не продаются по частям, то есть каждая из девочек может купить только целое неотрицательное число кокосов. Чижики тоже не могут быть разделены на части, то есть одна из девочек может передать другой только целое неотрицательное число чижиков.

Например, предположим, что у Саши было \(5\) чижиков, у Маши \(4\), а один кокос стоит \(3\) чижика. Тогда, если девочки не будут обмениваться чижиками, то они купят \(1 + 1 = 2\) кокоса. Если же Маша передаст Саше один чижик, то у Саши их будет \(6\), а у Маши \(3\), и девочки купят \(2 + 1 = 3\) кокоса.

Жизнь на острове уже не так легка и проста, поэтому Саша и Маша хотят распределить деньги так, чтобы суммарно купить как можно больше кокосов. При этом, никто не любит одалживать чижики, поэтому среди всех способов, приводящих к максимальному количеству купленных кокосов, найдите тот, который минимизирует число передаваемых между Сашей и Машей (неважно в какую сторону) чижиков.

Входные данные

Первая строка содержит три целых числа \(x\), \(y\) и \(z\) (\(0 \le x, y \le 10^{18}\), \(1 \le z \le 10^{18}\)) — количество чижиков у Саши, количество чижиков у Маши и цена одного кокоса.

Выходные данные

Выведите два целых числа — максимальное суммарное количество кокосов, которое можно купить, и минимальное количество чижиков, которым для этого придётся поделиться одной из девочек.

Примечание

Первый пример разобран в условии задачи. Во втором примере оптимально не обмениваться чижиками, в таком случае будет куплено \(3 + 4 = 7\) кокосов.

B. Разделение числа

жадные алгоритмы реализация Строки *1500

Сегодня Дима целый день старался и выписывал на длинную бумажную ленту своё любимое целое положительное число \(n\), состоящее из \(l\) цифр. К сожалению, лента получилась настолько длинной, что в итоге не влезла в Димин шкаф.

Чтобы справиться с этой неприятностью, Дима решил разрезать ленту на две непустые части, на каждой из которых записано целое положительное число без ведущих нулей, после чего сложить числа, написанные на получившихся частях, а полученную сумму записать на новую ленту.

Дима хочет, чтобы полученное число было как можно меньше, ведь это повышает шансы на то, что хотя бы сумма в шкаф влезет. Помогите Диме определить, какое минимальное число он может получить.

Входные данные

Первая строка содержит одно целое число \(l\) (\(2 \le l \le 100\,000\)) — длину любимого числа Димы.

Вторая строка содержит целое положительное число \(n\), изначально записанное на ленте — любимое число Димы.

Число \(n\) состоит ровно из \(l\) цифр, при этом запись не содержит ведущих нулей. Также Дима гарантирует, что существует хотя бы один способ разрезать число, удовлетворяющий всем требованиям выше.

Выходные данные

Выведите одно целое число — минимальное число, которое может получить Дима.

Примечание

В первом примере Дима может разрезать число \(1234567\) на числа \(1234\) и \(567\). Их сумма равна \(1801\).

Во втором примере Дима может разрезать число \(101\) на числа \(10\) и \(1\). Их сумма равна \(11\). Обратите внимание, запрещено разрезать число на «1» и «01», так как числа не могут начинаться с нулей.

E2. История одной страны (сложная)

жадные алгоритмы Перебор сортировки *3000

Эта задача отличается от предыдущей только ограничениями.

На летние каникулы Петя приехал в Байтландию. Как оказалась, история этого государства весьма необычна.

Изначально, до появления Байтландии, на её территории были расположены \(n\) различных стран. Каждое государство владело своей территорией, которую можно было представить на карте как прямоугольник, стороны которого параллельны осям координат, а вершины расположены в целочисленных точках. Никакие две страны не пересекались, однако они могли касаться сторонами. Иногда в результате агрессивных переговоров и мирных военных походов две страны объединялись в одну. Слияние происходило только в том случае, если после объединения их владений снова получалась прямоугольная территория. В конце концов осталось только одно государство — Байтландия.

В начале времён территория каждой страны содержала внутри себя ровно один прямоугольный замок, где стороны этого замка параллельны осям координат, а вершины расположены в целочисленных точках. Допускается, что границы замка могли прилегать к границе соответствующей территории страны и к границам других замков. Удивительным образом, даже после всех переворотов, замки прекрасно сохранились. Но, к сожалению, это единственная информация, которая позволяет хоть как-то судить об изначальном расположении стран.

Возможное формирование Байтландии. Замки отмечены синим цветом.

Петя не смог смириться с тем, что не осталось никаких данных об изначальных странах. У него возникло подозрение, что вся эта история всего лишь вымысел. Он знает, что вы умный человек, и поэтому просит у вас помощи. Требуется выяснить, существует ли расположение изначальных государств, для которых может быть верна данная история, или нет.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100\,000\)) — количество замков и стран.

Каждая из следующих \(n\) строк содержат четыре целых числа \(a_i, b_i, c_i, d_i\) (\(0 \leq a_i < c_i \leq 10^9\), \(0 \leq b_i < d_i \leq 10^9\)) — координаты вершин \(i\)-го замка, где \((a_i, b_i)\) — координаты левой нижней точки, а \((c_i, d_i)\) — правой верхней.

Гарантируется, что никакие два замка не пересекаются, однако они могут касаться сторонами.

Выходные данные

Если существуют расположения изначальных стран, для которых верна данная история, то выведите «YES», иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

На картинках ниже изображено расположение замков в первом и втором примере.

 

C. Красивые строфы

жадные алгоритмы Строки Структуры данных *1700

Вам дано \(n\) слов, состоящих из строчных букв алфавита. Все слова имеют как минимум одну гласную букву. Вы хотите выбрать некоторые из заданных слов и составить из них как можно больше красивых строф.

Каждая строфа состоит из двух строк. Каждая строка состоит из двух слов, разделенных пробелом.

Строфа красивая тогда и только тогда, когда строфа удовлетворяет всем условиям ниже.

  • Количество гласных в первом слове первой строки совпадает с количеством гласных в первом слове второй строки.
  • Количество гласных во втором слова первой строки совпадает с количеством гласных во втором слове второй строки.
  • Последняя гласная в первой строке совпадает с последней гласной во второй строке. Обратите внимание, что после гласной могут быть согласные.

Буквы «a», «e», «o», «i» и «u» гласные. Обратите внимание, что «y» никогда не является гласной.

Пример красивой строфы:

"hello hellooowww"

"whatsup yowowowow"

она красивая, потому что есть две гласные буквы в «hello» и «whatsup», четыре гласные буквы в «hellooowww» и «yowowowow» (не забывайте, что «y» — не гласная), и последняя гласная — это «o».

Пример некрасивой строфы:

"hey man"

"iam mcdic"

эта строфа некрасивая, потому что слова «hey» и «iam» имеют неодинаковое количество гласных букв и две строки имеют разные последние гласные («a» в первой и «i» во второй).

Сколько красивых строф вы можете написать по заданным словам? Обратите внимание, что вы не можете использовать слово больше раз, чем оно было дано вам. Например, если слово было дано три раза, вы можете использовать это слово максимум три раза.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество слов.

\(i\)-я из следующих \(n\) строк содержит строку \(s_{i}\), которая состоит из английских букв в нижнем регистре, — \(i\)-е слово. Гарантируется, что сумма длин всех строк не превышает \(10^{6}\). Все слова имеют как минимум одну гласную букву.

Выходные данные

В первой строке выведите \(m\) — максимальное количество красивых строф.

В следующих \(2m\) строках выведите \(m\) красивых строф (две строки на строфу).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере те строфы являют одним из возможных ответов. Посмотрим на первую строфу. «about proud hooray round» — красивая строфа, потому что слова «about» и «hooray» имеют одинаковое количество гласных, «proud» и «round» имеют одинаковое количество гласных и у них последняя гласная совпадает. С другой стороны, вы не можете использовать слово «codeforces», чтобы сформировать красивую строфу.

Во втором примере вы не можете составить красивую строфу из заданных слов.

В третьем примере вы можете использовать слово «same» до трех раз.

D. Коробка с конфетами (легкая версия)

жадные алгоритмы сортировки *1400

Фактически эта задача является подзадачей задачи G из этого контеста.

В коробке с конфетами находятся \(n\) конфет. Тип \(i\)-й конфеты равен \(a_i\) (\(1 \le a_i \le n\)).

Вы хотите приготовить подарок, используя некоторые из этих конфет, со следующим ограничением: количества конфет каждого типа, находящегося в подарке, должны быть различны (то есть, например, подарок, имеющий две конфеты типа \(1\) и две конфеты типа \(2\) является плохим).

Возможно, что некоторые типы конфет могут вообще не находиться в подарке. Также возможно, что не все конфеты каких-то типов будут взяты в подарок.

Ваша задача — найти максимально возможный размер одного подарка, который Вы можете приготовить, используя конфеты, которые Вы имеете.

Вам необходимо ответить на \(q\) независимых запросов.

Если Вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Каждый запрос представлен двумя строками.

Первая строка каждого запроса содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество конфет.

Вторая строка каждого запроса содержит \(n\) целых числе \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равно типу \(i\)-й конфеты в коробке.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите одно целое число — максимально возможный размер одного подарка, который Вы можете составить, используя конфеты, которые Вы имеете в этом запросе, с учетом ограничения, описанного в условии задачи.

Примечание

В первом запросе Вы можете приготовить подарок, состоящий из двух конфет типа \(8\) и одной конфеты типа \(5\), суммарно состоящий из \(3\) конфет.

Заметьте, что это не единственное возможное решение — взятие двух конфет типа \(4\) и одной конфеты типа \(6\) также является правильным.

G. Коробка с конфетами (усложненная версия)

жадные алгоритмы реализация сортировки *2000

Эта задача — усложненная версия задачи D из этого же самого контеста с дополнительными ограничениями и заданиями.

В коробке с конфетами находятся \(n\) конфет. Тип \(i\)-й конфеты равен \(a_i\) (\(1 \le a_i \le n\)).

Вы хотите приготовить подарок, используя некоторые из этих конфет, со следующим ограничением: количества конфет каждого типа, находящегося в подарке, должны быть различны (то есть, например, подарок, имеющий две конфеты типа \(1\) и две конфеты типа \(2\) является плохим).

Возможно, что некоторые типы конфет могут вообще не находиться в подарке. Также возможно, что не все конфеты каких-то типов будут взяты в подарок.

Вы очень любите некоторые конфеты из коробки и не хотите их включать в подарок (вы бы предпочли сами их съесть). Для каждой конфеты задано число \(f_i\), которое равно \(0\), если вы хотите оставить \(i\)-ю конфету себе, или \(1\), если вы вполне можете отдать ее, и это не вызовет у вас никаких отрицательных эмоций. Возможно, что у двух конфет одного типа могут быть разные значения \(f_i\).

Вы хотите собрать как можно больше конфет в подарок — но, с другой стороны, вы не хотите отдавать слишком много конфет из тех, которые бы предпочли съесть сами. Поэтому вы хотите посчитать максимальное число конфет, которое может быть включено в подарок, а среди всех способов выбрать максимальное число конфет в подарке — максимально возможное количество конфет с \(f_i = 1\).

Вам необходимо ответить на \(q\) независимых запросов.

Если Вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество конфет.

Затем следует \(n\) строк, каждая из которых содержит два целых числа \(a_i\) и \(f_i\) (\(1 \le a_i \le n\), \(0 \le f_i \le 1\)), где \(a_i\) — тип \(i\)-й конфеты, а \(f_i\) обозначает, хотите ли вы оставить \(i\)-ю конфету себе (\(0\) — если вы хотите ее оставить, \(1\) — если вы вполне можете ее отдать).

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите два целых числа:

  • максимальное количество конфет в подарке, соответствующем условию задачи;
  • максимальное количество конфет с \(f_i = 1\) в подарке с максимально возможным количеством конфет.
Примечание

В первом запросе можно собрать подарок из двух конфет типа \(4\) и одной конфеты типа \(5\). У всех этих конфет \(f_i = 1\).

C1. Экзамен в БерГУ (упрощённая версия)

жадные алгоритмы сортировки *1200

Единственное отличие этой версии от усложнённой — это ограничения.

В Берляндском государственном университете началась сессия. Многие студенты уже сдают экзамены.

Совсем скоро Полиграф Полиграфович примет экзамен у группы из \(n\) студентов. Студенты будут сдавать экзамен подряд один за другим в порядке от \(1\)-го до \(n\)-го. Процесс сдачи происходит следующим образом:

  • \(i\)-й студент подходит к преподавательскому столу и тянет билет;
  • если студент понимает, что билет для него слишком сложный, то он отказывается отвечать и уходит домой (этот процесс происходит настолько быстро, что считается, что на него не расходуется время);
  • если студент посчитал, что билет несложный, то он тратит ровно \(t_i\) минут на сдачу экзамена, после чего он получает отметку и уходит домой.

Студенты сдают экзамен один за другим без перерывов. Полиграф Полиграфович в один момент времени принимает экзамен у одного студента.

Длительность всего экзамена составляет \(M\) минут (\(\max t_i \le M\)), поэтому чем ближе студент находится к концу списка, тем больше вероятность того, что он не успеет сдать экзамен.

Ваша задача состоит в том, чтобы для каждого студента \(i\) определить минимальное количество студентов, которые должны уйти домой, чтобы \(i\)-й студент гарантированно успел полностью сдать экзамен.

Для каждого студента \(i\) ответ надо искать независимо, то есть если при нахождении ответа для студента \(i_1\) про какого-то студента \(j\) выяснилость, что он должен уйти, то при нахождении ответа для \(i_2\) (\(i_2>i_1\)) студент \(j\) не обязательно должен уйти домой.

Входные данные

В первой строке входных данных содержатся два целых числа \(n\) и \(M\) (\(1 \le n \le 100\), \(1 \le M \le 100\)) — количество студентов и длительность всего экзамена в минутах, соответственно.

Во второй строке входных данных содержится \(n\) целых чисел \(t_i\) (\(1 \le t_i \le 100\)) — длительность сдачи экзамена \(i\)-го студента.

Гарантируется, что все значения \(t_i\) не превосходят \(M\).

Выходные данные

Выведите \(n\) чисел: \(i\)-е число должно быть равно минимальному количеству студентов, которые должны уйти с экзамена, чтобы \(i\)-й студент успел ответить (полностью).

Примечание

Пояснение к примеру 1.

Обратите внимание, что сумма первых пяти длительностей сдач не превосходит \(M=15\) (сумма равна \(1+2+3+4+5=15\)). Таким образом, первые пять студентов могут сдавать экзамен даже если все студенты до них тоже сдают экзамен. Иными словами, первые пять чисел в ответе равны \(0\).

Для того, чтобы \(6\)-й студент сдал экзамен необходимо, чтобы не менее \(2\)-х студентов до него отказались сдавать (например, \(3\)-й и \(4\)-й, тогда \(6\)-й закончит свою сдачу через \(1+2+5+6=14\) минут, что не превосходит \(M\)).

Для того, чтобы \(7\)-й студент успел сдать экзамен необходимо, чтобы не менее \(3\)-х студентов до него отказались сдавать (например, \(2\)-й, \(5\)-й и \(6\)-й, тогда \(7\)-й закончит свою сдачу через \(1+3+4+7=15\) минут, что не превосходит \(M\)).

C2. Экзамен в БерГУ (усложнённая версия)

жадные алгоритмы математика Перебор Структуры данных *1700

Единственное отличие этой версии от упрощённой — это ограничения.

Если вы пишете на Python, то, наверняка, при отправке вашего решения на PyPy оно будет работать значительно быстрее.

В Берляндском государственном университете началась сессия. Многие студенты уже сдают экзамены.

Совсем скоро Полиграф Полиграфович примет экзамен у группы из \(n\) студентов. Студенты будут сдавать экзамен подряд один за другим в порядке от \(1\)-го до \(n\)-го. Процесс сдачи происходит следующим образом:

  • \(i\)-й студент подходит к преподавательскому столу и тянет билет;
  • если студент понимает, что билет для него слишком сложный, то он отказывается отвечать и уходит домой (этот процесс происходит настолько быстро, что считается, что на него не расходуется время);
  • если студент посчитал, что билет несложный, то он тратит ровно \(t_i\) минут на сдачу экзамена, после чего он получает отметку и уходит домой.

Студенты сдают экзамен один за другим без перерывов. Полиграф Полиграфович в один момент времени принимает экзамен у одного студента.

Длительность всего экзамена составляет \(M\) минут (\(\max t_i \le M\)), поэтому чем ближе студент находится к концу списка, тем больше вероятность того, что он не успеет сдать экзамен.

Ваша задача состоит в том, чтобы для каждого студента \(i\) определить минимальное количество студентов, которые должны уйти домой, чтобы \(i\)-й студент гарантированно успел полностью сдать экзамен.

Для каждого студента \(i\) ответ надо искать независимо, то есть если при нахождении ответа для студента \(i_1\) про какого-то студента \(j\) выяснилость, что он должен уйти, то при нахождении ответа для \(i_2\) (\(i_2>i_1\)) студент \(j\) не обязательно должен уйти домой.

Входные данные

В первой строке входных данных содержатся два целых числа \(n\) и \(M\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le M \le 2 \cdot 10^7\)) — количество студентов и длительность всего экзамена в минутах, соответственно.

Во второй строке входных данных содержится \(n\) целых чисел \(t_i\) (\(1 \le t_i \le 100\)) — длительность сдачи экзамена \(i\)-го студента.

Гарантируется, что все значения \(t_i\) не превосходят \(M\).

Выходные данные

Выведите \(n\) чисел: \(i\)-е число должно быть равно минимальному количеству студентов, которые должны уйти с экзамена, чтобы \(i\)-й студент успел ответить (полностью).

Примечание

Пояснение к примеру 1.

Обратите внимание, что сумма первых пяти длительностей сдач не превосходит \(M=15\) (сумма равна \(1+2+3+4+5=15\)). Таким образом, первые пять студентов могут сдавать экзамен даже если все студенты до них тоже сдают экзамен. Иными словами, первые пять чисел в ответе равны \(0\).

Для того, чтобы \(6\)-й студент сдал экзамен необходимо, чтобы не менее \(2\)-х студентов до него отказались сдавать (например, \(3\)-й и \(4\)-й, тогда \(6\)-й закончит свою сдачу через \(1+2+5+6=14\) минут, что не превосходит \(M\)).

Для того, чтобы \(7\)-й студент успел сдать экзамен необходимо, чтобы не менее \(3\)-х студентов до него отказались сдавать (например, \(2\)-й, \(5\)-й и \(6\)-й, тогда \(7\)-й закончит свою сдачу через \(1+3+4+7=15\) минут, что не превосходит \(M\)).

D. Казак Вус и числа

жадные алгоритмы Конструктив математика *1500

У Казака Вуса есть \(n\) действительных чисел \(a_i\). Известно, что сумма всех чисел равна \(0\). Он хочет найти такую последовательность \(b\) из \(n\) чисел, что сумма всех чисел равна \(0\) и каждое \(b_i\) равно либо \(\lfloor a_i \rfloor\), либо \(\lceil a_i \rceil\). Другими словами, \(b_i\) равно \(a_i\) округленному либо вверх, либо вниз. Необязательно округлять к ближайшему целому числу.

Например, если \(a = [4.58413, 1.22491, -2.10517, -3.70387]\), то \(b\) может быть, например, \([4, 2, -2, -4]\).

Обратите внимание, что если \(a_i\) целое, то нет разницы между операциями \(\lfloor a_i \rfloor\) и \(\lceil a_i \rceil\), \(b_i\) всегда будет равно \(a_i\).

Помогите Казаку Вусу найти такую последовательность!

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество чисел.

Каждая из следующих \(n\) строк содержит одно вещественное число \(a_i\) (\(|a_i| < 10^5\)). Гарантируется, что у каждого \(a_i\) ровно \(5\) цифр после запятой. Гарантируется, что сумма всех чисел равна \(0\).

Выходные данные

В каждой из следующих \(n\) строк выведите по одному целому числу \(b_i\). Для каждого \(i\), должно исполняться условие \(|a_i-b_i|<1\).

Если существует несколько решений, выведите любое из них.

Примечание

Первый пример объяснен в условии.

Во втором примере можно округлить первое и пятое числа вверх, а второе и третье вниз. Мы не можем округлить четвертое число ни в одну сторону.

F. Казак Вус и граф

графы жадные алгоритмы поиск в глубину и подобное реализация *2400

У Казака Вуса есть простой граф из \(n\) вершин и \(m\) ребер. Пусть \(d_i\) — степень \(i\)-й вершины. Напомним, что степень вершины \(i\) — это количество прилагаемых ребер к вершине \(i\).

Ему нужно оставить не более \(\lceil \frac{n+m}{2} \rceil\) ребер. Пусть \(f_i\) — степень \(i\)-й вершины после удаления. Нужно удалить ребра так, чтобы \(\lceil \frac{d_i}{2} \rceil \leq f_i\) для каждого \(i\). Другими словами, нужно чтобы степень каждой вершины уменьшилась на не более чем в два раза.

Помогите Вусу оставить правильное количество ребер!

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^6\), \(0 \leq m \leq 10^6\)) — количество вершин и ребер соответственно.

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)) — вершины, между которыми находиться ребро.

Гарантируется, что в графе нет петель и кратных ребер.

Выходные данные

В первой строке выведите одно целое число \(k\) (\(0 \leq k \leq \lceil \frac{n+m}{2} \rceil\)) — количество ребер, которые нужно оставить.

В каждой из следующих \(k\) строк выведите по два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)) — вершины, ребро между которыми нужно оставить. Нельзя выводить одно и то же ребро два или более раза.

C. Вася и массив

жадные алгоритмы Конструктив реализация *1800

У Васи есть массив \(a_1, a_2, \dots, a_n\).

Вы не знаете, что это за массив, но Вася сообщил вам \(m\) фактов об этом массиве. \(i\)-й факт – это тройка чисел \(t_i\), \(l_i\) и \(r_i\) (\(0 \le t_i \le 1, 1 \le l_i < r_i \le n\)) которая означает:

  • если \(t_i=1\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots, a_{r_i}\) отсортирован в порядке неубывания;
  • если \(t_i=0\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots, a_{r_i}\) не отсортирован в порядке неубывания. Подотрезок считается неотсортированным, если найдется пара соседних элементов такая, что первый элемент больше второго.

Например, если \(a = [2, 1, 1, 3, 2]\) то можно дать три следующих факта: \(t_1=1, l_1=2, r_1=4\) (подотрезок массива \([a_2, a_3, a_4] = [1, 1, 3]\) отсортирован), \(t_2=0, l_2=4, r_2=5\) (подотрезок массива \([a_4, a_5] = [3, 2]\) не отсортирован), и \(t_3=0, l_3=3, r_3=5\) (подотрезок массива \([a_3, a_5] = [1, 3, 2]\) не отсортирован).

Вы не знаете массив \(a\). Найдите любой массив, удовлетворяющий всем фактам.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(2 \le n \le 1000, 1 \le m \le 1000\)).

Следующие \(m\) строк содержат по три числа \(t_i\), \(l_i\) и \(r_i\) (\(0 \le t_i \le 1, 1 \le l_i < r_i \le n\)).

Если \(t_i = 1\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots , a_{r_i}\) отсортирован. Иначе (если \(t_i = 0\)) подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots , a_{r_i}\) не отсортирован.

Выходные данные

Если не существует массива, удовлетворяющего всем фактам, в единственной строке выведите NO (в любом регистре).

Если такой массив существует, в первой строке выведите YES (в любом регистре). Во второй строке выведите \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\), удовлетворяющий всем фактам. Если существует несколько подходящих массивов, выведите любой.

B. Числа на окружности

жадные алгоритмы математика сортировки *1100

Вам дано \(n\) чисел \(a_1, a_2, \ldots, a_n\). Возможно ли расставить их по окружности таким образом, чтобы каждое число было строго меньше суммы своих соседей?

К примеру, для массива \([1, 4, 5, 6, 7, 8]\), расстановка слева удовлетворяет условию, в то время как расстановка справа нет, так как \(5\ge 4 + 1\) и \(8> 1 + 6\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3\le n \le 10^5\)) — количество чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \le 10^9\)) — сами числа. Заданные числа не обязательно различны.

Выходные данные

Если решения не существует, в первой строке выведите «NO».

Если оно существует, в первой строке выведите «YES». После чего, во второй строке выведите \(n\) чисел — элементы массива в порядке в котором они будут стоять на окружности. Первый и последний элементы, которые вы выведете, считаются соседями на окружности. Если существует несколько решений, выведите любое из них. Вы можете выводить круг, начиная с любого из чисел.

Примечание

Одна из возможных расстановок указана в первом примере:

\(4< 2 + 3\);

\(2 < 4 + 3\);

\(3< 4 + 2\).

Одна из возможных расстановок указана в втором примере.

При любой расстановке чисел \(13, 8, 5\) на окружности в третьем примере, \(13\) будет иметь соседей \(8\) и \(5\), но \(13\ge 8 + 5\).

В четвертом примере нет нужной расстановки.

C. Tokitsukaze и дуэль

жадные алгоритмы игры Перебор *2300

"Duel!"

Только что началась дуэль между Tokitsukaze и Quality за прекрасную принцессу Claris.

Есть \(n\) карт, расположенных в ряд. Каждая карта имеет две стороны, одна из которых покрашена в некоторый цвет. В начале дуэли некоторые из карт лежат одной цветной стороной вверх, а некоторые — цветной стороной вниз. Игроки ходят, переворачивая карты, при этом Tokitsukaze ходит первым. Каждый ход игрок выбирает ровно \(k\) последовательных карт и переворачивает их так, чтобы или все они лежали цветной стороной вниз, или все они лежали цветной стороной вверх. Если все цветные стороны этих \(n\) карт смотрят в одном направлении после хода игрока, он выигрывает.

Принцесса Claris хочет узнать, кто выиграет в этой игре, учитывая, что Tokitsukaze и Quailty настолько умны, что не допустят ни единой ошибки.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Во второй строке записана строка длины \(n\), состоящая только из \(0\) и \(1\), представляющая положение этих \(n\) карт, где цветная сторона \(i\)-й карты смотрит вверх, если \(i\)-й символ строки равен \(1\), или смотрит вниз, если \(i\)-й символ строки равен \(0\).

Выходные данные

Выведите "once again" (без кавычек), если общее число ходов может превысить \(10^9\), что считается ничьей.

В другом случае, выведите "tokitsukaze" (без кавычек), если Tokitsukaze выиграет, или "quailty" (без кавычек) если Quailty выиграет.

Заметьте, что все буквы нужно выводить в нижнем регистре, любое отклонение будет расцениваться как неверный ответ.

Примечание

В первом примере вне зависимости от действий Tokitsukaze, после ее первого хода будут три карты с цветными сторонами в одном направлении, и Quailty может перевернуть последнюю карту так, чтобы она смотрела в том же направлении, и выиграть.

Во втором примере вне зависимости от действий Tokitsukaze, Quailty может выбрать ту же самую карту и вернуть ее в начальное состояние, что может привести к ничье через некоторое время.

В третьем примере Tokitsukaze может выиграть, сделав, чтобы левые пять карт стали смотреть вверх, или чтобы правые пять карт стали смотреть вниз.

Ответ на четвертый пример может быть получен аналогично со вторым примером.

E. Tokitsukaze и взрыв

Бинарный поиск жадные алгоритмы *3100

Tokitsukaze вместе с друзьями пытаются проникнуть на секретную базу, построенную Claris. Тем не менее, Claris знает об этом и подготовил бомбу, котрая должна взорваться через минуту. Они пытаются убежать и понимают, что это безнадежно, потому что дверь заперта.

В этот самый момент, CJB, отец Tokitsukaze, приходит. С помощью его магической силы, которую ему дала Ereshkigal, богиня подземного мира, CJB может поставить \(m\) барьеров, защищающих их от взрыва. Более формально, давайте введем декартову систему координат на плоскости и предположим, что бомба находится в позиции \(O(0, 0)\). В команде Tokitsukaze есть \(n\) человек, \(i\)-й из которых находится в позиции \(P_i(X_i, Y_i)\). Каждый барьер может быть рассмотрен как прямая бесконечной длины, и они могут пересекаться друг с другом. Для каждого человека из команды Tokitsukaze должен быть хотя бы один барьер, отделяющий его от бомбы, то есть отрезок между ним и бомбой должен пересекаться хотя бы с одним барьером. Если человек стоит в той же позиции, в которой находится бомба, любая прямая, проходящая через \(O(0, 0)\) удовлетворяет этому ограничению.

Несмотря на то, что CJB очень силен, он все равно хочет, чтобы барьеры были как можно дальше от бомбы, чтобы сохранить свою энергию. Пожалуйста, помогите ему рассчитать максимальное расстояние от бомбы до ближайшего к ней барьера при условии, что все люди из команды Tokitsukaze останутся в безопасности.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — количество людей и количество барьеров, соответственно.

Строка под номером \(i\) среди следующих \(n\) строк содержит два целых числа \(X_i\) и \(Y_i\) (\(-10^5 \leq X_i, Y_i \leq 10^5\)), обозначающих позицию \(i\)-го человека \(P_i(X_i, Y_i)\). Заметим, что \(P_i\) может иметь координаты, совпадающие с \(P_j\) (\(j \neq i\)), или даже с \(O\).

Выходные данные

Выведите одно вещественное число — максимальное расстояние, удовлетворяющее требованию. Ваш ответ будет считаться верным, если абсолютная или относительная погрешность не будет превышать \(10^{-6}\).

Формально, если ваш ответ равен \(a\), а ответ жюри равен \(b\), то ответ считается корректным тогда и только тогда, когда \(\frac{|a - b|}{\max(1, |b|)} \leq 10^{-6}\).

Примечание

В двух первых примерах, CJB обязан поставить барьер, проходящий через \(O(0, 0)\).

В третьем и четвертом примере, CJB может поставить каждый барьер так, чтобы он проходил через некоторое \(P_i\) и был перпендикулярен прямой между \(P_i\) и \(O\).

A. Выбор напитков

жадные алгоритмы математика *1000

Старожилы ЛКШ могут помнить смены, в которых каждый школьник получал на вечёрку желаемый напиток. Или не совсем?

В домике живёт \(n\) школьников, каждый из них в анкете отметил свой любимый напиток \(a_i\). Таким образом, известны \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i\) (\(1 \le a_i \le k\)) — номер любимого напитка \(i\)-го школьника. Все напитки пронумерованы от \(1\) до \(k\).

В наличии есть неограниченное количество наборов напитков. Каждый набор содержит ровно две порции одинакового напитка. Иными словами, в наличии есть \(k\) типов наборов, \(j\)-й набор содержит две порции напитка \(j\). Количество наборов каждого из \(k\) типов — неограниченно.

Известно, что на домик будет выдано наименьшее количество наборов, но при этом достаточное, чтобы хватило всем школьникам. Конечно, количество наборов будет равно \(\lceil \frac{n}{2} \rceil\), где \(\lceil x \rceil\) обозначает округление вверх числа \(x\).

После получения наборов школьники самостоятельно разберут порции. Заметим, что если \(n\) является нечётным числом, то одна порция останется лишней и её выпьет преподаватель.

Какое наибольшее количество школьников смогут получить любимый напиток при оптимальном выборе \(\lceil \frac{n}{2} \rceil\) наборов и распределении порций между школьниками?

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n, k \le 1\,000\)) — количество школьников в домике и количество различных напитков.

В следующих \(n\) строках заданы любимые напитки школьников. В \(i\)-й из этих строк записано целое число от \(1\) до \(k\) — номер любимого напитка \(i\)-го школьника.

Выходные данные

Выведите одно целое число — максимальное количество школьников, которые могут получить любимый напиток.

Примечание

В первом примере школьники могут выбрать три набора с напитками \(1\), \(1\) и \(2\) (то есть у них будет два набора с двумя \(1\)-ми напитками и набор с двумя \(2\)-ми напитками, то есть порции будут иметь вид: \(1, 1, 1, 1, 2, 2\)). Тогда все школьники кроме второго получат любимый напиток.

Другим возможным способом являются наборы с напитками \(1\), \(2\) и \(3\). В таком случае порции будут иметь вид: \(1, 1, 2, 2, 3, 3\). Тогда все школьники, кроме одного получат желаемые напитки. Единственный школьник, который не получит любимый напиток, будет один из тех для кого \(a_i = 1\) (то есть первый, третий или четвертый).

A. Лестница своими руками

жадные алгоритмы математика сортировки *900

Назовем \(k\)-ступенчатой лестницей следующую конструкцию: ровно \(k + 2\) деревянные доски, среди которых

  • две доски длиной хотя бы \(k+1\) — основные направляющие лестницы;
  • \(k\) досок длиной хотя бы \(1\) — ступеньки лестницы.

Заметим, что ни направляющие, ни ступени не обязаны быть равны.

Например, лестницы \(1\) и \(3\) — корректные \(2\)-ступенчатые лестницы, а лестница \(2\) — корректная \(1\)-ступенчатая. На первом изображении длины досок равны \([3, 3]\) для направляющих и \([1]\) для ступеньки. На втором изображении длины досок равны \([3, 3]\) для направляющих и \([2]\) для ступеньки. На третьем изображении длины досок равны \([3, 4]\) для направляющих и \([2, 3]\) для ступенек.

У вас есть \(n\) досок. Длина \(i\)-й доски равна \(a_i\). У вас нет пилы и вы не можете распиливать доски. Зато есть молоток и гвозди, и вы можете собрать импровизированную «лестницу» из тех досок, что есть.

Вопрос в следующем: чему равно максимальное \(k\) такое, что вы сможете собрать \(k\)-ступенчатую лестницу, используя некоторый поднабор из имеющихся досок?

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 100\)) — количество запросов. Все запросы независимы.

Каждый запрос состоит из двух строк. В первой строке задано одно число \(n\) (\(2 \le n \le 10^5\)) — количество досок у вас в наличии.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — длины соответствующих досок.

Гарантируется, что суммарное количество досок во всех запросах не превосходит \(10^5\).

Выходные данные

Выведите \(T\) чисел — по одному на запрос. \(i\)-е число обозначает максимальное \(k\) такое, что вы можете собрать \(k\)-ступенчатую лестницу из досок описанных в \(i\)-м запросе.

Выведите \(0\), если невозможно собрать даже \(1\)-ступенчатую лестницу из заданных досок.

Примечание

Варианты лестниц для запросов \(1-3\) представлены на картинке выше:

О качестве полученных лестниц:

B. Столбы

жадные алгоритмы реализация *1000

Перед вами стоят в ряд \(n\) столбов, пронумерованных от \(1\) до \(n\).

Изначально на каждый столб надет ровно один диск. Радиус диска, надетого на \(i\)-й столб, равен \(a_i\).

Вы можете перемещать диски с одних столбов на другие. Вы можете взять диск со столба \(i\) и надеть его на столб \(j\), если все следующие условия выполняются:

  1. между столбами \(i\) и \(j\) нет других столбов. Формально, это означает, что \(|i - j| = 1\);
  2. на столб \(i\) надет ровно один диск;
  3. либо столб \(j\) пуст (на нем нет дисков), либо радиус самого верхнего диска на столбе \(j\) строго больше радиуса того диска, который вы перемещаете.

Когда вы надеваете диск на столб, на котором уже есть другие диски, вы располагаете новый диск поверх всех предыдущих, и если вы попытаетесь позже надеть еще один диск на этот столб, именно радиус последнего надетого диска будет сравниваться с радиусом диска, который вы перемещаете, в третьем условии.

Вы можете перемещать диски столько раз, сколько вам нужно, при условии, что все три условия выполняются при каждом вашем действии. Теперь вы хотите узнать, можно ли все \(n\) дисков надеть на один и тот же столб?

Входные данные

В первой строке задается одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество столбов.

Во второй строке задаются \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_i\) (\(1 \le a_i \le n\)), где \(a_i\) — радиус диска, изначально надетого на \(i\)-й столб. Все числа \(a_i\) различны.

Выходные данные

Выведите YES, если можно все диски надеть на один и тот же столб, или NO, если это не так. Вы можете выводить каждую букву в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом примере можно все диски переместить на столб \(3\) при помощи следующих действий:

  1. взять диск с радиусом \(3\) со столба \(2\) и надеть его на столб \(3\);
  2. взять диск с радиусом \(1\) со столба \(1\) и надеть его на столб \(2\);
  3. взять диск с радиусом \(2\) со столба \(4\) и надеть его на столб \(3\);
  4. взять диск с радиусом \(1\) со столба \(2\) и надеть его на столб \(3\).

C. Разделение массива

жадные алгоритмы сортировки *1400

У вас есть отсортированный массив \(a_1, a_2, \dots, a_n\) (для любого индекса \(i > 1\) выполняется условие \(a_i \ge a_{i-1}\)) и число \(k\).

Вам нужно разделить этот массив на \(k\) непустых последовательных подотрезков. Каждый элемент должен принадлежать ровно одному подотрезку.

Пусть \(max(i)\) будет равно максимуму в \(i\)-м подотрезке, а \(min(i)\) будет равно минимуму в \(i\)-м подотрезке. Тогда цена разделения будет равна \(\sum\limits_{i=1}^{k} (max(i) - min(i))\). Например, если массив \(a = [2, 4, 5, 5, 8, 11, 19]\) и мы разделили его на \(3\) подотрезка следующим образом: \([2, 4], [5, 5], [8, 11, 19]\), тогда цена разделения будет равна \((4 - 2) + (5 - 5) + (19 - 8) = 13\).

Посчитайте минимальную цену разделения массива \(a\) на \(k\) непустых последовательных подотрезков.

Входные данные

Первая строка содержит два числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\( 1 \le a_i \le 10^9\), \(a_i \ge a_{i-1}\)).

Выходные данные

Выведите минимальную цену, которую вы можете получить, разделив массив \(a\) на \(k\) непустых последовательных подотрезков.

Примечание

В первом тестовом примере можо разделить массив \(a\) следующим образом: \([4, 8, 15, 16], [23], [42]\).

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\).

C. Паросочетание vs независимое множество

графы жадные алгоритмы Конструктив сортировки *2000

Дан неориентированный граф, состоящий из \(3 \cdot n\) вершин и \(m\) ребер. Требуется найти паросочетание, состоящее из \(n\) ребер, или независимое множество, состоящее из \(n\) вершин.

Множество рёбер называется паросочетанием, если никакие два ребра этого множества не имеют общих вершин.

Множество вершин называется независимым, если никакие две вершины этого множества не соединены ребром.

Входные данные

В первой строке записано одно целое число \(T \ge 1\) — количество графов, которое вам надо обработать. Затем следуют описания \(T\) графов.

В первой строке описания графа записаны два числа \(n\) и \(m\), где \(3 \cdot n\) — количество вершин, а \(m\) — количество ребер в графе (\(1 \leq n \leq 10^{5}\), \(0 \leq m \leq 5 \cdot 10^{5}\)).

В следующих \(m\) строках записаны пары чисел \(v_i\) и \(u_i\) (\(1 \leq v_i, u_i \leq 3 \cdot n\)), означающие, что вершины \(v_i\) и \(u_i\) соединены ребром.

Гарантируется, что в графе нет петель и кратных ребер.

Гарантируется, что сумма \(n\) по всем графам в одном тесте не превышает \(10^{5}\), сумма \(m\) по всем графам в одном тесте не превышает \(5 \cdot 10^{5}\).

Выходные данные

Выведите ответы для каждого из \(T\) графов. Формат ответа для одного графа описан ниже.

Если вы нашли паросочетание размера \(n\), то в первой строке выведите «Matching» (без кавычек), а во второй строке выведите \(n\) чисел, разделённых пробелами, — номера рёбер паросочетания. Рёбра нумеруются от \(1\) до \(m\) в порядке ввода.

Если вы нашли независимое множество размера \(n\), то в первой строке выведите «IndSet» (без кавычек), а во второй строке выведите \(n\) чисел, разделённых пробелами, — номера вершин независимого множества.

Если в графе нет ни того, ни другого, выведите «Impossible» (без кавычек).

Номера рёбер или вершин можно выводить в произвольном порядке.

Если существует несколько решений, вы можете вывести любое. В том числе, если в графе есть как паросочетание размера \(n\), так и независимое множество размера \(n\), то вы можете вывести любое из таких паросочетаний или любое из таких независимых множеств.

Примечание

Первые два графа из примера совпадают, однако в этом графе есть как паросочетание размера 1, так и независимое множество размера 1. Любое из таких паросочетаний и независимых множеств является правильным ответом.

В третьем графе нет паросочетания размера 2, однако есть независимое множество размера 2. В этом графе также есть независимое множество размера 5: 2 3 4 5 6. Тем не менее, такой ответ не является верным, потому что вас просят найти независимое множество (или паросочетание) размера ровно \(n\).

В четвёртом графе нет независимого множества размера 2, однако есть паросочетание размера 2.

F. GCD-группы 2

жадные алгоритмы Теория вероятностей теория чисел *2900

Дан массив из \(n\) чисел. Требуется разбить все числа на два множества таким образом, чтобы НОД всех чисел первого множества был равен единице и НОД всех чисел второго множества был равен единице.

НОД множества чисел — наибольшее целое число, делящее все числа из множества.

Оба множества должны быть непустыми.

Входные данные

В первой строке записано число \(n\) (\(2 \leq n \leq 10^5\)).

Во второй строке записаны \(n\) чисел \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

В первой строке выведите «YES» (без кавычек), если разбить числа на два множества требуемым образом возможно, или «NO» (без кавычек) в противном случае.

Если разбить числа на два множества возможно, во второй строке выведите \(n\) чисел, где \(i\)-е число равно \(1\), если элемент \(a_i\) должен оказаться в первом множестве, и \(2\) в противном случае.

Если существует несколько решений, вы можете вывести любое.

C. Фрукты

жадные алгоритмы реализация сортировки *1100

Наступает пора весны, а это означает что на прилавках появляется большое количество фруктов. В один из солнечных дней мальчик Валерий решил пройтись по магазинам. Он составил список из m фруктов, которые хотел бы приобрести. В том случае, если Валера хотел купить несколько фруктов одного сорта, то он несколько раз заносил этот фрукт в свой список.

Подойдя к фруктовому ларьку Ашота, мальчик заметил, что продавец еще не успел наклеить ценники на свой товар, а только лишь разложил их на прилавке. В скором времени, когда Ашот присвоит каждому фрукту его цену, Валера сможет подсчитать, сколько денег ему потребуется для приобретения всего желаемого из списка. Однако мальчик хочет заранее знать минимальную (в случае «самого удачного» для Валеры распределения ценников) и максимальную (в случае «самого неудачного» для Валеры распределения ценников) стоимости покупки.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество ценников, а, следовательно, и различных сортов фруктов, имеющихся у продавца Ашота, и количество записей в списке Валерия. Во второй строке через пробелы записаны n целых положительных чисел. Каждое из этих чисел не превосходит 100 и означает цену одного фрукта определенного сорта. В последующих m строках записаны названия фруктов, которые желает приобрести мальчик. Каждое название состоит из строчных букв латинского алфавита и имеет длину от 1 до 32 символов. Гарантируется, что число различных фруктов в списке не превосходит n. Также гарантируется, что у продавца в наличии имеются все фрукты, которые желает приобрести Валера.

Выходные данные

Выведите через пробел два числа a и b (a ≤ b) — минимальную и максимальную суммы, необходимые Валере для того, чтобы приобрести все фрукты из своего списка.

F. Пауки

Деревья дп жадные алгоритмы *1400

Однажды мама попросила Петю разобрать игрушки и избавиться от части из них. Петя нашел целую коробку игрушечных пауков. Они очень ему дороги, и мальчик не хочет их выкидывать. Петя придумал хитрый план: он склеит всех паучков и подвесит к потолку. Также он знает, что чем ниже будет свисать эта конструкция, тем больше понравится маме, и она не станет выкидывать его самые любимые игрушки. Помогите Пете осуществить его план.

Паук состоит из k бусинок, связанных k - 1 ниточкой. Каждая ниточка соединяет две различные бусинки, при этом любая пара бусинок, составляющих паука, либо непосредственно связана ниточкой, либо связана некоторой цепочкой из ниточек и бусинок.

Склеивать пауков Петя может непосредственно за бусинки. Длина каждой нитки равна 1. Размерами бусинок можно пренебречь. Поэтому можно считать, что склеивание пауков происходит путем отождествления некоторых бусинок (см. рисунок). При этом конструкция, получаемая при склеивании, также должна представлять собой паука, т.е. для нее должны выполняться указанные свойства.

После того, как Петя склеит всех пауков, он считает длину получившейся поделки. Расстояние между парой бусинок вычисляется как длина ниточек, соединяющих эти две бусинки. Длиной полученной конструкции называется наибольшее расстояние между всеми парами бусинок. Петя хочет получить конструкцию как можно большей длины.

На рисунке изображено 2 паучка из второго примера. К бусинке номер 2 первого паучка мы приклеим второго паучка за бусинку с номером 1. На рисунке выделены ниточки в паучках, которые образуют последовательность ниточек максимальной длины.

Входные данные

В первой строке входного файла записано одно целое число n (1 ≤ n ≤ 100) — количество пауков. Следующие n строк содержат описания каждого паука: целое число ni (2 ≤ ni ≤ 100) — количество бусин, далее ni - 1 пара чисел, означающих номера бусин, соединенных нитками. Бусинки, составляющие каждого паука, нумеруются от 1 до ni.

Выходные данные

Выведите одно число — длину искомой конструкции.

I. Счастье в числах

жадные алгоритмы *2200

Вася давно собирает счастливые билеты. В его коллекции уже насчитывается несколько тысяч счастливых трамвайных, троллейбусных и автобусных билетов. Васе уже надоело стандартное понимание того, является ли билет счастливым. Поэтому он ищет новые понимания. Кроме того, Васе непонятно, почему все билеты делятся только на счастливые и несчастливые. Он считает, что все билеты счастливые, только в разной степени. Немного поразмыслив, Вася пришел к определению счастливости билета. Пусть билет состоит из 2n цифр. Представим, что каждая из этих цифр записана так, как это показано на рисунке:

Цифры такого вида вы наверняка видели на электронных часах: для отображения цифры используются семь сегментов, каждый из которых может быть подсвечен или нет; подсвеченные сегменты образуют цифру. Представив, что цифры записаны именно так, Вася берет правую половину билета и накладывает ее на левую, совмещая первую цифру с n + 1-й, вторую с n + 2-й, ..., n-ю с 2n-й. Для каждой пары совмещенных цифр он подсчитывает, сколько сегментов подсвечены как в одной цифре, так и в другой, и суммирует эти количества. Полученную величину он называет счастливостью билета. Например, счастливость билета 03 равна четырем, а счастливость билета 2345 — шести.

По заданному номеру билета, состоящему из 2n цифр, найдите наименьший по номеру билет среди тех билетов, чей номер больше данного, но состоит также из 2n цифр, и чья счастливость больше, чем счастливость данного билета.

Входные данные

В первой строке записан номер билета, состоящий из k символов (k = 2n, 1 ≤ n ≤ 105).

Выходные данные

Выведите номер искомого билета или «-1» (без кавычек), если такого билета не существует.

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\)-м столбце, поэтому игра выиграна сразу.

B. Обнуление массива

жадные алгоритмы математика *1500

Вам дан массив \(a_1, a_2, \ldots, a_n\).

За одну операцию вы можете взять любые два элемента \(a_i\) и \(a_j\) (\(i \ne j\)) и уменьшить каждый из них на единицу.

Вам нужно проверить можно ли сделать все элементы массива равными нулю или нет.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите «YES», если можно сделать все элементы массива равными нулю. Иначе выведите «NO».

Примечание

В первом примере можно сделать все элементы равными нулю за \(3\) операции:

  • Уменьшить \(a_1\) и \(a_2\),
  • Уменьшить \(a_3\) и \(a_4\),
  • Уменьшить \(a_3\) и \(a_4\)

Во втором примере можно показать, что сделать все элементы равными нулю нельзя.

C. Максимальная медиана

Бинарный поиск жадные алгоритмы математика сортировки *1400

Вам дан массив \(a\) из \(n\) целых чисел, где \(n\) нечётно. Вы можете проделать с массивом следующую операцию:

  • Выбрать один из элементов массива (например \(a_i\)) и увеличить его на \(1\) (то есть заменить на \(a_i + 1\)).

Вы хотите сделать медиану массива максимально большой, используя не более \(k\) операций.

Медианой нечётного по размеру массива называется средний элемент, если массив отсортировать по неубыванию. Например, медианой массива \([1, 5, 2, 3, 5]\) является \(3\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(n\) нечётно, \(1 \le k \le 10^9\)) — количество элементов в массиве и наибольшее возможное количество операций, которое можно сделать.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите одно целое число — наибольшую возможную медиану после всех операций.

Примечание

В первом примере можно два раза увеличить второй элемент. Тогда массив будет равен \([1, 5, 5]\) и его медиана равна \(5\).

Во втором примере можно один раз увеличить второе число, а также два раза увеличить третье и пятое. Тогда ответ будет равен \(3\).

В третьем примере можно сделать четыре операции, чтобы увеличить первый, четвёртый, шестой и седьмой элемент, тогда массив будет равен \([5, 1, 2, 5, 3, 5, 5]\) и медиана будет равна \(5\).

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\) ходов.

A. Вам заданы две бинарные строки...

битмаски жадные алгоритмы *1100

Вам заданы две бинарные строки \(x\) и \(y\), которые являются двоичными представлениями некоторых чисел (назовем их \(f(x)\) и \(f(y)\)). Вы можете выбрать целое число \(k \ge 0\), посчитать значение \(s_k = f(x) + f(y) \cdot 2^k\) и выписать двоичное представление \(s_k\) в обратном порядке (назовем его \(rev_k\)). Например, пусть \(x = 1010\) и \(y = 11\); вы выбрали \(k = 1\), и так как \(2^1 = 10_2\), то \(s_k = 1010_2 + 11_2 \cdot 10_2 = 10000_2\) и \(rev_k = 00001\).

Для заданных \(x\) и \(y\), вам необходимо выбрать такое целое \(k\), что \(rev_k\)лексикографически минимально (прочтите примечание, если не знаете, что означает «лексикографически»).

Гарантируется, что при заданных ограничениях \(k\) существует и конечно.

Входные данные

В первой строке задано одно число \(T\) (\(1 \le T \le 100\)) — количество запросов.

Следующие \(2T\) строк содержат описание запросов: две строки на запрос. В первой строке задана бинарная строка \(x\), состоящая не более чем из \(10^5\) символов, каждый из которых либо 0, либо 1.

Во второй строке задана бинарная строка \(y\), также состоящая не более чем из \(10^5\) символов, каждый из которых либо 0, либо 1.

Гарантируется, что \(1 \le f(y) \le f(x)\) (где \(f(x)\) — число, представленное как \(x\), и \(f(y)\) — число, представленное как \(y\)), обе записи не содержат лидирующих нулей, суммарная длина \(x\) по всех запросам не превосходит \(10^5\), суммарная длина \(y\) по всем запросам также не превосходит \(10^5\).

Выходные данные

Выведите \(T\) целых чисел (по одному на запрос). Для каждого запроса выведите такое \(k\), что \(rev_k\) — лексикографически минимальное.

Примечание

Первый запрос разобран в условии.

Во втором запросе выгодно выбрать \(k = 3\). \(2^3 = 1000_2\), а потому \(s_3 = 10001_2 + 110_2 \cdot 1000_2 = 10001 + 110000 = 1000001\) и \(rev_3 = 1000001\). Если, например, \(k = 0\), то \(s_0 = 10111\) и \(rev_0 = 11101\), а \(rev_3 = 1000001\) лексикографически меньше, чем \(rev_0 = 11101\).

В третьем запросе \(s_0 = 10\) и \(rev_0 = 01\). Например, \(s_2 = 101\) и \(rev_2 = 101\). И \(01\) лексикографически меньше, чем \(101\).

Цитата с английской Вики (вольный перевод): «Для того, чтобы определить, какая из двух строк идет первой в лексикографическом порядке, сначала сравнивают их первые буквы. Если они различаются, то первой идет строка, чья первая буква встречается в алфавите раньше. Если первые буквы совпадают, то сравниваются вторые буквы, и так далее. Если была достигнута ситуация, когда в одной строке больше нет букв, а в другой есть, то первая (более короткая) считается меньше.»

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)\).

B. Одинаковые прямоугольники

жадные алгоритмы математика *1200

Вам задано \(4n\) палочек, длина \(i\)-й палочки равна \(a_i\).

Вам необходимо составить \(n\) прямоугольников, каждый из которых будет состоять ровно из \(4\) палочек из заданного набора. Прямоугольник имеет четыре стороны, противоположные стороны должны иметь одинаковые длины и все углы в нем должны быть прямые. Заметьте, что каждая палочка может быть использована только в одном прямоугольнике. Каждая палочка должна быть использована как сторона, вы не можете ломать палочки или использовать не ее полную длину.

Вы хотите, чтобы все прямоугольники имели одинаковую площадь. Площадь прямоугольника со сторонами \(a\) и \(b\) равна \(a \cdot b\).

Ваша задача — сказать, возможно ли составить ровно \(n\) прямоугольников одинаковой площади или нет.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 500\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка каждого запроса содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество прямоугольников.

Вторая строка запроса содержит \(4n\) целых чисел \(a_1, a_2, \dots, a_{4n}\) (\(1 \le a_i \le 10^4\)), где \(a_i\) равно длине \(i\)-й палочки.

Выходные данные

Для каждого запроса выведите ответ на него. Если невозможно составить ровно \(n\) прямоугольников одинаковой площади при помощи заданных палочек, выведите «NO». Иначе выведите «YES».

D1. Удалите подстроку (простая версия)

жадные алгоритмы реализация *1600

Единственное отличие между легкой и сложной версиями — длины строк.

Вам задана строка \(s\) и строка \(t\), обе состоят только из строчных букв латинского алфавита. Гарантируется, что \(t\) может быть получена из \(s\) при помощи удаления некоторого (возможно, нулевого) количества символов (не обязательно последовательных) из \(s\) без изменения порядка оставшихся символов (другими словами, гарантируется, что \(t\) является подпоследовательностью \(s\)).

Например, строки «test», «tst», «tt», «et» и «» являются подпоследовательностями строки «test». А строки «tset», «se», «contest» не являются подпоследовательностями строки «test».

Вы хотите удалить некоторую подстроку (последовательную подпоследовательность) из \(s\) максимально возможной длины таким образом, чтобы после удаления этой подстроки \(t\) все еще осталась подпоследовательностью \(s\).

Если вы хотите удалить подстроку \(s[l;r]\), то строка \(s\) примет вид \(s_1 s_2 \dots s_{l-1} s_{r+1} s_{r+2} \dots s_{|s|-1} s_{|s|}\) (где \(|s|\) равно длине \(s\)).

Ваша задача — найти максимально возможную длину подстроки, которую вы можете удалить, чтобы \(t\) осталась подпоследовательностью \(s\).

Входные данные

Первая строка входных данных содержит одну строку \(s\), состоящую из не менее \(1\) и не более \(200\) строчных букв латинского алфавита.

Вторая строка входных данных содержит одну строку \(t\), состоящую из не мене \(1\) и не более \(200\) строчных букв латинского алфавита.

Гарантируется, что \(t\) является подпоследовательностью \(s\).

Выходные данные

Выведите одно целое число — максимально возможную длину подстроки, которую вы можете удалить, чтобы \(t\) осталась подпоследовательностью \(s\).

D2. Удалите подстроку (сложная версия)

Бинарный поиск жадные алгоритмы реализация *1700

Единственное отличие между легкой и сложной версиями — длины строк.

Вам задана строка \(s\) и строка \(t\), обе состоят только из строчных букв латинского алфавита. Гарантируется, что \(t\) может быть получена из \(s\) при помощи удаления некоторого (возможно, нулевого) количества символов (не обязательно последовательных) из \(s\) без изменения порядка оставшихся символов (другими словами, гарантируется, что \(t\) является подпоследовательностью \(s\)).

Например, строки «test», «tst», «tt», «et» и «» являются подпоследовательностями строки «test». А строки «tset», «se», «contest» не являются подпоследовательностями строки «test».

Вы хотите удалить некоторую подстроку (последовательную подпоследовательность) из \(s\) максимально возможной длины таким образом, чтобы после удаления этой подстроки \(t\) все еще осталась подпоследовательностью \(s\).

Если вы хотите удалить подстроку \(s[l;r]\), то строка \(s\) примет вид \(s_1 s_2 \dots s_{l-1} s_{r+1} s_{r+2} \dots s_{|s|-1} s_{|s|}\) (где \(|s|\) равно длине \(s\)).

Ваша задача — найти максимально возможную длину подстроки, которую вы можете удалить, чтобы \(t\) осталась подпоследовательностью \(s\).

Входные данные

Первая строка входных данных содержит одну строку \(s\), состоящую из не менее \(1\) и не более \(2 \cdot 10^5\) строчных букв латинского алфавита.

Вторая строка входных данных содержит одну строку \(t\), состоящую из не мене \(1\) и не более \(2 \cdot 10^5\) строчных букв латинского алфавита.

Гарантируется, что \(t\) является подпоследовательностью \(s\).

Выходные данные

Выведите одно целое число — максимально возможную длину подстроки, которую вы можете удалить, чтобы \(t\) осталась подпоследовательностью \(s\).

E. Боксёры

жадные алгоритмы сортировки *1500

Есть \(n\) боксёров, вес \(i\)-го равен \(a_i\). Каждый из них перед соревнованием может изменить свой вес не более чем на \(1\) (вес не может стать равным нулю, то есть должен остаться положительным). Вес — это всегда целое число.

Необходимо выбрать наибольшую по количеству человек такую команду боксёров, что все веса боксёров в ней — различны.

Напишите программу, которая для заданных текущих значений \(a_i\) найдет максимальное возможное количество боксёров в команде.

Возможно, что после какого-то изменения вес какого-то боксера станет \(150001\) (но не больше).

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 150000\)) — количество боксёров. В следующей строке через единичный пробел заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i\) (\(1 \le a_i \le 150000\)) — вес \(i\)-го боксёра.

Выходные данные

Выведите единственное целое число — максимальное возможное количество человек в команде.

Примечание

В первом примере боксёры не должны менять свои веса — можно просто из всех них составить команду.

Во втором примере можно одного боксёра веса \(1\) увеличить на единицу (получить вес \(2\)), одного боксёра веса \(4\) уменьшить на единицу, а другого — увеличить на единицу (получив боксёров с весами \(3\) и \(5\) соответственно). Таким образом, можно получить команду, состоящую из боксёров с весами \(5, 4, 3, 2, 1\).

F1. Завершение проектов (простая версия)

жадные алгоритмы *2100

Единственное отличие между простой и сложной версиями — то, что вам необходимо завершить все проекты в легкой версии, но это не обязательно в сложной версии.

Поликарп — очень известный фрилансер. Его текущий рейтинг равен \(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\)-й проект и изменение рейтинга после завершения проекта.

Выходные данные

Выведите «YES» или «NO».

Примечание

В первом примере возможная последовательность имеет вид: \(1, 2, 3\).

Во втором примере возможная последовательность имеет вид: \(2, 3, 1\).

В третьем примере возможная последовательность имеет вид: \(3, 1, 4, 2\).

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\)-й проект и изменение рейтинга после завершения проекта.

Выходные данные

Выведите одно целое число — размер максимально возможного подмножества (возможно, пустого) проектов, которые Поликарп может выбрать.

B. Мислав потерял массив

жадные алгоритмы математика *900

У Мислава был массив \(a_1\), \(a_2\), \(\cdots\), \(a_n\) из \(n\) целых положительных чисел, но он его потерял. Он помнит следующие сведения о массиве:

  • Количество различных чисел в массиве не меньше \(l\) и не больше \(r\);
  • Для любого элемента массива \(a_i\) верно одно из двух: либо \(a_i = 1\), либо \(a_i\) чётно, и в массиве есть число \(\dfrac{a_i}{2}\).

Например, при \(n=5\), \(l=2\), \(r=3\) массив мог быть таким: \([1,2,2,4,4]\) или таким: \([1,1,1,1,2]\), но не мог быть таким: \([1,2,2,4,8]\), потому что такой массив содержит \(4\) различных числа, не мог быть таким: \([1,2,2,3,3]\), потому что число \(3\) — нечётное и не равно \(1\), и не мог быть таким: \([1,1,2,2,16]\), потому что в массиве есть число \(16\), и нет числа \(\frac{16}{2} = 8\).

На основании этих данных он просит вас посчитать минимальную возможную сумму чисел в массиве и максимальную возможную сумму чисел в массиве.

Входные данные

Единственная строка ввода содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \leq n \leq 1\,000\), \(1 \leq l \leq r \leq \min(n, 20)\)) — размер массива, минимальное и максимальное число различных чисел в массиве.

Выходные данные

Выведите два числа — минимальную возможную сумму и максимальную возможную сумму чисел в массиве.

Примечание

В первом примере массив может выглядеть так: \([1,1,1,2]\), \([1,1,2,2]\) или \([1,2,2,2]\). В первом случае достигается минимальная сумма, в последнем — максимальная.

Во втором примере минимальная сумма достигается при массиве \([1,1,1,1,1]\), максимальная — при \([1,2,4,8,16]\).

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\).

D1. Кёрк и бинарная строка (лёгкая версия)

жадные алгоритмы Перебор Строки *2000

Единственное отличие между легкой и сложной версиями — длины строк. Вы можете взламывать эту задачу только тогда, когда решите обе задачи.

У Кёрка есть бинарная строка \(s\) (строка, содержащая только нули и единицы) длины \(n\), и он просит вас найти бинарную строку \(t\) такой же длины, для которой выполняются следующие условия:

  • Для любых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) длина наибольшей неубывающей подпоследовательности в подстроке \(s_{l}s_{l+1} \ldots s_{r}\) равна длине наибольшей неубывающей подпоследовательности в подстроке \(t_{l}t_{l+1} \ldots t_{r}\);
  • Количество нулей в строке \(t\) — максимально возможное.

Неубывающая подпоследовательность в строке \(p\) — это такая последовательность индексов \(i_1, i_2, \ldots, i_k\), что \(i_1 < i_2 < \ldots < i_k\) и \(p_{i_1} \leq p_{i_2} \leq \ldots \leq p_{i_k}\). Число \(k\) называется длиной подпоследовательности.

Если существует несколько строк, удовлетворяющих условиям, то выведите любую.

Входные данные

Единственная строка содержит бинарную строку длины не больше \(2\: 000\).

Выходные данные

Выведите бинарную строку, для которой выполняются указанные условия. Если существует несколько таких строк, выведите любую.

Примечание

В первом примере:

  • Для подстрок длины \(1\) длина наибольшей неубывающей подпоследовательности равна \(1\);
  • Для \(l = 1, r = 2\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{2}\) — \(11\), для подстроки \(t_{1}t_{2}\) — \(01\);
  • Для \(l = 2, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{2}s_{3}\) — \(1\), для подстроки \(t_{2}t_{3}\) — \(1\);
  • Для \(l = 1, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{3}\) — \(11\), для подстроки \(t_{1}t_{3}\) — \(00\);

Второй пример аналогичен первому.

D2. Кёрк и бинарная строка (сложная версия)

жадные алгоритмы математика Строки Структуры данных *2100

Единственное отличие между легкой и сложной версиями — длины строк. Вы можете взламывать эту задачу тогда, когда решите ее. Но предыдущую только тогда, когда решите обе задачи.

У Кёрка есть бинарная строка \(s\) (строка, содержащая только нули и единицы) длины \(n\), и он просит вас найти бинарную строку \(t\) такой же длины, для которой выполняются следующие условия:

  • Для любых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) длина наибольшей неубывающей подпоследовательности в подстроке \(s_{l}s_{l+1} \ldots s_{r}\) равна длине наибольшей неубывающей подпоследовательности в подстроке \(t_{l}t_{l+1} \ldots t_{r}\);
  • Количество нулей в строке \(t\) — максимально возможное.

Неубывающая подпоследовательность в строке \(p\) — это такая последовательность индексов \(i_1, i_2, \ldots, i_k\), что \(i_1 < i_2 < \ldots < i_k\) и \(p_{i_1} \leq p_{i_2} \leq \ldots \leq p_{i_k}\). Число \(k\) называется длиной подпоследовательности.

Если существует несколько строк, удовлетворяющих условиям, то выведите любую.

Входные данные

Единственная строка содержит бинарную строку длины не больше \(10^5\).

Выходные данные

Выведите бинарную строку, для которой выполняются указанные условия. Если существует несколько таких строк, выведите любую.

Примечание

В первом примере:

  • Для подстрок длины \(1\) длина наибольшей неубывающей подпоследовательности равна \(1\);
  • Для \(l = 1, r = 2\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{2}\) — \(11\), для подстроки \(t_{1}t_{2}\) — \(01\);
  • Для \(l = 2, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{2}s_{3}\) — \(1\), для подстроки \(t_{2}t_{3}\) — \(1\);
  • Для \(l = 1, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{3}\) — \(11\), для подстроки \(t_{1}t_{3}\) — \(00\);

Второй пример аналогичен первому.

A. Почти равные

жадные алгоритмы Конструктив математика *1200

Дано целое положительное число \(n\). Нужно расставить числа от \(1\) до \(2n\) по кругу таким образом, чтобы выполнялось следующее условие:

Для каждых \(n\) последовательных чисел на окружности выпишем на доску их сумму. Тогда любые два из выписанных на доске \(2n\) чисел отличаются не более, чем на \(1\).

К примеру, выберем \(n = 3\). Слева вы можете увидеть пример правильной расстановки:\(1 + 4 + 5 = 10\), \(4 + 5 + 2 = 11\), \(5 + 2 + 3 = 10\), \(2 + 3 + 6 = 11\), \(3 + 6 + 1 = 10\), \(6 + 1 + 4 = 11\), любые два числа отличаются не более чем на \(1\). Справа вы можете увидеть неправильную расстановку: к примеру, \(5 + 1 + 6 = 12\), а \(3 + 2 + 4 = 9\), \(9\) и \(12\) отличаются более чем на \(1\).

Входные данные

Первая и единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Выходные данные

Если решения не существует, в первой строке выведите «NO».

Если оно существует, в первой строке выведите «YES». После чего, во второй строке выведите \(2n\) чисел — числа от \(1\) до \(2n\) в порядке в котором они будут стоять на окружности. Каждое число должно встречаться только один раз. Если есть несколько решений, выведите любое.

Примечание

Пример из условия приведен для первого примера.

Можно доказать, что для второго примера решения не существует.

A. Бывает два типа бургеров

жадные алгоритмы математика Перебор реализация *800

В вашем ресторане есть два типа бургеров — гамбургеры и чикенбургеры! Для приготовления гамбургера нужны две булочки и говяжья котлета. Для приготовления чикенбургера нужны две булочки и куриная котлета.

У вас есть \(b\) булочек, \(p\) говяжьих котлет и \(f\) куриных котлет. Один гамбургер вы продаете за \(h\) долларов, а один чикенбургер за \(c\) долларов. Посчитайте максимальную прибыль, которую вы можете получить.

Вам нужно ответить на \(t\) независимых запросов.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) – количество запросов.

Первая строка каждого запроса содержит три числа \(b\), \(p\) и \(f\) (\(1 \le b, ~p, ~f \le 100\)) — количество булочек, говяжьих и куриных котлет в вашем ресторане.

Вторая строка каждого запроса содержит два числа \(h\) и \(c\) (\(1 \le h, ~c \le 100\)) — цена за гамбургер и чикенбургер в вашем ресторане соответственно.

Выходные данные

На каждый запрос выведите одно число — максимальную прибыль, которую вы можете получить.

Примечание

В первом запросе вам нужно продать два гамбургера и три чикенбургера. Ваш доход составит \(2 \cdot 5 + 3 \cdot 10 = 40\).

Во втором запросе вам нужно продать один гамбургер и два чикенбургера. Ваш доход составит \(1 \cdot 10 + 2 \cdot 12 = 34\).

В третьем запросе вы не можете создать ни одного бургера, так как у вас всего одна булочка. Таким образом, ваш доход равен нулю.

B. Заполнение квадратов

жадные алгоритмы Конструктив реализация *1200

Вам заданы две матрицы \(A\) и \(B\). В каждой матрице ровно \(n\) строк и \(m\) столбцов. Каждый элемент \(A\)\(0\) или \(1\); каждый элемент \(B\) изначально равен \(0\).

Вы можете провести любое количество операций с матрицей \(B\). Для проведения операции вы должны выбрать любую подматрицу \(B\) размера \(2 \times 2\) и заменить все элементы в этой подматрице на \(1\). Иными словами, вы выбираете два целых числа \(x\) и \(y\) (\(1 \le x < n\), \(1 \le y < m\)), а затем заменяете все элементы \(B_{x, y}\), \(B_{x, y + 1}\), \(B_{x + 1, y}\) и \(B_{x + 1, y + 1}\) на \(1\).

Ваша задача — сделать матрицу \(B\) равной матрице \(A\). Две матрицы \(A\) и \(B\) равны тогда и только тогда, когда каждый элемент матрицы \(A\) равен соответствующему элементу матрицы \(B\).

Можно ли сделать матрицы равными? Если это так, вы должны найти последовательность операций, которые делают матрицу \(B\) равной матрице \(A\). Обратите внимание, что минимизировать количество операций не нужно.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n, m \le 50\)).

Затем следуют \(n\) строк, в каждой по \(m\) целых чисел. \(j\)-е число в \(i\)-й строке — \(A_{i, j}\). Каждое число равно либо \(0\), либо \(1\).

Выходные данные

Если невозможно сделать \(B\) равной \(A\), выведите одно число \(-1\).

Иначе выведите любую последовательность операций, превращающую \(B\) в \(A\), в следующем формате: в первой строке выведите одно целое число \(k\) — количество операций, а затем выведите \(k\) строк, в каждой из которых должны быть два целых числа \(x\) и \(y\) для соответствующей операции (заменить все элементы \(B_{x, y}\), \(B_{x, y + 1}\), \(B_{x + 1, y}\) и \(B_{x + 1, y + 1}\) на \(1\)). Должно выполняться условие \(0 \le k \le 2500\).

Примечание

Иллюстрация к ответу на первый тест:

\(\begin{matrix} 0 & 0 & 0 & & 1 & 1 & 0 & & 1 & 1 & 1 & & 1 & 1 & 1 \\ 0 & 0 & 0 & \rightarrow & 1 & 1 & 0 & \rightarrow & 1 & 1 & 1 & \rightarrow & 1 & 1 & 1 \\ 0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 1 & 1 \end{matrix}\)

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\) чисел — по одному на запрос. Для каждого запроса выведите минимальную возможную стоимость построенного трубопровода.

Примечание

Оптимальный газопровод для первого запроса изображен на рисунке сверху.

Оптимальный газопровод для второго запроса изображен ниже:

Оптимальный (и единственный) газопровод для третьего примера изображен ниже:

Оптимальный газопровод для четвертого примера изображен ниже:

D. Восстановить перестановку

Бинарный поиск жадные алгоритмы реализация Структуры данных *1900

Последовательность целых чисел \(p_{1},p_{2}, \ldots,p_{n}\) называется перестановкой, если она содержит каждое число от \(1\) до \(n\) ровно один раз. Например, следующие последовательности перестановки: \([3,1,2], [1], [1,2,3,4,5]\) и \([4,3,1,2]\). А следующие последовательности не являются перестановками: \([2], [1,1], [2,3,4]\).

Загадана перестановка длины \(n\).

Для каждого индекса \(i\) вам дано \(s_{i}\), равное сумме всех таких \(p_{j}\), что \(j < i\) и \(p_{j} < p_{i}\). Иначе говоря, \(s_i\) — это сумма всех элементов до \(i\)-го элемента, которые меньше \(i\)-го элемента.

Ваша задача — восстановить перестановку.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)) — размер перестановки.

Вторая строка содержит \(n\) целых чисел \(s_{1}, s_{2}, \ldots, s_{n}\) (\(0 \le s_{i} \le \frac{n(n-1)}{2}\)).

Гарантируется, что \(s\) соответствует корректной перестановке длины \(n\).

Выходные данные

Выведите \(n\) целых чисел \(p_{1}, p_{2}, \ldots, p_{n}\) — элементы восстановленной перестановки.

Можно показать, что ответ всегда уникальный.

Примечание

В первом примере для каждого \(i\) не существует позиции \(j\), удовлетворяющей обоим условиям, соответственно \(s_i\) всегда равен \(0\).

Во втором примере для \(i = 2\) позиция \(j = 1\) удовлетворяет условиям, так что \(s_2 = p_1\).

В третьем примере для \(i = 2, 3, 4\) только позиция \(j = 1\) удовлетворяет условиям, так что \(s_2 = s_3 = s_4 = 1\). Для \(i = 5\) возможны все позиции \(j = 1, 2, 3, 4\), и \(s_5 = p_1 + p_2 + p_3 + p_4 = 10\).

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\).

G. Многоугольники

жадные алгоритмы математика теория чисел *2800

Вам даны два целых числа \(n\) и \(k\).

Вам нужно построить \(k\) правильных многоугольников с общей описанной окружностью с различными количествами сторон \(l\) от \(3\) до \(n\).

Изображение к первому примеру.

Вы можете вращать их, чтобы минимизировать количество различных точек на окружности. Найдите минимальное количество таких точек.

Входные данные

В первой строке ввода записаны два целых числа \(n\) и \(k\) (\(3 \le n \le 10^{6}\), \(1 \le k \le n-2\)) — максимальное количество сторон у многоугольника и количество многоугольников, которое нужно построить, соответственно.

Выходные данные

Выведите одно целое число — минимальное число точек на окружности, необходимых для размещения \(k\) многоугольников.

Примечание

В первом примере \(n = 6\) и \(k = 2\). Таким образом, есть \(4\) многоугольника с количествами сторон \(3\), \(4\), \(5\) и \(6\) из которых нужно выбирать, и если выбрать треугольник и шестиугольник, получится картинка из условия.

Таким образом, минимальное необходимое количество точек на круге \(6\), что также минимально по всем возможных множествам.

A. Раскрашивание чисел

жадные алгоритмы математика реализация *800

Вам дана последовательность целых чисел \(a_1, a_2, \dots, a_n\). Вам нужно раскрасить элементы, так чтобы:

  • Если мы рассмотрим произвольный цвет, то все элементы этого цвета должны делиться на минимальный элемент этого цвета.
  • Количество использованных цветов было бы минимально возможным.

Например, можно покрасить элементы \([40, 10, 60]\) в один цвет, так как они все делятся на \(10\). Каждый из цветов можно использовать произвольное количество раз (в частности, разрешается использовать любой цвет ровно один раз). Элементы, покрашенные в один цвет, не обязаны идти подряд.

Например, если \(a=[6, 2, 3, 4, 12]\), то нужно использовать два цвета: можно покрасить \(6\), \(3\), \(12\) в первый цвет (\(6\), \(3\) и \(12\) делятся на \(3\)), а \(2\) и \(4\) во второй цвет (\(2\) и \(4\) делятся на \(2\)). Например, если \(a=[10, 7, 15]\), то нужно \(3\) цвета (следует покрасить каждый элемент в отдельный цвет).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)), где \(n\) обозначает длину последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)). Числа в последовательности могут повторяться.

Выходные данные

Выведите минимальное количество цветов, которое нужно, чтобы покрасить все элементы корректным образом.

Примечание

В первом примере можно покрасить элементы в \(3\) цвета следующим образом:

  • покрасить в первый цвет элементы: \(a_1=10\) и \(a_4=5\),
  • покрасить во второй цвет элементы: \(a_3=3\),
  • покрасить в третий цвет элементы: \(a_2=2\), \(a_5=4\) и \(a_6=2\).

Во втором примере можно использовать один цвет на все элементы.

В третьем примере можно покрасить элементы в \(4\) цвета следующим образом:

  • покрасить в первый цвет элементы: \(a_4=4\), \(a_6=2\) и \(a_7=2\),
  • покрасить во второй цвет элементы: \(a_2=6\), \(a_5=3\) и \(a_8=3\),
  • покрасить в третий цвет элемент \(a_3=5\),
  • покрасить в четвёртый цвет элемент \(a_1=7\).

C. Раскрашивание цифр

жадные алгоритмы Конструктив реализация *1500

Вам дана последовательность из \(n\) цифр \(d_1d_2 \dots d_{n}\). Вам нужно раскрасить все цифры в два цвета таким образом, чтобы:

  • каждая цифра была покрашена либо в цвет \(1\), либо в цвет \(2\);
  • если выписать подряд слева направо все цифры покрашенные в цвет \(1\), а затем следом все цифры, покрашенные в цвет \(2\), то полученная последовательность из \(n\) цифр будет неубывающей (то есть каждая следующая цифра будет больше или равна предыдущей цифры).

Например, для последовательности цифр \(d=914\) единственная корректная раскраска имеет вид \(211\) (в цвет \(1\) покрашены две последние цифры, в цвет \(2\) покрашена первая цифра). Обратите внимание, что \(122\) не соответствует требованиям (результат выписывания \(9\) и следом \(14\) не является неубывающей последовательностью).

Допустимо, что какой-либо из двух цветов не используется вообще. Цифры, покрашенные в один цвет, не обязаны располагаться в последовательности подряд.

Найдите любой из возможных способов раскрасить заданную последовательность цифр требуемым способом или определите, что это невозможно сделать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных в тесте.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина заданной последовательности цифр.

Следующая строка содержит последовательность из \(n\) цифр \(d_1d_2 \dots d_{n}\) (\(0 \le d_i \le 9\)). Цифры записаны подряд без пробелов или каких-либо других разделителей. Последовательность может начинаться с 0.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) строк — ответы на каждый из наборов входных данных в тесте.

В случае существования решения для набора соответствующая строка вывода должна содержать любую из допустимых раскрасок, записанную в виде строки из \(n\) цифр \(t_1t_2 \dots t_n\) (\(1 \le t_i \le 2\)), где \(t_i\) — это цвет, в который покрашена \(i\)-я цифра. Если допустимых решений несколько, выведите любую из них.

Если решения не существует, то в соответствующая строка вывода должна содержать единственный символ «-» (минус).

Примечание

В первом тестовом наборе \(d=040425524644\). Вывод \(t=121212211211\) является корректным, так как последовательность \(0022444\) (покрашена в \(1\)), сконкатенированная с \(44556\) (покрашена в \(2\)), равна последовательности \(002244444556\), которая является результатом сортировки всех заданных \(n\) цифр.

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\).

G1. На блоки (упрощенная версия)

жадные алгоритмы реализация снм Структуры данных *2000

Это более простая версия следующей задачи. В данной версии \(q = 0\).

Последовательность чисел называется хорошей, если элементы разбиты на блоки как в \([3, 3, 3, 4, 1, 1]\). Формально, если два элемента равны, то все элементы между ними должны быть тоже равны тому же значению.

Определим сложность последовательности как минимальное число элементов, которое нужно поменять, чтобы получить хорошую последовательность. Однако, если вы заменяете хотя бы один \(x\) на какое-то значение \(y\), нужно заменить все остальные значения \(x\) на \(y\) тоже. Например, для \([3, 3, 1, 3, 2, 1, 2]\) не разрешается поменять первую \(1\) на \(3\), а вторую \(1\) на \(2\). Вы можете или не заменять \(1\) совсем, или заменить их все на что-то одно.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и \(q\) изменений.

Каждое изменение имеет вид «\(i\) \(x\)» — заменить \(a_i\) на \(x\).

Выведите сложность изначальной последовательности и последовательности после каждого изменения. Обратите внимание, что изменения не независимы (изменение сохраняется на будущее).

Входные данные

Первая строка содержит целые числа \(n\) и \(q\) (\(1 \le n \le 200\,000\), \(q = 0\)) — длина последовательности и число изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 200\,000\)) — изначальную последовательность.

Каждая из следующих \(q\) строк содержит целые числа \(i_t\) и \(x_t\) (\(1 \le i_t \le n\), \(1 \le x_t \le 200\,000\)) — позицию и новое значение.

Выходные данные

Выведите \(q+1\) целое число — ответ для изначальной последовательности и ответ после каждого изменения.

H. Траволаторы

жадные алгоритмы математика Структуры данных *3300

В аэропортах часто используются траволаторы, потому что они помогают проходить большие расстояния быстрее. Каждый траволатор имеет некоторую собственную скорость, которая увеличивает скорость, с которой вы идёте. Вы можете просто стоять на траволаторе (тогда вы будете двигаться со скоростью траволатора), либо вы можете ещё и идти, тогда ваша итоговая скорость будет равна сумме скорости, с который вы идёте, и скорости траволатора.

Лимак хочет добраться из точки \(0\) в точку \(L\), расположенные на одной прямой. Между ними есть \(n\) дизъюнктных траволаторов. \(i\)-й из них описывается целыми числами \(x_i\), \(y_i\) и вещественным числом \(s_i\). \(i\)-й траволатор начинается в \(x_i\), заканчивается в \(y_i\) и имеет скорость \(s_i\).

Каждый траволатор расположен внутри отрезка \([0, L]\) и никакие два траволатора не имеют ненулевую длину пересечения. При этом траволаторы могут касаться.

Лимак хочет понять, как ему следует распределить свою энергию. Например, может быть оптимально стоять где-нибудь (или идти с низкой скоростью), чтобы сэкономить энергию и потом идти быстрее.

Изначально энергия Лимака равна \(0\), и она никогда не должна падать ниже этого значения. В каждый момент он может идти со скоростью \(v\) в диапазоне \([0, 2]\), и это будет стоить ему \(v\) энергии. Также его энергия постоянно пополняется со скоростью \(1\) единица энергии в секунду. Таким образом, если он идёт со скоростью \(v\), его энергия растёт со скоростью \((1-v)\). Обратите внимание, что негативный рост означает убывание энергии.

В частности, Лимак может идти со скоростью \(1\), и это никак не будет влиять на его уровень энергии, а если он будет идти со скорость \(0.77\), то энергия будет расти на \(0.23\).

Лимак может выбирать свою скорость произвольным образом (любое вещественное число в диапазоне \([0, 2]\)) в каждый момент времени (в том числе в моменты, когда он находится в нецелых позициях). Всё происходит непрерывно (не дискретно).

За какое минимальное время Лимак сможет добраться из \(0\) в \(L\)?

Входные данные

Первая строка содержит целые числа \(n\) и \(L\) (\(1 \le n \le 200\,000\), \(1 \le L \le 10^9\)), число траволаторов и расстояние, которое нужно пройти.

Каждая из следующих \(n\) строк содержит целые числа \(x_i\), \(y_i\) и вещественное число \(s_i\) (\(0 \le x_i < y_i \le L\), \(0.1 \le s_i \le 10.0\)). Значение \(s_i\) дано с не более, чем \(9\) знаками после запятой.

Гарантируется, что никакие два траволатора не имеют пересечения ненулевой длины. Траволаторы перечислены слева направо. Иначе говоря, \(y_i \le x_{i + 1}\) при \(1 \le i \le n - 1\).

Выходные данные

Выведите одно вещественное число — минимальное время, которое нужно чтобы достичь \(L\). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить \(10^{-9}\).

Примечание

Картинка изображает первые два примера. В первом примере есть траволатор из \(0\) в \(2\) скорости \(2.0\), а Лимак хочет попасть в точку \(5\). Во втором примере есть траволатор из \(2\) в \(4\) скорости \(0.91\).

В первом примере, одна из оптимальных стратегий выглядит следующим образом.

  • Добраться из \(0\) в \(2\) просто стоя на траволаторе. Траволатор едет со скоростью \(2\), значит понадобится всего \(1\) секунда времени и энергия увеличится на \(1\).
  • Добраться из \(2\) в \(4\) идя со скоростью \(2\) в течении \(1\) секунды. За эту \(1\) секунду уровень энергии понизится до \(0\).
  • Добраться из \(4\) в \(5\) идя со скоростью \(1\). На это понадобится \(1\) секунда и уровень энергии будет равен \(0\) всё это время.

Тем самым общее время равно \(1 + 1 + 1 = 3\).

B. Марчин и сборы

жадные алгоритмы Перебор *1700

Марчин — тренер в университете. Есть \(n\) студентов, которые хотят поучаствовать в сборах. Марчин умный тренер, поэтому он хочет отправить только студентов, которые могут спокойно работать вместе.

Рассмотрим студентов. Они пронумерованы целыми числами от \(1\) до \(n\). Каждый из них описывается двумя целыми числами \(a_i\) и \(b_i\); \(b_i\) равно опыту \(i\)-го участника (чем больше, тем лучше). А также есть \(60\) известных алгоритмов, которые пронумерованы целыми числами от \(0\) до \(59\). Если \(i\)-й студент знает \(j\)-й алгоритм, тогда \(j\)-й бит (\(2^j\)) равен единице в двоичной записи \(a_i\). Иначе, он равен нулю.

Студент \(x\) считает, что он лучше студента \(y\) если и только если \(x\) знает какой-то алгоритм, который не знает \(y\). Обратите внимание, что два студента могут считать, что они лучше друг друга. Группа студентов может работать спокойно, если ни один студент из группы не считает, что он лучше всех остальных в этой группе.

Марчин хочет отправить группу из хотя бы двух студентов, которые могут работать вместе и имеют максимально возможную сумму уровней опыта. Чему равна эта сумма?

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 7000\)) — количество студентов, заинтересованных в сборах.

Во второй строке записаны \(n\) целых чисел. \(i\)-е из них это \(a_i\) (\(0 \leq a_i < 2^{60}\)).

В третьей строке записаны \(n\) целых чисел. \(i\)-е из них это \(b_i\) (\(1 \leq b_i \leq 10^9\)).

Выходные данные

Выведите одно целое число, которое равно максимальной сумме \(b_i\) студентов в группе, в которой студенты могут работать спокойно. Если не существует группы из хотя бы двух студентов, в которой студенты могут работать спокойно, выведите 0.

Примечание

В первом примере оптимально отправить на сборы первого, второго, и третьего студента. Также возможно отправить только первого и третьего студента, но сумма \(b_i\) у них будет меньше.

Во втором тесте, в каждой группе из хотя бы двух студентов, кто-то всегда будет думать, что он лучше всех остальных в этой группе.

C. Мороженое

*особая задача жадные алгоритмы сортировки *1700

Лето в Берляндии длится \(n\) дней, цена одной порции мороженого в \(i\)-й день равна \(c_i\). За лето Таня хочет съесть ровно \(k\) порций мороженого. При этом в \(i\)-й день она решила, что съест не менее \(a_i\) порций, но не более \(b_i\) (\(a_i \le b_i\)). Иными словами, пусть \(d_i\) равно количеству порций, сколько она съест в \(i\)-й день. Тогда \(d_1+d_2+\dots+d_n=k\) и \(a_i \le d_i \le b_i\) для каждого \(i\).

Учитывая, что порции мороженого можно есть только в день покупки, найдите минимальную сумму денег, сколько Таня потратит на мороженое летом.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2\cdot10^5\), \(0 \le k \le 10^9\)) — количество дней и суммарное количество порций мороженого, которое съест Таня за лето.

Далее в \(n\) строках содержатся описания дней, по одному описанию в строке. Каждое описание состоит из трёх целых чисел \(a_i, b_i, c_i\) (\(0 \le a_i \le b_i \le 10^9\), \(1 \le c_i \le 10^6\)).

Выходные данные

Выведите минимальную сумму денег, которую Таня может потратить на мороженое летом. Если у Тани не существует способа так покупать и есть мороженое, чтобы удовлетворить все требования, то выведите -1.

Примечание

В первом примере Тане надо съесть \(3\) порции мороженого в первый день, \(1\) порцию мороженого во второй день и \(3\) порции мороженого в третий день. В таком случае, сумма потраченных денег равна \(3\cdot6+1\cdot4+3\cdot3=31\). Можно показать, что любой другой допустимый способ съесть ровно \(7\) порций мороженого потребует больших расходов.

D. Команды

*особая задача Бинарный поиск жадные алгоритмы математика *2000

Есть \(n\) игроков в настольный боулинг, рейтинг \(i\)-го игрока равен \(r_i\). Требуется составить наибольшее количество команд таким образом, чтобы:

  • каждый игрок принадлежал не более чем одной команде;
  • каждая команда состояла ровно из \(a+b\) игроков;
  • в каждой команде было бы ровно \(a\) игроков какого-то одинакового рейтинга и ровно \(b\) игроков другого одинакового рейтинга, который в \(k\) раз больше.

Например, если \(n=12\), \(r=[1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 6, 6]\), \(a=1\), \(b=2\), \(k=2\), то можно составить две команды с рейтингами \([1, 2, 2]\) и одну с рейтингами \([3, 6, 6]\). Таким образом, максимум можно составить \(3\) команды.

По заданным \(n, r_1 \dots r_n, a, b\) и \(k\) найдите максимальное количество команд, которое можно составить.

Входные данные

В первой строке записаны целые числа \(n\), \(a\), \(b\) и \(k\) (\(1 \le n,a,b \le 3\cdot10^5\), \(2 \le k \le 1000\)). Вторая строка содержит последовательность рейтингов игроков — целые числа \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^6\)).

Выходные данные

Выведите единственное целое число — максимальное количество команд, которое можно составить из \(n\) заданных игроков.

E. Double Permutation Inc.

*особая задача Бинарный поиск жадные алгоритмы *2000

Недавно Поликарп стал сотрудником компании «Double Permutation Inc.» Теперь он фанатеет от перестановок и всюду их ищет!

Перестановкой в этой задаче будем называть такую последовательность целых чисел \(p_1, p_2, \dots, p_k\), что каждое целое число от \(1\) до \(k\) встречается в ней ровно один раз. Например, следующие последовательности являются перестановками \([3, 1, 4, 2]\), \([1]\) и \([6, 1, 2, 3, 5, 4]\). Следующие последовательности не являются перестановками: \([0, 1]\), \([1, 2, 2]\), \([1, 2, 4]\) и \([2, 3]\).

В холле штаб-квартиры компании опубликована статистика посещения веб-сайта компании за последние \(n\) дней — последовательность \(a_1, a_2, \dots, a_n\). Поликарп хочет покрасить все элементы этой последовательности один из трёх цветов (красный, зеленый или синий) так, что:

  • все красные числа, будучи выписанными из \(a_1, a_2, \dots, a_n\) слева направо (то есть без изменения их относительного порядка), должны образовывать некоторую перестановку (назовём её \(P\));
  • все зеленые числа, будучи выписанными из \(a_1, a_2, \dots, a_n\) слева направо (то есть без изменения их относительного порядка), должны образовывать туже самую перестановку \(P\);
  • среди синих чисел не должно быть элементов, которые равны некоторому элементу перестановки \(P\).

Помогите Поликарпу покрасить все \(n\) чисел так, чтобы суммарное количество красных и зеленых элементов было максимально.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина заданной последовательности \(a\). Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2\cdot10^5\)).

Выходные данные

Выведите строку \(s\) длины \(n\) такую, что:

  • \(s_i\)='R', если элемент \(a_i\) должен быть покрашен в красный цвет;
  • \(s_i\)='G', если элемент \(a_i\) должен быть покрашен в зеленый цвет;
  • \(s_i\)='B', если элемент \(a_i\) должен быть покрашен в синий цвет.

Строка \(s\) должна максимизировать суммарное количество красных и зелёных элементов при выполнении требований из основной части условия задачи. Если оптимальных ответов несколько, то выведите любой из них.

F. Нестабильная сортировка строки

графы жадные алгоритмы поиск в глубину и подобное реализация снм Строки Структуры данных *2100

Авторы загадали строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

Вам задано две перестановки ее индексов (не обязательно одинаковых) \(p\) и \(q\) (обе длины \(n\)). Напомним, что перестановкой называется массив длины \(n\), содержащий каждое целое число от \(1\) до \(n\) ровно один раз.

Для всех \(i\) от \(1\) до \(n-1\) выполняются следующие свойства: \(s[p_i] \le s[p_{i + 1}]\) и \(s[q_i] \le s[q_{i + 1}]\). Это значит, что если вы выпишете все символы \(s\) в порядке индексов в перестановке, результирующая строка получится отсортированной в неубывающем порядке.

Ваша задача — восстановить любую строку \(s\) длины \(n\), состоящую хотя бы из \(k\) различных строчных букв латинского алфавита, которая подходит к заданным перестановкам.

Если существует несколько возможных ответов, вы можете вывести любой.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le k \le 26\)) — длину строки и необходимое количество различных символов.

Вторая строка входных данных содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) являются различными целыми числами от \(1\) до \(n\)) — перестановку \(p\).

Третья срока входных данных содержит \(n\) целых чисел \(q_1, q_2, \dots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) являются различными целыми числами от \(1\) до \(n\)) — перестановку \(q\).

Выходные данные

Если невозможно найти подходящую строку, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и строку \(s\) во второй строке. Она должна состоять ровно из \(n\) строчных букв латинского алфавита, содержать хотя бы \(k\) различных символов и подходить заданным перестановкам.

Если существует несколько возможных ответов, вы можете вывести любой.

C. Плохая последовательность

жадные алгоритмы Структуры данных *1200

На этот раз Пете на день рождения подарили скобочную последовательность. Петя оказался немного разочарован подарком, ведь он мечтал получить правильную скобочной последовательность, но ничего не сказал друзьям и решил сам немного доработать подарок.

Чтобы исправить последовательность Петя собирается не более одного раза взять произвольную скобку и вынуть её из последовательности (при этом оставшиеся скобки сдвигаются), после чего вставить её обратно в произвольное место в последовательности. Разворачивать скобку при этом не разрешается.

Напомним, что последовательность \(s\) из круглых скобок называется правильной, если:

  • \(s\) является пустой;
  • \(s\) равна «(\(t\))», где \(t\) — правильная скобочная последовательность;
  • \(s\) равна \(t_1 t_2\), то есть конкатенации \(t_1\) и \(t_2\), где \(t_1\) и \(t_2\) являются правильными скобочными последовательностями.

Например, последовательности «(()())», «()» являются правильными, а «)(» и «())» нет. Помогите Пете понять, сможет ли он переставить скобку так, чтобы скобочная последовательность стала правильной.

Входные данные

В первой строке входных данных записано единственное число \(n\) (\(1 \leq n \leq 200\,000\)) — длина последовательности, которую друзья подарили Пете.

Во второй строке входных данных записана строка длины \(n\), состоящая из символов «()» и «)».

Выходные данные

Выведите «Yes», если Петя сможет получить правильную скобочную последовательность сделав не более одной перестановки скобки. В противном случае выведите «No».

Примечание

В первом примере Петя может переставить первую скобку в конец, тогда получится строка «()», которая является правильной скобочной последовательностью.

Во втором примере не существует способа переставить одну скобку так, чтобы строка стала правильной скобочной последовательностью.

В третьем примере строка уже является правильной скобочной последовательностью, то есть ничего переставлять не надо.

F. Трудоустройство

жадные алгоритмы сортировки *2700

В мире давно происходит противостояние двух крупных компаний: «Cecsi» и «Poca Pola». Чтобы окончательно покончить со своим конкурентом, компания «Poca Pola» занялась сверхсекретным проектом, для которого в разных офисах им потребовалось суммарно \(n\) новых сторудников. После череды отборов, тестирований и собеседований было выбрано \(n\) подходящих кандидатов, и дело осталось за малым — их трудоустройством.

Так как все кандидаты имеют одинаковые навыки и умения, абсолютно неважно, на какое именно рабочее место отправить каждого из них. Поэтому руководство компании «Poca Pola» решило распределить кандидатов между рабочими местами так, чтобы суммарное расстояние от дома кандидата до места его работы было бы минимально.

Как известно, Земля круглая, поэтому весь мир представляется окружностью, на некоторых точках которой стоит суммарно \(m\) городов. Все города пронумерованы по часовой стрелке целыми числами от \(1\) до \(m\) так, что для любого \(i\) (\(1 \le i \le m - 1\)) города с номерами \(i\) и \(i + 1\) соседние, также соседними являются города \(1\) и \(m\). Перемещаться между городами можно только по поверхности Земли, причём из города можно перейти только в один из двух соседних с ним. Расстояние между двумя городами равно минимальному числу переходов из города в соседний, которое нужно совершить, чтобы добраться от одного города до другого. В частности, расстояние между городом и им же самим равно \(0\).

Известно, что рабочие места компании «Poca Pola» находятся в городах \(a_1, a_2, \ldots, a_n\). Также для каждого кандидата известны города их жительства — \(b_1, b_2, \ldots, b_n\). Возможно, что несколько рабочих мест находятся в одном городе, а также возможно, что несколько людей живут в одном городе.

Руководство компании «Poca Pola» слишком занято сверхсекретным проектом, поэтому вам было поручено распределить кандидатов по рабочим местам так, чтобы суммарное расстояние для всех кандидатов от города проживания до города, где он работает, было бы минимальным возможным.

Входные данные

Первая строка содержит два целых числа \(m\) и \(n\) (\(1 \le m \le 10^9\), \(1 \le n \le 200\,000\)) — количество городов на Земле и количество рабочих мест соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le m\)) — города, в которых находятся рабочие места.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, b_3, \ldots, b_n\) (\(1 \le b_i \le m\)) — города, в которых живут кандидаты.

Выходные данные

В первой строке выведите минимальное суммарное расстояние от кандидатов до назначенных им мест работы.

Во второй строке выведите \(n\) различный целых чисел от \(1\) до \(n\), где \(i\)-е из них равно номеру кандидата, которого надо отправить на \(i\)-е рабочее место.

Примечание

В первом примере, расстояние от каждого кандидата до его работы равно \(1\) (от \(10\) до \(1\), от \(4\) до \(5\) и от \(6\) до \(5\)).

Во втором примере:

  • На первую работу назначен второй кандидат, расстояние от \(3\)-го города до \(1\) равно \(2\).
  • На вторую работу назначен третий кандидат, расстояние от \(6\)-го города до \(4\) равно \(2\).
  • На третью работу назначен первый кандидат, расстояние от \(8\)-го города до \(8\) равно \(0\).

A. Желтые карточки

жадные алгоритмы математика реализация *1000

В финале чемпионата Берляндии по футболу было показано \(n\) желтых карточек. Известно, что в начале матча в первой команде было \(a_1\) игроков, а во второй команде было \(a_2\) игроков.

Если игрок первой команды получал \(k_1\) желтых карточек, то он немедленно удалялся с поля до конца игры. Если игрок второй команды получал \(k_2\) желтых карточек, то он немедленно удалялся с поля до конца игры. После удаления никакой игрок не мог получить желтую карточку. Каждая из \(n\) желтых карточек была показана ровно одному игроку. Игра продолжалась даже в том случае, если все игроки одной или даже обеих команд были удалены с поля.

Так как судья матча потерял свои записи о том, кому он давал желтые карточки, перед вами стоит задача определить минимальное и максимальное количество игроков, которые могли быть удалены во время финального матча.

Входные данные

В первой строке следует целое число \(a_1\) \((1 \le a_1 \le 1\,000)\) — количество игроков в первой команде.

Во второй строке следует целое число \(a_2\) \((1 \le a_2 \le 1\,000)\) — количество игроков во второй команде.

В третьей строке следует целое число \(k_1\) \((1 \le k_1 \le 1\,000)\) — количество желтых карточек, после получения которых игрок первой команды удалялся с поля.

В четвертой строке следует целое число \(k_2\) \((1 \le k_2 \le 1\,000)\) — количество желтых карточек, после получения которых игрок второй команды удалялся с поля.

В пятой строке следует целое число \(n\) \((1 \le n \le a_1 \cdot k_1 + a_2 \cdot k_2)\) — количество желтых карточек, которые были показаны во время матча.

Выходные данные

Выведите два целых числа — минимальное и максимальное количество игроков, которые могли быть удалены во время финального матча.

Примечание

В первом примере матч мог пройти таким образом, что ни один игрок не был удален, таким образом минимальное количество удаленных игроков равно \(0\). Максимальное количество игроков, которые могли быть удалены, равно \(4\) — три игрока из второй команды и один из первой.

Во втором примере было показано максимально возможное количество желтых карточек \((3 \cdot 6 + 1 \cdot 7 = 25)\), поэтому при любом ходе игры были удалены все игроки обеих команд.

C. Обмен букв

жадные алгоритмы Конструктив *1500

У Монокарпа есть две строки \(s\) и \(t\) одинаковой длины, состоящие из латинских букв «a» и «b».

Монокарп хочет сделать строки \(s\) и \(t\) одинаковыми. Для этого он может выполнять следующие операции: выбрать в строке \(s\) позицию \(pos_1\), выбрать в строке \(t\) позицию \(pos_2\) и поменять местами буквы \(s_{pos_1}\) и \(t_{pos_2}\).

Перед вами стоит задача определить минимальное количество операций, которые должен сделать Монокарп, чтобы сделать строки \(s\) и \(t\) одинаковыми, а также вывести сами операции. Если невозможно сделать строки одинаковыми, сообщите об этом.

Входные данные

В первой строке следует целое число \(n\) \((1 \le n \le 2 \cdot 10^{5})\) — длина строк \(s\) и \(t\).

Во второй строке следует строка \(s\) длины \(n\), состоящая из латинских букв «a» и «b».

В третьей строке следует строка \(t\) длины \(n\), состоящая из латинских букв «a» и «b».

Выходные данные

Если невозможно сделать строки одинаковыми, выведите \(-1\).

В противном случае, в первую строку выведите целое число \(k\) — минимальное количество операций, которые нужно сделать, чтобы сделать строки одинаковыми. В каждой из следующих \(k\) строк выведите по два целых числа — позицию в строке \(s\) и позицию в строке \(t\), которые нужно использовать для обмена букв во время очередной операции.

Примечание

В первом примере достаточно двух операций обмена. Например, можно сначала поменять местами третью букву в строке \(s\) с третьей буквой в строке \(t\). После этого \(s = \) «abbb», \(t = \) «aaab». Затем нужно поменять третью букву в строке \(s\) со второй буквой в строке \(t\). После этого обе строки \(s\) и \(t\) будут равны «abab».

Во втором примере невозможно сделать строки одинаковыми.

D. Игра с билетом

жадные алгоритмы игры математика *1700

Монокарп и Бикарп живут в Берляндии, где все автобусные билеты состоят из \(n\) цифр, при этом \(n\) — четное число. Гуляя вечером, они нашли билет, некоторые цифры на котором были стерты. Количество позиций, в которых цифры стерты, четно.

Монокарп и Бикарп решили сыграть в игру, используя найденный билет. Монокарп очень не любит счастливые билеты, в то время как Бикарп коллекционирует счастливые билеты. Билет считается счастливым, если сумма первых \(\frac{n}{2}\) цифр билета равна сумме последних \(\frac{n}{2}\) цифр билета.

Монокарп и Бикарп будут ходить по очереди, первый ход сделает Монокарп. На каждом своем ходу игроки будут записывать на место какой-то стертой цифры произвольную цифру от \(0\) до \(9\). Игра заканчивается, когда в билете не останется позиций со стертыми цифрами.

Если в конце игры билет счастливый, то в игре выиграет Бикарп. В противном случае, в игре выиграет Монокарп. Перед вами стоит задача определить победителя игры, если оба игрока будут играть оптимально.

Входные данные

В первой строке следует целое четное число \(n\) \((2 \le n \le 2 \cdot 10^{5})\) — количество цифр в билете.

Во второй строке следует строка, состоящая из \(n\) цифр и знаков «?» — билет, найденный Монокарпом и Бикарпом. Если в позиции \(i\) стоит знак «?», то цифра, стоящая в позиции \(i\) в билете, была стерта. Обратите внимание, что номер билета может содержать лидирующие нули. Количество символов «?» четно.

Выходные данные

Если в игре победит Монокарп, выведите «Monocarp» (без кавычек). В противном случае, выведите «Bicarp» (без кавычек).

Примечание

В первом примере нет ни одной стертой цифры в билете, поэтому игроки не смогут сделать ни одного хода. Так как билет счастливый, то выиграет Бикарп.

Во втором примере выиграет Бикарп, для этого ему нужно поставить на место стертой цифры ту же цифру, которую поставит Монокарп на своем ходу.

B. Стрельба

жадные алгоритмы реализация сортировки *900

Вася недавно начал тренироваться стрельбе из пистолета. Сегодня тренер предложил ему следующее задание. Он выставил на стол \(n\) банок в ряд. Банки пронумерованы слева направо от \(1\) до \(n\). Чтобы выполнить задание, Васе предстоит сбить каждую из банок ровно по одному разу. При этом порядок, в котором Вася будет сбивать банки, он выбирает самостоятельно.

Вася знает, что прочность \(i\)-й банки равна \(a_i\). Это значит, что если Вася уже сбил \(x\) банок и сейчас начнет стрелять в \(i\)-ю банку, то, чтобы сбить эту банку, ему понадобится \((a_i \cdot x + 1)\) выстрел. Считайте, что если Вася начал стрелять в банку номер \(i\), то он будет стрелять в нее, пока он ее не собьет.

Определите такой порядок стрельбы по банкам, что Вася сделает минимально возможное количество выстрелов, чтобы сбить каждую из \(n\) банок ровно по одному разу.

Входные данные

В первой строке следует целое число \(n\) \((2 \le n \le 1\,000)\) — количество банок.

Во второй строке следует последовательность \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 1\,000)\), где \(a_i\) равно прочности \(i\)-й банки.

Выходные данные

В первую строку выведите минимальное количество выстрелов, которые должен сделать Вася, чтобы сбить каждую из \(n\) банок ровно по одному разу.

Во вторую строку выведите последовательность из \(n\) различных целых чисел от \(1\) до \(n\) — номера банок в том порядке, в котором Вася должен по ним стрелять, чтобы минимизировать количество выстрелов. Если подходящих последовательностей несколько, разрешается вывести любую из них.

Примечание

В первом примере Вася может сначала стрелять в первую банку. Он собьет ее с первого выстрела, так как до этого не сбивал ни одну банку. После этого он должен стрелять в третью банку. Чтобы сбить ее, он потратит \(20 \cdot 1 + 1 = 21\) выстрел. После этого останется только вторая банка. Чтобы сбить ее, Вася сделает \(10 \cdot 2 + 1 = 21\) выстрел. Таким образом, суммарно Вася сделает \(1 + 21 + 21 = 43\) выстрела.

Во втором примере не важно, в какой последовательности стрелять по банкам, так как они все имеют одинаковую прочность.

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\).

B. Змей Горыныч

жадные алгоритмы математика *1600

Вы сражаетесь со Змеем Горынычем — со свирепым монстром из славянских легенд!

Изначально у Змея Горыныча \(x\) голов. Вы можете наносить ему \(n\) типов ударов. Если вы нанесете удар \(i\)-го типа, вы уменьшите количество голов Горыныча на \(min(d_i, curX)\), где \(curX\) — текущее количество голов. Но если после этого удара у Горыныча осталась хотя бы одна голова, у него отрастает \(h_i\) новых голов. Если \(curX = 0\), то Горыныч побежден.

Каждый удар можно наносить любое количество раз, сами удары можно наносить в любом порядке.

Например, если \(curX = 10\), \(d = 7\), \(h = 10\), то после удара количество голов станет равным \(13\) (вы отрубаете \(7\) голов, но после этого у Горыныча отрастает \(10\) новых), но если \(curX = 10\), \(d = 11\), \(h = 100\), то после удара количество голов станет равным \(0\) и Горыныч считается побежденным.

Посчитайте минимальное количество ударов для победы над Змеем Горынычем!

Вам нужно ответить на \(t\) независимых запросов.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) – количество запросов.

Первая строка каждого запроса содержит два числа \(n\) и \(x\) (\(1 \le n \le 100\), \(1 \le x \le 10^9\)) — количество возможных типов ударов и изначальное количество голов Змея Горыныча соответственно.

Следующие \(n\) строк содержат описания возможных ударов. \(i\)-я строка содержит два числа \(d_i\) и \(h_i\) (\(1 \le d_i, h_i \le 10^9\)) — описание \(i\)-го удара.

Выходные данные

На каждый запрос выведите минимальное количество ударов для победы над Змеем Горынычем.

Если Змея Горыныча нельзя победить выведите \(-1\).

Примечание

В первом запросе вы может нанести первый удар (после этого количество голов станет равно \(10 - 6 + 3 = 7\)), а затем нанести второй удар.

Во втором запросе вы можете нанести первый удар три раза подряд — и Горыныч побежден.

В третьем примере вы не можете победить Змея Горыныча.

E. Запросы суммы?

жадные алгоритмы математика реализация Структуры данных *2300

Введем определение хорошего мультимножества следующим образом. Выпишем сумму всех элементов мультимножества в виде десятичного числа. Если для каждого разряда существует хотя бы одно число из мультимножества, в котором такая же цифра, как и в полученной сумме, то мультимножество хорошее, иначе плохое.

Например, мультимножество \(\{20, 300, 10001\}\)хорошее, а мультимножество \(\{20, 310, 10001\}\)плохое:

Красным отмечены те числа и разряды, в которых те же цифры, что и в сумме. Сумма первого мультимножества равна \(10321\), для каждого разряда есть необходимая цифра. Сумма второго мультимножества равна \(10331\), и для второго с конца разряда не сушествует числа с такой же цифрой, что делает мультимножество плохим.

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Необходимо ответить на запросы к нему. Запросы могут быть двух типов:

  • \(1~i~x\) — заменить \(a_i\) на \(x\);
  • \(2~l~r\) — найти плохое подмножество мультимножества чисел \(a_l, a_{l + 1}, \dots, a_r\) с минимальной суммой или сказать, что плохих подмножеств не существует.

Обратите внимание, что пустое подмножество является хорошим.

Для каждого запроса второго типа выведите наименьшую сумму плохого подмножества. Выведите -1, если не существует плохого подмножества.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество элементов в массиве и количество запросов, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i < 10^9\)).

В каждой из следующих \(m\) строк записан запрос одного из двух типов:

  • \(1~i~x\) (\(1 \le i \le n\), \(1 \le x < 10^9\)) — заменить \(a_i\) на \(x\);
  • \(2~l~r\) (\(1 \le l \le r \le n\)) — найти плохое подмножество мультимножества чисел \(a_l, a_{l + 1}, \dots, a_r\) с минимальной суммой или сказать, что плохих подмножеств не существует.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите наименьшую сумму плохого подмножества. Выведите -1, если не существует плохого подмножества.

Примечание

Все подмножества мультимножества \(\{20, 300, 10001\}\) являются хорошими, поэтому ответ -1.

Все возможные плохие подмножества в третьем запросе: \(\{20, 310\}\) и \(\{20, 310, 10001\}\). С меньшей суммой — \(\{20, 310\}\). Обратите внимание, что требуется найти подмножество, а не подотрезок, поэтому выбранные элементы не обязательно будут стоять рядом в массиве.

В четвертом запросе есть только пустое подножество и подмножество \(\{20\}\). Оба они хорошие.

В последнем запросе есть пустое подмножество и подмножества \(\{20\}\), \(\{20\}\) и \(\{20, 20\}\). Только \(\{20, 20\}\)плохое, его сумма равна \(40\). Обратите внимание, что требуется выбрать мультимножество, поэтому оно может включать в себя одинаковые элементы.

F. Workout plan

жадные алгоритмы Структуры данных *1500

Alan decided to get in shape for the summer, so he created a precise workout plan to follow. His plan is to go to a different gym every day during the next N days and lift \(X[i]\) grams on day \(i\). In order to improve his workout performance at the gym, he can buy exactly one pre-workout drink at the gym he is currently in and it will improve his performance by \(A\) grams permanently and immediately. In different gyms these pre-workout drinks can cost different amounts \(C[i]\) because of the taste and the gym's location but its permanent workout gains are the same. Before the first day of starting his workout plan, Alan knows he can lift a maximum of \(K\) grams. Help Alan spend a minimum total amount of money in order to reach his workout plan. If there is no way for him to complete his workout plan successfully output \(-1\).

Input

The first one contains two integer numbers, integers \(N\) \((1 \leq N \leq 10^5)\) and \(K\) \((1 \leq K \leq 10^5)\) – representing number of days in the workout plan and how many grams he can lift before starting his workout plan respectively. The second line contains \(N\) integer numbers \(X[i]\) \((1 \leq X[i] \leq 10^9)\) separated by a single space representing how many grams Alan wants to lift on day \(i\). The third line contains one integer number \(A\) \((1 \leq A \leq 10^9)\) representing permanent performance gains from a single drink. The last line contains \(N\) integer numbers \(C[i]\) \((1 \leq C[i] \leq 10^9)\) , representing cost of performance booster drink in the gym he visits on day \(i\).

Output

One integer number representing minimal money spent to finish his workout plan. If he cannot finish his workout plan, output -1.

Note

First example: After buying drinks on days 2 and 4 Alan can finish his workout plan. Second example: Alan cannot lift 40000 grams on day 2.

I. The Light Square

2-sat жадные алгоритмы поиск в глубину и подобное *2100

For her birthday Alice received an interesting gift from her friends – The Light Square. The Light Square game is played on an \(N \times N\) lightbulbs square board with a magical lightbulb bar of size \(N \times 1\) that has magical properties. At the start of the game some lights on the square board and magical bar are turned on. The goal of the game is to transform the starting light square board pattern into some other pattern using the magical bar without rotating the square board. The magical bar works as follows:

It can be placed on any row or column

The orientation of the magical lightbulb must be left to right or top to bottom for it to keep its magical properties

The entire bar needs to be fully placed on a board

The lights of the magical bar never change

If the light on the magical bar is the same as the light of the square it is placed on it will switch the light on the square board off, otherwise it will switch the light on

The magical bar can be used an infinite number of times

Alice has a hard time transforming her square board into the pattern Bob gave her. Can you help her transform the board or let her know it is impossible? If there are multiple solutions print any.

Input

The first line contains one positive integer number \(N\ (1 \leq N \leq 2000)\) representing the size of the square board.

The next \(N\) lines are strings of length \(N\) consisting of 1's and 0's representing the initial state of the square board starting from the top row. If the character in a string is 1 it means the light is turned on, otherwise it is off.

The next \(N\) lines are strings of length \(N\) consisting of 1's and 0's representing the desired state of the square board starting from the top row that was given to Alice by Bob.

The last line is one string of length \(N\) consisting of 1's and 0's representing the pattern of the magical bar in a left to right order.

Output

Transform the instructions for Alice in order to transform the square board into the pattern Bob gave her. The first line of the output contains an integer number \(M\ (0 \leq M \leq 10^5\)) representing the number of times Alice will need to apply the magical bar.

The next \(M\) lines are of the form "col \(X\)" or "row \(X\)", where \(X\) is \(0\)-based index of the matrix, meaning the magical bar should be applied to either row \(X\) or column \(X\). If there is no solution, print only -1. In case of multiple solutions print any correct one.

Note

Example 1: It is impossible to transform square board from one format to another

Example 2: Magic bar can be applied on first row or column.

C. Игра в подстроки на уроке

жадные алгоритмы игры Строки *1300

Миша и Аня сидят на скучном уроке. Чтобы хоть как-то скрасить ожидание перемены, они придумали интересную игру. Для игры необходима лишь строка \(s\) и число \(k\) (\(0 \le k < |s|\)).

Игра начинается с того, что на строке \(s\) отмечается подстрока длины 1, ее левая граница \(l\) и правая граница \(r\) равны \(k\) (то есть вначале игры \(l=r=k\)). Далее игроки ходят по очереди, расширяя подстроку по следующим правилам:

  • Игрок выбирает индексы \(l^{\prime}\) и \(r^{\prime}\) такие, что \(l^{\prime} \le l\), \(r^{\prime} \ge r\) и \(s[l^{\prime}, r^{\prime}]\) лексикографически меньше \(s[l, r]\). После этого изменяет значения \(l\) и \(r\) следующим образом: \(l := l^{\prime}\), \(r := r^{\prime}\).
  • Аня ходит первой.
  • Проигрывает тот, кто не может сделать ход.

Напомним, что подстрокой \(s[l, r]\) (\(l \le r\)) строки \(s\) будем называть непрерывную подпоследовательность символов начинающуюся в позиции \(l\) и заканчивающуюся в позиции \(r\). Например «ehn» — подстрока (\(s[3, 5]\)) строки «aaaehnsvz», а «ahz» — нет.

Миша и Аня играли в игру так увлеченно, что не заметили как к ним подошел учитель. К большому удивлению обоих, он не стал их отчитывать, а сказал, что может определить победителя до начала игры, зная лишь \(s\) и \(k\)!

К сожалению, Миша и Аня не разбираются в теории игр, поэтому попросили Вас написать программу, которая по заданной \(s\) определяет победителя для всех возможных \(k\).

Входные данные

Входные данные состоят из единственной строки \(s\) (\(1 \leq |s| \leq 5 \cdot 10^5\)), которая содержит исключительно строчные английские буквы.

Выходные данные

Выходные данные должны содержать \(|s|\) строк.

В строке номер \(i\) выведите имя победителя игры (выведите Ann или Mike) со строкой \(s\), для \(k = i\), при условии, что Аня и Миша играют оптимально.

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\)) — номер стартового города.

Выходные данные

Выведите одно целое число — максимальную сумму оценок посещённых городов, которую можно получить.

A. Игра 2048

жадные алгоритмы математика Перебор *1000

Вы играете в вариацию игры 2048. Изначально у вас есть набор \(s\), состоящий из \(n\) чисел. Все числа из этого набора являются степенью двойки.

Вы можете совершать любое количество (возможно, нулевое) операций с этим набором чисел.

Во время каждой операции вы выбираете два равных числа из \(s\), удаляете их из набора \(s\) и добавляете в \(s\) число, равное их сумме.

Например, если \(s = \{1, 2, 1, 1, 4, 2, 2\}\), и вы выберете числа \(2\) и \(2\), то набор превратится в \(\{1, 1, 1, 4, 4, 2\}\).

Вы выиграете, если число \(2048\) окажется в вашем наборе. Например, если \(s = \{1024, 512, 512, 4\}\) вы можете выиграть следующим образом: выберите \(512\) и \(512\), и ваш набор превратится в \(\{1024, 1024, 4\}\). Затем вы можете выбрать числа \(1024\) и \(1024\), и ваш набор превратится в \(\{2048, 4\}\).

Определите, можете ли вы выиграть в этой игре.

Вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит число \(q\) (\(1 \le q \le 100\)) — количество запросов.

Первая строка каждого запроса содержит число \(n\) (\(1 \le n \le 100\)) — количество чисел в наборе.

Вторая строка каждого запроса содержит \(n\) чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 2^{29}\)) — описание вашего набора чисел. Гарантируется, что все числа в наборе являются степенью двойки.

Выходные данные

На каждый запрос выведите YES если вы можете получить число \(2048\) в вашем наборе, и NO в обратном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом запросе вы можете выбрать числа \(512\) и \(512\), и \(s\) превратится в \(\{1024, 64, 1024\}\). А затем вы выбираете числа \(1024\) и \(1024\), после этого набор \(s\) превратится в \(\{2048, 64\}\).

Во втором запросе набор \(s\) содержит число \(2048\) изначально.

B. Кони

жадные алгоритмы Конструктив *1100

У вас есть шахматная доска с \(n\) рядами и \(n\) столбцами. Изначально все клетки пусты, и в каждую из них вы должны поставить либо белого коня, либо черного коня.

Конь — шахматная фигура, которая может переместиться из клетки (\(x_2\), \(y_2\)) в клетку (\(x_1\), \(y_1\)), если одно из следующих условий выполняется:

  • \(|x_1 - x_2| = 2\) и \(|y_1 - y_2| = 1\), или
  • \(|x_1 - x_2| = 1\) и \(|y_1 - y_2| = 2\).

Ниже приведены примеры, как может ходить (и атаковать) конь. На каждой из нижеприведенных картинок, если конь находится в синей клетке, он атакует все красные клетки (и только их).

Дуэлью коней назовем пару коней разных цветов, атакующих друг друга. Вам нужно поставить коня (либо белого, либо черного) в каждую клетку так, чтобы количество дуэлей было максимально возможно.

Входные данные

В единственной строке задано одно целое \(n\) (\(3 \le n \le 100\)) — количество рядов (и столбцов), из которых состоит шахматная доска.

Выходные данные

Выведите \(n\) строк, по \(n\) символов в каждой. \(j\)-й символ в \(i\)-й строке должен быть W, если в клетке (\(i\), \(j\)) должен стоять белый конь, или B, если в эту клетку нужно поставить черного коня. Количество дуэлей должно быть максимально возможным. Если оптимальных ответов несколько, выведите любой из них.

Примечание

В первом примере \(8\) дуэлей:

  1. белый конь в (\(1\), \(1\)) атакует черного коня в (\(3\), \(2\));
  2. белый конь в (\(1\), \(1\)) атакует черного коня в (\(2\), \(3\));
  3. белый конь в (\(1\), \(3\)) атакует черного коня в (\(3\), \(2\));
  4. белый конь в (\(1\), \(3\)) атакует черного коня в (\(2\), \(1\));
  5. белый конь в (\(3\), \(1\)) атакует черного коня в (\(1\), \(2\));
  6. белый конь в (\(3\), \(1\)) атакует черного коня в (\(2\), \(3\));
  7. белый конь в (\(3\), \(3\)) атакует черного коня в (\(1\), \(2\));
  8. белый конь в (\(3\), \(3\)) атакует черного коня в (\(2\), \(1\)).

C. Спаси природу

Бинарный поиск жадные алгоритмы *1600

Реальность жестока, поэтому, хоть в душе вы и экоактивист, но в жизни — простой кассир в кинотеатре. Но не стоить опускать руки, ведь вы еще можете помочь природе!

По работе вам необходимо продать \(n\) билетов. Цена \(i\)-го билета равна \(p_i\). Как продавец, вы можете выбрать порядок (то есть перестановку), в котором будут продаваться билеты. Вы узнали, что ваш кинотеатр участвует в двух экологических программах, применяя их к порядку, который выбрали вы:

  • \(x\%\) цены каждого \(a\)-го проданного билета (\(a\)-й, \(2a\)-й, \(3a\)-й и так далее билеты) в вашем порядке будет направлено на разработку и продвижение возобновляемых источников энергии.
  • \(y\%\) цены каждого \(b\)-го проданного билета (\(b\)-й, \(2b\)-й, \(3b\)-й и так далее билеты) в вашем порядке будет направлено на борьбу с загрязнением окружающей среды.

Если билет попал в обе программы одновременно, то в сумме \((x + y) \%\) будет направлено на сохранение природы. Также, известно, что все цены билетов кратны \(100\), а потому нет проблем с округлениями.

Например, если вам надо продать билеты с ценами \([400, 100, 300, 200]\), а кинотеатр отдает \(10\%\) от каждого \(2\)-го проданного билета и \(20\%\) от каждого \(3\)-го проданного билета, то, продав их в порядке \([100, 200, 300, 400]\) вы отправите на благое дело \(100 \cdot 0 + 200 \cdot 0.1 + 300 \cdot 0.2 + 400 \cdot 0.1 = 120\). Однако, выбрав порядок \([100, 300, 400, 200]\), можно набрать \(100 \cdot 0 + 300 \cdot 0.1 + 400 \cdot 0.2 + 200 \cdot 0.1 = 130\).

Природа не может ждать, а потому вы решили изменить порядок продажи билетов таким образом, что суммарный взнос в обе программы достигнет значения хотя бы \(k\) за минимальное количество проданных билетов. Либо скажите, что это невозможно. Другими словами, найдите минимальное количество билетов, которые нужно продать, чтобы заработать как минимум \(k\).

Входные данные

В первой строке задано единственное целое число \(q\) (\(1 \le q \le 100\)) — количество независимых запросов. Каждый запрос состоит из \(5\) строк.

В первой строке каждого запроса содержится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество билетов.

Во второй строке заданы \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(100 \le p_i \le 10^9\), \(p_i \bmod 100 = 0\)) — соответствующие цены билетов.

В третьей строке заданы два целых числа \(x\) и \(a\) (\(1 \le x \le 100\), \(x + y \le 100\), \(1 \le a \le n\)) — параметры первой программы.

В четвертой строке заданы два целых числа \(y\) и \(b\) (\(1 \le y \le 100\), \(x + y \le 100\), \(1 \le b \le n\)) — параметры второй программы.

В пятой строке задано единственное целое число \(k\) (\(1 \le k \le 10^{14}\)) — суммарный необходимый взнос.

Гарантируется, что суммарное количество билетов в одном тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(q\) чисел — по одному на запрос.

Для каждого запроса выведите минимальное количество билетов, которое вам предстоит продать, чтобы суммарный взнос на экопрограммы достиг хотя бы \(k\), при условии, что вы можете продавать билеты в произвольном порядке.

Если невозможно достигнуть необходимого взноса, даже продав все билеты, выведите \(-1\).

Примечание

В первом запросе общий взнос равен \(50 + 49 = 99 < 100\), поэтому собрать необходимую сумму невозможно.

Во втором запросе вы можете выбрать порядок следующим образом: \([100, 100, 200, 200, 100, 200, 100, 100]\) и общий взнос от первых \(6\) проданных билетов будет равен \(100 \cdot 0 + 100 \cdot 0.1 + 200 \cdot 0.15 + 200 \cdot 0.1 + 100 \cdot 0 + 200 \cdot 0.25 = 10 + 30 + 20 + 50 = 110\).

В третьем запросе вся стоимость билета идет на защиту экологии.

В четвертом запросе вы можете выбрать порядок как \([100, 200, 100, 100, 100]\) и суммарный взнос за первые \(4\) билета будет равен \(100 \cdot 0 + 200 \cdot 0.31 + 100 \cdot 0 + 100 \cdot 0.31 = 62 + 31 = 93\).

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\)-элементы в начало.

F. Фабрика деревьев

Деревья жадные алгоритмы Конструктив *2500

Байтландская фабрика деревьев производит деревья для всевозможных промышленных применений. Вам требуется соптимизировать построение дерева определённого типа для большого и важного заказа.

Нужное дерево является подвешенным деревом с \(n\) вершинами, и его вершины пронумерованы различными числами от \(0\) до \(n - 1\). Вершина с номером \(0\) является корнем дерева, и для любой некорневой вершины \(v\) номер её родителя \(p(v)\) меньше номера \(v\).

Все деревья на фабрике делаются из заготовок-бамбуков. Бамбук — это такое корневое дерево, что каждая вершина имеет ровно одного сына, кроме единственной вершины-листа, у которой нет детей. Вершины бамбука-заготовки могут быть пронумерованы как угодно до начала обработки.

Чтобы превратить бамбук в нужное дерево, вы можете применять один тип операций: выбрать произвольную некорневую вершину \(v\), такую что её родитель \(p(v)\) также не является корнем. Операция состоит в изменении родителя \(v\) на родителя его родителя \(p(p(v))\). Родители всех остальных вершин остаются без изменений, в частности, поддерево \(v\) не меняется.

Эффективность крайне важна, поэтому вам требуется минимизировать количество операций для превращения бамбука-заготовки в нужное дерево. Постройте любую оптимальную последовательность операций.

Обратите внимание, что нумерация вершин в полученном дереве должна совпадать с нумерацией в данном дереве. Формально, номера корней должны совпадать, а также для некорневых вершин с одинаковыми номерами должны совпадать номера их родителей.

Гарантируется, что во всех тестах к этой задаче ответ существует, и, более того, в оптимальной последовательности не более \(10^6\) операций. Обратите внимание, что любой взлом, не удовлетворяющий этим ограничениям, будет некорректным.

Входные данные

В первой строке записано единственное целое число \(n\) — количество вершин дерева (\(2 \leq n \leq 10^5\)).

Во второй строке записано \(n - 1\) целое число \(p(1), \ldots, p(n - 1)\) — номера родителей вершин \(1, \ldots, n - 1\) соответственно (\(0 \leq p(i) < i\)).

Выходные данные

В первой строке выведите \(n\) различных целых чисел \(id_1, \ldots, id_n\) — изначальная нумерация вершин бамбука-заготовки, начиная с корня (\(0 \leq id_i < n\)).

Во второй строке выведите одно целое число \(k\) — количество операций в вашей последовательности (\(0 \leq k \leq 10^6\)).

В третьей строке выведите \(k\) целых чисел \(v_1, \ldots, v_k\), описывающих операции по порядку. \(i\)-я операция состоит в изменении \(p(v_i)\) на \(p(p(v_i))\). Каждая операция должна быть корректной, т.е. \(v_i\) и \(p(v_i)\) на момент операции не могут быть корнем.

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\).

D1. Оптимальные подпоследовательности (упрощённая версия)

жадные алгоритмы Структуры данных *1600

Это упрощенная версия задачи, в этой версии \(1 \le n, m \le 100\). Вы можете взламывать эту задачу, только если вы заблокировали обе версии.

Пусть задана последовательность целых чисел \(a=[a_1,a_2,\dots,a_n]\) длины \(n\). Её подпоследовательностью называется любая такая, которая получена удалением нуля или более элементов из последовательности \(a\) (они не обязательно идут подряд). Например, для последовательности \(a=[11,20,11,33,11,20,11]\):

  • \([11,20,11,33,11,20,11]\), \([11,20,11,33,11,20]\), \([11,11,11,11]\), \([20]\), \([33,20]\) — подпоследовательности (некоторые из большого списка);
  • \([40]\), \([33,33]\), \([33,20,20]\), \([20,20,11,11]\) — не являются подпоследовательностями.

Пусть дополнительно задано целое неотрицательное число \(k\) (\(1 \le k \le n\)), тогда подпоследовательность называется оптимальной, если:

  • она имеет длину \(k\) и сумма её элементов максимальная возможная среди всех подпоследовательностей длины \(k\);
  • и среди всех подпоследовательностей длины \(k\), которые удовлетворяют предыдущему пункту она лексикографически минимальна.

Напомним, что последовательность \(b=[b_1, b_2, \dots, b_k]\) лексикографически меньше последовательности \(c=[c_1, c_2, \dots, c_k]\), если первый слева элемент в котором они различаются меньше в последовательности \(b\) чем в \(c\). Формально: существует такое \(t\) (\(1 \le t \le k\)), что \(b_1=c_1\), \(b_2=c_2\), ..., \(b_{t-1}=c_{t-1}\) и одновременно \(b_t<c_t\). Например:

  • \([10, 20, 20]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([7, 99, 99]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([10, 21, 0]\) лексикографически меньше чем \([10, 21, 1]\).

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\) и \(m\) запросов, каждый состоит из двух чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)). Для каждого запроса выведите значение, которое стоит в индексе \(pos_j\) оптимальной подпоследовательности заданной последовательности \(a\) для \(k=k_j\).

Например, если \(n=4\), \(a=[10,20,30,20]\), \(k_j=2\), тогда оптимальная подпоследовательность равна \([20,30]\) — она минимальная лексикографически среди всех подпоследовательностей длины \(2\) с максимальной суммой элементов. Таким образом, ответом на запрос вида \(k_j=2\), \(pos_j=1\) будет число \(20\), а ответом на запрос вида \(k_j=2\), \(pos_j=2\) будет число \(30\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 100\)) — длина последовательности \(a\).

Вторая строка содержит элементы последовательности \(a\) — целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит целое число \(m\) (\(1 \le m \le 100\)) — количество запросов.

Следующие \(m\) строк содержат пары целых чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)) — параметры запросов.

Выходные данные

Выведите \(m\) целых чисел \(r_1, r_2, \dots, r_m\) (\(1 \le r_j \le 10^9\)) по одному в строке — ответы на запросы в порядке их следования во входных данных. Значение \(r_j\) должно быть равно значению, которое содержится в позиции \(pos_j\) оптимальной подпоследовательности для \(k=k_j\).

Примечание

В первом примере, для \(a=[10,20,10]\) оптимальные подпоследовательности:

  • для \(k=1\) — это \([20]\),
  • для \(k=2\) — это \([10,20]\),
  • для \(k=3\) — это \([10,20,10]\).

D2. Оптимальные подпоследовательности (усложненная версия)

жадные алгоритмы Структуры данных *1800

Это усложненная версия задачи, в этой версии \(1 \le n, m \le 2\cdot10^5\). Вы можете взламывать эту задачу, если вы ее заблокировали. Но вы можете взламывать предыдущую версию задачи, только если вы заблокировали обе версии.

Пусть задана последовательность целых чисел \(a=[a_1,a_2,\dots,a_n]\) длины \(n\). Её подпоследовательностью называется любая такая, которая получена удалением нуля или более элементов из последовательности \(a\) (они не обязательно идут подряд). Например, для последовательности \(a=[11,20,11,33,11,20,11]\):

  • \([11,20,11,33,11,20,11]\), \([11,20,11,33,11,20]\), \([11,11,11,11]\), \([20]\), \([33,20]\) — подпоследовательности (некоторые из большого списка);
  • \([40]\), \([33,33]\), \([33,20,20]\), \([20,20,11,11]\) — не являются подпоследовательностями.

Пусть дополнительно задано целое неотрицательное число \(k\) (\(1 \le k \le n\)), тогда подпоследовательность называется оптимальной, если:

  • она имеет длину \(k\) и сумма её элементов максимальная возможная среди всех подпоследовательностей длины \(k\);
  • и среди всех подпоследовательностей длины \(k\), которые удовлетворяют предыдущему пункту она лексикографически минимальна.

Напомним, что последовательность \(b=[b_1, b_2, \dots, b_k]\) лексикографически меньше последовательности \(c=[c_1, c_2, \dots, c_k]\), если первый слева элемент в котором они различаются меньше в последовательности \(b\) чем в \(c\). Формально: существует такое \(t\) (\(1 \le t \le k\)), что \(b_1=c_1\), \(b_2=c_2\), ..., \(b_{t-1}=c_{t-1}\) и одновременно \(b_t<c_t\). Например:

  • \([10, 20, 20]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([7, 99, 99]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([10, 21, 0]\) лексикографически меньше чем \([10, 21, 1]\).

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\) и \(m\) запросов, каждый состоит из двух чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)). Для каждого запроса выведите значение, которое стоит в индексе \(pos_j\) оптимальной подпоследовательности заданной последовательности \(a\) для \(k=k_j\).

Например, если \(n=4\), \(a=[10,20,30,20]\), \(k_j=2\), тогда оптимальная подпоследовательность равна \([20,30]\) — она минимальная лексикографически среди всех подпоследовательностей длины \(2\) с максимальной суммой элементов. Таким образом, ответом на запрос вида \(k_j=2\), \(pos_j=1\) будет число \(20\), а ответом на запрос вида \(k_j=2\), \(pos_j=2\) будет число \(30\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина последовательности \(a\).

Вторая строка содержит элементы последовательности \(a\) — целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит целое число \(m\) (\(1 \le m \le 2\cdot10^5\)) — количество запросов.

Следующие \(m\) строк содержат пары целых чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)) — параметры запросов.

Выходные данные

Выведите \(m\) целых чисел \(r_1, r_2, \dots, r_m\) (\(1 \le r_j \le 10^9\)) по одному в строке — ответы на запросы в порядке их следования во входных данных. Значение \(r_j\) должно быть равно значению, которое содержится в позиции \(pos_j\) оптимальной подпоследовательности для \(k=k_j\).

Примечание

В первом примере, для \(a=[10,20,10]\) оптимальные подпоследовательности:

  • для \(k=1\) — это \([20]\),
  • для \(k=2\) — это \([10,20]\),
  • для \(k=3\) — это \([10,20,10]\).

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» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

B. Аня и минимизация

жадные алгоритмы реализация *1000

У Ани есть большое число \(S\). Десятичная запись этого числа состоит из \(n\) цифр и не содержит ведущих нулей. Аня может изменить не более \(k\) цифр в \(S\). Она хочет это сделать так, чтобы \(S\) все еще не содержало ведущих нулей и было как можно меньше. Какое число получится у Ани в итоге?

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \leq n \leq 200\,000\), \(0 \leq k \leq n\)) — количество цифр в десятичной записи \(S\) и максимальное разрешенное количество измененных цифр.

Во второй строке записано целое число \(S\). Гарантируется, что \(S\) состоит ровно из \(n\) цифр и не содержит никаких ведущих нулей.

Выходные данные

Выведите минимальное возможное число \(S\), которое может получиться у Ани. Обратите внимание, что у полученного числа должно быть ровно \(n\) цифр.

Примечание

В числе есть ведущие нули, если оно состоит из хотя бы двух цифр и его первая цифра \(0\). Например, у чисел \(00\), \(00069\) и \(0101\) есть ведущие нули, а у \(0\), \(3000\) и \(1010\) их нет.

C. Возрастающая матрица

жадные алгоритмы *1100

В этой задаче прямоугольная матрица \(a\) размером \(n \times m\) называется возрастающей, если для каждой строки \(i\) при просмотре слева направо значения строго возрастают (то есть \(a_{i,1}<a_{i,2}<\dots<a_{i,m}\)) и для каждого столбца \(j\) при просмотре сверху вниз значения строго возрастают (то есть \(a_{1,j}<a_{2,j}<\dots<a_{n,j}\)).

В заданной матрице неотрицательных целых чисел надо заменить каждое значение \(0\) на некоторое положительное целое число так, чтобы получившаяся матрица была возрастающей и сумма её элементов — максимальной, или определить, что так сделать нельзя.

Гарантируется, что в заданной матрице значения все значения \(0\) содержатся только во внутренних ячейках (то есть не в первой или последней строке и не в первом или последнем столбце).

Входные данные

В первой строке записаны целые числа \(n\) и \(m\) (\(3 \le n, m \le 500\)) — количество строк и столбцов в заданной матрице \(a\).

В следующих строках содержится по \(m\) целых неотрицательных чисел — значения в соответствующей строке заданной матрицы \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(0 \le a_{i,j} \le 8000\)).

Гарантируется, что для всех \(a_{i,j}=0\) выполняется \(1 < i < n\) и \(1 < j < m\).

Выходные данные

Если возможно заменить все нули на положительные числа, чтобы матрица была возрастающей, выведите максимальную возможную сумму элементов матрицы. Иначе, выведите -1.

Примечание

В первом примере результирующая матрица выглядит следующим образом:


1 3 5 6 7
3 6 7 8 9
5 7 8 9 10
8 9 10 11 12

Во втором примере в среднюю ячейку обязательно надо поставить значение \(3\).

В третьем примере искомой результирующей матрицы не существует.

E. Middle-Out

жадные алгоритмы Конструктив Строки *2200

Вдохновением для задачи послужила история компании Pied Piper. После анонса технологии Nucleus со стороны конкурирующей компании Hooli Ричард при содействии друзей изобрёл принципиально новый подход к сжатию: «из середины наружу».

Вам даны две строки \(s\) и \(t\) одинаковой длины \(n\). Пронумеруем их символы то \(1\) до \(n\) слева направо (т.е. от начала к концу)

За один ход вы можете сделать следующую последовательность действий:

  • выбрать произвольный индекс \(i\) (\(1 \le i \le n\)),
  • передвинуть \(i\)-й символ строки \(s\) с текущей позиции в начало строки или передвинуть \(i\)-й символ строки \(s\) с текущей позиции в конец строки.

Заметим, что длина строки \(s\) в результате хода не поменяется. Вы можете применить ход только к строке \(s\).

Например, если \(s=\)«test», то за один ход можно получить:

  • если \(i=1\) и вы перемещаете символ в начало, то результат будет равен «test» (строка не изменяется),
  • если \(i=2\) и вы перемещаете символ в начало, то результат будет равен «etst»,
  • если \(i=3\) и вы перемещаете символ в начало, то результат будет равен «stet»,
  • если \(i=4\) и вы перемещаете символ в начало, то результат будет равен «ttes»,
  • если \(i=1\) и вы перемещаете символ в конец, то результат будет равен «estt»,
  • если \(i=2\) и вы перемещаете символ в конец, то результат будет равен «tste»,
  • если \(i=3\) и вы перемещаете символ в конец, то результат будет равен «tets»,
  • если \(i=4\) и вы перемещаете символ в конец, то результат будет равен «test» (строка не изменяется).

Вы хотите преобразовать строку \(s\) в строку \(t\). Какое минимальное количество ходов для этого потребуется? Если преобразовать \(s\) в \(t\) невозможно, выведите -1.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте.

Описание каждого набора состоит из трёх строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину строк \(s\) и \(t\). Вторая строка содержит строку \(s\), третья строка содержит строку \(t\). Строки \(s\) и \(t\) имеют длину \(n\) и состоят только из строчных латинских букв.

Обратите внимание, что нет каких-либо ограничений на сумму значений \(n\) во входных данных (т.е. тест с \(q=100\) и всеми \(n=100\) допустим).

Выходные данные

Для каждого набора входных данных выведите минимальное количество ходов, которое нужно чтобы превратить \(s\) в \(t\) или -1, если это сделать невозможно.

Примечание

В первом примере, ходы в одном из оптимальных ответов выглядят следующим образом:

  • в первом наборе: \(s=\)«iredppipe», \(t=\)«piedpiper»: «iredppipe» \(\rightarrow\) «iedppiper» \(\rightarrow\) «piedpiper»;
  • во втором наборе: \(s=\)«estt», \(t=\)«test»: «estt» \(\rightarrow\) «test»;
  • в третьем наборе: \(s=\)«tste», \(t=\)«test»: «tste» \(\rightarrow\) «etst» \(\rightarrow\) «test».

A. Камни

жадные алгоритмы математика Перебор *800

Алиса играет с несколькими камнями.

Сейчас у нее три пронумерованные кучки с камнями. Первая содержит \(a\) камней, вторая содержит \(b\) камней, третья содержит \(c\) камней.

Каждый раз она может сделать одну из двух операций:

  1. взять один камень из первой кучки и два камня из второй кучки (эта операция может быть совершена только если первая кучка содержит хотя бы один камень и вторая кучка содержит хотя бы два камня);
  2. взять один камень из второй кучки и два камня из третьей кучки (эта операция может быть совершена только если вторая кучка содержит хотя бы один камень и третья кучка содержит хотя бы два камня).

Она хочет сделать несколько операций и получить максимальное количество камней, но не знает что делать. Изначально у нее \(0\) камней. Можете ли вы помочь ей?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев в следующем формате:

В строке находится три неотрицательных целых числа \(a\), \(b\) и \(c\), разделенных пробелами (\(0 \leq a,b,c \leq 100\)) — количество камней в первой, второй и третьей кучке, соответсвенно.

Во взломах разрешается использовать только один тестовый случай, то есть \(t = 1\) должно быть выполнено.

Выходные данные

Выведите \(t\) строк, ответы на тестовые случае в том же порядке, в которых они заданы во входных данных. Ответом на тестовый случай является целое число — максимальное количество камней, которое может взять Алиса, совершив несколько операций.

Примечание

В первом тестовом случае первого теста, Алиса может взять два камня из второй кучки и четыре камня из третьей кучки, сделав вторую операцию два раза. Затем она может взять один камень из первой кучки и два камня из второй кучки, сделав первую операцию один раз. Суммарное количество камней, которое Алиса возьмет будет равно \(9\). Невозможно сделать несколько операций так, чтобы взять больше \(9\) камней, поэтому ответ \(9\).

A. Камни

жадные алгоритмы математика Перебор *800

Алиса играет с несколькими камнями.

Сейчас у нее три пронумерованные кучки с камнями. Первая содержит \(a\) камней, вторая содержит \(b\) камней, третья содержит \(c\) камней.

Каждый раз она может сделать одну из двух операций:

  1. взять один камень из первой кучки и два камня из второй кучки (эта операция может быть совершена только если первая кучка содержит хотя бы один камень и вторая кучка содержит хотя бы два камня);
  2. взять один камень из второй кучки и два камня из третьей кучки (эта операция может быть совершена только если вторая кучка содержит хотя бы один камень и третья кучка содержит хотя бы два камня).

Она хочет сделать несколько операций и получить максимальное количество камней, но не знает что делать. Изначально у нее \(0\) камней. Можете ли вы помочь ей?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев в следующем формате:

В строке находится три неотрицательных целых числа \(a\), \(b\) и \(c\), разделенных пробелами (\(0 \leq a,b,c \leq 100\)) — количество камней в первой, второй и третьей кучке, соответсвенно.

Во взломах разрешается использовать только один тестовый случай, то есть \(t = 1\) должно быть выполнено.

Выходные данные

Выведите \(t\) строк, ответы на тестовые случае в том же порядке, в которых они заданы во входных данных. Ответом на тестовый случай является целое число — максимальное количество камней, которое может взять Алиса, совершив несколько операций.

Примечание

В первом тестовом случае первого теста, Алиса может взять два камня из второй кучки и четыре камня из третьей кучки, сделав вторую операцию два раза. Затем она может взять один камень из первой кучки и два камня из второй кучки, сделав первую операцию один раз. Суммарное количество камней, которое Алиса возьмет будет равно \(9\). Невозможно сделать несколько операций так, чтобы взять больше \(9\) камней, поэтому ответ \(9\).

C. Лаборатории

жадные алгоритмы Конструктив реализация *1300

В исследовательских целях, \(n^2\) лабораторий были построены на горе на различных высотах. Давайте пронумеруем их целыми числами от \(1\) до \(n^2\), так что лаборатория с номером \(1\) находится в самом низком месте, лаборатория с номером \(2\) находится во втором по высоте месте, \(\ldots\), лаборатория с номером \(n^2\) находится в самом высоком месте.

Для транспортировки воды между лабораториями, трубы были построены между всеми парами лабораторий. Труба может переместить не больше одной единицы воды в единицу времени из лаборатории с номером \(u\) в лабораторию с номером \(v\), если \(u > v\).

Сейчас необходимо разбить лаборатории на \(n\) групп, каждая группа должна содержать ровно \(n\) лабораторий. Лаборатории из разных групп могут транспортировать воду друг другу. Тогда суммарное количество воды, которое может быть отправлено из группы \(A\) в группу \(B\) равно количеству пар лабораторий (\(u, v\)), таких что лаборатория с номером \(u\) из группы \(A\), лаборатория с номером \(v\) из группы \(B\) и \(u > v\). Давайте обозначим это число за \(f(A,B)\) (то есть \(f(A,B)\) равно суммарному количеству воды, которое может быть отправлено из группы \(A\) в группу \(B\)).

Например, если \(n=3\) и есть \(3\) группы \(X\), \(Y\) и \(Z\): \(X = \{1, 5, 6\}, Y = \{2, 4, 9\}\) и \(Z = \{3, 7, 8\}\). В этом случае значения \(f\) равны:

  • \(f(X,Y)=4\) потому что \(5 \rightarrow 2\), \(5 \rightarrow 4\), \(6 \rightarrow 2\), \(6 \rightarrow 4\),
  • \(f(X,Z)=2\) потому что \(5 \rightarrow 3\), \(6 \rightarrow 3\),
  • \(f(Y,X)=5\) потому что \(2 \rightarrow 1\), \(4 \rightarrow 1\), \(9 \rightarrow 1\), \(9 \rightarrow 5\), \(9 \rightarrow 6\),
  • \(f(Y,Z)=4\) потому что \(4 \rightarrow 3\), \(9 \rightarrow 3\), \(9 \rightarrow 7\), \(9 \rightarrow 8\),
  • \(f(Z,X)=7\) потому что \(3 \rightarrow 1\), \(7 \rightarrow 1\), \(7 \rightarrow 5\), \(7 \rightarrow 6\), \(8 \rightarrow 1\), \(8 \rightarrow 5\), \(8 \rightarrow 6\),
  • \(f(Z,Y)=5\) потому что \(3 \rightarrow 2\), \(7 \rightarrow 2\), \(7 \rightarrow 4\), \(8 \rightarrow 2\), \(8 \rightarrow 4\).

Пожалуйста, разбейте лаборатории на \(n\) групп размера \(n\), так что значение \(\min f(A,B)\) по всем возможным парам групп \(A\) и \(B\) (\(A \neq B\)) было максимально.

Другими словами, разбейте лаборатории на \(n\) групп размера \(n\), таких что минимальное количество воды, которое может быть отправлено из группы \(A\) в группу \(B\) для всех возможных пар групп \(A\) и \(B\) (\(A \neq B\)) было максимально большое.

Обратите внимание, что приведенный в условии пример не демонстрирует оптимальное разбиение на группы, он демонстрирует подсчет значений \(f\) для некоторого разбиения.

Если существует несколько оптимальных разбиений, вы можете найти любое.

Входные данные

В единственной строке находится одно целое число \(n\) (\(2 \leq n \leq 300\)).

Выходные данные

Выведите \(n\) строк:

В \(i\)-й строке выведите \(n\) чисел, которые являются номерами лабораторий, которые составляют \(i\)-ю группу, в любом порядке.

Если существует несколько возможных ответов, максимизирующих минимальное количество воды, которое может быть отправлено из одной группы в другую, разрешается вывести любой.

Примечание

В первом тесте можно разбить \(9\) лабораторий на группы \(\{2, 8, 5\}, \{9, 3, 4\}, \{7, 6, 1\}\).

Из первой группы во вторую можно отправить \(4\) единицы воды (\(8 \rightarrow 3, 8 \rightarrow 4, 5 \rightarrow 3, 5 \rightarrow 4\)).

Из первой группы в третью можно отправить \(5\) единиц воды (\(2 \rightarrow 1, 8 \rightarrow 7, 8 \rightarrow 6, 8 \rightarrow 1, 5 \rightarrow 1\)).

Из второй группы в первую можно отправить \(5\) единиц воды (\(9 \rightarrow 2, 9 \rightarrow 8, 9 \rightarrow 5, 3 \rightarrow 2, 4 \rightarrow 2\)).

Из второй группы в третью можно отправить \(5\) единиц воды (\(9 \rightarrow 7, 9 \rightarrow 6, 9 \rightarrow 1, 3 \rightarrow 1, 4 \rightarrow 1\)).

Из третьей группы в первую можно отправить \(4\) единицы воды (\(7 \rightarrow 2, 7 \rightarrow 5, 6 \rightarrow 2, 6 \rightarrow 5\)).

Из третьей группы во вторую можно отправить \(4\) единицы воды (\(7 \rightarrow 3, 7 \rightarrow 4, 6 \rightarrow 3, 6 \rightarrow 4\)).

Минимальное количество воды, которое можно отправить из какой-то группы в другую равно \(4\). Можно доказать, что при любом другом разбиении на группы нельзя добиться ответа лучше.

D. Алиса и кукла

жадные алгоритмы Перебор реализация Структуры данных *2300

У Алисы недавно появилась новая кукла. Она даже может ходить!

Алиса построила лабиринт для куклы и хочет протестировать его. Лабиринт имеет вид таблицы с \(n\) строками и \(m\) столбцами. Также есть \(k\) препятствий, \(i\)-е из них находится в клетке \((x_i, y_i)\), это клетка на пересечении строки с номером \(x_i\) и столбца с номером \(y_i\).

Однако кукла очень неуклюжая. Она может только идти прямо и поворачиваться направо, но не больше одного раза в одной клетке (включая стартовую клетку). Она не может переходить в клетку с препятствием, а также покидать пределы лабиринта.

Более формально, всего существует \(4\) направления, в которых может смотреть кукла:

  1. Кукла смотрит в направлении вдоль строки от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y + 1)\);
  2. Кукла смотрит в направлении вдоль столбца от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x + 1, y)\);
  3. Кукла смотрит в направлении вдоль строки от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y - 1)\);
  4. Кукла смотрит в направлении вдоль столбца от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки\((x, y)\) в клетку \((x - 1, y)\).
.

Находясь в некоторой клетке, кукла может перейти в клетку в направлении, в котором она смотрит, либо повернуться один раз направо. Поворачиваясь один раз направо, кукла меняет направление, в котором она смотрит следующим образом: \(1 \to 2\), \(2 \to 3\), \(3 \to 4\), \(4 \to 1\). В одной клетке, кукла может совершить не более одного поворота направо.

Сейчас Алиса управляет перемещениями куклы. Изначально она поставила куклу в клетку \((1, 1)\) (верхняя левая клетка лабиринта). Изначально кукла смотрит в направлении \(1\), то есть в направлении вдоль строки от первой клетки к последней. Она хочет обойти куклой все клетки лабиринта, не содержащие препятствий ровно по одному разу и закончить в любой клетке. Существует ли способ так сделать?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(k\), разделенных пробелами (\(1 \leq n,m \leq 10^5, 0 \leq k \leq 10^5\)) — размеры лабиринта и количество препятствий.

В следующих \(k\) строках находится описание препятствий, \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(y_i\), разделенные пробелом (\(1 \leq x_i \leq n,1 \leq y_i \leq m\)), которые описывают позицию \(i\)-го препятствия.

Гарантируется, что никакие два препятствия не находятся в одной клетке и что нету препятствия в клетке \((1, 1)\).

Выходные данные

Выведите 'Yes' (без кавычек) если кукла может обойти все клетки, не содержащие препятствий по описанным выше правилам ровно по одному разу.

Если так обойти лабиринт невозможно, выведите 'No' (без кавычек).

Примечание

Картинка с лабиринтом из первого примера:

В первом примере, кукла может идти по следующему пути:

  • Кукла в клетке \((1, 1)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 2)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(1\). Повернуть направо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((2, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(2\). Повернуть направо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 2)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 1)\), смотрит в направлении \(3\). Цель достигнута, все клетки лабиринта, не содержащие препятствия посещены ровно один раз.

C1. Сбалансированные удаления (попроще)

геометрия жадные алгоритмы Конструктив *1700

Это упрощённая версия задачи. В этой версии \(n \le 2000\).

В трёхмерном пространстве заданы \(n\) различных точек, пронумерованных от \(1\) до \(n\). \(i\)-я точка имеет координаты \((x_i, y_i, z_i)\). Число точек \(n\) — чётное.

Вы хотели бы удалить все \(n\) точек, используя последовательность из \(\frac{n}{2}\) щелчков. За один щелчок вы можете удалить любые две ещё не удалённые точки \(a\) и \(b\), которые образуют идеально сбалансированную пару. Пара точек \(a\) и \(b\) идеально сбалансирована, если никакая другая точка \(c\) (которая ещё не удалена) не лежит в пределах минимального ограничивающего точки \(a\) и \(b\) прямоугольного параллелепипеда с рёбрами, параллельными осям координат.

Формально, точка \(c\) лежит внутри ограничивающего параллелепипеда точек \(a\) и \(b\) тогда и только тогда, когда \(\min(x_a, x_b) \le x_c \le \max(x_a, x_b)\), \(\min(y_a, y_b) \le y_c \le \max(y_a, y_b)\) и \(\min(z_a, z_b) \le z_c \le \max(z_a, z_b)\). Обратите внимание, что параллелепипед может быть вырожденным.

Найдите способ удалить все точки за \(\frac{n}{2}\) щелчков.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 2000\); \(n\) чётно) — число точек.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\), \(z_i\) (\(-10^8 \le x_i, y_i, z_i \le 10^8\)) — координаты \(i\)-й точки.

Никакие две точки не совпадают.

Выходные данные

Выведите \(\frac{n}{2}\) пар целых чисел \(a_i, b_i\) (\(1 \le a_i, b_i \le n\)) — номера точек, удаляемых щелчком \(i\). Каждое целое число от \(1\) до \(n\) должно встретиться в выводе ровно один раз.

Можно показать, что всегда возможно удалить все точки. Если есть несколько решений, выведите любое.

Примечание

В первом примере точки и их соответствующие параллелепипеды выглядят так (изображённые для простоты в двумерном пространстве, так как все точки лежат на плоскости \(z = 0\)). Обратите внимание, что порядок удаления точек важен: например, точки \(5\) и \(1\) не образуют идеально сбалансированную пару изначально, но начинают её образовывать после того, как удалена точка \(3\).

C2. Сбалансированные удаления (посложнее)

Бинарный поиск жадные алгоритмы Конструктив разделяй и властвуй реализация сортировки *1900

Это усложнённая версия задачи. В этой версии \(n \le 50\,000\).

В трёхмерном пространстве заданы \(n\) различных точек, пронумерованных от \(1\) до \(n\). \(i\)-я точка имеет координаты \((x_i, y_i, z_i)\). Число точек \(n\) — чётное.

Вы хотели бы удалить все \(n\) точек, используя последовательность из \(\frac{n}{2}\) щелчков. За один щелчок вы можете удалить любые две ещё не удалённые точки \(a\) и \(b\), которые образуют идеально сбалансированную пару. Пара точек \(a\) и \(b\) идеально сбалансирована, если никакая другая точка \(c\) (которая ещё не удалена) не лежит в пределах минимального ограничивающего точки \(a\) и \(b\) прямоугольного параллелепипеда с рёбрами, параллельными осям координат.

Формально, точка \(c\) лежит внутри ограничивающего параллелепипеда точек \(a\) и \(b\) тогда и только тогда, когда \(\min(x_a, x_b) \le x_c \le \max(x_a, x_b)\), \(\min(y_a, y_b) \le y_c \le \max(y_a, y_b)\) и \(\min(z_a, z_b) \le z_c \le \max(z_a, z_b)\). Обратите внимание, что параллелепипед может быть вырожденным.

Найдите способ удалить все точки за \(\frac{n}{2}\) щелчков.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 50\,000\); \(n\) чётно) — число точек.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\), \(z_i\) (\(-10^8 \le x_i, y_i, z_i \le 10^8\)) — координаты \(i\)-й точки.

Никакие две точки не совпадают.

Выходные данные

Выведите \(\frac{n}{2}\) пар целых чисел \(a_i, b_i\) (\(1 \le a_i, b_i \le n\)) — номера точек, удаляемых щелчком \(i\). Каждое целое число от \(1\) до \(n\) должно встретиться в выводе ровно один раз.

Можно показать, что всегда возможно удалить все точки. Если есть несколько решений, выведите любое.

Примечание

В первом примере точки и их соответствующие параллелепипеды выглядят так (изображённые для простоты в двумерном пространстве, так как все точки лежат на плоскости \(z = 0\)). Обратите внимание, что порядок удаления точек важен: например, точки \(5\) и \(1\) не образуют идеально сбалансированную пару изначально, но начинают её образовывать после того, как удалена точка \(3\).

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}\).

B. Убей их всех

жадные алгоритмы сортировки *1300

Иван играет в старый шутер под названием «Heretic». Он застрял на одном из последних уровней этой игры, поэтому ему нужна помощь в убийстве монстров.

Основная часть уровня представляет собой большой коридор (настолько большой и узкий, что его можно представить в виде бесконечной координатной прямой). Коридор разделен на две части; давайте считать, что точка \(x = 0\) разделяет эти части.

Правая часть коридора заполнена \(n\) монстрами. Для каждого монстра задана его начальная координата \(x_i\) (поскольку все монстры находятся в правой части, все \(x_i\) положительны).

Левая часть коридора заполнена ловушками-давилками. Если какой-то монстр попадает в левую часть коридора или в начало координат (то есть его текущая координата становится меньше или равна \(0\)), он мгновенно убивается ловушкой.

Основным оружием, которое Иван использует для убийства монстров, является Жезл Феникса. Он может запустить снаряд, который взрывается при ударе, уничтожая каждого монстра, оказавшегося в точке взрыва, и разбрасывая всех остальных монстров. Предположим, что Иван запускает снаряд в точку \(c\). Тогда каждый монстр либо погибает от взрыва, либо отбрасывается. Пусть текущая координата какого-то монстра будет \(y\), тогда:

  • если \(c = y\), то монстр убит;
  • если \(y < c\), то монстр отбрасывается на \(r\) влево, поэтому его текущая координата становится \(y - r\);
  • если \(y > c\), то монстр отбрасывается на \(r\) вправо, поэтому его текущая координата становится \(y + r\).

Иван собирается убивать монстров следующим образом: выбирать некоторую целочисленную точку \(d\), запускать снаряд в эту точку, затем ждать, пока снаряд не взорвется, и все монстры, которых отбрасывает в левую часть коридора, не будут убиты ловушками-давилками, затем, если хотя бы один монстр еще жив, выбирать другую целую точку (возможно, ту, которая уже использовалась) и запускать снаряд туда, и так далее.

Какое минимальное количество снарядов должен запустить Иван, чтобы убить всех монстров? Можете считать, что Иван оптимально выбирает цель, когда стреляет из Жезла Феникса.

Вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Первая строка каждого запроса содержит два целых числа \(n\) и \(r\) (\(1 \le n, r \le 10^5\)) — количество монстров и расстояние, на которое монстры отбрасываются от точки взрыва.

Вторая строка каждого запроса содержит \(n\) целых чисел \(x_i\) (\(1 \le x_i \le 10^5\)) — начальные позиции монстров.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(10^5\).

Выходные данные

На каждый запрос выведите одно целое число — минимальное количество выстрелов из Жезла Феникса, чтобы убить всех монстров.

Примечание

В первом тестовом примере Иван действует следующим образом:

  • стреляет в точку \(3\), первый монстр умирает от ловушки-давилки в точке \(-1\), второй монстр умирает от взрыва, третьего монстра отбрасывает в точку \(7\);
  • стреляет в точку \(7\), третий монстр умирает от взрыва.

Во втором тестовом примере Иван действует следующим образом:

  • стреляет в точку \(5\), первый и четвертый монстры умирают от взрыва, второго монстра отбрасывает в точку \(1\), третьего монстра отбрасывает в точку \(2\);
  • стреляет в точку \(2\), первый монстр умирает от ловушки-давилки в точке \(0\), второй монстр умирает от взрыва.

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\)).

G. Адилбек и система полива

жадные алгоритмы сортировки Структуры данных *2700

Адилбеку нужно полить свой сад. Он собирается сделать это с помощью сложной системы полива: ему нужно только доставить воду, а механизмы выполнят всю оставшуюся работу.

Система полива потребляет один литр воды в минуту (если воды нет, она не работает). Она может вместить не более \(c\) литров воды. Адилбек уже налил в систему \(c_0\) литров воды. Он собирается начать поливать сад прямо сейчас и поливать его в течение \(m\) минут, а система полива должна содержать не менее одного литра воды в начале \(i\)-й минуты (для каждого \(i\) от \(0\) до \(m - 1\)).

Адилбеку интересно, что он будет делать, если в системе полива кончится вода. Он позвонил \(n\) своим друзьям и спросил их, могут ли они принести воды. \(i\)-й друг ответил, что он может принести не более \(a_i\) литров воды; он придет в начале \(t_i\)-й минуты и выльет всю воду, которая у него есть, в систему (если система не может вместить такое количество воды, избыток воды выливается); а затем он попросит Адилбека заплатить \(b_i\) долларов за каждый литр воды, который он принес. Можете считать, что если друг прибывает в начале \(t_i\)-й минуты, а в начале той же минуты в системе заканчивается вода, друг наливает воду достаточно быстро, чтобы система не перестала работать.

Конечно, Адилбек не хочет платить своим друзьям, но ему нужно поливать сад. Поэтому он должен сказать своим друзьям, сколько воды они должны принести. Формально Адилбек хочет выбрать \(n\) целых чисел \(k_1\), \(k_2\), ..., \(k_n\) таким образом, чтобы:

  • если друг \(i\) приносит ровно \(k_i\) литров воды, то система полива работает в течение всего времени, необходимого для полива сада;
  • сумма \(\sum\limits_{i = 1}^{n} k_i b_i\) минимально возможна.

Помогите Адилбеку определить минимальную сумму, которую он должен заплатить своим друзьям, или определите, что Адилбеку не удастся поливать сад в течение \(m\) минут.

Вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит четыре целых числа \(n, m, c\) and \(c_0\) (\(0 \le n \le 5 \cdot 10^5, 2 \le m \le 10^9, 1 \le c_0 \le c \le 10^9\)) — количество друзей, количество минут полива, вместимость системы и количество литров, которое налил Адилбек.

Следующие \(n\) строк содержат по три целых числа \(t_i, a_i, b_i\) (\( 0 < t_i < m, 1 \le a_i \le c, 1 \le b_i \le 10^9\)) — время прибытия \(i\)-го друга, максимальное количество воды, которое может принести \(i\)-й друг и стоимость \(1\) литра воды у \(i\)-го друга.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(5 \cdot 10^5\).

Выходные данные

На каждый запрос выведите одно целое число — минимальную сумму, которую Адилбек должен заплатить своим друзьям, или \(-1\), если Адилбеку не удастся поливать сад в течение \(m\) минут.

C. Очередь в поезде

жадные алгоритмы реализация Структуры данных *2300

В вагоне поезда есть \(n\) мест, на каждом месте сидит ровно один человек. Места пронумерованы слева направо от \(1\) до \(n\). Поездка долгая, поэтому каждый человек в какой-то момент поездки проголодается и захочет заварить лапшу быстрого приготовления кипятком. Человек на месте \(i\) (\(1 \leq i \leq n\)) захочет выйти за кипятком ровно на \(t_i\)-й минуте.

Бак с кипятком находится левее \(1\)-го места за дверью. Люди, выходящие за кипятком, могут образовывать очередь у бака в порядке выхода, так как баком может одновременно пользоваться не более одного человека. Каждый человек пользуется баком ровно \(p\) минут. Можно считать, что люди выходят к баку или возвращаются на своё место после получения кипятка мгновенно.

Люди не любят просто так стоять в очереди. Поэтому, как только человек на месте с номером \(i\) захочет сходить за кипятком, он сначала посмотрит на все места с номерами от \(1\) до \(i - 1\). Если хотя бы одно из этих мест пустое, он предполагает что все эти люди стоят в очереди, а значит выходить за кипятком пока нецелесообразно. Тем не менее, он выйдет за кипятком в ближайший удобный момент, как только все места с номерами меньше \(i\) будут снова заняты. Люди не видят самого бака и очереди возле него за дверью, поэтому смотрят только на места в вагоне.

В поезде действует негласное правило: если в какой-то момент возникает ситуация, что за кипятком одновременно могут выйти несколько человек, то выходит только самый левый из них (имеющий место с наименьшим номером), а остальные остаются дожидаться следующего подходящего момента.

Задача состоит в том, чтобы для каждого человека определить, на какой минуте он получит кипяток для своей лапши.

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(1 \leq n \leq 100\,000\), \(1 \leq p \leq 10^9\)) — количество людей в вагоне и время, в течение которого один человек пользуется баком.

Во второй строке содержатся \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(0 \leq t_i \leq 10^9\)) — времена, когда соответствующий пассажир вагона захочет выйти за кипятком.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых — время в минутах, когда человек на месте \(i\) получит кипяток.

Примечание

В примере в \(0\)-ю минуту за кипятком одновременно захотели пойти \(1\)-й и \(5\)-й человек, первый вышел сразу и на \(314\)-й минуте вернулся от бака. За это время множество желающих выйти за кипятком пополнилось \(2\)-м человеком, и следующим пошел \(2\)-й человек и т.д. \(5\)-й человек в итоге вышел последним.

E. Минимизация разности

Бинарный поиск жадные алгоритмы Конструктив сортировки Тернарный поиск *2000

В данной задаче вам задана последовательность \(a_1, a_2, \dots, a_n\), состоящая из \(n\) целых чисел.

Вы можете изменять элементы последовательности. В ходе одной операции изменения, вы можете выбрать произвольную позицию в последовательности и увеличить или уменьшить элемент, находящийся в этой позиции, на единицу.

Перед вами стоит задача определить минимально возможную разность между максимальным и минимальным элементами последовательности, которую можно достичь, произведя не более \(k\) описанных операций.

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) \((2 \le n \le 10^{5}, 1 \le k \le 10^{14})\) — количество элементов в последовательности и максимальное количество операций изменения элементов, которое можно произвести.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^{9})\).

Выходные данные

Выведите минимально возможную разность между максимальным и минимальным элементами последовательности, которую можно достичь, произведя не более \(k\) операций, описанных в условии.

Примечание

В первом примере можно дважды увеличить на единицу второе число и дважды уменьшить на единицу третье число. Тогда получим последовательности \([3, 3, 5, 5]\), в которой разность между максимальным и минимальным элементами равна \(2\). При этом останется одна еще операция, но ее можно не использовать, так как не удастся сделать разность между максимальным и минимальным элементами меньше \(2\).

Во втором примере можно не использовать ни одной операции, так как все элементы в последовательности одинаковые, а значит разность между максимальным и минимальным элементами равна \(0\).

G. Парные забеги

жадные алгоритмы Конструктив математика *2400

В преддверии олимпийских игр, проходящих в \(20NN\) году в городе Берлятове, министерство спорта приняло решение устроить показательные соревнования. И сегодня на стадионе проходят парные забеги, в которых участвуют бегуны из команды Берлятова. Рассмотрим процесс выступления команды в парных забегах более подробно.

Команда Берлятова состоит из \(2n\) бегунов, которые расположены на двух беговых дорожках, причем на каждой дорожке стоит ровно по \(n\) бегунов. Бегуны на каждой дорожке пронумерованы целыми числами от \(1\) до \(n\). Бегун с номером \(i\) пробегает всю беговую дистанцию ровно за \(i\) секунд.

Забеги проходят следующим образом: сначала забег начинает пара первых бегунов на каждой дорожке, когда самый медленный из них добегает дистанцию до конца, выходит пара вторых бегунов на каждой дорожке, и все опять ждут, пока добежит самый медленный из них, и так далее, пока все \(n\) пар бегунов не пробегут дистанцию.

Организаторы мероприятия хотят, чтобы зрители оставались на стадионе как можно дольше, но при этом, если суммарное время всех забегов будет дольше \(k\) секунд, зрителям станет скучно. Вы, как тренер команды, можете выбрать любой порядок бегунов на каждой из дорожек (но учтите, что вы можете менять только порядок бегунов на каждой из дорожек, менять количество бегунов на дорожке нельзя, также нельзя менять бегунов между разными дорожками).

Определите такой порядок выступления бегунов на каждой из дорожек, что забеги продлятся как можно дольше, но при этом их суммарное время не будет превосходить \(k\) секунд.

Более формально, вы хотите найти такие две перестановки \(p\) и \(q\) (обе длины \(n\)), что \(sum = \sum\limits_{i=1}^{n} max(p_i, q_i)\) является максимально возможным числом, не превышающим \(k\). Если такой пары перестановок не существует, сообщите об этом.

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) (\(1 \le n \le 10^6, 1 \le k \le n^2\)) — количество бегунов на каждой из дорожек и максимально допустимая суммарная длительность забегов.

Выходные данные

Если невозможно найти такой порядок бегунов на каждой из дорожек, что суммарная длительность забегов не превысит \(k\) секунд, выведите \(-1\).

В противном случае, в первую строку выведите одно целое число \(sum\) — максимально возможную суммарную длительность забегов, не превышающую \(k\). Во вторую строку выведите перестановку из \(n\) элементов \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — номера бегунов с первой дорожки в порядке их выступления. В третью строку выведите перестановку из \(n\) элементов \(q_1, q_2, \dots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) должны быть различны) — номера бегунов со второй дорожки в порядке их выступления. Значение \(sum = \sum\limits_{i=1}^{n} max(p_i, q_i)\) должно быть максимально возможным числом, не превосходящим \(k\). Если ответов несколько, выведите любой из них.

Примечание

В первом примере порядок бегунов на первой дорожке может быть равен \([5, 3, 2, 1, 4]\), а на второй — \([1, 4, 2, 5, 3]\). Тогда суммарное время всех забегов равно \(max(5, 1) + max(3, 4) + max(2, 2) + max(1, 5) + max(4, 3) = 5 + 4 + 2 + 5 + 4 = 20\), то есть оно в точности равно максимально допустимой длительности забегов.

Во втором примере порядок бегунов на первой дорожке может быть равен \([2, 3, 1]\), а на второй — \([2, 1, 3]\). В таком случае суммарное время всех забегов равно \(8\). Это максимально возможная суммарная длительность забегов для \(n = 3\).

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\).

D. Шичикуджи и электросеть

графы Деревья жадные алгоритмы кратчайшие пути снм *1900

Шичикуджи — новое местное божество Южного Храма Черной Улитки. Ее первое задание заключается в следующем:

В префектуре X построено \(n\) новых городов. Города пронумерованы от \(1\) до \(n\). Город \(i\) находится в \(x_i\) км на север от храма и в \(y_i\) ем на восток от храма. Возможно, что \((x_i, y_i) = (x_j, y_j)\) даже если \(i \ne j\).

Шичикуджи планирует обеспечить электричеством каждый город либо с помощью установки там электростанции, либо с помощью соединения его с другим городом, в котором уже есть электричество. То есть в городе есть электричество, если в нём есть электростанция или он соединён напрямую или по цепочке кабелей с городом, в котором есть электростанция.

  • Возведение электростанции в городе \(i\) стоит \(c_i\) иен;
  • Соединение города \(i\) и города \(j\) стоит \(k_i + k_j\) иен за каждый км кабеля, использованного для соединения. Однако кабель можно прокладывать вдоль сторон света (на север, юг, восток, запад). Кабели могут пересекать друг друга. У каждого кабеля оба конца должны быть в некоторых городах. Если город \(i\) и город \(j\) соединены кабелем, то кабель всегда будет прокладываться по кратчайшему пути из города \(i\) в город \(j\). Тогда длина кабеля, соединяющего город \(i\) и город \(j\), равна \(|x_i - x_j| + |y_i - y_j|\) км.

Шичикуджи хочет осуществить эту затею, потратив как можно меньше денег, так как она считает, что нет ничего важнее в мире, чем деньги. Однако она умерла, когда была всего в пятом классе (разумеется, божества не стареют после смерти), поэтому недостаточно смышленая, чтобы воплотить проект в жизнь. Поэтому она просит вас о помощи.

Таким образом, от вас требуется предоставить Шичикуджи следующую информацию: минимальное количество иен, необходимое, чтобы обеспечить электричеством все города, города, в которых будут построены электростанции, и проведенные соединения.

Если существует несколько способов так выбрать города и соединения, чтобы получить конструкцию минимальной цены, то выведите любую из них.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество городов.

Затем следует \(n\) строк. В \(i\)-й строке записаны два целых числа \(x_i\) (\(1 \leq x_i \leq 10^6\)) и \(y_i\) (\(1 \leq y_i \leq 10^6\)) — координаты \(i\)-го города.

В следующей строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \leq c_i \leq 10^9\)) — цена установки электростанции в \(i\)-м городе.

В последней строке записаны \(n\) целых чисел \(k_1, k_2, \dots, k_n\) (\(1 \leq k_i \leq 10^9\)).

Выходные данные

В первой строке выведите одно целое число, обозначающее минимальное количество иен, требуемых для конструкции.

Затем выведите одно целое число \(v\) — количество электростанций, которые требуется построить.

Далее выведите \(v\) целых чисел, обозначающих номера городов, в которых требуется построить электростанции. Каждое число должно быть от \(1\) до \(n\) и все числа должны быть попарно различны. Можно выводить числа в произвольном порядке.

После этого выведите одно целое число \(e\) — количество необходимых соединений.

Наконец, выведите \(e\) пар целых чисел \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \ne b\)), обозначающих, что между городами \(a\) и \(b\) будет проведено соединение. Каждая неупорядоченная пара городов может встречаться не более одного раза (для каждого \((a, b)\) не должно больше существовать пар \((a, b)\) или \((b, a)\)). Пары можно выводить в произвольном порядке.

Если существует несколько способов так выбрать города и соединения, чтобы получить конструкцию минимальной цены, то выведите любую из них.

Примечание

Для ответов на примеры смотрите на данные графики (города с электростанциями раскрашены зеленым, остальные — синим, кабели покрашены в красный):

В первом примере цена строительства электростанций во всех городах равна \(3 + 2 + 3 = 8\). Можно показать, что больше никакая конфигурация не стоит меньше 8 иен.

Во втором примере цена строительства электростанции в городе 2 равна 2. Стоимость соединения городов 1 и 2 равна \(2 \cdot (3 + 2) = 10\). Стоимость соединения городов 2 и 3 равна \(3 \cdot (2 + 3) = 15\). Поэтому итоговая цена равна \(2 + 10 + 15 = 27\). Можно показать, что никакая конфигурация не стоит меньше 27 иен.

B. Выращивание дерева

жадные алгоритмы математика сортировки *900

Садовод Лёша преподаёт школьникам олимпиадную информатику. На день учителя ребята подарили ему набор деревянных палочек, каждая из которых представляет собой отрезок целочисленной длины. Теперь Лёша хочет вырастить из них дерево.

Дерево представляет собой ломаную на плоскости, состоящую из всех подаренных ему палочек. Ломаная начинается в точке \((0, 0)\). Строя ломаную, Лёша может присоединять палочки в любом порядке, располагая каждую горизонтально или вертикально (то есть параллельно оси \(OX\) или \(OY\)). При этом не разрешается, чтобы две подряд идущие палочки лежали одновременно горизонтально или вертикально. Смотрите картинки ниже для уточнения деталей.

Лёша хочет сделать так, чтобы конец ломаной был как можно дальше от точки \((0, 0)\). Помогите ему вырастить дерево таким образом!

Заметим, что ломаная, в форме которой Леша вырастит дерево, может иметь самопересечения и самокасания, однако можно доказать, что оптимальный ответ не содержит ни самопересечений, ни самокасаний.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 100\,000\)) — количество палочек, подаренных Лёше.

Вторая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 10\,000\)) — длины палочек, подаренных Лёше.

Выходные данные

Выведите одно целое число — квадрат максимального расстояния от точки \((0, 0)\) до конечной точки дерева.

Примечание

На следующих изображениях нарисованы оптимальные деревья для примеров из условия. Квадрат расстояния в первом случае равен \(5 \cdot 5 + 1 \cdot 1 = 26\), а во втором \(4 \cdot 4 + 2 \cdot 2 = 20\).

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\).

C1. Хорошие числа (простая версия)

жадные алгоритмы Перебор реализация *1300

Единственное отличие между простой и сложной версиями — максимальное значение \(n\).

Вам дано положительное целое число \(n\). Вы очень любите хорошие числа, поэтому вам хочется найти минимальное хорошее число, большее или равное \(n\).

Положительное число называется хорошим, если оно может быть представлено в виде суммы различных степеней \(3\) (т.е. повторения степеней \(3\) запрещены).

Например:

  • \(30\)хорошее число: \(30 = 3^3 + 3^1\),
  • \(1\)хорошее число: \(1 = 3^0\),
  • \(12\)хорошее число: \(12 = 3^2 + 3^1\),
  • но \(2\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (\(2 = 3^0 + 3^0\)),
  • \(19\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представления \(19 = 3^2 + 3^2 + 3^0 = 3^2 + 3^1 + 3^1 + 3^1 + 3^0\) не являются корректными),
  • \(20\) тоже не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представление \(20 = 3^2 + 3^2 + 3^0 + 3^0\) не является корректным).

Обратите внимание, что существуют и другие представления \(19\) и \(20\) в качестве сумм степеней \(3\), но ни одно из них не состоит из различных степеней \(3\).

Для заданного положительного числа \(n\) найдите наименьшее \(m\) (\(n \le m\)) такое, что \(m\)хорошее число.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 500\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит одно целое число \(n\) (\(1 \le n \le 10^4\)).

Выходные данные

Для каждого запроса выведите наименьшее число \(m\) (где \(n \le m\)) такое, что \(m\)хорошее число.

C2. Хорошие числа (сложная версия)

meet-in-the-middle Бинарный поиск жадные алгоритмы математика *1500

Единственное отличие между простой и сложной версиями — максимальное значение \(n\).

Вам дано положительное целое число \(n\). Вы очень любите хорошие числа, поэтому вам хочется найти минимальное хорошее число, большее или равное \(n\).

Положительное число называется хорошим, если оно может быть представлено в виде суммы различных степеней \(3\) (т.е. повторения степеней \(3\) запрещены).

Например:

  • \(30\)хорошее число: \(30 = 3^3 + 3^1\),
  • \(1\)хорошее число: \(1 = 3^0\),
  • \(12\)хорошее число: \(12 = 3^2 + 3^1\),
  • но \(2\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (\(2 = 3^0 + 3^0\)),
  • \(19\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представления \(19 = 3^2 + 3^2 + 3^0 = 3^2 + 3^1 + 3^1 + 3^1 + 3^0\) не являются корректными),
  • \(20\) тоже не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представление \(20 = 3^2 + 3^2 + 3^0 + 3^0\) не является корректным).

Обратите внимание, что существуют и другие представления \(19\) и \(20\) в качестве сумм степеней \(3\), но ни одно из них не состоит из различных степеней \(3\).

Для заданного положительного числа \(n\) найдите наименьшее \(m\) (\(n \le m\)) такое, что \(m\)хорошее число.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 500\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого запроса выведите наименьшее число \(m\) (где \(n \le m\)) такое, что \(m\)хорошее число.

D1. Слишком много отрезков (простая версия)

жадные алгоритмы *1800

Единственное ограничение между простой и сложной версиями — ограничения.

Вам задано \(n\) отрезков на координатной оси \(OX\). Отрезки могут пересекаться, вкладываться или даже совпадать. \(i\)-й отрезок равен \([l_i; r_i]\) (\(l_i \le r_i\)) и покрывает все такие целочисленные точки \(j\), что \(l_i \le j \le r_i\).

Целочисленная точка называется плохой, если она покрыта строго больше, чем \(k\) отрезками.

Ваша задача — удалить минимальное количество отрезков таким образом, чтобы плохих точек не осталось вообще.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 200\)) — количество отрезков и максимальное количество отрезков, которым может быть покрыта каждая целочисленная точка.

Следующие \(n\) строк содержат отрезки. \(i\)-я строка содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 200\)) — границы \(i\)-го отрезка.

Выходные данные

В первой строке выведите одно целое число \(m\) (\(0 \le m \le n\)) — минимальное количество отрезков, которое надо удалить, чтобы не осталось плохих точек.

Во второй строке выведите \(m\) различных целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le n\)) — индексы отрезков, которые вы удаляете, в любом порядке. Если существует несколько возможных ответов, вы можете вывести любой из них.

D2. Слишком много отрезков (сложная версия)

жадные алгоритмы сортировки Структуры данных *1800

Единственное ограничение между простой и сложной версиями — ограничения.

Вам задано \(n\) отрезков на координатной оси \(OX\). Отрезки могут пересекаться, вкладываться или даже совпадать. \(i\)-й отрезок равен \([l_i; r_i]\) (\(l_i \le r_i\)) и покрывает все такие целочисленные точки \(j\), что \(l_i \le j \le r_i\).

Целочисленная точка называется плохой, если она покрыта строго больше, чем \(k\) отрезками.

Ваша задача — удалить минимальное количество отрезков таким образом, чтобы плохих точек не осталось вообще.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество отрезков и максимальное количество отрезков, которым может быть покрыта каждая целочисленная точка.

Следующие \(n\) строк содержат отрезки. \(i\)-я строка содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)) — границы \(i\)-го отрезка.

Выходные данные

В первой строке выведите одно целое число \(m\) (\(0 \le m \le n\)) — минимальное количество отрезков, которое надо удалить, чтобы не осталось плохих точек.

Во второй строке выведите \(m\) различных целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le n\)) — индексы отрезков, которые вы удаляете, в любом порядке. Если существует несколько возможных ответов, вы можете вывести любой из них.

C. Вечеринка хоббитов

жадные алгоритмы Конструктив *1600

Все знают, что хоббиты любят устраивать различные вечеринки и празднества. В Шире живет n хоббитов. Они решили провести Грандиозный Праздник (ГП), длящийся несколько дней. На каждый день был составлен список приглашенных — некоторое непустое подмножество из всех жителей Шира. Для того чтобы всем было весело, и никто не скучал, необходимо чтобы для любых двух разных дней (скажем, А и В) ГП существовал бы хотя бы один хоббит, приглашенный как в день А, так и в день В. Однако, чтобы никто не поссорился, для любых трех разных дней А, В, С не должно существовать хоббита, приглашенного в день А, В и С. Жители Шира заинтересованы в наибольшей продолжительности ГП. Ваша задача для данного числа n указать наибольшую продолжительность ГП и списки приглашенных на каждый день.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 10000) — количество хоббитов.

Выходные данные

В первой строке выходного файла выведите число k — наибольшую продолжительность ГП в днях. Далее в k строках выведите списки приглашенных (через пробел). Каждый список выводите на отдельной строке. Каждый список может содержать произвольное положительное количество хоббитов. Хоббиты нумеруются целыми числами от 1 до n.

D. Две прогрессии

жадные алгоритмы Конструктив *2200

Арифметическая прогрессия — это такая непустая последовательность чисел, в которой разница между любыми двумя последовательными членами равна константе, называемой разностью прогрессии. Например, последовательность 3, 7, 11, 15 — арифметическая прогрессия. Из определения следует, что любые последовательности длины 1 или 2 — арифметические, а длины 0 — не арифметические.

Задана последовательность различных целых чисел a1, a2, ..., an. Требуется разбить ее на две арифметические прогрессии или определить, что это невозможно сделать. При разбиении каждый член заданной последовательности должен быть отнесен в одну из двух прогрессий, при этом относительный порядок чисел остается неизменным. Разбиение — это обратная операция к слиянию последовательностей.

Входные данные

В первой строке записано целое положительное число n (2 ≤ n ≤ 30000), n — длина заданной последовательности. Вторая строка содержит элементы заданной последовательности a1, a2, ..., an ( - 108 ≤ ai ≤ 108). Элементы последовательности — различные целые числа.

Выходные данные

Выведите искомые арифметические прогрессии, по одной на строке. Прогрессии можно располагать в любом порядке. Каждая прогрессия должна содержать хотя бы одно число. Если решения не существует, то выведите «No solution» (без кавычек) в единственную строку выходного файла. Если решений несколько, выведите любое из них.

Примечание

Во втором примере возможен другой вариант ответа (число 3 может быть отнесено во вторую прогрессию): 1, 2 и 3, -2, -7.

B. The Feast and the Bus

жадные алгоритмы Конструктив математика Перебор *1800

Employees of JebTrains are on their way to celebrate the 256-th day of the year! There are \(n\) employees and \(k\) teams in JebTrains. Each employee is a member of some (exactly one) team. All teams are numbered from \(1\) to \(k\). You are given an array of numbers \(t_1, t_2, \dots, t_n\) where \(t_i\) is the \(i\)-th employee's team number.

JebTrains is going to rent a single bus to get employees to the feast. The bus will take one or more rides. A bus can pick up an entire team or two entire teams. If three or more teams take a ride together they may start a new project which is considered unacceptable. It's prohibited to split a team, so all members of a team should take the same ride.

It is possible to rent a bus of any capacity \(s\). Such a bus can take up to \(s\) people on a single ride. The total cost of the rent is equal to \(s \cdot r\) burles where \(r\) is the number of rides. Note that it's impossible to rent two or more buses.

Help JebTrains to calculate the minimum cost of the rent, required to get all employees to the feast, fulfilling all the conditions above.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 5\cdot10^5, 1 \le k \le 8000\)) — the number of employees and the number of teams in JebTrains. The second line contains a sequence of integers \(t_1, t_2, \dots, t_n\), where \(t_i\) (\(1 \le t_i \le k\)) is the \(i\)-th employee's team number. Every team contains at least one employee.

Output

Print the minimum cost of the rent.

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.

I. Show Must Go On

Бинарный поиск жадные алгоритмы кратчайшие пути Перебор *3100

The director of the famous dance show plans a tour. It is already decided that the tour will consist of up to \(m\) concerts.

There are \(n\) dancers in the troupe. Each dancer is characterized by her awkwardness: the awkwardness of the \(i\)-th dancer is equal to \(a_i\).

The director likes diversity. For this reason, each concert will be performed by a different set of dancers. A dancer may perform in multiple concerts. For example, it is possible that a set of dancers performs in one concert and a subset of this set of dancers performs in another concert. The only constraint is that the same set of dancers cannot perform twice.

The director prefers the set with larger number of dancers over the set with smaller number of dancers. If two sets consist of the same number of dancers, then the director prefers the one which has smaller sum of awkwardness of dancers. If two sets of dancers are equal in size and total awkwardness, then the director does not have a preference which one is better.

A marketing study shows that viewers are not ready to come to a concert if the total awkwardness of all the dancers performing in the concert is greater than \(k\).

The director wants to find the best plan for \(m\) concerts. He thinks to write down all possible sets of dancers; then get rid of the sets with total awkwardness greater than \(k\). The remaining sets of dancers will be sorted according to his preference. The most preferred set of dancers will give the first concert, the second preferred set — the second concert and so on until the \(m\)-th concert. If it turns out that the total number of valid sets is less than \(m\), then the total number of concerts will be equal to the number of valid sets.

It turns out that the director delegated finding the plan to you! Please, notice that there might be several acceptable plans due to the fact that the director does not have a preference over sets of dancers with the same size and total awkwardness. In this case any of these plans is good enough. For each concert find the number of dancers and the total awkwardness of the set performing. Also, for the last concert find its set of dancers.

Input

The first line contains one integer \(t\) (\(1 \le t \le 10^5\)) — the number of test cases in the input. Then the test cases follow.

Each test case begins with a line containing three integers \(n\), \(k\) and \(m\) (\(1 \le n \le 10^6\), \(1 \le k \le 10^{18}\), \(1 \le m \le 10^6\)) — the total number of dancers, the maximum acceptable awkwardness of a set of dancers and the maximum number of concerts, respectively.

The following line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)), where \(a_i\) is the awkwardness of the \(i\)-th dancer.

The sum of the values of \(n\) over all test cases in the input does not exceed \(10^6\). Similarly, the sum of the values of \(m\) over all test cases in the input does not exceed \(10^6\).

Output

Print the answers to all test cases in the input.

If the troupe cannot give concerts at all, then simply print one line "0". In this case, you should not print anything else.

If the troupe gives a positive number of concerts \(r\) (\(r\) is equal to the minimum of \(m\) and the total number of valid sets), then first print the value of \(r\), then \(r\) lines: the \(j\)-th line should contain two integers \(s_j\) and \(t_j\) — the number of dancers in the \(j\)-th concert and the total awkwardness of the dancers performing in the \(j\)-th concert. Complete the output to a test case with a line that describes the last set: print exactly \(s_r\) distinct integers from \(1\) to \(n\) — the numbers of the dancers who will perform at the \(r\)-th (last) concert, in any order. If there are several answers, print any of them.

J. The Parade

Бинарный поиск жадные алгоритмы *1800

The Berland Army is preparing for a large military parade. It is already decided that the soldiers participating in it will be divided into \(k\) rows, and all rows will contain the same number of soldiers.

Of course, not every arrangement of soldiers into \(k\) rows is suitable. Heights of all soldiers in the same row should not differ by more than \(1\). The height of each soldier is an integer between \(1\) and \(n\).

For each possible height, you know the number of soldiers having this height. To conduct a parade, you have to choose the soldiers participating in it, and then arrange all of the chosen soldiers into \(k\) rows so that both of the following conditions are met:

  • each row has the same number of soldiers,
  • no row contains a pair of soldiers such that their heights differ by \(2\) or more.

Calculate the maximum number of soldiers who can participate in the parade.

Input

The first line contains one integer \(t\) (\(1 \le t \le 10000\)) — the number of test cases. Then the test cases follow.

Each test case begins with a line containing two integers \(n\) and \(k\) (\(1 \le n \le 30000\), \(1 \le k \le 10^{12}\)) — the number of different heights of soldiers and the number of rows of soldiers in the parade, respectively.

The second (and final) line of each test case contains \(n\) integers \(c_1\), \(c_2\), ..., \(c_n\) (\(0 \le c_i \le 10^{12}\)), where \(c_i\) is the number of soldiers having height \(i\) in the Berland Army.

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(30000\).

Output

For each test case, print one integer — the maximum number of soldiers that can participate in the parade.

Note

Explanations for the example test cases:

  1. the heights of soldiers in the rows can be: \([3, 3, 3, 3]\), \([1, 2, 1, 1]\), \([1, 1, 1, 1]\), \([3, 3, 3, 3]\) (each list represents a row);
  2. all soldiers can march in the same row;
  3. \(33\) soldiers with height \(1\) in each of \(3\) rows;
  4. all soldiers can march in the same row;
  5. all soldiers with height \(2\) and \(3\) can march in the same row.

L. Divide The Students

Бинарный поиск жадные алгоритмы математика *1500

A group of students has recently been admitted to the Faculty of Computer Sciences at the Berland State University. Now the programming teacher wants to divide them into three subgroups for practice sessions.

The teacher knows that a lot of programmers argue which language is the best. The teacher doesn't want to hear any arguments in the subgroups, so she wants to divide the students into three subgroups so that no pair of students belonging to the same subgroup want to argue.

To perform this division, the teacher asked each student which programming language he likes. There are \(a\) students who answered that they enjoy Assembler, \(b\) students stated that their favourite language is Basic, and \(c\) remaining students claimed that C++ is the best programming language — and there was a large argument between Assembler fans and C++ fans.

Now, knowing that Assembler programmers and C++ programmers can start an argument every minute, the teacher wants to divide the students into three subgroups so that every student belongs to exactly one subgroup, and there is no subgroup that contains at least one Assembler fan and at least one C++ fan. Since teaching a lot of students can be difficult, the teacher wants the size of the largest subgroup to be minimum possible.

Please help the teacher to calculate the minimum possible size of the largest subgroup!

Input

The first line contains one integer \(t\) (\(1 \le t \le 5\)) — the number of test cases in the input. Then test cases follow.

Each test case consists of one line containing three integers \(a\), \(b\) and \(c\) (\(1 \le a, b, c \le 1000\)) — the number of Assembler fans, Basic fans and C++ fans, respectively.

Output

For each test case print one integer — the minimum size of the largest subgroup if the students are divided in such a way that there is no subgroup that contains at least one Assembler fan and at least one C++ fan simultaneously.

Note

Explanation of the answers for the example \(1\):

  1. The first subgroup contains \(3\) Assembler fans and \(2\) Basic fans, the second subgroup — \(5\) C++ fans, the third subgroup — \(2\) C++ fans and \(3\) Basic fans.
  2. The first subgroup contains \(4\) Assembler fans, the second subgroup — \(6\) Basic fans, the third subgroup — \(2\) Basic fans and \(4\) C++ fans.
  3. The first subgroup contains all Assembler fans, the second subgroup — all Basic fans, the third subgroup — all C++ fans.
  4. The first subgroup contains all Assembler fans, the second subgroup — all Basic fans, the third subgroup — all C++ fans.
  5. The first subgroup contains \(12\) Assembler fans and \(2\) Basic fans, the second subgroup — \(1\) Assembler fan and \(13\) Basic fans, the third subgroup — \(7\) Basic fans and \(7\) C++ fans.

N. Wires

графы жадные алгоритмы поиск в глубину и подобное *2000

Polycarpus has a complex electronic device. The core of this device is a circuit board. The board has \(10^9\) contact points which are numbered from \(1\) to \(10^9\). Also there are \(n\) wires numbered from \(1\) to \(n\), each connecting two distinct contact points on the board. An electric signal can pass between wires \(A\) and \(B\) if:

  • either both wires share the same contact point;
  • or there is a sequence of wires starting with \(A\) and ending with \(B\), and each pair of adjacent wires in the sequence share a contact point.
The picture shows a circuit board with \(5\) wires. Contact points with numbers \(2, 5, 7, 8, 10, 13\) are used. Here an electrical signal can pass from wire \(2\) to wire \(3\), but not to wire \(1\).

Currently the circuit board is broken. Polycarpus thinks that the board could be fixed if the wires were re-soldered so that a signal could pass between any pair of wires.

It takes \(1\) minute for Polycarpus to re-solder an end of a wire. I.e. it takes one minute to change one of the two contact points for a wire. Any contact point from range \([1, 10^9]\) can be used as a new contact point. A wire's ends must always be soldered to distinct contact points. Both wire's ends can be re-solded, but that will require two actions and will take \(2\) minutes in total.

Find the minimum amount of time Polycarpus needs to re-solder wires so that a signal can pass between any pair of wires. Also output an optimal sequence of wire re-soldering.

Input

The input contains one or several test cases. The first input line contains a single integer \(t\) — number of test cases. Then, \(t\) test cases follow.

The first line of each test case contains a single integer \(n\) (\(1 \le n \le 10^5\)) — the number of wires. The following \(n\) lines describe wires, each line containing two space-separated integers \(x_i, y_i\) (\(1 \le x_i, y_i \le 10^9\), \(x_i \neq y_i\)) — contact points connected by the \(i\)-th wire. A couple of contact points can be connected with more than one wire.

Sum of values of \(n\) across all test cases does not exceed \(10^5\).

Output

For each test case first print one line with a single integer \(k\) — the minimum number of minutes needed to re-solder wires so that a signal can pass between any pair of wires. In the following \(k\) lines print the description of re-solderings. Each re-soldering should be described by three integers \(w_j, a_j, b_j\) (\(1 \le w_j \le n\), \(1 \le a_j, b_j \le 10^9\)). Such triple means that during the \(j\)-th re-soldering an end of the \(w_j\)-th wire, which was soldered to contact point \(a_j\), becomes soldered to contact point \(b_j\) instead. After each re-soldering of a wire it must connect two distinct contact points. If there are multiple optimal re-solderings, print any of them.

B. Двоичные палиндромы

жадные алгоритмы Строки *1400

Палиндром — это строка \(t\), которая одинаково читается как слева направо, так и справа налево (формально, \(t[i] = t[|t| + 1 - i]\) для всех \(i \in [1, |t|]\)). Здесь и далее \(|t|\) обозначает длину строки \(t\). Например, строки 010, 1001 и 0 — палиндромы.

У вас есть \(n\) двоичных строк \(s_1, s_2, \dots, s_n\) (каждая \(s_i\) состоит только из нулей и/или единиц). Вы можете менять местами любую пару символов любое количество раз (возможно, ноль раз). Символы могут быть как из одной строки, так и из разных строк — ограничений нет.

Формально, одна операция обмена выглядит следующим образом:

  • вы выбираете четыре целых числа \(x, a, y, b\), такие что \(1 \le x, y \le n\), \(1 \le a \le |s_x|\) и \(1 \le b \le |s_y|\) (где \(x\) и \(y\) — номера строк, а \(a\) и \(b\) — позиции в соответствующих строках \(s_x\) и \(s_y\)),
  • меняете местами символы \(s_x[a]\) и \(s_y[b]\).

Какое максимальное количество строк вы сможете сделать палиндромами одновременно?

Входные данные

В первой строке задано одно число \(Q\) (\(1 \le Q \le 50\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано единственное целое число \(n\) (\(1 \le n \le 50\)) — количество двоичных строк у вас в наличии.

В следующих \(n\) строках заданы двоичные строки \(s_1, s_2, \dots, s_n\) — по одной в строке. Гарантируется, что \(1 \le |s_i| \le 50\) и все строки состоят из нулей и/или единиц.

Выходные данные

Выведите \(Q\) чисел — по одному на набор входных данных. \(i\)-е число — это максимальное количество палиндромов, которые вы сможете получить одновременно, применяя операцию обмена символов ноль или более раз на строках из \(i\)-го набора.

Примечание

В первом наборе \(s_1\) — уже палиндром, поэтому ответ равен \(1\).

Во втором наборе вы не можете сделать все три строки палиндромами одновременно, но вы сможете сделать палиндромами любую пару из них. Например, сделаем \(s_1 = \text{0110}\), \(s_2 = \text{111111}\) и \(s_3 = \text{010000}\).

В третьем наборе вы можете сделать обе строки палиндромами. Например, \(s_1 = \text{11011}\) и \(s_2 = \text{100001}\).

В последнем наборе \(s_2\) — палиндром и вы можете сделать \(s_1\) палиндромом, например, поменяв местами \(s_1[2]\) и \(s_1[3]\).

C. Минимизируйте число

жадные алгоритмы *1600

Вам задано длинное число \(a\), состоящее из \(n\) цифр (\(n\) от \(1\) до \(3 \cdot 10^5\) включительно). Оно может содержать лидирующие нули.

Вы можете поменять местами две соседние цифры, если они имеют разную четность (т.е. они имеют разный остаток от деления на \(2\)).

Например, если \(a = 032867235\) вы можете получить следующие числа за одну операцию:

  • \(302867235\) если поменяете местами первую и вторую цифры;
  • \(023867235\) если поменяете местами вторую и третью цифры;
  • \(032876235\) если поменяете местами пятую и шестую цифры
  • \(032862735\) если поменяете местами шестую и седьмую цифры;
  • \(032867325\) если поменяете местами седьмую и восьмую цифры.

Обратите внимание, что вы не можете поменять местами цифры на позициях \(2\) и \(4\), потому что эти позиции не соседние. Так же, вы не можете поменять местами цифры на позициях \(3\) и \(4\), потому что эти цифры имеют одинаковую четность.

Вы можете выполнять любое (возможно, нулевое) количество таких операций.

Найдите минимальное число, которое вы можете получить.

Обратите внимание, что ответ так же может содержать лидирующие нули.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит длинное число \(a\), его длина \(n\) в отрезке от \(1\) до \(3 \cdot 10^5\) включительно.

Гарантируется, что сумма всех \(n\) не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — минимальное число, которое вы можете получить.

Примечание

В первом наборе вы можете выполнить следующую последовательность операций (пара цифр, которую вы меняете местами, выделена): \(0 \underline{\textbf{70}} 9 \rightarrow 0079\).

Во втором наборе изначальное число является оптимальным.

В третьем наборе вы можете выполнить следующую последовательность операций: \(246 \underline{\textbf{43}} 2 \rightarrow 24 \underline{\textbf{63}}42 \rightarrow 2 \underline{\textbf{43}} 642 \rightarrow 234642\).

D. Изменение зарплат

Бинарный поиск жадные алгоритмы сортировки *1900

Вы являетесь главой большой фирмы. \(n\) человек работают на вас, и \(n\) нечетно (т.е. \(n\) не делится на \(2\)).

Вам нужно распределить зарплаты вашим работникам. У вас есть \(s\) долларов для этого, и \(i\)-й работник должен получить зарплату от \(l_i\) до \(r_i\) долларов. Вам нужно так распределить зарплаты, чтобы максимизировать медианную зарплату.

Чтобы найти медиану множества нечетного размера, вам нужно отсортировать все числа множества и взять то, которое находится ровно посередине. Например:

  • медиана множества \([5, 1, 10, 17, 6]\) равна \(6\),
  • медиана множества \([1, 2, 1]\) равна \(1\).

Гарантируется, что вам хватит денег для выплаты минимальных зарплат, т.е. \(l_1 + l_2 + \dots + l_n \le s\).

Обратите внимание, что вам не обязательно тратить все \(s\) долларов на зарплаты.

Вам нужно ответить на \(t\) тестовых наборов.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов.

Первая строка каждого набора содержит два числа \(n\) и \(s\) (\(1 \le n < 2 \cdot 10^5\), \(1 \le s \le 2 \cdot 10^{14}\)) — количество работников и количество ваших денег. Число \(n\) не делится на \(2\).

Следующие \(n\) строк содержат описание информации о работниках. В \(i\)-й строке содержатся два числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Также гарантируется, что вам хватит денег для выплаты минимальных зарплат, т. е. \(\sum\limits_{i=1}^{n} l_i \le s\).

Выходные данные

На каждый набор выведите одно число — максимальную медианную зарплату, которую вы можете получить.

Примечание

В первом наборе вы можете распределить зарплаты следующим образом: \(sal_1 = 12, sal_2 = 2, sal_3 = 11\) (\(sal_i\) равно зарплате \(i\)-го работника). Тогда медианная зарплата будет равна \(11\).

Во втором наборе вам нужно платить \(1337\) долларов единственному работнику.

В третьем наборе вы можете распределить зарплаты следующим образом: \(sal_1 = 4, sal_2 = 3, sal_3 = 6, sal_4 = 6, sal_5 = 7\). Тогда медианная зарплата будет равна \(6\).

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}\).

E2. Голосование (усложнённая версия)

Бинарный поиск жадные алгоритмы Структуры данных *2400

Единственное отличие между простой и сложной версиями — ограничения.

Сейчас в Берляндии проходят выборы и вы хотите победить в них. А точнее, вы не просто хотите победить, а сделать так, чтобы все проголосовали за вас.

Всего есть \(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 2 \cdot 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество голосующих.

Следующие \(n\) строк содержат описание голосующих. \(i\)-я строка содержит два числа \(m_i\) и \(p_i\) (\(1 \le p_i \le 10^9, 0 \le m_i < n\)).

Гарантируется, что сумма \(n\) по всем тест-кейсам не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор выведите одно число — минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Примечание

В первом наборе вам нужно купить голос третьего голосующего. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({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}\).

E. Songwriter

жадные алгоритмы *2200

Andi is a mathematician, a computer scientist, and a songwriter. After spending so much time writing songs, he finally writes a catchy melody that he thought as his best creation. However, the singer who will sing the song/melody has a unique vocal range, thus, an adjustment may be needed.

A melody is defined as a sequence of \(N\) notes which are represented by integers. Let \(A\) be the original melody written by Andi. Andi needs to adjust \(A\) into a new melody \(B\) such that for every \(i\) where \(1 \le i < N\):

  • If \(A_i < A_{i+1}\), then \(B_i < B_{i+1}\).
  • If \(A_i = A_{i+1}\), then \(B_i = B_{i+1}\).
  • If \(A_i > A_{i+1}\), then \(B_i > B_{i+1}\).
  • \(|B_i - B_{i+1}| \le K\), i.e. the difference between two successive notes is no larger than \(K\).
Moreover, the singer also requires that all notes are within her vocal range, i.e. \(L \le B_i \le R\) for all \(1 \le i \le N\).

Help Andi to determine whether such \(B\) exists, and find the lexicographically smallest \(B\) if it exists. A melody \(X\) is lexicographically smaller than melody \(Y\) if and only if there exists \(j\) (\(1 \le j \le N\)) such that \(X_i = Y_i\) for all \(i < j\) and \(X_{j} < Y_{j}\).

For example, consider a melody \(A = \{1,3,5,6,7,8,9,10,3,7,8,9,10,11,12,12\}\) as shown in the following figure. The diagonal arrow up in the figure implies that \(A_i < A_{i+1}\), the straight right arrow implies that \(A_i = A_{i+1}\), and the diagonal arrow down implies that \(A_i > A_{i+1}\).

Supposed we want to make a new melody with \(L = 1\), \(R = 8\), and \(K = 6\). The new melody \(B = \{1,2,3,4,5,6,7,8,2,3,4,5,6,7,8,8\}\) as shown in the figure satisfies all the requirements, and it is the lexicographically smallest possible.

Input

Input begins with a line containing four integers: \(N\) \(L\) \(R\) \(K\) (\(1 \le N \le 100\,000\); \(1 \le L \le R \le 10^9\); \(1 \le K \le 10^9\)) representing the number of notes in the melody, the vocal range (\(L\) and \(R\)), and the maximum difference between two successive notes in the new melody, respectively. The next line contains \(N\) integers: \(A_i\) (\(1 \le A_i \le 10^9\)) representing the original melody.

Output

Output in a line \(N\) integers (each separated by a single space) representing the lexicographically smallest melody satisfying all the requirements, or output -1 if there is no melody satisfying all the requirements. Note that it might be possible that the lexicographically smallest melody which satisfies all the requirements to be the same as the original melody.

Note

Explanation for the sample input/output #1

This is the example from the problem description.

H. Twin Buildings

жадные алгоритмы реализация *1800

As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC Jakarta is planning to build two new buildings. These buildings should have a shape of a rectangle of the same size. Now, their problem is to find land to build the buildings.

There are \(N\) lands available for sale. The \(i^{th}\) land has a rectangular shape of size \(L_i \times W_i\). For a good feng shui, the building's side should be parallel to the land's sides.

One way is to build the two buildings on two different lands, one on each land (not necessarily with the same orientation). A building of size \(A \times B\) can be build on the \(i^{th}\) land if and only if at least one of the following is satisfied:

  • \(A \le L_i\) and \(B \le W_i\), or
  • \(A \le W_i\) and \(B \le L_i\).
Alternatively, it is also possible to build two buildings of \(A \times B\) on the \(i^{th}\) land with the same orientation. Formally, it is possible to build two buildings of \(A \times B\) on the \(i^{th}\) land if and only if at least one of the following is satisfied:
  • \(A \times 2 \le L_i\) and \(B \le W_i\), or
  • \(A \times 2 \le W_i\) and \(B \le L_i\), or
  • \(A \le L_i\) and \(B \times 2 \le W_i\), or
  • \(A \le W_i\) and \(B \times 2 \le L_i\).

Your task in this problem is to help ICPC Jakarta to figure out the largest possible buildings they can build given \(N\) available lands. Note that ICPC Jakarta has to build two buildings of \(A \times B\); output the largest possible for \(A \times B\).

Input

Input begins with a line containing an integer: \(N\) (\(1 \le N \le 100\,000\)) representing the number of available lands. The next \(N\) lines each contains two integers: \(L_i\) \(W_i\) (\(1 \le L_i, W_i \le 10^9\)) representing the size of the land.

Output

Output in a line a number representing the largest building that ICPC Jakarta can build with exactly one decimal point (see sample input/output for clarity).

Note

Explanation for the sample input/output #1

Two buildings of \(2.5 \times 5\) can be built both on the first land.

Explanation for the sample input/output #2

Two buildings of \(2 \times 4\) can be built each on the first and second lands.

Explanation for the sample input/output #3

Two buildings of \(7 \times 6\) can be built each on the second and third lands.

B. Глупая ошибка

жадные алгоритмы реализация *1400

В Центральной Компании есть офис со сложной системой безопасности. В офисе работает \(10^6\) сотрудников, пронумерованных от \(1\) до \(10^6\).

Система безопасности записывает в лог входы и выходы из офиса. Вход \(i\)-го работника описывается числом \(i\), а выход \(i\)-го работника описывается числом \(-i\).

У компании есть строгие правила:

  • Сотрудник может зайти в офис не более одного раза за день.
  • Очевидно, сотрудник не может выйти из офиса если он не зашел в него ранее в этот день.
  • В начале и конце каждого дня офис пуст (сотрудники не могут оставаться в офисе на ночь). Он также может быть пуст в любой момент дня.

Любой массив событий, удовлетворяющий этим правилам называется корректным днем.

Приведем некоторые примеры корректных или некорректных дней:

  • \([1, 7, -7, 3, -1, -3]\) это корректный день (\(1\) входит, \(7\) входит, \(7\) выходит, \(3\) входит, \(1\) выходит, \(3\) выходит).
  • \([2, -2, 3, -3]\) это также корректный день.
  • \([2, 5, -5, 5, -5, -2]\) это некорректный день, потому что \(5\) зашел в офис дважды в течение одного дня.
  • \([-4, 4]\) это некорректный день, потому что \(4\) вышел из офиса, не заходя в него.
  • \([4]\) это некорректный день, потому что \(4\) вошел в офис и не вышел из него до конца дня.

Есть \(n\) событий \(a_1, a_2, \ldots, a_n\), в порядке, в котором они происходили. Этот массив соответствует одному или нескольким последовательным дням. Системный администратор по ошибке удалил номера дней, но он не менял порядок событий.

Ваша задача разбить (разрезать) массив событий \(a\) на последовательные подотрезки, которые должны образовывать непустые корректные дни (или определить, что это невозможно). Каждый элемент массива должен принадлежать ровно одному подотрезку разбиения. Каждый последовательный подотрезок массива должен образовывать корректный день.

К примеру, если \(n=8\) и \(a=[1, -1, 1, 2, -1, -2, 3, -3]\), тогда его можно разбить на два последовательных подотрезка, каждый из которых является корректным днем: \(a = [1, -1~ \boldsymbol{|}~ 1, 2, -1, -2, 3, -3]\).

Помогите администратору корректно разбить \(a\) или определите, что это невозможно. Найдите любое подходящее разбиение, вам не нужно минимизировать или максимизировать количество частей.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \le a_i \le 10^6\) and \(a_i \neq 0\)).

Выходные данные

Если не существует корректного разбиения, выведите \(-1\). Иначе, выведите любое корректое разбиение в следующем формате:

  • В первой строке выведите количество дней \(d\) (\(1 \le d \le n\)).
  • Во второй строке, выведите \(d\) целых чисел \(c_1, c_2, \ldots, c_d\) (\(1 \le c_i \le n\) and \(c_1 + c_2 + \ldots + c_d = n\)), где \(c_i\) это количество событий в \(i\)-м дне.

Если есть несколько возможных решений, вы можете вывести любое из них. Вам необязательно минимизировать или максимизировать количество дней.

Примечание

В первом примере весь массив является корректным днем.

Во втором примере, один из возможных способов это разбить массив на \([1, -1]\) и \([1, 2, -1, -2, 3, -3]\) (\(d = 2\) и \(c = [2, 6]\)). Единственное другое возможное решение это разбить на \([1, -1]\), \([1, 2, -1, -2]\) и \([3, -3]\) (\(d = 3\) и \(c = [2, 4, 2]\)). Оба решения принимаются.

В третьем и четвертом примерах, можно доказать, что решения нет. Пожалуйста, обратите внимание, что массив данный во вводе не является гарантированно корректным набором событий.

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\).

D. Гармоничный граф

графы жадные алгоритмы Конструктив поиск в глубину и подобное снм сортировки *1700

Вам дан неориентированный граф из \(n\) вершин и \(m\) ребер. Вершины пронумерованы целыми числами от \(1\) до \(n\).

Назовем граф гармоничным если и только если выполняется следующее свойство:

  • Для каждой такой тройки целых чисел \((l, m, r)\), что \(1 \le l < m < r \le n\), если есть путь из вершины \(l\) в вершину \(r\), тогда существует путь из вершины \(l\) в вершину \(m\).

Иначе говоря, в гармоничном графе, если из вершины \(l\) можно по ребрам дойти до вершины \(r\) (\(l < r\)), тогда также должно быть можно дойти до вершин \((l+1), (l+2), \ldots, (r-1)\).

Какое минимальное число ребер надо добавить в граф, чтобы он стал гармоничным?

Входные данные

В первой строке входного файла записаны два целых числа \(n\) и \(m\) (\(3 \le n \le 200\ 000\) и \(1 \le m \le 200\ 000\)).

В \(i\)-й из следующих \(m\) строк записаны два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)), описывающих ребро между вершинами \(u\) и \(v\).

Гарантируется, что граф простой (в нем нет петель, а также между каждой парой вершин существует не более одного ребра).

Выходные данные

Выведите минимальное количество ребер которое нужно добавить в граф, чтобы он стал гармоничным.

Примечание

В первом примере граф не гармоничный (например, при \(1 < 6 < 7\), из вершины \(1\) можно достичь вершину \(7\) по пути \(1 \rightarrow 2 \rightarrow 7\), но из вершины \(1\) нельзя достичь вершину \(6\)). Однако добавление ребра \((2, 4)\) достаточно, чтобы сделать его гармоничным.

Во втором примере граф уже гармоничный.

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\) покрыты, но это не важно.

A. Кормление куриц

жадные алгоритмы Конструктив реализация *1700

Лун — большой фанат CFC (Codeforces Fried Chicken/жареные курицы Codeforces). Однако цена на CFC растет, поэтому он решил разводить куриц на собственной ферме.

Его ферму можно представить как прямоугольную сетку с \(r\) строками и \(c\) столбцами. Некоторые из этих клеток содержат рис, другие пусты. На ферме живут \(k\) куриц. Количество куриц не превышает количество клеток с рисом.

Лун хочет подарить своим курицам клетки с рисом. Он хотел бы удовлетворить следующие требования:

  • Каждая клетка фермы должна быть отдана ровно одной курице.
  • Каждая курица должна получить как минимум одну клетку.
  • Набор клеток, отданных одной курице, должен образовать связную область. Другими словами, если две клетки \((x, y)\) и \((u, v)\) отданы одной и той же курице, эта курица может пройти от \((x, y)\) до \((u, v)\), проходя только свои клетки и перемещаясь из каждой клетки в другую, разделяющую одну сторону (то есть, связность «по стороне»).

Лун не хочет, чтобы его курицы боролись за еду. Поэтому он хочет, чтобы разница между максимальным и минимальным количеством клеток с рисом, отданных для одной курицы, была как можно меньше. Пожалуйста, помогите ему.

Входные данные

Во входных данных находятся несколько (один или более) наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следуют их описания.

Первая строка каждого набора содержит три целых числа \(r\), \(c\) и \(k\) (\(1 \leq r, c \leq 100, 1 \leq k \leq 62\)), которые обозначают размер фермы Луна и количество его куриц.

Каждая из следующих \(r\) строк содержит \(c\) символов, либо «.», либо «R», которые обозначают пустую клетку и клетку с рисом. Гарантируется, что количество куриц не превосходит количество клеток с рисом.

Гарантируется, что сумма значений \(r \cdot c\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^4\).

Выходные данные

Для каждого теста выведите \(r\) строк по \(c\) символов на каждой из них. Каждый символ должен быть либо буквой английского алфавита (либо прописной, либо строчной), либо цифрой. Два символа должны быть одинаковы тогда и только тогда, когда соответствующие клетки принадлежат одной и той же курице. Большие и маленькие буквы считаются различными, поэтому «A» и «a» принадлежат различным курицам.

Если существует несколько решений, выведите любое из них.

Примечание

Эти рисунки объясняют пример вывода. Каждый цвет представляет одну курицу. Клетки, заполненные узорами (не однотонные), содержат рис.

В первом примере каждая курица имеет одну клетку с рисом. Следовательно, разница между максимальным и минимальным количеством клеток с рисом, отданных для курицы, равна \(0\).

Во втором примере есть \(4\) курицы, у которых по \(3\) клетки с рисом, и \(2\) курицы с \(2\) клетками. Следовательно, разница между максимальным и минимальным количеством клеток с рисом, отданных для курицы, составляет \(3 - 2 = 1\).

В третьем примере каждая курица имеет \(3\) клетки с рисом.

В последнем примере есть \(62\) курицы и ровно \(62\) клетки с рисом, каждая курица должна получить ровно одну клетку. Есть несколько возможных разбиений.

B1. Отправьте коробки Алисе (упрощенная версия)

жадные алгоритмы Конструктив математика теория чисел Тернарный поиск *1800

Это — упрощённая версия задачи. В этой версии, \(1 \le n \le 10^5\) и \(0 \le a_i \le 1\). Вы можете взламывать эту задачу только тогда, когда решите и заблокируете обе версии.

Приближается Рождество, и наш главный герой, Боб, готовит эффектный подарок для своей давней лучшей подруги Алисы. В этом году он решил приготовить \(n\) коробок шоколада, пронумерованных от \(1\) до \(n\). Изначально \(i\)-я коробка содержит \(a_i\) кусочков шоколада.

Поскольку Боб — типичный приятный парень, он не отправит Алисе \(n\) пустых ящиков. Другими словами, минимум одно число из \(a_1, a_2, \ldots, a_n\) является положительным. Поскольку Алиса не любит взаимно простые множества, она будет счастлива, только если существует какое-то целое число \(k > 1\), такое, что количество кусочков в каждой коробке делится на \(k\). Обратите внимание, что Алиса не будет возражать, если будут какие-то пустые коробки.

Чарли, парень Алисы, также является вторым лучшим другом Боба, поэтому он решает помочь Бобу, переставляя кусочки шоколада. За одну секунду Чарли может взять кусок в \(i\)-й коробке, и поместить его либо в \(i-1\)-ю коробку или \(i+1\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество коробок шоколада.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)) — количество кусков шоколада в \(i\)-й коробке.

Гарантируется, что как минимум одно число среди \(a_1, a_2, \ldots, a_n\) положительное.

Выходные данные

Если Чарли не может сделать Алису счастливой, выведите \(-1\).

Иначе выведите \(x\) — минимальное количество секунд, которые нужны Чарли, чтобы помочь Бобу сделать Алису счастливой.

B2. Отправьте коробки Алисе (усложнённая версия)

жадные алгоритмы Конструктив математика теория чисел Тернарный поиск *2100

Это — сложная версия задачи. В ней \(1 \le n \le 10^6\) и \(0 \leq a_i \leq 10^6\). Вы можете взламывать эту версию тогда, когда решите ее (но предыдущую только тогда, когда заблокировали обе версии).

Приближается Рождество, и наш главный герой, Боб, готовит эффектный подарок для своей давней лучшей подруги Алисы. В этом году он решил приготовить \(n\) коробок шоколада, пронумерованных от \(1\) до \(n\). Изначально \(i\)-я коробка содержит \(a_i\) кусочков шоколада.

Поскольку Боб — типичный приятный парень, он не отправит Алисе \(n\) пустых ящиков. Другими словами, минимум одно число из \(a_1, a_2, \ldots, a_n\) является положительным. Поскольку Алиса не любит взаимно простые множества, она будет счастлива, только если существует какое-то целое число \(k > 1\), такое, что количество кусочков в каждой коробке делится на \(k\). Обратите внимание, что Алиса не будет возражать, если будут какие-то пустые коробки.

Чарли, парень Алисы, также является вторым лучшим другом Боба, поэтому он решает помочь Бобу, переставляя кусочки шоколада. За одну секунду Чарли может взять кусок в \(i\)-й коробке, и поместить его либо в \(i-1\)-ю коробку или \(i+1\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество коробок шоколада.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — количество кусков шоколада в \(i\)-й коробке.

Гарантируется, что как минимум одно число среди \(a_1, a_2, \ldots, a_n\) положительное.

Выходные данные

Если Чарли не может сделать Алису счастливой, выведите \(-1\).

Иначе выведите \(x\) — минимальное количество секунд, которые нужны Чарли, чтобы помочь Бобу сделать Алису счастливой.

Примечание

В первом примере Чарли может передвинуть все шоколадные кусочки во вторую коробку. Каждая коробка будет делиться на \(17\).

Во втором примере Чарли может передвинуть кусочек из \(2\)-й коробки в \(3\)-ю и еще один из \(4\)-й в \(5\)-ю. Каждая коробка делится на \(3\).

В третьем примере каждая коробка уже делится на \(5\).

В четвертом примере Чарли не может ничего сделать, он не может помочь Бобу сделать Алису счастливой.

B. Минимизация перестановки

жадные алгоритмы *1400

Вам дана перестановка длины \(n\). Напомним, что перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2, 3, 1, 5, 4]\) — перестановка, но \([1, 2, 2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1, 3, 4]\) тоже не перестановка (\(n=3\) но в массиве встречается \(4\)).

Вы можете применить максимум \(n-1\) операцию к заданной перестановке (возможно, что вы не будете совершать никаких операций). \(i\)-я операция позволяет вам поменять местами элементы заданной перестановки на позициях \(i\) и \(i+1\). Каждая операция может быть применена не больше одного раза. Операции могут быть применены в произвольном порядке.

Вы можете увидеть определение лексикографического сравнения в секции примечаний.

Ваша задача — найти лексикографически минимальную перестановку, которая может быть получена с помощью применения каких-либо из данных операций в каком-либо порядке.

Вам необходимо ответить на \(q\) независимых наборов входных данных.

Например, рассмотрим перестановку \([5, 4, 1, 3, 2]\). Минимальная возможная перестановка, которую мы можем получить — \([1, 5, 2, 4, 3]\), и мы можем сделать это следующим образом:

  1. выполним вторую операцию (поменяем местами второй и третий элементы) и получим перестановку \([5, 1, 4, 3, 2]\);
  2. выполним четвертую операцию (поменяем местами четвертый и пятый элементы) и получим перестановку \([5, 1, 4, 2, 3]\);
  3. выполним третью операцию (поменяем местами третий и четвертый элементы) и получим перестановку \([5, 1, 2, 4, 3]\).
  4. выполним первую операцию (поменяем местами первый и второй элементы) и получим перестановку \([1, 5, 2, 4, 3]\);

Другой пример — \([1, 2, 4, 3]\). Минимальную возможную перестановку \([1, 2, 3, 4]\) можно получить при помощи третьей операции (поменять местами третий и четвертый элементы).

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных. Затем \(q\) следуют наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество элементов в перестановке.

Вторая строка набора входных данных содержит \(n\) различных целых чисел от \(1\) до \(n\) — заданную перестановку.

Выходные данные

Для каждого набора выходных данных выведите ответ на него — лексикографически минимальную перестановку, полученную путем применения некоторых заданных операций в некотором порядке.

Примечание

Напомним, что перестановка \(p\) длины \(n\) лексикографически меньше, чем перестановка \(q\) длины \(n\), если существует такой индекс \(i \le n\), что для всех \(j\) от \(1\) до \(i - 1\) выполняется условие \(p_j = q_j\), а также \(p_i < q_i\). Например:

  • \(p = [1, 3, 5, 2, 4]\) меньше, чем \(q = [1, 3, 5, 4, 2]\) (существует такой индекс \(i=4\), что \(p_i < q_i\), а для всех \(j < i\) выполняется \(p_j = q_j\)),
  • \(p = [1, 2]\) меньше, чем \(q = [2, 1]\) (существует такой индекс \(i=1\), что \(p_i < q_i\), а для всех \(j < i\) выполняется \(p_j = q_j\)).

C. Прыжки по платформам

жадные алгоритмы *1700

Вы стоите около реки ширины \(n\). Левым берегом реки является клетка \(0\), а правым берегом является клетка \(n + 1\) (более формально, река может быть представлена как последовательность из \(n + 2\) клеток, пронумерованных от \(0\) до \(n + 1\)). Также на реке находятся \(m\) деревянных платформ, \(i\)-я платформа имеет длину \(c_i\) (таким образом, \(i\)-я платформа занимает \(c_i\) последовательных клеток реки). Гарантируется, что сумма длин платформ не превосходит \(n\).

Вы стоите в клетке \(0\) и хотите каким-то образом достичь клетку \(n+1\). Если вы стоите в позиции \(x\), вы можете прыгнуть в любую позицию в отрезке \([x + 1; x + d]\). Тем не менее, вы очень не любите воду, поэтому вы можете прыгать только в такие клетки, что они принадлежат каким-то деревянным платформам. Например, если \(d=1\), вы можете прыгать только в следующую позицию (если она принадлежит деревянной платформе). Можете считать, что клетки \(0\) и \(n+1\) принадлежат деревянным платформам.

Вы хотите знать, возможно ли достичь \(n+1\) из \(0\), если вы можете двигать платформы влево и вправо произвольное количество раз (возможно, нулевое) при условии, что они не должны пересекать друг друга (но две платформы могут касаться друг с другом). Это также значит, что вы не можете изменять относительный порядок платформ.

Заметьте, что вы можете двигать платформы до тех пор, пока не начали прыгать (другими словами, вы сначала двигаете платформы, а затем начинаете прыгать).

Например, если \(n=7\), \(m=3\), \(d=2\) и \(c = [1, 2, 1]\), то один из способов достичь \(8\) из \(0\) показан ниже:

Первый пример: \(n=7\).
Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(d\) (\(1 \le n, m, d \le 1000, m \le n\)) — ширина реки, количество платформ и максимальная дистанция прыжка соответственно.

Вторая строка входных данных содержит \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_i \le n, \sum\limits_{i=1}^{m} c_i \le n\)), где \(c_i\) равно длине \(i\)-й платформы.

Выходные данные

Если невозможно достичь \(n+1\) из \(0\), выведите NO в первой строке. Иначе выведите YES в первой строке и массив \(a\) длины \(n\) во второй строке — последовательность клеток реки (исключая клетки \(0\) и \(n + 1\)).

Если клетка \(i\) не принадлежит никакой платформе, то \(a_i\) должно быть равно \(0\). Иначе оно должно быть равно индексу платформы (в \(1\)-индексации, платформы пронумерованы от \(1\) до \(m\) в порядке входных данных), к которой принадлежит клетка \(i\).

Заметьте, что все \(a_i\), равные \(1\), должны образовывать непрерывный отрезок массива \(a\) длины \(c_1\), все \(a_i\), равные \(2\), должны образовывать непрерывный отрезок массива \(a\) длины \(c_2\), ..., все \(a_i\), равные \(m\), должны образовывать непрерывный отрезок массива \(a\) длины \(c_m\). Самая левая позиция \(2\) в \(a\) должна быть больше, чем самая правая позиция \(1\), самая левая позиция \(3\) в \(a\) должна быть больше, чем самая правая позиция \(2\), ..., самая левая позиция \(m\) в \(a\) должна быть больше, чем самая правая позиция \(m-1\).

Посмотрите примеры выходных данных для лучшего понимания.

Примечание

Рассмотрим первый тестовый пример: ответ равен \([0, 1, 0, 2, 2, 0, 3]\). Последовательность прыжков, которые вы выполняете, равна \(0 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 7 \rightarrow 8\).

Рассмотрим второй тестовый пример: неважно, как поставить платформу, так как вы всегда можете допрыгнуть из \(0\) в \(11\).

Рассмотрим третий тестовый пример: ответ равен \([0, 0, 0, 0, 1, 1, 0, 0, 0, 0]\). Последовательность прыжков, которые вы выполняете, равна \(0 \rightarrow 5 \rightarrow 6 \rightarrow 11\).

D. Минимизация бинарной строки

жадные алгоритмы *1500

Вам дана бинарная строка длины \(n\) (т. е. строка, состоящая из \(n\) символов '0' и '1').

За один ход вы можете поменять местами два соседних символа в строке. Какую лексикографически минимальную строку вы можете получить из заданной, если вы можете сделать не более, чем \(k\) ходов? Возможно, что вы не сделаете ни одного хода.

Заметьте, что вы можете менять местами одну и ту же пару соседних символов с индексами \(i\) и \(i+1\) любое (возможно, нулевое) количество раз. Каждый такой обмен является отдельным ходом.

Вам необходимо ответить на \(q\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^6, 1 \le k \le n^2\)) — длину строки и количество ходов, которые вы можете сделать.

Вторая строка набора входных данных содержит одну строку, состоящую из \(n\) символов '0' и '1'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\) (\(\sum n \le 10^6\)).

Выходные данные

Для каждого запроса выведите ответ на него — лексикографически минимальную возможную строку длины \(n\), которую вы можете получить из заданной, сделав не более, чем \(k\) ходов.

Примечание

В первом тестовом примере вы можете изменить строку следующим образом: \(1\underline{10}11010 \rightarrow \underline{10}111010 \rightarrow 0111\underline{10}10 \rightarrow 011\underline{10}110 \rightarrow 01\underline{10}1110 \rightarrow 01011110\).

В третьем тестовом примере у вас есть достаточно ходов для того, чтобы сделать строку отсортированной.

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\).

A. Два враждующих ученика

жадные алгоритмы математика *800

Вы работаете тренером в школе.

Сейчас урок физкультуры, на котором \(n\) учеников стоят в ряд. И среди них есть два враждующих ученика. Первый находится на позиции \(a\), второй — на позиции \(b\). Позиции пронумерованы от \(1\) до \(n\) слева направо.

Так как они враждуют, вы хотите максимизировать расстояние между ними. Если ученики находятся на позициях \(p\) и \(s\), то расстояние между ними равно \(|p - s|\).

Вы можете выполнить следующее действие не более \(x\) раз: вы выбираете любых двух соседних по позициям учеников и меняете их местами.

Посчитайте максимальное расстояние, которое вы можете получить, поменяв местами соседних учеников не более \(x\) раз.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных содержит четыре числа \(n\), \(x\), \(a\) и \(b\) (\(2 \le n \le 100\), \(0 \le x \le 100\), \(1 \le a, b \le n\), \(a \neq b\)) — количество учеников в ряду, максимальное количество обменов и позиции первого и второго враждующих учеников соответственно.

Выходные данные

На каждый набор входных данных выведите одно число — максимальное расстояние между враждующими учениками, которое вы можете получить.

Примечание

В первом наборе входных данных вы можете поменять местами учеников на позициях \(3\) и \(4\). Тогда расстояние между враждующими учениками будет равно \(|4 - 2| = 2\).

Во втором наборе входных данных вам не нужно менять учеников местами.

В третьем наборе входных данных вы не можете менять учеников местами.

C. Задоминированный подмассив

жадные алгоритмы реализация сортировки Строки *1200

Назовем массив \(t\) задоминированным значением \(v\) в следующем случае.

Во-первых, массив \(t\) должен состоять хотя бы из \(2\) элементов. Теперь, давайте посчитаем количество вхождений каждого числа \(num\) в \(t\) и назовем данное значение \(occ(num)\). Тогда, \(t\) — задоминирована (числом \(v\)) тогда (и только тогда), когда \(occ(v) > occ(v')\) для любого другого числа \(v'\). Например, массивы \([1, 2, 3, 4, 5, 2]\), \([11, 11]\) и \([3, 2, 3, 2, 3]\) задоминированы (числами \(2\), \(11\) и \(3\) соответственно), но массивы \([3]\), \([1, 2]\) и \([3, 3, 2, 2, 1]\) — нет.

Небольшая заметка: так как любой массив может быть задоминирован только одним числом, то мы можем не уточнять данное число и просто говорить, что массив либо задоминирован, либо нет.

Вам задан массив \(a_1, a_2, \dots, a_n\). Определите его самый короткий задоминированный подмассив, либо скажите, что таких нет.

Подмассив массива \(a\) — это последовательная часть массива \(a\), другими словами массив \(a_i, a_{i + 1}, \dots, a_j\) для некоторых \(1 \le i \le j \le n\).

Входные данные

В первой строке задано единственное целое число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных. Каждый набор состоит из двух строк.

В первой строке задано единственное число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — соответствующие элементы массива \(a\).

Гарантируется, что суммарная длина массивов в одном тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) чисел — по одному на набор входных данных. Для каждого набора выведите единственное целое число — длину самого короткого задоминированного подмассива либо \(-1\), если таких подмассивов нет.

Примечание

В первом наборе входных данных, нет подмассивов длины хотя бы \(2\), а потому ответ равен \(-1\).

Во втором наборе, весь массив задоминирован (числом \(1\)) и это единственный задоминированный подмассив.

В третьем наборе, подмассив \(a_4, a_5, a_6\) — самый короткий задоминированный подмассив.

В четвертом наборе, все подмассивы длины больше, чем один, задоминированы.

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\) оставшиеся задачи.

В третьем примере выгодно отдать все задачи третьему участнику.

В четвертом примере выгодно отдать все задачи второму участнику.

G. Множество делителей

бпф жадные алгоритмы математика разделяй и властвуй теория чисел *2600

Вам задано число \(x\), представленное в виде произведения \(n\) своих простых делителей \(p_1 \cdot p_2, \cdot \ldots \cdot p_n\). Пусть \(S\) — это множество всех положительных целых делителей числа \(x\) (включая \(1\) и само число \(x\)).

Назовем множество (set) целых чисел \(D\) хорошим тогда (и только тогда), когда не существует пары \(a \in D\), \(b \in D\) таких, что \(a \ne b\) и \(a\) делит \(b\).

Найдите хорошее подмножество \(S\) с максимально возможным размером. Так как ответ может быть очень большим, выведите размер подмножества по модулю \(998244353\).

Входные данные

В первой строке задано единственное число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество простых делителей в представлении числа \(x\).

Во второй строке заданы \(n\) простых чисел \(p_1, p_2, \dots, p_n\) (\(2 \le p_i \le 3 \cdot 10^6\)) — разложение числа \(x\) на простые.

Выходные данные

Выведите максимально возможный размер хорошего подмножества по модулю \(998244353\).

Примечание

В первом примере \(x = 2999999 \cdot 43 \cdot 2999957\) и одним из его максимальных хороших подмножеств является \(\{ 43, 2999957, 2999999 \}\).

Во втором примере \(x = 2 \cdot 3 \cdot 2 \cdot 3 \cdot 2 \cdot 2 = 144\) и одним из его максимальных хороших подмножеств является \(\{ 9, 12, 16 \}\).

C. Дисплей для читалки

жадные алгоритмы Конструктив *2000

Усилиями исследователей был создан качественно новый дисплей для читалок. Новый дисплей имеет большее разрешение, потребляет меньше энергии, дешевле в производстве, а ко всему прочему, еще и гнется. Единственное неудобство — необычное управление, проблемы с которым разработчики решили списать на программистов ПО для читалок.

Дисплей имеет вид квадрата n × n пикселей, каждый из которых может быть черного или белого цвета. Строки дисплея пронумерованы целыми числами от 1 до n сверху вниз, столбцы пронумерованы целыми числами от 1 до n слева направо. Дисплей может выполнять команды вида «x, y». Обычный дисплей при выполнении такой команды просто меняет цвет пиксела с координатами (x, y) на противоположный, где x — номер строки, а y — номер столбца. Но в нашем новом дисплее на противоположный меняют свои цвета пиксели, принадлежащие хотя бы одному из отрезков (x, x) - (x, y) и (y, y) - (x, y) (у обоих отрезков оба конца включаются).

Например, если изначально дисплей размера 5 × 5 полностью белый, то последовательность команд (1, 4), (3, 5), (5, 1), (3, 3) приведет к следующим изменениям:

Вам, как программисту ПО для читалок, требуется определить наименьшее количество команд, нужное для формирования картинки. Можете считать, что изначально все пиксели дисплея белого цвета.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 2000).

В следующих n строках имеется по n символов в каждой — описание картинки, которую следует получить. «0» означает белый цвет, «1» — черный.

Выходные данные

Выведите одно целое число z — наименьшее количество команд, нужное для формирования картинки.

C. Бесконечный забор

жадные алгоритмы математика теория чисел *1700

Вы являетесь лидером повстанцев и планируете начать революцию в вашей стране. Но злое Правительство узнало о ваших планах и решило наказать вас в форме исправительных работ.

Вы обязаны покрасить забор в два цвета, который состоит из \(10^{100}\) досок, следующим образом (будем считать, что доски пронумерованы слева направо, начиная с \(0\)):

  • если номер доски делится на \(r\) (это доски с номерами \(0\), \(r\), \(2r\) и так далее), то вы обязаны покрасить ее в красный;
  • если номер доски делится на \(b\) (это доски с номерами \(0\), \(b\), \(2b\) и так далее), то вы обязаны покрасить ее в синий;
  • если номер доски делится и на \(r\) и на \(b\), то вы можете выбрать цвет, в который покрасите эту доску;
  • в противном случае, вам не надо красить доску совсем (тратить лишнюю краску в принципе запрещено).

Более того, Правительство добавило еще одно условие, чтобы усложнить вам задачу. Давайте выпишем номера всех покрашенных досок забора в порядке возрастания: если в данном списке найдется \(k\) последовательных досок одного цвета, то Правительство объявит вас лицом, неспособным к исправительным работам, и отправит вас на казнь. Если вы не покрасите забор, согласно заданным выше условиям, вас тоже казнят.

Вопрос в следующем: сможете ли вы выполнить работу (время выполнения не имеет значения) или же казнь неизбежна и вам необходимо сбежать любым способом.

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одному в строке. В каждом наборе заданы три целых числа \(r\), \(b\), \(k\) (\(1 \le r, b \le 10^9\), \(2 \le k \le 10^9\)) — соответствующие коэффициенты.

Выходные данные

Выведите \(T\) слов — по одному в строке. Для каждого набора выведите REBEL (регистр не важен), если казнь неизбежна или OBEY (регистр не важен), в противном случае.

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\));

B. ПИН-коды

жадные алгоритмы реализация *1400

ПИН-код — это строка, которая состоит ровно из \(4\) цифр. Примеры возможных ПИН-кодов: «7013», «0000» и «0990». Обратите внимание, что ПИН-код может начинаться с любой цифры, даже с 0.

У Поликарпа есть \(n\) (\(2 \le n \le 10\)) банковских карт, ПИН-код \(i\)-й карты равен \(p_i\).

Недавно Поликарп прочёл рекомендацию, что на разные карты лучше устанавливать различные ПИН-коды. Поэтому он хочет поменять наименьшее количество цифр в ПИН-кодах своих карт так, чтобы все \(n\) кодов оказались различными.

Формально говоря, за один шаг Поликарп берёт одну банковскую карту с номером \(i\) (\(1 \le i \le n\)), затем в её ПИН-коде \(p_i\) выбирает одну позицию (от \(1\) до \(4\)), и изменяет цифру в этой позиции на любую другую. Ему необходимо за наименьшее количество шагов сделать так, чтобы не существовало пары одинаковых ПИН-кодов.

Поликарп быстро справился с этой задачей. А сможете ли вы её решить?

Входные данные

В первой строке находится число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

В следующих строках следуют описания \(t\) наборов входных данных. Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 10\)) — количество ПИН-кодов у Поликарпа. В следующих \(n\) строках содержатся ПИН-коды \(p_1, p_2, \dots, p_n\) — по одному в строке. Длина каждого из них равна \(4\). Все ПИН-коды состоят только из цифр.

Выходные данные

Выведите ответы на \(t\) заданных наборов входных данных. Ответ на каждый набор должен состоять из \(n + 1\) строки.

В первую строку выведите \(k\) — наименьшее количество изменений, чтобы сделать все ПИН-коды различными. Далее в \(n\) строках выведите изменённые ПИН-коды в порядке, соответствующем их порядку во входных данных. Если существует несколько оптимальных ответов, выведите любой из них.

A. Beautiful Regional Contest

жадные алгоритмы реализация *1500

Вот и подошел к концу Beautiful Regional Contest (BeRC)! В соревновании приняли участие \(n\) студентов. Уже известна таблица финальных результатов — участник на \(i\)-м месте решил \(p_i\) задач. Так как в первую очередь участники упорядочиваются по количеству решенных задач, то \(p_1 \ge p_2 \ge \dots \ge p_n\).

Помогите жюри распределить золотые, серебряные и бронзовые медали. Пусть их количества равны \(g\), \(s\) и \(b\), соответственно. Вот перечень требований из регламента, которые все должны быть удовлетворены:

  • для каждого из трёх достоинств медалей хотя бы одна медаль должна быть вручена (то есть \(g>0\), \(s>0\) и \(b>0\));
  • количество золотых медалей должно быть строго меньше и количества серебряных и количества бронзовых (то есть \(g<s\) и \(g<b\), но требований между \(s\) и \(b\) нет);
  • каждый золотой медалист должен решить строго больше задач, чем любой награждённый серебряной медалью;
  • каждый серебряный медалист должен решить строго больше задач, чем любой награждённый бронзовой медалью;
  • каждый бронзовый медалист должен решить строго больше задач, чем любой не награждённый медалью участник;
  • суммарное количество медалистов \(g+s+b\) не должно превышать половину всех участников (например, если \(n=21\), то можно наградить максимум \(10\) участников, а если \(n=26\), то можно наградить максимум \(13\) участников).

Жюри хочет наградить медалями суммарно наибольшее количество \(g+s+b\) участников так, чтобы все перечисленные пункты выполнялись. Помогите жюри найти такой способ награждения медалями.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных в тесте. Далее следуют \(t\) наборов входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 4\cdot10^5\)) — количество участников BeRC. Вторая строка набора содержит последовательность целых чисел \(p_1, p_2, \dots, p_n\) (\(0 \le p_i \le 10^6\)), где \(p_i\) равно количеству задач, решенных \(i\)-м участником из таблицы финальных результатов. Значения \(p_i\) отсортированы по невозрастанию, то есть \(p_1 \ge p_2 \ge \dots \ge p_n\).

Сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(4\cdot10^5\).

Выходные данные

Выведите \(t\) строк, \(j\)-я строка должна содержать ответ на \(j\)-й набор входных данных.

Ответ состоит из трёх неотрицательных целых чисел \(g, s, b\).

  • Выведите \(g=s=b=0\), если не существует способа наградить участников медалями, чтобы одновременно выполнялись все требования из условия.
  • В противном случае выведите три положительных числа \(g, s, b\) — возможное количество золотых, серебряных и бронзовых медалей, соответственно. Сумма \(g+s+b\) должна быть максимально возможной. Если ответов несколько, то выведите любой из них.
Примечание

В первом тестовом случае можно наградить \(1\) золотой, \(2\) серебряными и \(3\) бронзовыми медалями участников. Тогда золотую медаль получит участник, решившая \(5\) задач, серебрянные медали получат участники, решившие \(4\) задачи, бронзовые медали получат участники решившие \(2\) или \(3\) задачи. Участники, решившие \(1\) задачу медаль не получат. Заметим, что все условия выполнены и раздать медали таким способом можно. Больше, чем \(6\) медалей выдать невозможно, потому что нельзя выдать больше чем половину от количества участников медалей. Ответ \(1\), \(3\), \(2\) также является верным в этом тестовом случае.

Во втором и третьем тестовых случаев нельзя так раздать медали, потому что медаль каждого достоинства должна получить хотя бы один участник, но количество выданных медалей не должно превышать половину от количества участников.

B. Красивая последовательность

жадные алгоритмы Конструктив Перебор *1900

Последовательность целых чисел называется красивой если абсолютная разница между любыми двумя соседними числами равна \(1\). Более формально, последовательность \(s_1, s_2, \ldots, s_{n}\) красивая, если \(|s_i - s_{i+1}| = 1\) для всех \(1 \leq i \leq n - 1\).

У Вани есть \(a\) чисел равных \(0\), \(b\) чисел равных \(1\), \(c\) чисел равных \(2\) и \(d\) чисел равных \(3\). Он хочет построить красивую последовательность используя все эти \(a + b + c + d\) чисел.

Оказалось, что это непростая задача и Ваня не справился решить ее. Помогите Ване!

Входные данные

В единственной строке находятся четыре неотрицательных целых числа \(a\), \(b\), \(c\) и \(d\) (\(0 < a+b+c+d \leq 10^5\)).

Выходные данные

Если невозможно построить красивую последовательность, удовлетворяющую ограничениям, выведите «NO» (без кавычек) в единственной строке.

Иначе, выведите «YES» (без кавычек) в первой строке. Затем, во второй строке выведите \(a + b + c + d\) целых чисел, разделенных пробелом — найденная красивая последовательность. Среди выведенных чисел должно быть ровно \(a\) чисел, равных \(0\), ровно \(b\) чисел, равных \(1\), ровно \(c\) чисел, равных \(2\) и ровно \(d\) чисел, равных \(3\).

Если существует несколько возможных ответов, вы можете вывести любой из них.

Примечание

В первом тесте, легко заметить, что последовательность красивая, потому что абсолютная разница между любыми двумя соседними числами равна \(1\). Также, в последовательности ровно два числа, равных \(0\), \(1\), \(2\) и ровно одно число, равное \(3\).

Можно доказать, что невозможно построить красивые последовательности во втором и третьем тесте.

A. Красивая строка

жадные алгоритмы Конструктив *1000

Строка называется красивой, если никакие два последовательных символа строки не равны. Например, строки «ababcb», «a» и «abab» красивые, тогда как «aaaaaa», «abaa» и «bb» нет.

Ahcl хочет построить красивую строку. У него есть строка \(s\), состоящая только из символов 'a', 'b', 'c' и '?'. Ahcl должен поменять каждый символ '?' на один из трех символов 'a', 'b' или 'c', так что получившаяся строка будет красивой. Помогите ему!

Более формально, после замены всех символов '?', условие \(s_i \neq s_{i+1}\) должно быть выполнено для всех \(1 \leq i \leq |s| - 1\), где \(|s|\) это длина строки \(s\).

Входные данные

В первой строке находится положительное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев.

Каждая строка содержит непустую строку \(s\), состоящую только из символов 'a', 'b', 'c' и '?'.

Гарантируется, что в каждом тестовом случае строка \(s\) содержит хотя бы один символ '?'. Сумма длин строк \(s\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая во входных данных выведите ответ в следующем формате:

  • Если невозможно получить красивую строку, выведите «-1» (без кавычек);
  • Иначе, выведите получившуюся красивую строку после замены всех символов '?'. Если существует несколько возможных ответов, вы можете найти любой из них.
Примечание

В первом тестовом случае, все возможные правильные ответы это «ababcb», «abcacb», «abcbcb», «acabcb» и «acbacb». Два ответа «abcbab» and «abaabc» являются неправильными, потому что можно заменять только символы '?' и получившаяся строка должна быть красивой.

Во втором тестовом случае, невозможно получить красивую строку, потому что \(4\)-й и \(5\)-й символы будут всегда совпадать.

В третьем тестовом случае, единственный возможный ответ это «acbac».

C. Разнообразная матрица

жадные алгоритмы Конструктив математика теория чисел *1400

Пусть \(a\) — матрица размера \(r \times c\), в каждой ячейке которой записано положительное целое число (эти числа не обязательно различны). Строки матрицы пронумерованы от \(1\) до \(r\), а столбцы — от \(1\) до \(c\). Мы можем построить массив \(b\), состоящий из \(r + c\) целых чисел, следующим образом: для каждого \(i \in [1, r]\) обозначим за \(b_i\) наибольший общий делитель всех чисел в \(i\)-й строке, а для каждого \(j \in [1, c]\) обозначим за \(b_{r+j}\) наибольший общий делитель всех чисел в \(j\)-м столбце.

Назовем матрицу разнообразной, если все \(r + c\) чисел \(b_k\) (\(k \in [1, r + c]\)) попарно различны.

Назовем модулем матрицы максимальное число среди \(b_k\).

Например, рассмотрим следующую матрицу:

\(\begin{pmatrix} 2 & 9 & 7\\ 4 & 144 & 84 \end{pmatrix}\)

Построим массив \(b\):

  1. \(b_1\) — наибольший общий делитель \(2\), \(9\) и \(7\), он равен \(1\);
  2. \(b_2\) — наибольший общий делитель \(4\), \(144\) и \(84\), он равен \(4\);
  3. \(b_3\) — наибольший общий делитель \(2\) и \(4\), он равен \(2\);
  4. \(b_4\) — наибольший общий делитель \(9\) и \(144\), он равен \(9\);
  5. \(b_5\) — наибольший общий делитель \(7\) и \(84\), он равен \(7\).

Итак, \(b = [1, 4, 2, 9, 7]\). Все значения в этом массиве различны, поэтому матрица является разнообразной. Модулем матрицы является число \(9\).

Для заданных \(r\) и \(c\) найдите разнообразную матрицу с минимально возможным модулем. Если таких матриц несколько, найдите любую из них. Если решения нет, выведите единственное целое число \(0\).

Входные данные

В единственной строке заданы два целых числа \(r\) и \(c\) (\(1 \leq r,c \leq 500\)) — количество строк и столбцов в требуемой матрице.

Выходные данные

Если решения нет, выведите одно целое число \(0\).

Иначе выведите \(r\) строк. В \(i\)-й строке выведите \(c\) целых чисел, разделенных пробелами, \(j\)-е из которых равно \(a_{i,j}\) — положительному целому числу на пересечении \(i\)-й строки и \(j\)-го столбца в разнообразной матрице с минимальным модулем.

Для всех элементов матрицы должно соблюдаться условие \(1 \leq a_{i,j} \leq 10^9\). Можно показать, что если решение существует, существует и решение, удовлетворяющее этим ограничениям (с тем же самым минимально возможным модулем).

Примечание

В первом примере НОДы в строках равны \(b_1 = 4\) и \(b_2 = 1\), а НОДы в столбцах равны \(b_3 = 2\) и \(b_4 = 3\). Все НОДы различны, а максимальный из них равен \(4\). Так как все НОДы должны быть различны и не могут быть меньше \(1\), не существует разнообразных матриц \(2 \times 2\) с модулем меньше \(4\).

Во втором примере независимо от значения \(a_{1,1}\) условие \(b_1 = b_2\) будет всегда соблюдаться, поэтому разнообразных матриц не существует.

D. Уменьшаем долги

графы жадные алгоритмы Конструктив математика реализация Структуры данных *2000

Рассмотрим компанию из \(n\) людей, пронумерованных от \(1\) до \(n\). Они используют бурли, чтобы платить за товары и услуги. Иногда человеку не хватает денег на какую-либо покупку, тогда он занимает деньги у другого человека с намерением потом отдать их с процентами. Мы обозначим за \(d(a,b)\) сумму, которую \(a\) должен отдать \(b\), или \(0\), если долга нет.

Иногда система долгов может усложняться — например, в ситуации, когда один человек дал на время денег другому, но первому самому не хватает денег на покупку, а второй еще не отдал долг. Тогда первому человеку придется занимать у кого-то ещё.

Если процесс одалживания денег длится достаточно долго, система долгов может стать очень сложной и потребовать упрощения. Упрощать систему можно при помощи двух операций:

  1. Пусть \(d(a,b) > 0\) и \(d(c,d) > 0\), при этом \(a \neq c\) или \(b \neq d\). Можно уменьшить \(d(a,b)\) и \(d(c,d)\) на \(z\) и при этом увеличить \(d(c,b)\) и \(d(a,d)\) на \(z\), если \(0 < z \leq \min(d(a,b),d(c,d))\).
  2. Пусть \(d(a,a) > 0\). Можно уменьшить \(d(a,a)\) до \(0\).

Суммарный долг определяется следующей величиной:

\(\)\Sigma_d = \sum_{a,b} d(a,b)\(\)

Вы можете использовать ранее описанные операции в любом порядке. Ваша цель — минимизировать суммарный долг. Обратите внимание, что не обязательно минимизировать количество ненулевых долгов, только суммарный долг должен стать как можно меньше.

Входные данные

В первой строке заданы два целых числа \(n\) (\(1 \leq n \leq 10^5\)) и \(m\) (\(0 \leq m \leq 3\cdot 10^5\)) — количество людей и долгов, соответственно.

Далее следуют \(m\) строк, каждая из которых содержит три целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n, u_i \neq v_i\)), \(d_i\) (\(1 \leq d_i \leq 10^9\)), обозначающих, что человек \(u_i\) должен \(d_i\) бурлей человеку \(v_i\).

Выходные данные

В первой строке выведите число \(m'\) (\(0 \leq m' \leq 3\cdot 10^5\)) — количество долгов после уменьшения системы долгов. Можно показать, что всегда существует способ упростить систему до минимального суммарного долга с соблюдением этого условия.

Далее выведите \(m'\) строк, \(i\)-я из которых содержит три целых числа \(u_i, v_i, d_i\), обозначающих, что человек \(u_i\) должен отдать человеку \(v_i\) ровно \(d_i\) бурлей. На эти числа накладываются следующие ограничения: \(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\) и \(0 < d_i \leq 10^{18}\).

Для каждой пары \(i \neq j\) должно соблюдаться условие \(u_i \neq u_j\) или условие \(v_i \neq v_j\). Иными словами, каждая пара людей должна встречаться в выходных данных только один раз.

Примечание

В первом примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 2\), \(d = 3\) и \(z = 5\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(2, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\);
  2. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\).

Во втором примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 3\), \(d = 1\) и \(z = 10\). В результате система долгов становится следующей: \(d(3, 2) = 10\), \(d(2, 3) = 15\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  2. проведём операцию первого типа с \(a = 2\), \(b = 3\), \(c = 3\), \(d = 2\) и \(z = 10\). В результате система долгов становится следующей: \(d(2, 2) = 10\), \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  3. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  4. Проведём операцию второго типа с \(a = 3\). В результате система долгов становится следующей: \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  5. Проведём операцию второго типа с \(a = 1\). В результате система долгов становится следующей: \(d(2, 3) = 5\), все остальные долги равны \(0\).

E. Космический Солитер

жадные алгоритмы реализация Структуры данных *2100

Боб играет в игру «Космический Солитер». Цель этой игры — построить космический корабль, но для ее достижения требуется сначала собрать достаточное количество ресурсов \(n\) типов, пронумерованных от \(1\) до \(n\). Боб должен собрать не менее \(a_i\) единиц \(i\)-го ресурса. Для удобства назовем \(a_i\) целью для ресурса \(i\).

Для производства одной единицы любого ресурса нужно потратить \(1\) ход (и каждый ход можно производить только один ресурс). Однако для ускорения игры в ней введена система достижений. Каждое достижение описывается тройкой \((s_j, t_j, u_j)\) и обозначает следующее: как только Боб соберет \(t_j\) единиц ресурса \(s_j\), он сразу же получит дополнительную единицу ресурса \(u_j\), не тратя ход на ее производство. Возможно, награда за достижение позволит активировать другое достижение — таким образом за один ход можно набрать большое количество разных ресурсов.

Система достижений устроена таким образом, что не существует двух достижений, у которых одновременно одинаковые \(s_j\) и \(t_j\). То есть за достижение \(t_j\) единиц ресурса \(s_j\) нельзя получить в награду более одного ресурса.

Ни один бонусный ресурс не дается за достижение \(0\) единиц какого-либо ресурса. Также не существует достижений, для которых надо собрать \(a_i\) или более соответствующего ресурса. Формально, \(0 < t_j < a_{s_j}\).

Могут существовать достижения, для которых тип требуемого ресурса совпадает с типом бонусного ресурса, то есть \(s_j = u_j\).

Изначально в игре нет достижений. Вам нужно обработать \(q\) обновлений игры, каждое из которых добавляет, удаляет или меняет какое-то достижение. После каждого обновления посчитайте минимальное количество ходов, требуемое для завершения игры (то есть для того, чтобы собрать не менее \(a_i\) единиц \(i\)-го ресурса для всех \(i \in [1, n]\)).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество типов ресурсов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)), \(i\)-е из которых — цель для \(i\)-го ресурса.

В третьей строке задано одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество обновлений в системе достижений.

Затем следуют \(q\) строк, \(j\)-я из которых содержит три целых числа \(s_j\), \(t_j\), \(u_j\) (\(1 \leq s_j \leq n\), \(1 \leq t_j < a_{s_j}\), \(0 \leq u_j \leq n\)). Для каждой тройки проведите следующие действия:

  • Сначала, если уже существует достижение, требующее набрать \(t_j\) единиц ресурса \(s_j\), удалите его.
  • Если \(u_j = 0\), не добавляйте никаких достижений.
  • Если \(u_j \neq 0\), добавьте новое достижение: «Если вы соберете \(t_j\) единиц ресурса \(s_j\), вы получите одну единицу ресурса \(u_j\)».
  • Выведите минимальное количество ходов, требуемое для завершения игры.
Выходные данные

Выведите \(q\) строк, в \(i\)-й из которых должно быть одно целое число — ответ на задачу после \(i\)-го обновления.

Примечание

После первого обновления оптимальная стратегия — следующая: произвести ресурс \(2\) и получить бесплатно ресурс \(1\). Затем произвести ресурс \(2\) дважды и \(1\) один раз, и мы завершим игру за четыре хода.

После второго обновления оптимальная стратегия состоит в том, чтобы произвести ресурс \(2\) три раза — в первые два хода мы дополнительно получим по единице ресурса \(1\).

После третьего обновления оптимальная стратегия — следующая:

  • Сначала произвести единицу ресурса \(2\) и получить бесплатную единицу \(1\). После этого мы получим еще одну бесплатную единицу \(1\). Количество ресурсов: \([2, 1]\).
  • После этого произвести единицу ресурса \(2\) и получить еще одну бесплатную единицу \(1\).
  • Опять произвести единицу ресурса \(2\).

Количество ресурсов в конце игры: \([3, 3]\). Для достижения цели нам потребовалось три хода. Обратите внимание, что у нас есть лишняя единица ресурса \(1\).

E. Elections

жадные алгоритмы *1700

Byteburg Senate elections are coming. Usually "United Byteland", the ruling Byteland party, takes all the seats in the Senate to ensure stability and sustainable development. But this year there is one opposition candidate in one of the constituencies. Even one opposition member can disturb the stability in the Senate, so the head of the Party asks you to ensure that the opposition candidate will not be elected.

There are \(n\) candidates, numbered from 1 to \(n\). Candidate \(n\) is the opposition candidate. There are \(m\) polling stations in the constituency, numbered from 1 to \(m\). You know the number of votes cast for each candidate at each polling station. The only thing you can do to prevent the election of the opposition candidate is to cancel the election results at some polling stations. The opposition candidate will be elected if the sum of the votes cast in their favor at all non-canceled stations will be strictly greater than the analogous sum for every other candidate.

Your task is to prevent the election of the opposition candidate by canceling the election results at the minimal possible number of polling stations. Notice that solution always exists, because if you cancel the elections at all polling stations, the number of votes for each candidate will be 0, and the opposition candidate will not be elected.

Input

The first line of the input contains two integers \(n\) and \(m\) (\(2\le n\le 100\); \(1\le m \le 100\)) — the number of candidates and the number of polling stations. The next \(m\) lines contain the election results at each polling station with \(n\) numbers on each line. In the \(i\)-th line the \(j\)-th number is \(a_{i,j}\) — the number of votes cast for the candidate \(j\) at the station \(i\) (\(0\le a_{i,j} \le 1\,000\)).

Output

In the first line output integer \(k\) — the minimal number of the polling stations in which you need to cancel the election results. In the second line output \(k\) integers — the indices of canceled polling stations, in any order. If there are multiple ways to cancel results at \(k\) stations, output any one of them.

Note

In the first example, the candidates from 1 to 5 received 14, 12, 13, 15, and 24 votes correspondingly. The opposition candidate has the most votes. However, if you cancel the election results at the first and the third polling stations, then only the result from the second polling station remains and the vote sums become 3, 7, 5, 6, and 7, without the opposition candidate being in the lead anymore.

J. Just Arrange the Icons

жадные алгоритмы математика реализация *1800

BerPhone X is almost ready for release with \(n\) applications being preinstalled on the phone. A category of an application characterizes a genre or a theme of this application (like "game", "business", or "education"). The categories are given as integers between \(1\) and \(n\), inclusive; the \(i\)-th application has category \(c_i\).

You can choose \(m\) — the number of screens and \(s\) — the size of each screen. You need to fit all \(n\) icons of the applications (one icon representing one application) meeting the following requirements:

  • On each screen, all the icons must belong to applications of the same category (but different screens can contain icons of applications of the same category);
  • Each screen must be either completely filled with icons (the number of icons on the screen is equal to \(s\)) or almost filled with icons (the number of icons is equal to \(s-1\)).

Your task is to find the minimal possible number of screens \(m\).

Input

The first line contains an integer \(t\) (\(1 \le t \le 10\,000\)) — the number of test cases in the input. Then \(t\) test cases follow.

The first line of each test case contains an integer \(n\) (\(1 \le n \le 2\cdot10^6\)) — the number of the icons. The second line contains \(n\) integers \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)), where \(c_i\) is the category of the \(i\)-th application.

It is guaranteed that the sum of the values of \(n\) for all test cases in the input does not exceed \(2\cdot10^6\).

Output

Print \(t\) integers — the answers to the given test cases in the order they follow in the input. The answer to a test case is an integer \(m\) — the minimum number of screens on which all \(n\) icons can be placed satisfying the given requirements.

Note

In the first test case of the example, all the icons can be placed on three screens of size \(4\): a screen with \(4\) icons of the category \(1\), a screen with \(3\) icons of the category \(1\), and a screen with \(4\) icons of the category \(5\).

A. Длинное красивое число

жадные алгоритмы Конструктив реализация Строки *1700

Вам дано положительное целое число \(x\) из \(n\) цифр \(a_1, a_2, \ldots, a_n\), которые составляют его десятичную запись в порядке слева направо.

А также, вам дано положительное целое число \(k < n\).

Назовем число \(b_1, b_2, \ldots, b_m\) красивым если \(b_i = b_{i+k}\) для всех \(i\), что \(1 \leq i \leq m - k\).

Вам необходимо найти минимальное красивое целое число \(y\), что \(y \geq x\).

Входные данные

В первой строке записаны два целых числа \(n, k\) (\(2 \leq n \leq 200\,000, 1 \leq k < n\)): количество цифр в \(x\) и \(k\).

В следующей строке записаны \(n\) цифр \(a_1, a_2, \ldots, a_n\) (\(a_1 \neq 0\), \(0 \leq a_i \leq 9\)): цифры \(x\).

Выходные данные

В первой строке выведите одно целое число \(m\): количество цифр в \(y\).

В следующей строке выведите \(m\) цифр \(b_1, b_2, \ldots, b_m\) (\(b_1 \neq 0\), \(0 \leq b_i \leq 9\)): цифры \(y\).

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}\)): длины столбцов.

Выходные данные

Выведите одно целое число: наибольшее количество непересекающихся домино, которое вы можете нарисовать внутри данной диаграммы Юнга.

Примечание

Некоторые возможные решения для первого примера:

A. Игра с картами

жадные алгоритмы игры математика *800

Два игрока решили сыграть в интересную карточную игру.

В колоде есть \(n\) карт, со стоимостями от \(1\) до \(n\). Стоимости всех карт попарно различны (это значит, что нет двух карт с одинаковой стоимостью). В начале игры колода полностью распределяется между игроками каким-то образом, причем у каждого игрока есть по крайней мере одна карта.

Игра идет следующим образом: каждый ход каждый игрок выбирает одну из своих карт (которую захочет), и кладет на стол так, чтобы другой игрок не видел выбранную карту. После этого обе карты вскрываются, и игрок, стоимость карты которого была больше, забирает себе обе карты в руку. Заметьте, что так как стоимости карт различны, стоимость одной из карт будет строго больше, чем другой. Любую карту можно использовать любое количество раз. Проигрывает тот, у кого не осталось карт.

К примеру, пусть \(n = 5\), у первого игрока есть карты со стоимостями \(2\) и \(3\), а у второго есть карты со стоимостями \(1\), \(4\), \(5\). Ниже продемонстрирован возможный ход игры:

  • Первый игрок выбирает карту \(3\), второй игрок выбирает карту \(1\). Так как \(3>1\), первый игрок получает обе карты. Теперь у первого игрока есть карты \(1\), \(2\), \(3\), у второго игрока есть карты \(4\), \(5\).

  • Первый игрок выбирает карту \(3\), второй игрок выбирает карту \(4\). Так как \(3<4\), второй игрок получает обе карты. Теперь у первого игрока есть карты \(1\), \(2\), у второго игрока есть карты \(3\), \(4\), \(5\)

  • Первый игрок выбирает карту \(1\), второй игрок выбирает карту \(3\). Так как \(1<3\), второй игрок получает обе карты. Теперь у первого игрока есть только карта \(2\), у второго игрока есть карты \(1\), \(3\), \(4\), \(5\)

  • Первый игрок выбирает карту \(2\), второй игрок выбирает карту \(4\). Так как \(2<4\), второй игрок получает обе карты. Теперь у первого игрока не осталось карт, и он проигрывает. Как следствие, второй игрок побеждает.

Кто победит, если оба игрока играют оптимально? Можно показать, что если каждый игрок стремится победить, то у одного из игроков есть выигрышная стратегия.

Входные данные

Во входных данных находятся несколько (не меньше одного) тестовых случаев. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит три целых числа \(n\), \(k_1\), \(k_2\) (\(2 \le n \le 100, 1 \le k_1 \le n - 1, 1 \le k_2 \le n - 1, k_1 + k_2 = n\)) — количество карт, количество карт у первого игрока и второго игрока соответственно.

Вторая строка описания тестового случая содержит \(k_1\) целых чисел \(a_1, \dots, a_{k_1}\) (\(1 \le a_i \le n\)) — стоимости карт первого игрока.

Третья строка описания тестового случая содержит \(k_2\) целых чисел \(b_1, \dots, b_{k_2}\) (\(1 \le b_i \le n\)) — стоимости карт второго игрока.

Гарантируется, что все стоимости карт различны.

Выходные данные

Для каждого тестового случая, выведите «YES» с новой строки, если первый игрок победит. Иначе, выведите «NO» с новой строки. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом тестовом случае примера, у каждого игрока есть только один возможный ход: первый игрок положит \(2\), второй игрок положит \(1\). \(2>1\), поэтому первый игрок заберет обе карточки и победит.

Во втором тестовом случае примера, можно показать, что у второго игрока есть выигрышная стратегия. Один из возможных ходов игры приведен в условии.

B. Интересный подмассив

жадные алгоритмы Конструктив математика *1200

Для массива \(a\) из целых чисел обозначим его максимальный элемент через \(\max(a)\), а минимальный через \(\min(a)\). Будем называть массив \(a\) из \(k\) целых чисел интересным, если \(\max(a) - \min(a) \ge k\). К примеру, массив \([1, 3, 4, 3]\) не является интересным, так как \(\max(a) - \min(a) = 4 - 1 = 3 < 4\), а массив \([7, 3, 0, 4, 3]\) является, так как \(\max(a) - \min(a) = 7 - 0 = 7 \ge 5\).

Вам дан массив \(a\) из \(n\) целых чисел. Найдите какой-то интересный непустой подмассив \(a\), или сообщите, что его не существует.

Массив \(b\) является подмассивом \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца. В частности, массив является своим подмассивом.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10\,000\)). Далее следуют \(t\) наборов входных данных.

Первая строка описания тестового случая содержит единственное число \(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\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая, выведите «NO» с новой строки, если в \(a\) нет интересного непустого подмассива.

Иначе, выведите «YES» с новой строки. В следующей строке выведите два целых числа \(l\) и \(r\) (\(1\le l \le r \le n\)) — границы выбранного вами подмассива. Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Во втором тестовом случае примера, одним из возможных интересных подмассивов является \(a = [2, 0, 1, 9]\): \(\max(a) - \min(a) = 9 - 0 = 9 \ge 4\).

A. Костюмы

жадные алгоритмы математика Перебор *800

В магазин привезли новую партию одежды, а именно \(a\) галстуков, \(b\) шарфов, \(c\) жилеток и \(d\) пиджаков.

Магазин специализируется на продаже костюмов. Бывают костюмы двух типов:

  • первый тип — костюм, состоящий из галстука и пиджака;
  • второй тип — костюм, состоящий из шарфа, жилетки и пиджака.

Костюмы первого типа стоят \(e\) монет, а костюмы второго — \(f\) монет.

Определите максимальную суммарную стоимость костюмов, которые можно составить из новой партии одежды. Помните, что одна и та же вещь не может принадлежать сразу нескольким костюмам (хотя могут быть вещи, которые не будут использованы ни в каком костюме).

Входные данные

В первой строке следует целое число \(a\) \((1 \le a \le 100\,000)\) — количество галстуков.

Во второй строке следует целое число \(b\) \((1 \le b \le 100\,000)\) — количество шарфов.

В третьей строке следует целое число \(c\) \((1 \le c \le 100\,000)\) — количество жилеток.

В четвертой строке следует целое число \(d\) \((1 \le d \le 100\,000)\) — количество пиджаков.

В пятой строке следует целое число \(e\) \((1 \le e \le 1\,000)\) — стоимость одного костюма первого типа.

В шестой строке следует целое число \(f\) \((1 \le f \le 1\,000)\) — стоимость одного костюма второго типа.

Выходные данные

Выведите целое число — максимальную суммарную стоимость костюмов, которые можно составить из новой партии одежды.

Примечание

В первом примере нужно составить три костюма второго типа. Их суммарная стоимость будет равна \(6\). После этого нельзя сделать ни одного костюма первого типа, так как изначально было всего три пиджака, которые уже использованы для костюмов второго типа.

Во втором примере можно составить девять костюмов первого типа и одиннадцать костюмов второго типа. Их суммарная стоимость равна \(9 \cdot 4 + 11 \cdot 6 = 102\).

B. Кубики

жадные алгоритмы математика *1300

На столе в ряд выложены \(n\) кубиков, каждый из которых покрашен в черный или белый цвет. Кубики пронумерованы слева направо, начиная с единицы.

Вы можете ноль или более раз применить к последовательности кубиков следующую операцию: выбрать два соседних кубика и инвертировать их цвета (заменить белый на чёрный, и наоборот).

Определите такую последовательность операций, что после их применения все кубики станут либо полностью белыми, либо полностью чёрными. Вам не нужно минимизировать количество операций, но их количество не должно превосходить \(3 \cdot n\). Если невозможно сделать все кубики одноцветными, сообщите об этом.

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\)) — количество кубиков.

Во второй строке следует строка \(s\) длины \(n\), состоящая из символов «W» и «B». Если \(i\)-й символ строки равен «W», то \(i\)-й кубик изначально имеет белый цвет. Если \(i\)-й символ строки равен «B», то \(i\)-й кубик изначально имеет чёрный цвет.

Выходные данные

Если невозможно сделать все кубики одноцветными с помощью описанных операций, выведите \(-1\).

В противном случае, в первую строку выведите целое число \(k\) (\(0 \le k \le 3 \cdot n\)) — количество операций, которые нужно произвести. Во второй строке выведите \(k\) целых чисел \(p_1, p_2, \dots, p_k\) \((1 \le p_j \le n - 1)\), где \(p_j\) равно позиции левого из двух соседних кубиков, у которых нужно инвертировать цвета во время \(j\)-й операции.

Если ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере можно сделать все кубики чёрными, например, за \(3\) операции. Сначала можно инвертировать цвета кубиков в позициях \(6\) и \(7\). После этого последовательность цветов кубиков будет выглядеть как «BWWWWBBB». Затем можно инвертировать цвета кубиков в позициях \(2\) и \(3\). После этого последовательность цветов кубиков будет выглядеть как «BBBWWBBB». В ходе третьей операции нужно инвертировать цвета кубиков в позициях \(4\) и \(5\). После этого все кубики станут чёрного цвета.

Во втором примере невозможно сделать все кубики одноцветными.

В третьем примере все кубики изначально имеют белый цвет, поэтому можно не использовать операции инвертирования цветов.

В четвертом примере можно сделать все кубики белыми за две операции. Сначала нужно инвертировать цвета кубиков \(2\) и \(3\) (последовательность цветов после этого будет выглядеть как «BBW»), а затем инвертировать цвета кубиков \(1\) и \(2\) (после этого все кубики станут белого цвета).

C. Ларек с шаурмой

геометрия жадные алгоритмы Перебор реализация *1300

План столицы Берляндии представляет собой плоскость, причем все строения расположены в точках с целочисленными координатами, а пешеходными улицами являются отрезки, соединяющие каждую точку с четырьмя соседними. Все пешеходные улицы параллельны осям координат.

Известно, что школа в столице Берляндии расположена в точке \((s_x, s_y)\). В школе учатся \(n\) учеников, причем \(i\)-й ученик живет в доме, который расположен в точке \((x_i, y_i)\). Допустимо, что несколько учеников живут в одном и том же доме, но никакой ученик не живет в точке \((s_x, s_y)\).

После занятий каждый ученик идет из школы до своего дома по улицам, причем каждый ученик обязательно идет до своего дома по какому-то из кратчайших путей. Таким образом, расстояние, которое преодолеет \(i\)-й ученик, чтобы добраться из школы до дома, равно \(|s_x - x_i| + |s_y - y_i|\).

Министерство питания решило установить ларек с шаурмой в столице Берляндии в точке с целочисленными координатами. Считается, что \(i\)-й школьник купит шаурму в ларьке, если ларек находится на одном из кратчайших путей \(i\)-го школьника до дома. Запрещено ставить ларек с шаурмой в той же точке, в которой расположена школа, но разрешено ставить ларек в той точке, в которой расположен дом кого-то из учеников.

Определите максимальное количество школьников, которые смогут купить шаурму в ларьке, а также сообщите координаты для постройки ларька.

Входные данные

В первой строке следует три целых числа \(n\), \(s_x\), \(s_y\) (\(1 \le n \le 200\,000\), \(0 \le s_x, s_y \le 10^{9}\)) — количество школьников и координаты школы.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^{9}\)) — координаты дома \(i\)-го школьника. Координаты домов у некоторых школьников могут совпадать. Гарантируется, что дом никакого школьника не расположен в той же точке, что и школа.

Выходные данные

В первую строку выведите целое число \(c\) — максимальное количество школьников, которые смогут купить шаурму в ларьке.

Во вторую строку выведите два целых числа \(p_x\) и \(p_y\) — координаты для постройки ларька. Если подходящих ответов несколько, разрешается вывести любой из них. Обратите внимание, что каждое из чисел \(p_x\) и \(p_y\) должно быть не менее \(0\) и не более \(10^{9}\).

Примечание

В первом примере нужно построить ларек с шаурмой в точке \((4, 2)\). Тогда три школьника его посетят. Это школьники, чьи дома расположены в точках \((4, 2)\), \((4, 1)\) и \((5, 1)\).

Во втором примере можно, например, построить ларек с шаурмой в точке \((1, 1)\). В таком случае оба школьника, дом которых расположен в точке \((0, 0)\), его посетят.

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\) до захвата последнего замка.

A. Три друга

жадные алгоритмы математика Перебор сортировки *900

Три друга хотят встретиться друг с другом. Изначально первый друг находится в позиции \(x = a\), второй друг находится в позиции \(x = b\), а третий находится в позиции \(x = c\) на координатной оси \(Ox\).

За одну минуту каждый из друзей независимо от других друзей может изменить позицию \(x\) на \(1\) влево или на \(1\) вправо (то есть присвоить \(x := x - 1\) или \(x := x + 1\)), или даже не менять ее.

Введем понятие суммарной попарной дистанции — суммы дистанций между каждой парой друзей. Пусть \(a'\), \(b'\) и \(c'\) — финальные позиции первого, второго и третьего друзей соответственно. Тогда суммарная попарная дистанция равна \(|a' - b'| + |a' - c'| + |b' - c'|\), где \(|x|\) — абсолютная величина (модуль) значения \(x\).

Друзья интересуются, какой минимальной суммарной попарной дистанции они смогут достичь, если они будут двигаться оптимально. Каждый из друзей сдвинется не более одного раза. Таким образом, более формально, они хотят знать минимальную суммарную попарную дистанцию, которой они могут достичь спустя одну минуту.

Вам необходимо ответить на \(q\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество наборов входных данных.

Следующие \(q\) строк описывают наборы входных данных. \(i\)-й набор входных данных описывается тремя целыми числами \(a, b\) и \(c\) (\(1 \le a, b, c \le 10^9\)) — изначальными позициями первого, второго и третьего друзей, соответственно. Позиции друзей могут совпадать.

Выходные данные

Выведите ответ на каждый набор входных данных — минимальную суммарную попарную дистанцию (минимальную сумму дистанций между каждой парой друзей), если друзья изменят их позиции оптимально. Каждый из друзей сдвинется не более одного раза. Таким образом, более формально, вам необходимо найти минимальную суммарную попарную дистанцию, которой они могут достичь спустя одну минуту.

B. Робот-cнегоход

жадные алгоритмы Конструктив реализация *1200

Недавно вы купили робота-снегохода и принесли его домой. Ваш дом — это клетка \((0, 0)\) на бесконечной координатной сетке.

Вы также получили последовательность инструкций этого робота. Она записана в виде строки \(s\), состоящей из символов 'L', 'R', 'U' и 'D'. Если сейчас робот находится в клетке \((x, y)\), он может передвинуться в одну из смежных клеток (зависит от текущей инструкции).

  • Если текущая инструкция — 'L', тогда робот может передвинуться влево в \((x - 1, y)\);
  • если текущая инструкция — 'R', тогда робот может передвинуться вправо в \((x + 1, y)\);
  • если текущая инструкция — 'U', тогда робот может передвинуться вверх в \((x, y + 1)\);
  • если текущая инструкция — 'D', тогда робот может передвинуться вниз в \((x, y - 1)\).

Вы заметили предупреждение на последней странице руководства: если робот посетит какую-то клетку (кроме \((0, 0)\)) дважды, то он сломается.

Таким образом, последовательность инструкций является корректной, если робот начинает в клетке \((0, 0)\), выполняет заданные инструкции, не посещает никакую клетку, кроме \((0, 0)\), два или более раз и заканчивает свой путь в клетке \((0, 0)\). Также клетка \((0, 0)\) должна быть посещена не более двух раз: в начале и в конце (если путь пустой, то она будет посещена только единожды). Например, следующие последовательности инструкций являются корректными: «UD», «RL», «UUURULLDDDDLDDRRUU», а следующие являются некорректными: «U» (конечная клетка не равна \((0, 0)\)) и «UUDD» (клетка \((0, 1)\) посещается дважды).

Но изначальная последовательность инструкций может быть некорректной. Вы не хотите, чтобы ваш робот сломался, поэтому вы решили перепрограммировать его следующим образом: вы удалите какие-то (возможно, все или никакие) инструкции из изначальной последовательности инструкций, затем поменяете порядок оставшихся инструкций так, как хотите, и включите вашего робота, который начнет движение.

Ваша задача — удалить минимальное количество инструкций из изначальной последовательности и поменять порядок оставшихся инструкций таким образом, чтобы последовательность стала корректной. Вам необходимо вывести максимальную по длине корректную последовательность инструкций, которую вы можете получить.

Заметьте, что вам необходимо выбрать любой порядок оставшихся инструкций (нет необходимости минимизировать количество обменов или какую-либо другую похожую метрику).

Вам необходимо ответить на \(q\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^4\)) — количество наборов входных данных.

Следующие \(q\) строк содержат наборы входных данных. \(i\)-й набор входных данных задан строкой \(s\), состоящей из не менее, чем \(1\) и не более, чем \(10^5\) символов 'L', 'R', 'U' и 'D' — изначальной последовательности инструкций.

Гарантируется, что сумма \(|s|\) (где \(|s|\) — длина \(s\)) не превосходит \(10^5\) по всем наборам входных данных (\(\sum |s| \le 10^5\)).

Выходные данные

Выведите ответ на каждый набор входных данных. В первой строке выведите максимальное количество оставшихся инструкций. Во второй строке выведите корректную последовательность оставшихся инструкций \(t\), которую робот сможет выполнить. Ходы выполняются слева направо в порядке выведенной последовательности. Если существует несколько возможных ответов, выведите любой. Если ответ равен \(0\), вам разрешается вывести пустую строку (но вы можете не выводить ее).

Примечание

В первом наборе входных данных существует только два правильных ответа: «LR» и «RL».

Картинка, соответствующая второму набору входных данных:

Заметьте, что направление обхода неважно

Другим корректным ответом на третий набор входных данных является «URDDLLLUURDR».

B. А и Б

жадные алгоритмы математика *1500

У вас есть два числа \(a\) и \(b\). Вы можете выполнять следующие операции с ними: в качестве первой операции увеличить одно из этих двух чисел на \(1\); в качестве второй — увеличить на \(2\), и так далее. Количество таких операций вы выбираете сами.

Например, если \(a = 1\) и \(b = 3\), вы можете сделать следующую последовательность из трех операций:

  1. добавить \(1\) к \(a\), тогда \(a = 2\) и \(b = 3\);
  2. добавить \(2\) к \(b\), тогда \(a = 2\) и \(b = 5\);
  3. добавить \(3\) к \(a\), тогда \(a = 5\) и \(b = 5\).

Вычислите минимальное количество операций, необходимое для того, чтобы сделать числа \(a\) и \(b\) равными.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных содержит два числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

Выходные данные

На каждый набор входных данных выведите число — минимальное количество операций необходимое для того, чтобы сделать числа \(a\) и \(b\) равными.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных числа \(a\) и \(b\) равны изначально, а значит вам вообще не нужно выполнять операций.

В третьем наборе входных данных вам нужно применить первую, вторую, третью и четвертую операции к числу \(b\) (\(b\) превратится в \(20 + 1 + 2 + 3 + 4 = 30\)).

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\) банке каждого варенья.

C. Jeremy Bearimy

графы Деревья жадные алгоритмы поиск в глубину и подобное *2000

Добро пожаловать! Все хорошо.

Вы прибыли в Среднее место, место между Хорошим местом и Плохим местом. Вам поручено выполнить два задания, одно сделает всех людей счастливыми, другое будет мучить их вечно.

У вас есть список \(k\) пар людей, которые прибыли в новый район. Вам нужно назначить каждому из \(2k\) людей свой из \(2k\) домов. Каждый человек будет владельцем ровно одного дома и каждый дом будет иметь ровно одного владельца.

Конечно, в этом районе можно перемещаться между домами. Всего есть \(2k - 1\) дорога, каждая из них соединяет два дома. Требуется некоторое время, чтобы проехать по дороге. Эти времена известны для каждой дороги. Район спроектирован таким образом, что между любыми двумя домами существует ровно один путь по дорогам от одного дома до другого, не проходящий по одной и той же дороге дважды. Другими словами, граф, в котором вершины это дома, а ребра это дороги это дерево.

Люди в каждой из \(k\) пар людей хорошо дружат и любят ходить в гости. Мы пронумеруем пары людей от \(1\) до \(k\). Обозначим за \(f(i)\) время, которое требуется \(i\)-й паре людей, чтобы проехать между домами друг друга.

Как уже было сказано ранее, вы должны сопоставить каждому из \(2k\) людей один из \(2k\) домов. У вас есть две миссии, одна назначена из Хорошего места, другая назначена из Плохого места. Эти миссии заключаются в следующем:

  • Первая миссия, из Хорошего места, заключается в том, чтобы сопоставить людям дома, так чтобы сумма \(f(i)\) по всем парам \(i\) была минимальна. Давайте обозначим эту минимальную возможную сумму за \(G\). Это дает нам уверенность, что все пары друзей могут легко и эффективно посещать друг друга;
  • Вторая миссия, из Плохого места, заключается в том, чтобы сопоставить людям дома, так чтобы сумма \(f(i)\) по всем парам \(i\) была максимальна. Давайте обозначим эту максимальную возможную сумму за \(B\). Это дает нам уверенность, что все пары друзей могут только трудно и неэффективно посещать друг друга;

Чему равны значения \(G\) и \(B\)?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 500\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

Первая строка каждого тестового случая содержит единственное целое число \(k\), обозначающая количество пар людей (\(1 \le k \le 10^5\)). В следующих \(2k - 1\) строках находится описание дорог; в \(i\)-й строке находится три целых числа \(a_i, b_i, t_i\), которые обозначают, что \(i\)-я дорога соединяет дома \(a_i\) и \(b_i\) и требует \(t_i\) единиц времени, чтобы проехать по ней (\(1 \le a_i, b_i \le 2k\), \(a_i \neq b_i\), \(1 \le t_i \le 10^6\)). Гарантируется, что данные дороги образуют структуру дерева.

Гарантируется, что сумма всех \(k\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого тестового случая, выведите два целых числа \(G\) и \(B\), разделенные пробелом.

Примечание

Для первого тестового случая, мы можем получить минимальную сумму равную \(G = 15\). Один из способов достичь такую сумму это следующее назначение домов:

  • Первой паре людей назначим дома \(5\) и \(6\), что даст нам \(f(1) = 5\);
  • Второй паре людей назначим дома \(1\) и \(4\), что даст нам \(f(2) = 6\);
  • Третьей паре людей назначим дома \(3\) и \(2\), что даст нам \(f(3) = 4\).

Обратите внимание, что тогда сумма всех \(f(i)\) это \(5 + 6 + 4 = 15\).

Также мы можем получить максимальную сумму равной \(B = 33\). Один из способов достичь такую сумму это следующее назначение домов:

  • Первой паре людей назначим дома \(1\) и \(4\), что даст нам \(f(1) = 6\);
  • Второй паре людей назначим дома \(6\) и \(2\), что даст нам \(f(2) = 14\);
  • Третьей паре людей назначим дома \(3\) и \(5\), что даст нам \(f(3) = 13\).

Обратите внимание, что тогда сумма всех \(f(i)\) это \(6 + 14 + 13 = 33\).

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\) голосов. Некрасивая оса побеждает, если получает строго больше голосов. Поэтому некрасивая оса не выиграет ни в какой деревне.

B. Azamon Web Services

жадные алгоритмы *1600

Для привлечения клиентов на свой сайт Azamon ваш друг Jeff Zebos запустил новую онлайн-кампанию. Однако он не смог привлечь так много посетителей, как планировал. Вам кажется, что самая большая проблема заключается в том, что его сайт не получает высокие места в выдаче поисковых систем. Только если он изменит названия продуктов на такие, которые будут лучше чем у конкурентов, он сможет оказаться на первой строчке в поиске и станет миллионером!

После некоторого исследования, вы заметили, что в поиске результаты отсортированы лексикографически. Если ваш друг сможет переименовать свои продукты на лексикографически меньшие строки, чем у конкурентов, он будет первым в поиске!

Чтобы сделать стратегию менее очевидной для конкурентов, вы решили поменять местами не больше одной пары символов в названиях продуктов.

Пожалуйста, помогите другу улучшить названия своих продуктов, так чтобы они стали лексикографически меньше названия продуктов его конкурентов.

Вам дана строка \(s\), являющаяся названием продукта компании Azamon и строка \(c\), являющаяся названием продукта компании конкурента. Найдите некоторый способ поменять не больше одной пары символов в строке \(s\) (это означает выбрать два различных индекса \(i\) и \(j\) и поменять местами символы \(s_i\) и \(s_j\) в строке), так чтобы новое имя стало лексикографически меньше, чем \(c\). Если это невозможно, определите это.

Примечание: Строка \(a\) лексикографически меньше чем строка \(b\), тогда и только тогда, когда одно из следующих двух условий выполнено:

  • \(a\) это собственный префикс строки \(b\), то есть, \(a\) это префикс строки \(b\) и \(a \neq b\);
  • Существует целое \(1 \le i \le \min{(|a|, |b|)}\), такое что \(a_i < b_i\) и \(a_j = b_j\) для всех \(1 \le j < i\).
Входные данные

В первой строке записано единственное целое число \(t\) (\(1 \le t \le 1500\)), количество наборов входных данных. В следующих строках находятся их описания.

Каждый набор входных данных содержит две строки \(s\) и \(c\), разделенные пробелом (\(2 \le |s| \le 5000, 1 \le |c| \le 5000\)). Строки \(s\) и \(c\) состоят из прописных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем тестовым случаям не превосходит \(5000\) и что сумма \(|c|\) по всем тестовым случаям не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую ответ. Ответом на набор входных данных является:

  • новое имя, которое может быть получено из старого обменом не более одной пары символов, которое будет лексикографически меньше, чем \(c\). В случае, если существует несколько возможных ответов, вы можете вывести любой из них;
  • три знака минус (строка «---» без кавычек) если новое имя, удовлетворяющее условию, получить невозможно.
Примечание

В первом наборе входных данных можно поменять второй и четвертый символы строки и получится строка «AMAZON», которая лексикографически меньше чем «APPLE».

Во втором наборе входных данных невозможно улучшить имя продукта так, чтобы удовлетворить все условия.

В третьем наборе входных данных, можно не делать замены пары символов. Это верно, потому что имя «APPLE» лексикографически меньше, чем имя «BANANA». Заметьте, что возможны и другие ответы, например «APPEL».

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\) — максимальное количество подарков, которые может купить Вася.

C. Петя и экзамен

жадные алгоритмы сортировки *1800

Петя пришел на экзамен по математике и хочет решить как можно больше задач. Он подготовился и внимательно изучил правила, по которым проходит экзамен.

Экзамен состоит из \(n\) задач, которые можно решать в течении \(T\) минут. Таким образом, экзамен начинается в момент времени \(0\), а заканчивается — в момент времени \(T\). Петя может уйти с экзамена в любой целочисленный момент времени от \(0\) до \(T\), включительно.

Все задачи делятся на два типа:

  • простые задачи — на решение каждой простой задачи у Пети уходит ровно \(a\) минут;
  • сложные задачи — на решение каждой сложной задачи у Пети уходит ровно \(b\) минут (\(b > a\)).

Таким образом, если в момент времени \(x\) Петя приступает к решению простой задачи, то она будет решена в момент времени \(x+a\). Аналогично, если в момент времени \(x\) Петя приступает к решению сложной задачи, то она будет решена в момент времени \(x+b\).

Про каждую задачу Пете известно сложная она или простая. Помимо этого, для каждой задачи определен момент времени \(t_i\) (\(0 \le t_i \le T\)), в который она станет обязательной. Если Петя уходит с экзамена в момент времени \(s\) и есть такая задача \(i\), что \(t_i \le s\) и он её не решил, то считается, что за весь экзамен он получит \(0\) баллов. В противном случае (то есть, если он решил все такие задачи, для которых \(t_i \le s\)) он получит количество баллов, равное количеству решенных задач. Отметим, что уходя в момент времени \(s\) Петя может иметь решенными как «обязательные», так и «необязательные» задачи.

Например, если \(n=2\), \(T=5\), \(a=2\), \(b=3\), первая задача является сложной и для неё \(t_1=3\) и вторая задача является простой и для неё \(t_2=2\), то:

  • если он уходит в момент времени \(s=0\), то он получит \(0\) баллов, так как не успеет решить ни одной задачи;
  • если он уходит в момент времени \(s=1\), то он получит \(0\) баллов, так как не успеет решить ни одной задачи;
  • если он уходит в момент времени \(s=2\), то он может получить \(1\) балл, решив задачу с номером \(2\) (решать её надо в промежуток от \(0\) до \(2\));
  • если он уходит в момент времени \(s=3\), то он получит \(0\) баллов, так как к этому моменту времени обе задачи станут обязательными к решению, но решить их обе он не успеет;
  • если он уходит в момент времени \(s=4\), то он получит \(0\) баллов, так как к этому моменту времени обе задачи станут обязательными к решению, но решить их обе он не успеет;
  • если он уходит в момент времени \(s=5\), то он может получить \(2\) балла, решив все задачи.

Таким образом, ответ на этот тест равен \(2\).

Помогите Пете определить максимальное количество баллов, которые он успеет набрать перед тем как уйдет с экзамена.

Входные данные

В первой строке находится число \(m\) (\(1 \le m \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания \(m\) наборов входных данных, по три строки на каждый набор.

В первой строке каждого набора входных данных находятся четыре целых числа \(n, T, a, b\) (\(2 \le n \le 2\cdot10^5\), \(1 \le T \le 10^9\), \(1 \le a < b \le 10^9\)) — количество задач, минут, отведенных на экзамен, время решения простой и сложной задачи, соответственно.

Во второй строке каждого набора входных данных находятся \(n\) чисел \(0\) или \(1\), записанные через пробел: \(i\)-е число означает тип \(i\)-й задачи. Значение \(0\) означает, что задача простая, а значение \(1\) — сложная.

В третьей строке каждого набора входных данных находятся \(n\) целых чисел \(t_i\) (\(0 \le t_i \le T\)), где \(i\)-е число означает время, в которое \(i\)-я задача станет обязательной.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\)

Выходные данные

Выведите ответы на \(m\) заданных наборов входных данных. Для каждого набора выведите одно целое число — максимальное количество баллов, которые он успеет набрать перед тем как уйдет с экзамена.

D. Рождественские деревья

графы жадные алгоритмы кратчайшие пути *1800

На бесконечной числовой прямой находятся \(n\) рождественных деревьев. \(i\)-е дерево растет на позиции \(x_i\). Гарантируется, что все значения \(x_i\) различны.

Каждая целочисленная точка может быть либо занята рождественским деревом, либо занята человеком, либо не занята вообще. Нецелые точки не могут быть заняты ничем.

Есть \(m\) человек, которые хотят отпраздновать Рождество. Пусть \(y_1, y_2, \dots, y_m\) — это позиции людей (заметьте, что все значения \(x_1, x_2, \dots, x_n, y_1, y_2, \dots, y_m\) должны быть различны и все \(y_j\) должны быть целыми). Вы хотите найти такое расположение людей, что значение \(\sum\limits_{j=1}^{m}\min\limits_{i=1}^{n}|x_i - y_j|\) минимально возможное (другими словами, сумма расстояний до ближайшего рождественского дерева по всем людям должна быть минимизирована).

Другими словами, пусть \(d_j\) равно дистанции от \(j\)-го человека до ближайшего к нему рождественского дерева (\(d_j = \min\limits_{i=1}^{n} |y_j - x_i|\)). Тогда вам надо выбрать такие позиции \(y_1, y_2, \dots, y_m\), что \(\sum\limits_{j=1}^{m} d_j\) минимально возможна.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество рождественских деревьев и количество людей.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(-10^9 \le x_i \le 10^9\)), где \(x_i\) равно позиции \(i\)-го рождественского дерева. Гарантируется, что все \(x_i\) различны.

Выходные данные

В первой строке выведите одно целое число \(res\) — минимально возможное значение \(\sum\limits_{j=1}^{m}\min\limits_{i=1}^{n}|x_i - y_j|\) (другими словами, сумму расстояний до ближайшего рождественского дерева по всем людям).

Во второй строке выведите \(m\) целых чисел \(y_1, y_2, \dots, y_m\) (\(-2 \cdot 10^9 \le y_j \le 2 \cdot 10^9\)), где \(y_j\) равно позиции \(j\)-го человека. Все \(y_j\) должны быть различными, а еще все значения \(x_1, x_2, \dots, x_n, y_1, y_2, \dots, y_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]\), например.

F. Гирлянда своими руками

Деревья жадные алгоритмы Конструктив *2200

Поликарп решил украсить свою комнату перед Новым Годом. Одно из главных украшений — гирлянда, которую он спаяет сам.

Простые гирлянды, в которых несколько лампочек расположены в ряд и соединены одним проводом, слишком скучны для Поликарпа. Он собирается спаять разветвленную гирлянду из \(n\) лампочек и \(n - 1\) провода. Ровно одна лампочка будет подключена к розетке, и от нее по проводам будет передаваться электроэнергия ко всем остальным лампочкам. Каждый провод соединяет ровно две лампочки, причем та из них, от которой будет идти энергия по этому проводу, называется главной, а та, которая получает энергию по этому проводу, называется побочной. Очевидно, для каждой лампочки существует не более одного провода, для которого она является побочной.

У каждой лампочки есть своя яркость, причем яркость \(i\)-й лампочки равна \(2^i\). Назовем важностью провода суммарную яркость тех лампочек, которые окажутся отсоединены от источника энергии, если этот провод (и только его) удалить. Естественно, более важные провода должны быть более надежными.

Поликарп нарисовал схему гирлянды, которую он хочет спаять (на схеме указаны все \(n\) лампочек и \(n - 1\) проводов, а также отмечена лампочка, которая будет подключена к электросети; провода расположены так, что энергия может передаваться до всех лампочек). После этого Поликарп посчитал важность каждого провода, пронумеровал их от \(1\) до \(n - 1\) в порядке уменьшения важности, а затем (с учётом новой нумерации проводов) для каждого провода записал номер его главной лампочки.

На следующий день Поликарп купил необходимые провода и решил спаять гирлянду — но, к сожалению, не смог найти схему. Вспомнив, что у него есть список номеров главных лампочек для всех проводов в порядке уменьшения их важности, он решил попытаться восстановить схему гирлянды по этому списку. Можете ли вы помочь ему с восстановлением схемы?

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество лампочек.

Во второй строке заданы \(n - 1\) целых чисел \(a_1\), \(a_2\), ..., \(a_{n - 1}\) (\(1 \le a_i \le n\)), где \(a_i\) — номер главной лампочки для \(i\)-го провода (провода пронумерованы в порядке уменьшения важности).

Выходные данные

Если схему восстановить невозможно, выведите одно целое число: \(-1\).

В противном случае выведите схему следующим образом. В первой строке выведите одно целое число \(k\) (\(1 \le k \le n\)) — номер лампочки, подключенной к электросети. Затем выведите \(n - 1\) строк, в каждой из которых должны быть заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — номера лампочек, соединенных некоторым проводом. Описания проводов (и номера лампочек, соединенных проводом) могут быть выведены в любом порядке. Вывод должен соответствовать некоторой схеме, по которой Поликарп мог бы выписать список чисел \(a_1\), \(a_2\), ..., \(a_{n - 1}\). Если таких схем несколько, выведите любую из них.

Примечание

Схема для первого примера (R обозначает лампу, подключенную к сети; числа на проводах обозначают их важность):

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\).

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.

B. Числа на дереве

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

Евлампию подарили корневое дерево, вершины которого пронумерованы от \(1\) до \(n\). В каждой \(i\)-й вершине написано число \(a_i\). Евлампий посчитал для каждой вершины \(i\) величину \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Иллюстрация ко второму примеру, первым написано \(a_i\), а в скобках написано \(c_i\)

После нового года Евлампий не смог вспомнить, каким был его подарок! Он помнит дерево и значения \(c_i\), однако совсем забыл, какие числа \(a_i\) были написаны в вершинах. Помогите ему восстановить исходные числа!

Входные данные

В первой строке содержится целое число \(n\) \((1 \leq n \leq 2000)\) — количество вершин в дереве.

Далее в \(n\) строках идёт описание вершин дерева: в \(i\)-й строке находятся два целых числа \(p_i\) и \(c_i\) (\(0 \leq p_i \leq n\); \(0 \leq c_i \leq n-1\)), где \(p_i\) — номер родителя вершины \(i\) или \(0\) для корня дерева, а \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Гарантируется, что значения \(p_i\) задают некоторое корневое дерево из \(n\) вершин.

Выходные данные

Если решение существует, то в первой строке выведите «YES», а во второй строке выведите \(n\) чисел \(a_i\) \((1 \leq a_i \leq {10}^{9})\) — искомые числа, которые были записаны в вершинах дерева. Если решений несколько, выведите любое из них. Можно показать, что если решение существует, то также существует решение, где все \(a_i\) лежат от \(1\) до \(10^9\).

Если же решения не существует, то выведите «NO».

A. Злые школьники

жадные алгоритмы реализация *800

В ЛКШ.Зима день экскурсий, поэтому \(t\) групп школьников отправились в Торжок. Тротуары в Торжке настолько узкие, что идти приходится в колонне по-одному.

Изначально некоторые из школьников злы. Для удобства будем описывать группу школьников строкой из заглавных латинских букв «A» и «P»:

  • «A» соответствует злому школьнику
  • «P» соответствует спокойному школьнику

Строка описывает школьников от последнего к первому, слева направо.

Каждую минуту каждый злой школьник кидает снежок в спину идущего непосредственно перед ним.

Формально, если злой школьник соответствует символу заданной строки с индексом \(i\), то снежок он будет кидать в школьника, который соответствует символу с индексом \(i+1\) (студенты в строке заданы от последнего к первому!). Если школьник, в которого попали снежком, еще не был зол, то он становится злым. Даже если первый (самый правый в строке) школьник является злым, он не бросает снежок, так как впереди него нет другого ученика.

Рассмотрим первый тестовый пример. В нем колонна изначально имеет такой вид: PPAP. Через минуту единственный злой школьник кинет снежок в школьника, идущего перед ним, и он тоже станет злым: PPAA. После этого, новых злых школьников появляться не будет.

Помогите преподавателям ЛКШ.Зима определить для каждой группы время, спустя которое в ней появится последний злой школьник.

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 100\)) — количество групп школьников. Следующие \(2t\) строк описывают группы школьников.

Описание группы начинается с целого числа \(k_i\) (\(1 \le k_i \le 100\)) — количество школьников в группе, затем дана строка \(s_i\), состоящая из \(k_i\) символов «A» и «P», описывающая \(i\)-ю группу школьников.

Выходные данные

Для каждой группы выведите в отдельной строке одно целое число — количество минут, через которое в этой группе появится последний злой школьник.

Примечание

В первом примере через \(1\) минуту состояния школьников станут такими: PPAA после этого новых злых школьников не появится.

Во втором примере состояния школьников в первой группе по минутам будут выглядеть так:

  • через \(1\) минуту — AAPAAPPAAPPP
  • через \(2\) минуты — AAAAAAPAAAPP
  • через \(3\) минуты — AAAAAAAAAAAP
  • через \(4\) минуты злыми станут все \(12\) школьников, поэтому новых злых школьников не появится.

Во второй группе второго примера через \(1\) минуту все школьники станут злыми.

A. Четные, но нечетные

жадные алгоритмы математика Строки *900

Назовем число неопределенным, если сумма его цифр делится на \(2\), тогда как само число не делится на \(2\). Например, числа \(13\), \(1227\), \(185217\) являются неопределенными, а числа \(2\), \(12\), \(177013\), \(265918\) — нет. Для лучшего понимания этого определения посмотрите в пояснения к примерам.

Вам дано неотрицательное целое число \(s\), состоящее из \(n\) цифр. Вы можете удалить некоторые его цифры (они не обязательно идут подряд), чтобы получить неопределенное число. Вы не можете менять порядок цифр, то есть после удаления цифр из числа оставшиеся цифры просто схлопываются. Получившееся число должно не содержать ведущие нули. Количество удаляемых цифр может быть любым от \(0\) (вы вообще не удаляете цифры) до \(n-1\).

Например, если было задано целое число \(s=\)222373204424185217171912, то один из способов сделать его неопределенным имеет вид: 222373204424185217171912 \(\rightarrow\) 2237344218521717191. Сумма цифр числа 2237344218521717191 равна \(70\) и делится на \(2\), но само число на \(2\) не делится — значит это число является неопределенным.

Найдите любое число, которое может получиться таким образом и является неопределенным. Если получить таким способом неопределенное число невозможно, то сообщите об этом.

Входные данные

Входные данные содержат один или несколько наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных. В следующих строках находятся их описания.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 3000\))  — количество цифр данного числа.

Во второй строке описания каждого набора входных данных содержится неотрицательное целое число \(s\), состоящее из \(n\) цифр.

Гарантируется, что \(s\) не содержит ведущих нулей и что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

  • Если невозможно получить неопределенное число, выведите «-1» (без кавычек).
  • Иначе, выведите получившееся число, после удаления некоторых, возможно нуля, но не всех цифр данного числа. Это число должно являться неопределенным. Если существует несколько возможных ответов, вы можете вывести любой из них. Обратите внимание, что числа, содержащие ведущие нули или пустая строка не являются верными ответами. Количество удаленных цифр не нужно минимизировать или максимизировать, вы можете найти любой ответ, подходящий под условие.
Примечание

В первом тестовом случае, \(1227\) уже является неопределенным числом (\(1 + 2 + 2 + 7 = 12\). Число \(12\) делится на \(2\), тогда как число \(1227\) не делится на \(2\)), поэтому можно не удалять цифры. Такие ответы, как \(127\) и \(17\) тоже являются верными.

Во втором тестовом случае, очевидно, что невозможно получить неопределенное число из данного числа.

В третьем тестовом случае, существует много неопределенных чисел, которые мы можем получить с помощью удаления некоторых цифр. Например при удалении \(1\) цифры это числа \(17703\), \(77013\) или \(17013\). Ответы, такие как \(1701\) или \(770\) не будут верными, потому что они не являются неопределенными числами. Ответ \(013\) не является верным, потому что он содержит ведущие нули.

Пояснение:

  • \(1 + 7 + 7 + 0 + 3 = 18\). Так как \(18\) делится на \(2\), а само число \(17703\) не делится на \(2\), мы можем увидеть, что число \(17703\) является неопределенным числом. Тоже самое верно для чисел \(77013\) и \(17013\);
  • \(1 + 7 + 0 + 1 = 9\). Так как \(9\) не делится на \(2\), число \(1701\) не является неопределенным числом;
  • \(7 + 7 + 0 = 14\). В этот раз, \(14\) делится на \(2\), но само число \(770\) также делится на \(2\), поэтому число \(770\) не является неопределенным.

В последнем наборе входных данных примера продемонстрирован один из множества возможных ответов. Другой возможный ответ: 222373204424185217171912 \(\rightarrow\) 22237320442418521717191 (достаточно удалить одну последнюю цифру).

B. Заострение массива

жадные алгоритмы реализация *1300

Вам дан массив \(a_1, \ldots, a_n\) из \(n\) неотрицательных целых чисел.

Назовем его заостренным, если существует целое число \(1 \le k \le n\), такое что \(a_1 < a_2 < \ldots < a_k\) и \(a_k > a_{k+1} > \ldots > a_n\). В частности, любой строго возрастающий или строго убывающий массив является заостренным. Например:

  • Массивы \([4]\), \([0, 1]\), \([12, 10, 8]\) и \([3, 11, 15, 9, 7, 4]\) являются заостренными;
  • Массивы \([2, 8, 2, 8, 6, 5]\), \([0, 1, 1, 0]\) и \([2, 5, 6, 9, 8, 8]\) не являются заостренными.

Вы можете сделать следующую операцию, сколько угодно раз: выбрать любой строго положительный элемент массива и уменьшить его на единицу. Формально, вы можете выбрать любой индекс \(i\) (\(1 \le i \le n\)), такой что \(a_i>0\), и выполнить присвоение \(a_i := a_i - 1\).

Определите, возможно ли сделать данный массив заостренным, сделав некоторое количество (возможно ноль) этих операций.

Входные данные

Входные данные содержат несколько тестовых случаев. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 15\ 000\))  — количество тестовых случаев. В следующих строках находится их описание.

В первой строке описания каждого тестового случая находится единственное целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Во второй строке описания каждого тестового случая находится последовательность из \(n\) целых неотрицательных чисел \(a_1, \ldots, a_n\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого тестового случая, выведите единственную строку, содержащую «Yes» (без кавычек), если возможно сделать данный массив заостренным, используя описанные операции, или «No» (без кавычек), иначе.

Примечание

В первом и втором тестовых случаях первого теста, данный массив уже является заостренным.

В третьем тестовом случае первого теста, мы можем получить массив \([3, 11, 15, 9, 7, 4]\) (уменьшить первый элемент \(97\) раз и уменьшить последний элемент \(4\) раза). Он заостренный, потому что \(3 < 11 < 15\) и \(15 > 9 > 7 > 4\).

В четвертом тестовом случае первого теста, невозможно сделать массив заостренным.

B. Арома и её поиск

геометрия жадные алгоритмы Конструктив Перебор реализация *1700

С новым телом наш идол Арома Белая (или лучше было сказать Каори Минамийа?) начинает восстанавливать своё потерянное прошлое через OS-пространство.

Это пространство можно представить как 2D плоскость, с бесконечным количеством устройств с данными, пронумерованных с \(0\). Координаты устройств можно описать следующим образом:

  • Координаты \(0\)-го устройства равны \((x_0, y_0)\)
  • Для \(i > 0\), координаты \(i\)-го устройства равны \((a_x \cdot x_{i-1} + b_x, a_y \cdot y_{i-1} + b_y)\)

Изначально Арома расположена в точке \((x_s, y_s)\). Она может находиться в OS-пространстве не более \(t\) секунд, после этого ей придётся вернуться в реальный мир. Чтобы вернутся в реальный мир не требуется возвращаться в изначальную точку \((x_s, y_s)\).

Внутри OS-пространства Арома может делать следующие действия:

  • Из точки \((x, y)\) Арома может перейти в одну из следующих точек \((x-1, y)\), \((x+1, y)\), \((x, y-1)\) или \((x, y+1)\). Это действие занимает \(1\) секунду.
  • Если Арома стоит в точке с устройством, то она может его собрать. Можно считать, что это действие занимает \(0\) секунд. Разумеется, каждое устройство можно собрать не более одного раза.

Арома хочет собрать как можно больше данных перед тем как вернётся назад. Помогите ей определить максимальное количество устройств с данными, которые она сможет собрать за \(t\) секунд.

Входные данные

Первая строка содержит целые числа \(x_0\), \(y_0\), \(a_x\), \(a_y\), \(b_x\), \(b_y\) (\(1 \leq x_0, y_0 \leq 10^{16}\), \(2 \leq a_x, a_y \leq 100\), \(0 \leq b_x, b_y \leq 10^{16}\)), которые задают координаты устройств с данными.

Вторая строка содержит целые числа \(x_s\), \(y_s\), \(t\) (\(1 \leq x_s, y_s, t \leq 10^{16}\)), изначальные координаты Аромы и доступное время.

Выходные данные

Выведите одно целое число — максимальное количество устройств с данными которые Арома сможет собрать за \(t\) секунд.

Примечание

Во всех трёх примерах, координаты первых \(5\) устройств равны \((1, 1)\), \((3, 3)\), \((7, 9)\), \((15, 27)\) и \((31, 81)\) (напомним, что устройства пронумерованы начиная с \(0\)).

В первом примере оптимальный маршрут чтобы собрать \(3\) вершины выглядит следующим образом:

  • Перейти в точку \((3, 3)\) и собрать \(1\)-е устройство. Это занимает \(|3 - 2| + |3 - 4| = 2\) секунд.
  • Перейти в точку \((1, 1)\) и собрать \(0\)-е устройство. Это занимает \(|1 - 3| + |1 - 3| = 4\) секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|7 - 1| + |9 - 1| = 14\) секунд.

Во втором примере оптимальный маршрут чтобы собрать \(2\) вершины выглядит следующим образом:

  • Собрать \(3\)-е устройство. Это занимает ноль секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|15 - 7| + |27 - 9| = 26\) секунд.

В третьем примере Арома не может собрать ни одного устройства. Пожалуй стоило отдохнуть, а не рваться в OS-пространство без подготовки.

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\).

E. Рин и неизвестный цветок

жадные алгоритмы интерактив Конструктив математика *3500

Это интерактивная задача!

Это был обычный день в тайном офисе в A.R.C. Markland-N, когда капитан-исследователь Сагар передал Рин необычный артефакт.

После некоторого анализа, Рин поняла, что этот артефакт содержит информацию о странном цветке, который существовал задолго до нашей эры. Однако информация о химической структуре цветка оказалась зашифрованной.

Химическая структура цветка может быть представлена как строка \(p\). Исходя из незашифрованных бумаг рядом, Рин выяснила, длину строки \(n\) и что эта строка может содержать только следующие три буквы: «C» (углерод), «H» (водород), и «O» (кислород).

В каждый момент Рин может ввести строку \(s\) произвольной длины в специальный терминал артефакт, и он в ответ выведет все возможные начальные позиции вхождения \(s\) как подстроки в \(p\).

Тем не менее, запас энергии артефакта достаточно ограничен, и артефакт нельзя перезарядить, так как его технология слишком несовременная и несовместима ни с одним устройством A.R.C. Более точно:

  • Артефакт содержит \(\frac{7}{5}\) единиц энергии.
  • Каждый раз, когда Рин вводит строку \(s\) длины \(t\), артефакт тратит \(\frac{1}{t^2}\) единиц энергии.
  • Если уровень энергии достигнет нуля, то задание будет считаться проваленным, а артефакт навсегда затемнится.

Артефакт очень ценен, но и столь же хрупок. Рин очень боится повредить артефакт навсегда в попытках извлечь данные. Не могли бы вы ей помочь?

Протокол взаимодействия

Взаимодействие начинается с целого числа \(t\) (\(1 \le t \le 500\)), количества тестовых случаев. Взаимодействие для каждого тестового случая описано ниже:

Сначала вам нужно считать целое число \(n\) (\(4 \le n \le 50\)), длину строки \(p\).

После этого вы можете делать запросы вида «? s» (\(1 \le |s| \le n\)), чтобы найти вхождения \(s\) в \(p\).

После запроса, вам нужно считать ответ на него как последовательность целых чисел в одной строке:

  • Первое число \(k\) обозначает количество вхождений \(s\) как подстроку в \(p\) (\(-1 \le k \le n\)). Если \(k = -1\), то это означает, что вы превысили ограничение на энергию или сделали некорректный запрос, в этом случае вам нужно немедленно завершить программу, чтобы гарантировать вердикт «Неправильный ответ». В противном случае вердикт может оказаться любым, так как ваше решение продолжит чтение из закрытого потока.
  • Следующие \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_1 < a_2 < \ldots < a_k \le n\)) обозначают начальные позиции подстрок равных строке \(s\) .

Когда вы выясните строку \(p\) выведите «! \(p\)» чтобы завершить текущий тестовый случай. Это действие не тратит энергию. Интерактор в ответ вернёт \(1\) или \(0\). Если интерактор вернул \(1\), то вы можете начать обрабатывать следующий тестовый случай, если он есть, или завершить программу, если это был последний тестовый случай.

Если интерактор вернул \(0\), то это означает что ваше предположение некорректно и вы должны немедленно завершить программу, чтобы гарантировать вердикт «Неправильный ответ».

Обратите внимание что в каждом тестовом случае строка \(p\) зафиксирована заранее и не меняется в зависимости от запросов, иначе говоря, интерактор не адаптивен.

После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы можете получить вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат:

Первая строка должна содержать целое число \(t\) (\(t = 1\)).

Вторая строка строка должна содержит целое число \(n\) (\(4 \le n \le 50\)) — длину строки.

Вторая строка должна содержать строку длины \(n\), состоящую только из символов «C», «H» и «O». Эта та строка, которую взламываемому решению придётся угадать.

Примечание

Обратите внимание что в примере взаимодействия есть лишние пустые строки для удобства чтения.

В реальном взаимодействия таких строк нет, и ваша программа тоже не должна их выводить.

B. JOE на телевидении!

жадные алгоритмы Комбинаторика математика *1000

Наш владелец Кафе JOE Миллер скоро примет участие в новом игровом телешоу «1 против \(n\)».

Игра проходит в несколько раундов, где в каждом раунде ведущий задаёт JOE и его соперникам один общий вопрос. Все участники отвечающие неправильно выбывают из игры. Шоу заканчивается, когда остаётся только JOE (мы считаем, что JOE никогда не отвечает на вопрос неверно!).

Для каждого вопроса, на который отвечает JOE, если у него оставалось \(s\) (\(s > 0\)) соперников и из них \(t\) (\(0 \le t \le s\)) ответили неверно, то JOE получает \(\displaystyle\frac{t}{s}\) долларов. Ну а в следующем раунде у него будет уже \(s - t\) соперников.

JOE задумался, чему равен наибольший приз, который он может получить в лучшем случае. Однако шоу начинается достаточно скоро, и у него нет на это времени. Может быть вы сможете ответить на этот вопрос?

Входные данные

Единственная строка содержит целое число \(n\) (\(1 \le n \le 10^5\)), обозначающее число соперников JOE.

Выходные данные

Выведите наибольший возможный приз (в долларах), который может получить JOE.

Ваш ответ будет засчитан, если его абсолютная или относительная погрешность будет не более \(10^{-4}\). Иначе говоря, если ваш ответ это \(a\), а ответ жюри \(b\), то должно выполняться \(\frac{|a - b|}{max(1, b)} \le 10^{-4}\).

Примечание

Во втором примере наилучший сценарий выглядит следующим образом: один участник ошибается на первом вопросе, а второй на втором, тогда итоговый приз составит \(\displaystyle \frac{1}{2} + \frac{1}{1} = 1.5\) долларов.

C. Произведение трех чисел

жадные алгоритмы математика теория чисел *1300

Вам задано целое число \(n\). Найдите три различных целых числа \(a, b, c\) таких, что \(2 \le a, b, c\) и \(a \cdot b \cdot c = n\) или скажите, что невозможно сделать это.

Если существует несколько подходящих ответов, вы можете вывести любой.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Следующие \(n\) строк описывают наборы входных данных. \(i\)-й набор входных данных задан с новой строки в виде одного целого числа \(n\) (\(2 \le n \le 10^9\)).

Выходные данные

Выведите ответ для каждого набора входных данных. Выведите «NO» если невозможно представить \(n\) как \(a \cdot b \cdot c\) для каких-то различных целых чисел \(a, b, c\) таких, что \(2 \le a, b, c\).

Иначе выведите «YES» и любое такое возможное представление.

D. Максимизация MEX

жадные алгоритмы математика реализация Структуры данных *1600

Напомним, что MEX массива — это минимальное неотрицательное целое число, которое не представлено в массиве. Примеры:

  • для массива \([0, 0, 1, 0, 2]\) MEX равен \(3\), потому что числа \(0, 1\) и \(2\) представлены в массиве, а \(3\) является минимальным неотрицательным целым числом, не представленным в массиве;
  • для массива \([1, 2, 3, 4]\) MEX равен \(0\), потому что \(0\) является минимальным неотрицательным целым числом, не представленным в массиве;
  • для массива \([0, 1, 4, 3]\) MEX равен \(2\), потому что \(2\) является минимальным неотрицательным целым числом, не представленным в массиве.

Вам задан пустой массив \(a=[]\) (иными словами, массив нулевой длины). Также вам задано положительное целое число \(x\).

Вам дано \(q\) запросов. \(j\)-й запрос состоит из одного целого числа \(y_j\), которое означает, что вы должны дописать один элемент \(y_j\) в массив. Длина массива увеличивается на \(1\) после каждого запроса.

За один ход вы можете выбрать любой индекс \(i\) и присвоить \(a_i := a_i + x\) или \(a_i := a_i - x\) (т.е. увеличить или уменьшить любой элемент на \(x\)). Единственное ограничение — \(a_i\) не может стать отрицательным. Так как изначально массив пуст, вы можете совершать ходы только после первого запроса.

Вам нужно максимизировать MEX (minimum excluded) массива, применив какое-то количество подобных операций (вы также можете применить несколько таких операций к одному и тому же элементу).

Вам необходимо найти ответ после каждого из \(q\) запросов (то есть \(j\)-й ответ соответствует массиву длины \(j\)).

Операции отменяются после каждого запроса. То есть массив \(a\) после \(j\)-го запроса равен \([y_1, y_2, \dots, y_j]\).

Входные данные

Первая строка входных данных содержит два целых числа \(q, x\) (\(1 \le q, x \le 4 \cdot 10^5\)) — количество запросов и значение числа \(x\).

Следующие \(q\) строк описывают запросы. \(j\)-й запрос состоит из целого числа \(y_j\) (\(0 \le y_j \le 10^9\)) и означает, что вы должны дописать один элемент \(y_j\) в массив.

Выходные данные

Выведите ответ на изначальную задачу после каждого запроса — для запроса \(j\) выведите максимальное значение MEX после первых \(j\) запросов. Стоит заметить, что запроса зависимы (массив меняется после каждого запроса), но операции между запросами независимы.

Примечание

В первом тестовом примере:

  • После первого запроса массив равен \(a=[0]\): нет необходимости применять операции, максимально возможный MEX равен \(1\).
  • После второго запроса массив равен \(a=[0, 1]\): нет необходимости применять операции, максимально возможный MEX равен \(2\).
  • После третьего запроса массив равен \(a=[0, 1, 2]\): нет необходимости применять операции, максимально возможный MEX равен \(3\).
  • После четвертого запроса массив равен \(a=[0, 1, 2, 2]\): нет необходимости применять операции, максимально возможный MEX равен \(3\) (вы не можете сделать его больше, применяя операции).
  • После пятого запроса массив равен \(a=[0, 1, 2, 2, 0]\): вы можете совершить операцию \(a[4] := a[4] + 3 = 3\). Массив изменится и станет равен \(a=[0, 1, 2, 2, 3]\). Теперь MEX является максимально возможным и равен \(4\).
  • После шестого запроса массив равен \(a=[0, 1, 2, 2, 0, 0]\): вы можете совершить операцию \(a[4] := a[4] + 3 = 0 + 3 = 3\). Массив изменится и станет равен \(a=[0, 1, 2, 2, 3, 0]\). Теперь MEX является максимально возможным и равен \(4\).
  • После седьмого запроса массив равен \(a=[0, 1, 2, 2, 0, 0, 10]\). Вы можете совершить следующие операции:
    • \(a[3] := a[3] + 3 = 2 + 3 = 5\),
    • \(a[4] := a[4] + 3 = 0 + 3 = 3\),
    • \(a[5] := a[5] + 3 = 0 + 3 = 3\),
    • \(a[5] := a[5] + 3 = 3 + 3 = 6\),
    • \(a[6] := a[6] - 3 = 10 - 3 = 7\),
    • \(a[6] := a[6] - 3 = 7 - 3 = 4\).
    Результирующий массив будет равен \(a=[0, 1, 2, 5, 3, 6, 4]\). Теперь MEX является максимально возможным и равен \(7\).

E. Получи перестановку

жадные алгоритмы математика реализация *1900

Вам задана прямоугольная матрица размера \(n \times m\), состоящая из целых чисел от \(1\) до \(2 \cdot 10^5\). За один ход вы можете:

  • выбрать любой элемент матрицы и изменить его значение на любое целое число от \(1\) до \(n \cdot m\), включительно;
  • взять любой столбец и сдвинуть его на одну клетку вверх циклически (смотрите пример такого циклического сдвига ниже).

Циклический сдвиг — это операция, в которой выбирается некоторое \(j\) (\(1 \le j \le m\)) и присваивается \(a_{1, j} := a_{2, j}, a_{2, j} := a_{3, j}, \dots, a_{n, j} := a_{1, j}\) одновременно.

Пример циклического сдвига первого столбца

Вы хотите определить минимальное количество шагов, за которое можно привести матрицу к подобному виду:

Другими словами, ваша цель — получить матрицу, в которой \(a_{1, 1} = 1, a_{1, 2} = 2, \dots, a_{1, m} = m, a_{2, 1} = m + 1, a_{2, 2} = m + 2, \dots, a_{n, m} = n \cdot m\) (i.e. \(a_{i, j} = (i - 1) \cdot m + j\)) за минимальное число шагов.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) and \(m\) (\(1 \le n, m \le 2 \cdot 10^5, n \cdot m \le 2 \cdot 10^5\)) — размер матрицы.

Следующие \(n\) строк содержат по \(m\) целых чисел в каждой. Число в строке \(i\) на позиции \(j\) равно \(a_{i, j}\) (\(1 \le a_{i, j} \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — минимальное число шагов, необходимое, чтобы получить матрицу, в которой \(a_{1, 1} = 1, a_{1, 2} = 2, \dots, a_{1, m} = m, a_{2, 1} = m + 1, a_{2, 2} = m + 2, \dots, a_{n, m} = n \cdot m\) (\(a_{i, j} = (i - 1)m + j\)).

Примечание

В первом тестовом примере можно присвоить \(a_{1, 1} := 7, a_{1, 2} := 8\) и \(a_{1, 3} := 9\), а затем циклически сдвинуть первый, втрой и третий столбцы, таким образом, ответ равен \(6\). Можно показать, что лучшего результата достигнуть невозможно.

Во втором тестовом примере матрица уже является хорошей, поэтому ответ равен \(0\).

В третьем тестовом примере достаточно дважды циклически сдвинуть второй столбец, чтобы получить хорошую матрицу, поэтому ответ равен \(2\).

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\). Можно показать, что лучшего ответа не существует.

A. Отобрази число

жадные алгоритмы *900

У вас есть большое электронное табло, на котором можно отобразить до \(998244353\) десятичных цифр. Цифры отображаются таким же образом, как на электронных часах: каждая позиция для цифры состоит из \(7\) сегментов, которые могут быть включены или выключены, чтобы отображать различные цифры. На картинке показано, как изображаются все \(10\) десятичных цифр:

Как вы можете заметить, разные цифры могут потребовать включения разного количества сегментов для их отображения. Например, если вы хотите отобразить \(1\), надо включить \(2\) сегмента, а если вы хотите отобразить \(8\), все \(7\) сегментов на некоторой позиции должны быть включены.

Вы хотите отобразить очень большое целое число на экране. К сожалению, из-за бага нельзя включить более \(n\) сегментов одновременно. Поэтому вы хотите узнать, какое наибольшее целое число можно отобразить, включив не более \(n\) сегментов.

Ваша программа должна уметь обрабатывать \(t\) наборов тестовых данных.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных, каждый из которых состоит из одной строки, содержащей единственное число \(n\) (\(2 \le n \le 10^5\)) — максимальное количество включенных сегментов в соответствующем наборе входных данных.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшее целое число, которое можно отобразить, включив не более \(n\) сегментов на экране. Обратите внимание, что ответ может не помещаться в стандартные \(32\)-битные или \(64\)-битные целочисленные типы данных.

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\).

D. Сражение с монстрами

жадные алгоритмы сортировки *1500

В линию выстроены \(n\) монстров, пронумерованных числами с \(1\) по \(n\). У \(i\)-го монстра есть \(h_i\) очков здоровья (hp). Вы можете атаковать с силой, равной \(a\) hp, а ваш соперник может атаковать с силой, равной \(b\) hp.

Вы и ваш соперник сражаетесь с этими монстрами. Сначала вы и ваш соперник идете к первому монстру и сражаетесь с ним до тех пор, пока он не будет мертв, затем вы и ваш соперник отправляетесь ко второму монстру и сражаетесь с ним до тех пор, пока и он не будет мертв, и так далее. Смерть монстра наступает, когда значение его hp становится меньшим или равным \(0\).

Сражение с монстром происходит поочередно.

  1. Вы атакуете монстра с силой \(a\) hp. Если он погибает после вашего удара, вы получаете одно очко и затем вы и соперник переходите к следующему монстру.
  2. Ваш соперник атакует монстра с силой \(b\) hp. Если монстр погибает после этой атаки, никто не получает очко и вы с соперником переходите к следующему монстру.

У вас есть некоторая секретная техника, с помощью которой можно заставить вашего соперника пропустить свой ход. Вы можете использовать эту технику не более, чем \(k\) раз всего (например, если есть два монстра и \(k=4\), то вы можете использовать эту технику \(2\) раза во время сражения с первым монстром и \(1\) один раз — со вторым, но не \(2\) раза с первым монстром и \(3\) раза со вторым).

Ваша задача — определить максимальное число очков, которое вы можете получить, если будете использовать секретную технику оптимально.

Входные данные

Первая строка входных данных содержит четыре целых числа \(n, a, b\) and \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le a, b, k \le 10^9\)) — количество монстров, сила вашей атаки, сила атаки соперника и количество раз, которое вы можете использовать секретную технику.

Вторая строка входных данных содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 10^9\)), где \(h_i\) количество очков здоровья у \(i\)-го монстра.

Выходные данные

Выведите одно целое число — максимальное число очков, которое вы можете получить, если будете использовать секретную технику оптимально.

E1. Покраска строки (простая версия)

графы дп жадные алгоритмы Конструктив сортировки *1800

Это простая версия задачи. Задачи отличаются друг от друга, но простая версия почти является подзадачей сложной версии. Обратите внимание на то, что ограничения и формат вывода различаются.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв.

Вам нужно раскрасить все её символы в один из двух цветов (каждый символ покрашен ровно в один цвет, одинаковые буквы могут быть покрашены как одним цветом, так и разными, т.е. вам нужно выбрать ровно один цвет для каждого индекса в \(s\)).

После покраски вы можете поменять местами два любых соседних символа строки, которые раскрашены в разные цвета. Вы можете применить эту операцию произвольное (возможно, нулевое) количество раз.

Цель — сделать строку отсортированной, т.е. все символы должны быть расположены в алфавитном порядке.

Ваша задача — определить, возможно ли покрасить заданную строку так, что после покраски она может быть отсортирована с помощью какой-либо последовательности шагов. Обратите внимание: вам нужно восстановить только раскраску, но не последовательность шагов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 200\)) — длина строки \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных латинских букв.

Выходные данные

Если невозможно раскрасить заданную строку так, что после покраски она может быть отсортирована после какой-либо последовательности шагов, выведите «NO» (без кавычек) первой строкой.

В противном случае выведите «YES» первой строкой и любую корректную раскраску второй строкой (раскраской считается строка, состоящая из \(n\) символов, где \(i\)-й символ должен быть '0', если \(i\)-й символ покрашен в первый цвет и '1' иначе).

F. Красоты Берляндии

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *2100

В Берляндии есть \(n\) железнодорожных станций, которые соединены \(n-1\) участками железной дороги, по которым может ходить поезд в любом из двух направлений. Железнодорожная сеть связна, то есть представляет собой неориентированное дерево.

У вас есть карта этой сети, таким образом для каждого участка железной дороги известно, какие станции он соединяет.

У каждого из \(n-1\) участков есть целочисленный параметр красота пейзажа за окном, однако эти значения на карте не указаны и вам неизвестны. Все эти значения лежат в границах от \(1\) до \(10^6\), включительно.

Вы произвели опрос \(m\) пассажиров: \(j\)-й пассажир сообщил три значения:

  • станция отправления \(a_j\);
  • станция прибытия \(b_j\);
  • минимальную из красот пейзажа за окном на пути следования из \(a_j\) в \(b_j\) (поезд ехал кратчайшим путём из \(a_j\) в \(b_j\)).

Вы хотите улучшить карту и на каждом участке железной дороги указать величину \(f_i\)красота пейзажа за окном. Эти значения должны быть согласованы с опросом пассажиров.

Выведите любой возможный набор значений \(f_1, f_2, \dots, f_{n-1}\), которые согласуется с опросами или укажите, что такой не существует.

Входные данные

В первой строке входных данных записано целое число \(n\) (\(2 \le n \le 5000\)) — количество железнодорожных станций в Берляндии.

В следующих \(n-1\) строках записаны описания участков железных дорог: \(i\)-й участок задаётся двумя целыми числами \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n, x_i \ne y_i\)), где \(x_i\) и \(y_i\) — номера станций, которые соединены \(i\)-м участком железной дороги. Все участки железной дороги — двунаправлены. Из любой станции можно проехать в любую другую по железной дороге.

Следующая строка содержит число \(m\) (\(1 \le m \le 5000\)) — количество опрошенных пассажиров. Далее содержится \(m\) строк, \(j\)-я строка содержит три целых числа \(a_j\), \(b_j\) и \(g_j\) (\(1 \le a_j, b_j \le n\); \(a_j \ne b_j\); \(1 \le g_j \le 10^6\)) — станция отправления, прибытия и минимальная красота пейзажа за окном во время пути.

Выходные данные

Если ответа не существует, то выведите единственное число -1.

В противном случае выведите \(n-1\) целое число \(f_1, f_2, \dots, f_{n-1}\) (\(1 \le f_i \le 10^6\)), где \(f_i\) — возможная красота пейзажа за окном для \(i\)-й дороги.

Если существует несколько возможных ответов, вы можете вывести любой из них.

C. Дрим Тим

*особая задача жадные алгоритмы

Поликарп — менеджер проектов в IT-компании. В настоящий момент ему надо выбрать разработчиков себе в команду для старта нового проекта. Всего в компании есть \(n\) разработчиков «на бенче» (то есть, незадействованных в других проектах). Поликарп оценил умение и навыки каждого из них: \(a_i\) (\(-10^4 \le a_i \le 10^4\)) — целочисленная характеристика \(i\)-го разработчика. Эта величина может быть как положительной, так и нулевой и даже отрицательной (некоторые разработчики только учатся приносить пользу).

После того, как Поликарп выберет себе некоторое подмножество разработчиков в команду, сила команды будет определяться суммой величин \(a_i\) по всем выбранным разработчикам.

Поликарп опасается, что если он выберет команду так, что максимизирует сумму характеристик \(a_i\), то другие менеджеры могут найти это некрасивым. По этой причине он планирует собрать такую команду, что сумма значений \(a_i\) для неё строго меньше максимальной возможной суммы.

Помогите Поликарпу выбрать любую такую команду, что:

  • сумма характеристик \(a_i\) по всем членам выбранной команды строго меньше максимальной суммы, которую можно достичь, выбрав команду некоторым образом;
  • и одновременно сумма характеристик \(a_i\) по всем членам выбранной команды максимально возможна.

Если в соответствии с требованиями выше выбрать команду можно несколькими способами, то достаточно найти любой из них.

Гарантируется, что сумма характеристик в искомой команде строго положительна, другими словами, Поликарп всегда сможет выбрать себе непустую команду.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 10^5\)) — количество свободных разработчиков в компании.

Вторая строка содержит последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^4 \le a_i \le 10^4\)) — характеристики \(n\) разработчиков. Гарантируется, что характеристики таковы, что сумма характеристик в ответе строго положительна.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Выведите ответы для \(t\) наборов входных данных в порядке их задания в тесте. В первую строку каждого ответа выведите положительное целое число \(s\) — сумму характеристик в искомой команде. Вторая строка должна содержать только символы 0 и 1 и соответствовать искомой команде:

  • символ в \(i\)-й позиции должен быть равен 1, если \(i\)-й разработчик принадлежит команде;
  • символ в \(i\)-й позиции должен быть равен 0, если \(i\)-й разработчик не принадлежит команде.

Если ответов несколько, то выведите любой из них.

Примечание

В первом наборе входных данных, максимальный поднабор \(a_1, a_3, a_5\) имеет сумму равную \(3\), поэтому Поликарп должен выбрать команду с меньшей суммой (но максимальной возможной).

Во втором наборе, максимальный поднабор \(a_1, a_2\) имеет сумму равную \(12\), поэтому Поликарп должен выбрать команду с меньшей суммой (но максимальной возможной).

В третьем наборе, максимальный поднабор \(a_1, a_3\) имеет сумму равную \(9\).

В четвертом наборе, максимальный поднабор \(a_1, a_2\) имеет сумму равную \(8\).

В пятом наборе, есть несколько поднаборов с максимальной суммой равной \(3\), поэтому Поликарп должен выбрать команду с меньшей суммой (но максимальной возможной).

D. Распределение премий

*особая задача Бинарный поиск жадные алгоритмы сортировки

Впервые стартап Поликарпа закончил год с прибылью! Теперь он собирается распределить \(k\) бурлей премии среди \(n\) сотрудников.

Известно, что текущая заработная плата \(i\)-го сотрудника составляет \(a_i\), все значения \(a_i\) в компании — различны.

Поликарп хочет распределить \(k\) бурлей суммарной премии между \(n\) сотрудниками и в этом месяце \(i\)-му из них выплатить не \(a_i\), а \(a_i+d_i\) (\(d_i \ge 0\), \(d_i\) — целое), где \(d_i\) — премиальная часть для \(i\)-го сотрудника. Конечно, \(d_1+d_2+\dots+d_n=k\).

Поликарп руководствуется двумя принципами для выбора значений \(d_i\):

  • то, как соотносятся зарплаты между собой, не должно измениться: тот кто получал больше всех (\(a_i\) максимально), и при выплате с премией должен получать больше всех (\(a_i+d_i\) тоже максимально), тот, у кого зарплата была второй по величине, и при выплате с премией должен получать вторую по величине зарплату, и так далее;
  • чтобы подчеркнуть, что годовая прибыль — общий результат, Поликарп хочет минимизировать максимальную выплату (то есть минимизировать максимальное значение \(a_i+d_i\)).

Помогите Поликарпу найти такие неотрицательные целые премии \(d_i\), что:

  • их сумма равна \(k\);
  • для каждого сотрудника количество тех, кто получает больше него, осталось неизменным (то есть, если отсортировать сотрудников по \(a_i\) и по \(a_i+d_i\), то получится одинаковый порядок сотрудников);
  • все \(a_i + d_i\) различны;
  • максимальное из значений \(a_i+d_i\) — минимально.

Помогите Поликарпу и выведите любой возможных из вариантов \(d_1, d_2, \dots, d_n\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют \(t\) наборов входных данных.

Первая строка описания набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(1 \le k \le 10^9\)) — количество сотрудников и суммарная премия.

Вторая строка описания набора содержит \(n\) целых различных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — текущая зарплата \(i\)-го сотрудника.

Гарантируется, что сумма всех значений \(n\) по наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Выведите ответы на \(t\) заданных наборов входных данных в порядке их записи в тесте. Ответ выводите в виде последовательности неотрицательных целых чисел \(d_1, d_2, \dots, d_n\). Если ответов несколько, то выведите любой из них.

F. Фанат кино

*особая задача жадные алгоритмы реализация сортировки Структуры данных

Последнее время Поликарп фанатеет от новинок кинематографа и старается их не пропускать!

В ближайшее время выйдут \(n\) новых фильмов: \(i\)-й из них поступит в прокат в день \(a_i\) и закончит прокат в день \(b_i\). Это значит, что если Поликарп хочет посмотреть \(i\)-й фильм в кинотеатре, то должен это сделать в отрезок дней с \(a_i\) по \(b_i\) включительно.

Возможно, у Поликарпа не будет возможности посмотреть фильм в кинотеатре, тогда он может сделать это и после дня \(b_i\), посмотрев его с помощью одного из онлайн-сервисов. Конечно, это нежелательный исход для Поликарпа, ведь весь мир уже успеет обсудить этот фильм в социальных сетях!

В день Поликарп может посмотреть не более \(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_i\), \(b_i\) (\(1 \le a_i \le b_i \le 10^9\)) — первый и последний день проката для \(i\)-го фильма.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на заданные наборы входных данных в порядке их записи в тесте: \(i\)-й ответ должен состоять из двух строк. В первую строку ответа выведите целое число \(d\):

  • \(d=0\), если существует расписание, что все фильмы просмотрены во время проката;
  • \(d>0\), если такого расписания не существует — в этом случае \(d\) равно минимальному значению максимума среди всех «опозданий» просмотров после проката.

Во вторую строку ответа выведите \(n\) положительных целых чисел \(t_1, t_2, \dots, t_n\), где \(t_i\) — номер дня, когда надо посмотреть \(i\)-й фильм, в оптимальном расписании.

Если ответов несколько, то выведите любой из них.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

C. Водный баланс

геометрия жадные алгоритмы Структуры данных *2100

\(n\) цистерн с водой стоят в ряд, \(i\)-я из них содержит \(a_i\) литров воды. Цистерны пронумерованны от \(1\) до \(n\) слева направо.

Вы можете выполнить следующую операцию: выбрать некоторый подотрезок \([l, r]\) (\(1\le l \le r \le n\)), и перераспределить воду с цистерн \(l, l+1, \dots, r\) между ними равномерно. Другими словами, заменить каждое из \(a_l, a_{l+1}, \dots, a_r\) на \(\frac{a_l + a_{l+1} + \dots + a_r}{r-l+1}\). К примеру, если для обьемов \([1, 3, 6, 7]\) вы выберете \(l = 2, r = 3\), вы получите обьемы \([1, 4.5, 4.5, 7]\). Вы можете выполнять данную операцию любое количество раз.

Какую лексикографически минимальную последовательность обьемов воды вы можете получить?

Напомним:

Последовательность \(a\) лексикографически меньше последовательности \(b\) равной длины, если и только если выполняется следующее: в первой (слева) позиции, где \(a\) и \(b\) отличаются, в последовательности \(a\) стоит меньший элемент, чем в \(b\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество цистерн с водой.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — обьемы воды в цистернах изначально, в литрах.

Из-за большого размера входных данных, не рекомендуется считывать их как doubles.

Выходные данные

Выведите лексикографически минимальную последовательность, которую вы можете получить. В \(i\)-й строке выведите итоговый обьем воды в \(i\)-й цистерне.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка каждого \(a_i\) не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a_1, a_2, \dots, a_n\), а ответ жюри равен \(b_1, b_2, \dots, b_n\). Ваш ответ будет зачтен, если и только если \(\frac{|a_i - b_i|}{\max{(1, |b_i|)}} \le 10^{-9}\) для каждого \(i\).

Примечание

В первом примере, вы можете получить лексикографически минимальную последоательность, применив операцию к подотрезку \([1, 3]\).

Во втором примере, вы не можете получить меньшую лексикографически последовательность.

B. Разделение на классы

жадные алгоритмы реализация сортировки *1000

Напомним, что медиана массива \([a_1, a_2, \dots, a_{2k+1}]\) из нечетного количества элементов определяется следующим образом: пусть \([b_1, b_2, \dots, b_{2k+1}]\) — числа массива в отсортированном порядке. Тогда медиана этого массива равна \(b_{k+1}\).

В классе \(2n\) учеников, уровень навыков \(i\)-го ученика равен \(a_i\). Не гарантируется, что все уровни навыков учеников различны.

Уровень навыков класса будем считать равным медиане уровней навыков учеников класса.

Как директор школы, вы хотели бы разделить всех учеников на \(2\) класса так, чтобы в каждом классе было нечетное количество учеников (не делящееся на \(2\)). Количества учеников в классах могут быть равными или различными, на ваш выбор. Каждый ученик должен попасть ровно в один класс. Среди таких разделений вы хотите выбрать то, в котором модуль разности между уровнями навыков классов минимален.

Какой минимальный модуль разности вы можете получить?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — деленное на два количество учеников.

Первая строка описания каждого набора входных данных содержит \(2n\) целых чисел \(a_1, a_2, \dots, a_{2 n}\) (\(1 \le a_i \le 10^9\)) — уровни навыков студентов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальный возможный модуль разности между уровнями навыков двух классов нечетных размеров.

Примечание

В первом наборе входных данных примера есть лишь один способ разделить учеников — по одному в классе. Модуль разности уровней навыков будет равен \(|1 - 1| = 0\).

Во втором наборе входных данных примера одним из возможных разделений является такое: сделать первый класс из учеников с уровнями навыков \([6, 4, 2]\), тогда уровень навыков этого класса будет равна \(4\), и второй с \([5, 1, 3]\), тогда уровень навыков этого класса будет равна \(3\). Модуль разности будет равен \(|4 - 3| = 1\).

Заметим, что вы не можете разделить классы так: \([2, 3]\), \([6, 5, 4, 1]\) или \([]\), \([6, 5, 4, 1, 2, 3]\), потому что так классы содержат чётное число учеников.

\([2]\), \([1, 3, 4]\) тоже невозможно, так как студенты с навыками \(5\) и \(6\) не попадут ни в один класс.

В третьем наборе входных данных примера вы можете разделить следующим образом: \([3, 4, 13, 13, 20], [2, 5, 8, 16, 17]\) или \([3, 8, 17], [2, 4, 5, 13, 13, 16, 20]\). Оба разделения дают минимальный возможный модуль разности.

B. День рождения Мотарака

Бинарный поиск жадные алгоритмы Тернарный поиск *1500

Дарк собирается посетить день рождения Мотарака. Дарк решил, что он хочет подарить Мотараку массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Дарк создал этот массив еще \(1000\) лет назад, поэтому некоторые его элементы пропали. Дарк знает, что Мотарак не любит, когда у двух соседних элементов большая абсолютная разница. У него не так много времени, поэтому он хочет выбрать целое число \(k\) (\(0 \leq k \leq 10^{9}\)) и заменить все пропущенные элементы в массиве \(a\) числом \(k\).

Обозначим за \(m\) максимальную абсолютную разницу между всеми парами соседних элементов (то есть максимальное значение \(|a_i - a_{i+1}|\) по всем \(1 \leq i \leq n - 1\)) в массиве \(a\) после того, как Дарк заменит все пропавшие элементы на число \(k\).

Дарк хочет выбрать число \(k\) так, что \(m\) будет минимально. Можете ли вы помочь ему?

Входные данные

Входные данные состоят из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество тестовых случаев. Далее следует описание тестовых случаев в следующем формате.

В первой строке описания каждого тестового случае содержится одно целое число \(n\) (\(2 \leq n \leq 10^{5}\)) — размер массива \(a\).

Во второй строке описания каждого тестового случая содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \leq a_i \leq 10 ^ {9}\)). Если \(a_i = -1\), то \(i\)-е число пропало. Гарантируется, что хотя бы одно число пропало в массиве в каждом тестовом случае.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(4 \cdot 10 ^ {5}\).

Выходные данные

Выведите ответы для каждого тестового случая в следующем формате:

Вы должны вывести два целых числа, минимальное возможное значение \(m\) и целое число \(k\) (\(0 \leq k \leq 10^{9}\)), которое делает максимальную абсолютную разницу между соседними элементами массива \(a\) равной \(m\).

Обратите внимание, что после замены всех пропавших элементов на \(k\) максимальная абсолютная разница между всеми парами соседних элементов должна стать равной \(m\).

Если существует более, чем одно подходящее \(k\), вы можете вывести любое из них.

Примечание

В первом тестовом случае, после замены всех пропавших элементов на \(11\) массив станет равным \([11, 10, 11, 12, 11]\). Абсолютная разница между любой парой соседних элементов равна \(1\). Выбрать такое значение \(k\), чтобы максимальная абсолютная разница между всеми парами соседних элементов стала \(\leq 0\) невозможно, поэтому ответ равен \(1\).

В третьем тестовом случае, после замены всех пропавших элементов массива на \(6\) массив станет равным \([6, 6, 9, 6, 3, 6]\).

  • \(|a_1 - a_2| = |6 - 6| = 0\);
  • \(|a_2 - a_3| = |6 - 9| = 3\);
  • \(|a_3 - a_4| = |9 - 6| = 3\);
  • \(|a_4 - a_5| = |6 - 3| = 3\);
  • \(|a_5 - a_6| = |3 - 6| = 3\).

Поэтому максимальная абсолютная разница между всеми парами соседних элементов будет равна \(3\).

C. Функция Айоуба

Бинарный поиск жадные алгоритмы Комбинаторика математика Строки *1700

Айоуб думает, что он очень умный человек, поэтому он придумал функцию \(f(s)\), где \(s\) это бинарная строка (строка, содержащая только символы «0» и «1»). Функция \(f(s)\) равна количеству подстрок строки \(s\), которые содержат хотя бы один символ, равный «1».

Более формально, \(f(s)\) равно количеству пар целых чисел \((l, r)\), таких что \(1 \leq l \leq r \leq |s|\) (где \(|s|\) равно длине строки \(s\)), таких что хотя бы один из символов \(s_l, s_{l+1}, \ldots, s_r\) равен «1».

Например, если \(s = \)«01010», то \(f(s) = 12\), потому что есть \(12\) таких пар \((l, r)\): \((1, 2), (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 4), (4, 5)\).

Айоуб также думает, что он умнее Махмуда, поэтому дал ему два целых числа \(n\) и \(m\) и следующую задачу. По всем бинарным строкам \(s\) длины \(n\), которые содержат ровно \(m\) символов, равных «1», найдите максимальное значение \(f(s)\).

У Махмуда не получилось решить эту задачу, поэтому он попросил вас о помощи. Можете ли вы помочь ему?

Входные данные

Входные данные состоят из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\))  — количество тестовых случаев. Далее следует описание тестовых случаев в следующем формате.

Единственная строка для каждого тестового случая содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^{9}\), \(0 \leq m \leq n\)) — длина строки и количество символов, равных «1» в ней.

Выходные данные

Для каждого тестового случая выведите единственное целое число — максимальное значение \(f(s)\) по всем строкам \(s\) длины \(n\), которые содержат ровно \(m\) символов, равных «1».

Примечание

В первом тестовом случае, существует только \(3\) строки длины \(3\), которые содержат ровно \(1\) символ, равный «1». Эти строки это: \(s_1 = \)«100», \(s_2 = \)«010», \(s_3 = \)«001». Значения \(f\) для них это: \(f(s_1) = 3, f(s_2) = 4, f(s_3) = 3\), поэтому максимальное значение это \(4\) и ответ равен \(4\).

Во втором тестовом случае, строка \(s\) для которой максимальное значение функции это «101».

Во третьем тестовом случае, строка \(s\) для которой максимальное значение функции это «111».

В четвертом тестовом случае, единственная строка \(s\) длины \(4\), которая содержит ровно \(0\) символов, равных «1» это «0000» и значение функции \(f\) для этой строки это \(0\), поэтому ответ равен \(0\).

В пятом тестовом случае, строка \(s\) с максимальным значением функции это «01010» и она была подробно разобрана в качестве примера в тексте условия задачи.

C. Идеальная клавиатура

жадные алгоритмы поиск в глубину и подобное реализация *1600

Поликарп хочет собрать свою собственную клавиатуру. Клавиатуры с несколькими рядами слишком сложны для него, его клавиатура будет состоять только из одного ряда, где все \(26\) строчных латинских букв будут расположены в определенном порядке.

Поликарп использует один и тот же пароль \(s\) на всех сайтах, где он зарегистрирован (это плохо, но ему все равно). Он хочет собрать клавиатуру, которая позволит набирать этот пароль очень легко. Он не любит двигать пальцами при вводе пароля, поэтому для каждой пары соседних символов в \(s\) они должны быть соседними на клавиатуре. Например, если пароль abacaba, то клавиатура cabdefghi... идеальна, так как символы a и c соседние на клавиатуре, и a и b соседние на клавиатуре.

Гарантируется, что в \(s\) нет двух соседних одинаковых символов, поэтому, например, password не может быть паролем (два символа s являются соседними).

Можете ли вы помочь Поликарпу с выбором идеальной клавиатуры, если это возможно?

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 1000\)) — количество наборов тестовых данных.

Затем следуют \(T\) наборов тестовых данных, каждый из которых содержит одну строку \(s\) (\(1 \le |s| \le 200\)). \(s\) состоит только из строчных латинских букв. В \(s\) нет двух соседних одинаковых символов.

Выходные данные

Для каждого набора входных данных выведите результат в следующем виде:

  • если невозможно собрать идеальную клавиатуру, выведите NO (в верхнем регистре, это имеет значение в этой задаче);
  • в противном случае выведите YES (в верхнем регистре), а затем строку, состоящую из \(26\) строчных латинских букв — идеальную клавиатуру. Каждая латинская буква должна появиться в этой строке ровно один раз. Если ответов несколько, выведите любой из них.

D. Заполни сумку

битмаски жадные алгоритмы *1900

У вас есть сумка размера \(n\). Так же у вас есть \(m\) коробок. Размер \(i\)-й коробки \(a_i\), где \(a_i\) — целая неотрицательная степень двойки.

Вы можете делить коробки на две части одинакового размера. Ваша задача — полностью заполнить сумку.

Например, если \(n = 10\) и \(a = [1, 1, 32]\), то вам нужно разделить коробку размера \(32\) на две части размера \(16\), а затем разделить коробку размера \(16\). Таким образом, вы сможете заполнить сумку коробками размеров \(1\), \(1\) и \(8\).

Посчитайте минимальное количество делений, которое придется сделать для заполнения сумки размера \(n\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(m\) (\(1 \le n \le 10^{18}, 1 \le m \le 10^5\)) — размер сумки и количество коробок, соответственно.

Вторая строка каждого набора входных данных содержит \(m\) чисел \(a_1, a_2, \dots , a_m\) (\(1 \le a_i \le 10^9\)) — размеры коробок. Гарантируется, что все \(a_i\) — степени двойки.

Также гарантируется, что сумма всех \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите число — минимальное количество делений, которые придется сделать для заполнения сумки размера \(n\) (или \(-1\), если заполнить сумку невозможно).

B. Самый длинный палиндром

жадные алгоритмы Конструктив Перебор реализация Строки *1100

Вернувшись к решению задач, Гильдонг взялся за изучение палиндромов. Он выяснил, что палиндром это строка, которая равна своему перевороту. Например, строки «pop», «noon», «x», и «kkkkkk» являются палиндромами, а строки «moon», «tv», и «abab» не являются. Пустая строка также является палиндромом.

Гильдонгу очень понравился этот концепт, так что он решил немного с ним поиграть. У него есть \(n\) различных строк равной длины \(m\). Он хочет удалить некоторые из этих строк (возможно, ни одну, или все) и переставить оставшиеся, чтобы их конкатенация была палиндромом. Он также хочет, чтобы палиндром был как можно длиннее. Помогите ему решить эту задачу!

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 50\)) — количество строк и длина каждой строки.

В следующих \(n\) строках записаны строки длины \(m\), состоящие только из строчных букв латинского алфавита. Все данные строки различны.

Выходные данные

В первую строку выведите длину наибольшего палиндрома.

Во вторую строку выведите искомый палиндром. Если есть несколько возможных ответов, выведите любой. Если палиндром пуст, то можете как вывести пустую строку, так и не выводить эту строку вообще.

Примечание

В первом примере «battab» также является корректным ответом.

Во втором примере есть 4 разных возможных корректных ответа, включая ответ из примера. Мы не будем давать никаких подсказок, какими являются остальные ответы.

В третьем примере единственная возможная строка — пустая.

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\)-го посетителя.

Во втором и четвертом наборах входных данных примера Гильдонгу придется оставить хотя бы одного посетителя неудовлетворенным.

D. Короткая и длинная НВП

графы жадные алгоритмы Конструктив *1800

Гильдон недавно научился искать Наибольшую Возрастающую Подпоследовательность (НВП) за \(O(n\log{n})\) для последовательности длины \(n\). Он решил проверить себя, может ли он реализовать этот алгоритм корректно, но он не смог найти эту задачу ни в одном архиве (ни смотря на то, что на самом деле, она есть во многих). Так что вместо этого он решил загадать вам загадку на построение последовательности из \(n\) различных целых чисел от \(1\) до \(n\), включительно, чтобы протестировать своим кодом ваш ответ.

Опишем загадку.

Гильдонг дает вам строку длины \(n-1\), состоящую только из символов '<' и '>'. \(i\)-й (в 1-индексации) символ это результат сравнения \(i\)-го и \(i+1\)-го элемента последовательности. Если \(i\)-й символ строки это '<', тогда \(i\)-й элемент последовательности меньше чем \(i+1\)-й. Иначе, \(i\)-й символ строки '>', и \(i\)-й элемент последовательности больше чем \(i+1\)-й элемент.

Он просит вас найти два возможные последовательности (не обязательно различных) состоящих из \(n\) различных целых чисел от \(1\) до \(n\), включительно, что обе последовательности удовлетворяют всем результатам сравнения, и длина НВП первой последовательности минимально возможная, а длина НВП второй последовательности максимально возможная.

Входные данные

Каждый тест состоит из одного или более тестовых случаев. В первой строке записано количество тестовых случаев \(t\) (\(1 \le t \le 10^4\)).

Каждый тестовый случай состоит из ровно одной строки, состоящей из целого числа и строки, состоящей только из символов '<' и '>'. Целое число это \(n\) (\(2 \le n \le 2 \cdot 10^5\)), длина перестановки, которую вам нужно найти. Строка это результаты сравнений, описанных в условии. Длина строки равна \(n-1\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая, выведите две строки, по \(n\) целых чисел в каждой. Первая строка должна содержать последовательность с минимальной НВП, а вторая строка последовательность с максимальным НВП. Если есть несколько возможных ответов, вы можете вывести любой. Каждая последовательность должна содержать все целые числа от \(1\) до \(n\), включительно, и должна удовлетворять всем результатам сравнения.

Можно показать, что всегда найдется хотя бы один ответ.

Примечание

В первом тестовом случае, \(1\) \(2\) \(3\) это единственный возможный ответ.

Во втором тестовом случае, наименьшая длина НВП это \(2\), а наибольшая это \(3\). Для примера с наибольшей НВП, \(4\) '\(3\)' \(1\) \(7\) '\(5\)' \(2\) '\(6\)'может быть одной из возможных НВП.

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:

A. Курони и подарки

жадные алгоритмы Конструктив Перебор сортировки *800

У Курони есть \(n\) дочерей. В качестве подарков им он купил \(n\) ожерелий и \(n\) браслетов:

  • \(i\)-е ожерелье имеет яркость \(a_i\), где все \(a_i\) попарно различны (то есть все \(a_i\) имеют различные значения);
  • \(i\)-й браслет имеет яркость \(b_i\), где все \(b_i\) попарно различны (то есть все \(b_i\) имеют различные значения).

Курони хочет дать ровно одно ожерелье и ровно один браслет каждой из своих дочерей. Чтобы все они выглядели уникально, общие яркости обоих подарков, вручаемых каждой дочери, должны быть попарно различными. Формально, если \(i\)-я дочь получает ожерелье с яркостью \(x_i\) и браслет с яркостью \(y_i\), то суммы \(x_i + y_i\) должны быть попарно различными. Помогите Курони раздать подарки.

Например, если яркости равны \(a = [1, 7, 5]\) и \(b = [6, 1, 2]\), то мы можем распределить подарки следующим образом:

  • Дать третье ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_3 + b_1 = 11\).
  • Дать первое ожерелье и третий браслет второй дочери, чтобы получить общую яркость \(a_1 + b_3 = 3\).
  • Дать второе ожерелье и второй браслет третьей дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).

А вот пример неправильного распределения:

  • Дать первое ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_1 + b_1 = 7\).
  • Дать второе ожерелье и второй браслет второй дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).
  • Дать третье ожерелье и третий браслет третьей дочери, чтобы получить общую яркость \(a_3 + b_3 = 7\).

Это распределение неправильное, так как общие яркости подарков, полученных первой и третьей дочерью равны. Не расстраивайте их так!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\))  — количество дочерей, ожерелий, и браслетов.

Вторая строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\))  — яркости ожерелий.

Третья строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 1000\))  — яркости браслетов.

Выходные данные

Для каждого набора входных данных в первой строке выведите \(n\) целых чисел \(x_1, x_2, \dots, x_n\), обозначающих, что \(i\)-я дочь получит ожерелье с яркостью \(x_i\). Во второй строке выведите \(n\) целых чисел \(y_1, y_2, \dots, y_n\), обозначающих, что \(i\)-я дочь получит браслет с яркостью \(y_i\).

Суммы \(x_1 + y_1, x_2 + y_2, \dots, x_n + y_n\) должны быть попарно различными. Числа \(x_1, \dots, x_n\) должны быть равны числам \(a_1, \dots, a_n\) в каком-то порядке, а числа \(y_1, \dots, y_n\) должны быть равны числам \(b_1, \dots, b_n\) в каком-то порядке.

Можно показать, что решение всегда существует. Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных достаточно дать \(i\)-е ожерелье и \(i\)-й браслет \(i\)-й дочери. Соответствующие суммы будут равняться \(1 + 8 = 9\), \(8 + 4 = 12\), и \(5 + 5 = 10\).

Второй набор входных данных описан в условии.

B. Курони и простые строки

жадные алгоритмы Конструктив Строки *1200

Теперь, когда Курони исполнилось 10 лет, он большой мальчик и больше не любит массивы целых чисел в качестве подарков. В этом году он хочет получить скобочную последовательность в качестве подарка на день рождения. В частности, он хочет, чтобы последовательность скобок была настолько сложной, что, как бы он ни старался, он не сможет удалить простую подпоследовательность!

Назовем строку, образованную \(n\) символами '(' или ')' простой, если ее длина \(n\) четна и положительная, ее первые \(\frac{n}{2}\) символов  — это '(', а ее последние \(\frac{n}{2}\) символов  — это ')'. Например, строки () и (()) являются простыми, в то время как строки )( и ()() не являются простыми.

Курони будет дана строка, образованная символами '(' и ')' (заданная строка не обязательно является простой). Операция состоит из выбора подпоследовательности символов строки, которая образует простую строку, и удаления всех символов этой подпоследовательности из строки. Заметьте, символы подпоследовательности не обязаны идти подряд. К примеру, он может применить операцию к строке ')()(()))', выбрать подпоследовательность из выделенных жирным шрифтом символов, так как они формируют простую строку '(())', удалить эти символы с строки и получить '))()'.

Курони должен выполнить минимально возможное количество операций над строкой таким образом, чтобы с оставшейся строкой больше нельзя было выполнить ни одной операции. Результирующая строка не обязана быть пустой.

Поскольку заданная строка слишком велика, Курони не может понять, как минимизировать количество операций. Можете ли вы помочь ему сделать это?

Последовательность символов \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Единственная строка ввода содержит строку \(s\) (\(1 \le |s| \le 1000\)), образованную символами '(' и ')', где \(|s|\) — длина строки \(s\).

Выходные данные

В первой строке выведите единственное целое число \(k\)  — минимальное количество операций, которые вы должны применить. Затем выведите \(2k\) строк, описывающих операции в следующем формате:

Для каждой операции выведите строку, содержащую целое число \(m\)  — количество символов в подпоследовательности, которую вы удалите.

Затем выведите строку, содержащую \(m\) целых чисел \(1 \le a_1 < a_2 < \dots < a_m\)  — индексы символов, которые вы удалите. Все целые числа должны быть меньше или равны длине текущей строки, а соответствующая подпоследовательность должна образовывать простую строку.

Если существует несколько различных последовательностей операций с минимальным \(k\), вы можете вывести любую из них.

Примечание

В первом примере строка равна '(()(('. Описанная операция соответствует удалению выделенной жирным шрифтом подпоследовательности. Получившаяся строка равна '(((', и над ней больше нельзя выполнить ни одну операцию. Другой правильный ответ  — это выбор индексов \(2\) и \(3\), что приводит к той же самой конечной строке.

Во втором примере уже невозможно выполнить ни одну операцию.

E. Курони и разбалловка

жадные алгоритмы Конструктив математика реализация *2200

Курони является координатором следующего раунда Mathforces, написанного командой «Proof by AC». Вся подготовка позади, и он обсуждает с командой распределение баллов за раунд.

Раунд состоит из \(n\) задач, пронумерованных от \(1\) до \(n\). Задачи упорядочены в порядке возрастания сложности, никакие две задачи не имеют одинаковую сложность. Распределение баллов за раунд можно обозначить массивом \(a_1, a_2, \dots, a_n\), где \(a_i\)  — баллы за \(i\)-ю задачу.

Курони считает, что распределение очков должно удовлетворять следующим требованиям:

  • Балл за каждую задачу должен быть положительным целым числом, не превышающим \(10^9\).
  • Более сложная задача должна стоит больше баллов, чем более простая. Другими словами, \(1 \leq a_1 < a_2 < \dots < a_n \leq 10^9\)..
  • Баланс распределения баллов, определяемый как количество троек \((i, j, k)\), таких, что \(1 \leq i < j < k \leq n\) и \(a_i + a_j = a_k\), должен быть равен ровно \(m\).

Помогите команде найти распределение баллов, которое удовлетворяет требованиям Курони. Если такого распределения баллов не существует, выведите \(-1\).

Входные данные

Первая и единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(0 \leq m \leq 10^9\))  — количество задач и требуемый баланс.

Выходные данные

Если решения не существует, выведите единственное целое число \(-1\).

В противном случае выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\), представляющие распределение баллов, которое удовлетворяет всем требованиям. Если есть несколько решений, выведите любой из них.

Примечание

В первом примере следующие \(3\) тройки \((i, j, k)\) вносят вклад в баланс распределения баллов.

  • \((1, 2, 3)\)
  • \((1, 3, 4)\)
  • \((2, 4, 5)\)

H. Курони, частный репетитор

Бинарный поиск жадные алгоритмы *3500

Как профессиональный частный репетитор, Курони должен собирать статистику экзамена. Курони назначил вас для выполнения этой важной задачи. Вы не должны разочаровывать его.

Экзамен состоит из \(n\) вопросов, и \(m\) студентов сдали экзамен. За каждый вопрос давали \(1\) балл. Вопрос \(i\) был решен не менее \(l_i\) и не более \(r_i\) студентами. Кроме того, вы знаете, что общий балл всех студентов составляет \(t\).

Кроме того, вы взглянули на окончательный рейтинг в викторине. Студенты были оценены от \(1\) до \(m\), где ранг \(1\) имеет самый высокий балл, а ранг \(m\)  — самый низкий балл. В случае равенства количества баллов студенты были упорядочены произвольно.

Вы знаете, что ученик с рангом \(p_i\) получил оценку \(s_i\) для \(1 \le i \le q\).

Вы задались вопросом, могло ли много студентов не поделить первое место. Помогите Курони определить максимальное количество студентов, которые могли набрать столько же баллов, сколько студент с рангом \(1\), и максимально возможное количество баллов для ранга \(1\) при достижении этого максимального числа студентов.

Входные данные

Первая строка ввода содержит два целых числа (\(1 \le n, m \le 10^{5}\)), обозначающих количество вопросов экзамена и количество студентов соответственно.

Каждая из следующих \(n\) строк содержит по два целых числа, причем \(i\)-я строка содержит \(l_{i}\) и \(r_{i}\) (\(0 \le l_{i} \le r_{i} \le m\)).

Следующая строка содержит одно целое число \(q\) (\(0 \le q \le m\)).

Каждая из следующих \(q\) строк содержит по два целых числа, обозначающих \(p_{i}\) и \(s_{i}\) (\(1 \le p_{i} \le m\), \(0 \le s_{i} \le n\)). Гарантируется, что все \(p_{i}\) различны, и если \(p_{i} \le p_{j}\), то \(s_{i} \ge s_{j}\)

Последняя строка содержит единственное целое число \(t\) (\(0 \le t \le nm\)), обозначающее общий балл всех студентов.

Выходные данные

Выведите два целых числа: максимальное количество студентов, которые могли набрать столько же баллов, сколько студент с рангом \(1\), и максимально возможное количество баллов для ранга \(1\) при достижении этого максимального числа студентов. Если не существует допустимого расположения, подходящего для данных, выведите \(-1\) \(-1\).

Примечание

Вот один из возможных вариантов для первого примера:

Студенты \(1\) и \(2\) оба решили задачи \(1\) и \(2\).

Студент \(3\) решил задачи \(2\) и \(3\).

Студент \(4\) решил задачу \(4\).

Общая оценка всех студентов составляет \(T = 7\). Обратите внимание, что баллы студентов равны \(2\), \(2\), \(2\) и \(1\) соответственно, что удовлетворяет условию, что ученик с рангом \(4\) получает ровно \(1\) балл. Наконец, \(3\) студента получили максимальный счет \(2\), и можно доказать, что мы не можем добиться большего количества.

A. Корова и стоги сена

жадные алгоритмы реализация *800

Организация USA Construction Operation (USACO) недавно приказала Фермеру Джону разместить у себя на ферме \(n\) стогов сена в ряд. При чем \(i\)-й стог сена состоит из \(a_i\) тюков сена.

Однако недавно Фермер Джон уехал на отдых, оставив Бесси саму по себе. Каждый день Бесси, озорная корова, может выбрать один тюк из любого непустого стога и переместить его в соседний стог. Формально, за один день она может выбрать два любых индекса \(i\) и \(j\) (\(1 \le i, j \le n\)) таких, что \(|i-j|=1\) и \(a_i>0\) и применить \(a_i = a_i - 1\), \(a_j = a_j + 1\). Она также может решить ничего не делать в некоторые дни, потому что Бесси ленивая.

Бесси хочет максимизировать количество тюков в \(1\)-м стоге (то есть максимизировать \(a_1\)), и у нее есть только \(d\) дней до того как вернется Фермер Джон. Помогите ей определить максимальное количество тюков в \(1\)-м стоге, если Бесси будет действовать оптимально!

Входные данные

Входные данные содержат несколько наборов входных данных. В первой строке задано единственное число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов  — по две строки на набор.

В первой строке каждого набора входных данных задано два целых числа \(n\) и \(d\) (\(1 \le n,d \le 100\)) — количество стогов сена и количество оставшихся дней, соответственно.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\))  — количество тюков в каждом стоге.

Выходные данные

Для каждого набора входных данных выведите единственное число: максимальное количество тюков, которые можно получить в \(1\)-м стоге через \(d\) дней, если Бесси будет действовать оптимально.

Примечание

Для первого набора входных данных из примера, ниже описан один из возможных способов получить \(3\) тюка в стоге \(1\):

  • В первых день, перенести тюк из стога \(3\) в стог \(2\).
  • Во второй день, перенести тюк из стога \(3\) в стог \(2\).
  • В третий день, перенести тюк из стога \(2\) в стог \(1\).
  • В четвертый день, перенести тюк из стога \(2\) в стог \(1\).
  • В пятый день, ничего не делать.

Во втором наборе, Бесси может ничего не делать в первый день и перенести тюк из стога \(2\) в стог \(1\) на второй день.

B. Корова и друг

геометрия жадные алгоритмы математика *1300

У Бесси действительно много друзей, потому что она — всеми любимая корова! Ее новый друг Кролик пытается допрыгать до Бесси, чтобы поиграть вместе!

Точнее, он хочет попасть из \((0,0)\) в \((x,0)\), сделав несколько прыжков. Он готов прыгнуть из одной точки в другую на плоскости только если евклидово расстояние между этими точками равно одному из \(n\) его любимых чисел: \(a_1, a_2, \ldots, a_n\). За какое минимальное количество прыжков Кролик сможет добраться из \((0,0)\) в \((x,0)\)? Кролик может приземляться, в том числе, и в точки с нецелочисленными координатами. Можно доказать, что Кролик всегда может достигнуть точки назначения.

Напомним, что евклидово расстояние между точками \((x_i, y_i)\) и \((x_j, y_j)\) равно \(\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}\).

Например, если любимые числа Кролика — это \(1\) и \(3\), то он может добраться из \((0,0)\) в \((4,0)\) за два прыжка (как показано ниже). Заметим, что существуют и другие способы добраться до \((4,0)\) за \(2\) прыжка (например, \((0,0)\) \(\rightarrow\) \((2,-\sqrt{5})\) \(\rightarrow\) \((4,0)\)).

Изображение соответствует первому набору входных данных из примера. Длина обоих прыжков равна \(3\), одному из любимых чисел Кролика.

Таким образом, перед каждым прыжком Кролик выбирает одно из чисел \(a_i\) и прыгает из текущей точки на расстояние ровно \(a_i\) в произвольном направлении. Одно и то же число он может выбирать любое количество раз.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных. В следующих \(2t\) строках заданы сами наборы  — по две строки на набор.

В первой строке каждого набора задано два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5\), \(1 \le x \le 10^9\))  — количество любимых чисел и расстояние, которое необходимо преодолеть Кролику соответственно.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\))  — любимые числа Кролика. Гарантируется, что все любимые числа различны.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число  — минимальное необходимое количество прыжков.

Примечание

Первый набор изображен на рисунке выше. Кролик может прыгнуть сначала в \((2,\sqrt{5})\), а потом в \((4,0)\) — суммарно два прыжка. Каждый прыжок имеет длину \(3\) — одно из его любимых чисел.

Во втором наборе, одним из способов добраться за \(3\) прыжка является: \((0,0)\) \(\rightarrow\) \((4,0)\) \(\rightarrow\) \((8,0)\) \(\rightarrow\) \((12,0)\).

В третьем наборе, Кролик может прыгнуть из \((0,0)\) в \((5,0)\).

В четвертом наборе, Кролик может прыгать так: \((0,0)\) \(\rightarrow\) \((5,10\sqrt{2})\) \(\rightarrow\) \((10,0)\).

D. Корова и поля

Бинарный поиск графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное сортировки Структуры данных *1900

Бесси пасется на ферме, состоящей из \(n\) полей, соединенных с помощью \(m\) двусторонних дорог. Сейчас она находится на поле \(1\), и вернется домой на поле \(n\) в конце дня.

Кор-федерация Коровников приказала Фермеру Джону построить одну дополнительную двустороннюю дорогу. У фермы есть \(k\) особых полей, и было решено построить дорогу между двумя различными особыми полями. Фермер Джон может построить дорогу даже между полями, которые уже соединены дорогой.

Уже после постройки дороги, Бесси вернется по кратчайшему пути от поля \(1\) к полю \(n\). Так как Бесси нужно больше тренироваться, Фермер Джон должен максимизировать длину данного кратчайшего пути. Помогите ему!

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(n-1 \le m \le 2 \cdot 10^5\), \(2 \le k \le n\))  — количество полей на ферме, количество дорог и количество особых полей.

Во второй строке заданы \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\))  — номера особых полей. Все \(a_i\) различны.

В \(i\)-й из следующих \(m\) строк задано два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)), описывающих двустороннюю дорогу между полями \(x_i\) и \(y_i\).

Гарантируется, что из любого поля можно добраться до любого другого поля. Также гарантируется, что для любой пары полей существует не более одной дороги, непосредственно соединяющей их.

Выходные данные

Выведите единственное число  — максимально возможную длину кратчайшего пути из \(1\) в \(n\) после того, как Фермер Джон построит одну дорогу оптимально.

Примечание

Граф из первого примера изображен ниже. Особые поля отмечены красным. Для Фермера Джона оптимально построить дорогу между полями \(3\) и \(5\), тогда кратчайший путь из \(1\) в \(5\) будет равен \(3\).

Граф из второго примера изображен ниже. Фермер Джон должен построить дорогу между полями \(2\) и \(4\), тогда кратчайший путь из \(1\) в \(5\) будет равен \(3\).

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\) стоит слева.

В четвертом примере, Фермер Джон не может получить ни одной спящей коровы, а потому не будет ни одной коровы стоящей с какой-либо стороны.

A. Рекомендации

жадные алгоритмы сортировки Структуры данных *1700

Рекомендации новостей ВКонтакте ежедневно подбирают для каждого пользователя интересные публикации из \(n\) категорий. Каждая публикация принадлежит ровно к одной категории. Алгоритм массовых рекомендаций позволяет подобрать \(a_i\) новостей \(i\)-й категории.

Результаты последнего A/B теста показали, что пользователи активнее читают рекомендованные новости, если ни в каких двух категориях не рекомендовано одинаковое количество новостей. Алгоритм одиночного поиска рекомендуемой новости конкретной категории позволяет найти одну новость категории \(i\) за \(t_i\) секунд. Сколько минимально суммарно времени понадобится для того, чтобы добавить новости к уже сформированным алгоритмом массовых рекомендаций публикациям так, чтобы ни в каких двух категориях не было равное количество новостей? Уже подготовленные рекомендации нельзя исключить из предлагаемых пользователю.

Входные данные

В первой строке дано одно целое число \(n\) — количество категорий публикаций (\(1 \le n \le 200\,000\)).

Во второй строке даны \(n\) целых чисел \(a_i\) — количество публикаций \(i\)-го типа, подобранных алгоритмом массовых рекомендаций (\(1 \le a_i \le 10^9\)).

В третьей строке даны \(n\) целых чисел \(t_i\) — время работы алгоритма одиночного поиска рекомендуемой новости \(i\)-й категории (\(1 \le t_i \le 10^5)\).

Выходные данные

Выведите одно целое число — минимальное суммарное время работы алгоритма одиночного поиска.

Примечание

В первом тестовом примере можно добавить три публикации второго типа, на поиск которых уйдет 6 секунд.

Во втором тестовом примере все категории новостей уже содержат разное количество публикаций.

A. Прибавить нечетное или вычесть четное

жадные алгоритмы математика реализация *800

Вам дано два положительных целых числа \(a\) и \(b\).

За один ход вы можете изменить \(a\) следующим образом:

  • Выбрать любое положительное нечетное целое число \(x\) (\(x > 0\)) и заменить \(a\) на \(a+x\);
  • выбрать любое положительное четное целое число \(y\) (\(y > 0\)) и заменить \(a\) на \(a-y\).

Вы можете применить любое количество таких операций. Вы можете использовать одинаковые значение \(x\) и \(y\) в различных ходах.

Ваша задача — найти минимальное число ходов, необходимое, чтобы получить \(b\) из \(a\). Гарантируется, что вы всегда можете получить \(b\) из \(a\).

Вам требуется ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют \(t\) наборов входных данных. Каждый набор представлен в виде двух целых чисел \(a\) и \(b\), разделенных пробелом (\(1 \le a, b \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него — минимальное число ходов, необходимое, чтобы получить \(b\) из \(a\), если вы можете применить любое количество операций, описанных в условии. Гарантируется, что вы всегда можете получить \(b\) из \(a\).

Примечание

В первом наборе входных данных можно просто добавить \(1\).

Во втором наборе входных данных ничего делать не нужно.

В третьем наборе входных данных можно добавить \(1\) дважды.

В четвертом наборе входных данных можно вычесть \(4\) и добавить \(1\).

В пятом наборе входных данных можно просто вычесть \(6\).

A. Два правильных многоугольника

геометрия жадные алгоритмы математика теория чисел *800

Вам задано два целых числа \(n\) и \(m\) (\(m < n\)). Рассмотрим выпуклый правильный многоугольник на \(n\) вершинах. Напомним, что правильный многоугольник — это многоугольник, у которого все углы равны между собой и все стороны равны между собой.

Примеры выпуклых правильных многоугольников

Ваша задача — узнать, возможно ли построить другой выпуклый правильный многоугольник на \(m\) вершинах такой, что его центр совпадает с центром изначального многоугольника, а каждая его вершина является какой-то вершиной изначального многоугольника.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных.

Следующие \(t\) строк описывают наборы тестовых данных. Каждый набор тестовых данных задан двумя целыми числами \(n\) и \(m\), разделенных пробелом (\(3 \le m < n \le 100\)) — количеством вершин в изначальном многоугольнике и количеством вершин в многоугольнике, который вы хотите построить.

Выходные данные

Выведите ответ на каждый набор тестовых данных — «YES» (без кавычек), если возможно построить другой выпуклый правильный многоугольник на \(m\) вершинах такой, что его центр совпадает с центром изначального многоугольника, а каждая его вершина является какой-то вершиной изначального многоугольника, и «NO» в противном случае.

Примечание
Первый набор тестовых данных из примера

Можно показать, что ответ на второй набор тестовых данных из примера равен «NO».

C. Прибавление степеней

битмаски жадные алгоритмы математика реализация теория чисел Тернарный поиск *1400

Представим следующий алгоритм. Есть массив \(v_1, v_2, \dots, v_n\), изначально заполненный нулями. Несколько раз с массивом проделываются похожие операции — на \(i\)-м шаге (в \(0\)-индексации) вы можете:

  • либо выбрать любую позицию \(pos\) (\(1 \le pos \le n\)) и увеличить \(v_{pos}\) на \(k^i\);
  • либо не выбирать позицию и пропустить шаг.

Вы можете выбирать, как алгоритм ведет себя на каждом шаге и когда он будет остановлен. Вопрос в следующем: можно ли сделать массив \(v\) равным некоторому массиву \(a\) (\(v_j = a_j\) для каждого \(j\)) после некоторого шага?

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных. В следующих \(2T\) строках заданы сами наборы входных данных, по две строки на каждый набор.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 30\), \(2 \le k \le 100\)) — размер массивов \(v\) и \(a\), и число \(k\), используемое в алгоритме.

Во второй строке набора входных данных заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{16}\)) — массив, который вы хотите получить.

Выходные данные

Для каждого набора тестовых данных выведите либо YES (регистр не важен), если можно получить массив \(a\) после некоторого шага, либо NO (регистр не важен), если это невозможно.

Примечание

В первом наборе тестовых данных можно остановить алгоритм до \(0\)-го шага, или не выбирать никакую позицию и остановить алгоритм позже.

Во втором наборе можно прибавить \(k^0\) к \(v_1\) и остановить алгоритм.

В третьем наборе невозможно получить два элемента, равных \(1\), в массиве \(v\).

В пятом наборе можно пропустить \(9^0\) и \(9^1\), прибавить \(9^2\) и \(9^3\) к \(v_3\), пропустить \(9^4\) и, наконец, прибавить \(9^5\) к \(v_2\).

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\).

В третьем и четвертом примере, не возможно применить операцию ни разу.

A. Ресторан быстрого питания

жадные алгоритмы Перебор реализация *900

Устав от скучной работы в офисе, Денис решил открыть ресторан быстрого питания.

В первый день день он приготовил \(a\) порций пельменей, \(b\) стаканов морса и \(c\) блинчиков со сгущённым молоком.

Особенностью ресторана Дениса является процедура заказа еды. Для каждого посетителя Денис сам выбирает набор блюд, который он получит. При выборе набора блюд Денис руководствуется следующими правилами:

  • каждый посетитель получит хотя бы одно блюдо (блюдами считаются пельмени, морс, блинчики со сгущёнкой);
  • каждый посетитель получит не более одной порции пельменей, не более одного стакана морса и не более одного блинчика со сгущённым молоком;
  • все посетители получат разные наборы блюд.

Какое максимальное количество посетителей сможет накормить Денис?

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Каждая из следующих \(t\) строк содержит целые числа \(a\), \(b\), \(c\) (\(0 \leq a, b, c \leq 10\)) — количество порций пельменей, стаканов морса и блинчиков со сгущённым молоком, которые приготовил Денис.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество посетителей, которых сможет накормить Денис.

Примечание

В первом наборе входных данных примера Денис может накормить первого посетителя пельменями, второму посетителю дать стакан морса, а третьему посетителю дать стакан морса и блинчик со сгущёнкой.

Во втором наборе входных данных примера ресторан Дениса не очень перспективен: он не сможет обслужить ни одного клиента.

В третьем наборе входных данных примера Денис сможет обслужить четырёх гостей. Первый гость получит полноценный обед из порции пельменей, стакана морса и блинчика со сгущёнкой. Второй посетитель пообедает пельменями. Третий гость получит блинчик со сгущёнкой, а четвёртый гость получит блинчик и порцию пельменей. Обратите внимание, что Денис использует не все приготовленные продукты, однако не сможет принять больше посетителей.

B. Альтернативные правила

жадные алгоритмы Конструктив математика реализация *1700

Николай только недавно начал заниматься олимпиадным программированием, но уже смог пройти в финал престижной олимпиады. Всего в финале будет \(n\) участников, один из которых Николай. Как и любая хорошая олимпиада, она состоит из двух туров. Уставшие от традиционных правил, в которых участник, решивший наибольшее число задач, побеждает, организаторы придумали альтернативные правила.

Пусть по результатам первого тура участник А занял место \(x\), а по результатам второго — \(y\). Тогда суммарным баллом участника А считается сумма \(x + y\). Итоговое место А определяется как количество участников (включая А), у которых суммарный балл не превосходит суммарный балл А. Обратите внимание, что таким образом некоторые участники могут делить места между собой. Также важно заметить, что и в первом, и во втором туре никакие два участника не поделили место, таким образом для каждого \(i\) от \(1\) до \(n\) ровно один участник занял \(i\)-е место в первом и ровно один участник занял \(i\)-е место во втором туре.

По окончании олимпиады Николаю сообщили, что он занял \(x\)-е место в первом туре, \(y\)-е место во втором. Результаты других участников ему неизвестны. В ожидании результатов олимпиады Николай заинтересовался, какое минимальное и максимальное место он может занять, если рассмотреть самый благоприятный для него результат других участников и самый неблагоприятный. Помогите Николаю найти ответ на этот вопрос.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество тестовых случаев, которое надо решить.

Каждая из следующих \(t\) строк содержит целые числа \(n\), \(x\), \(y\) (\(1 \leq n \leq 10^9\), \(1 \le x, y \le n\)) — число участников олимпиады, место занятое Николаем в первом туре, место занятое Николаев во втором туре.

Выходные данные

Для каждого тестового случая выведите два целых числа — минимальное и максимальное итоговое место, которое может занять Николай.

Примечание

Пояснение к первому тесту:

Пусть было 5 участников A-E. Николая обозначим за А. Тогда наиболее благоприятные для Николая результаты олимпиады могли выглядеть так:

Однако результаты олимпиады могли выглядеть и так:

В первом случае Николай занял бы первое место, во втором — третье.

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]\) также удовлетворяет всем ограничениям, но оптимальным не является.

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\)) он должен ехать на общественном транспорте.

C. Восстановление перестановки

жадные алгоритмы *1200

Вам дана последовательность \(b_1, b_2, \ldots, b_n\). Найдите такую лексикографически минимальную перестановку \(a_1, a_2, \ldots, a_{2n}\), что \(b_i = \min(a_{2i-1}, a_{2i})\), либо определите, что это невозможно.

Входные данные

Каждый тест состоит из одного или более наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)).

В первой строке каждого набора входных данных дано одно целое число \(n\) — количество элементов в последовательности \(b\) (\(1 \le n \le 100\)).

Во второй строке каждого набора дано \(n\) различных целых чисел \(b_1, \ldots, b_n\) — элементы последовательности \(b\) (\(1 \le b_i \le 2n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(100\).

Выходные данные

Для каждого набора входных данных, если не существует подходящей перестановки, выведите одно число \(-1\).

Иначе, выведите для этого набора \(2n\) чисел \(a_1, \ldots, a_{2n}\), являющихся искомой лексикографически минимальной перестановкой чисел от \(1\) до \(2n\).

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}\).

D. Константы на языке Шекспира

дп жадные алгоритмы Конструктив *2100

Shakespeare — известный эзотерический язык, в котором программы имеют вид пьес Шекспира, а числа задаются комбинациями цветистых эпитетов. В этой задаче мы подробнее рассмотрим механизм задания чисел на этом языке.

Любая константа на Shakespeare формируется из неотрицательных степеней двойки при помощи арифметических действий. Для простоты разрешим использовать только сложение и вычитание и будем искать представление заданного числа, которое потребует минимального количества действий.

Задано натуральное число n. Надо представить его в виде n = a1 + a2 + ... + am, где каждой ai — это степень числа 2, взятая со знаком плюс или минус. Найдите такое преставление, что m — минимально.

Входные данные

Единственная строка содержит целое положительное число n, записанное в двоичной системе счисления. Длина заданного числа не превосходит 106. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите искомое минимальное m. Далее выведите m строк. Каждая строка должны иметь вид «+2^x» или «-2^x», где x — это показатель соответствующей степени двойки. Порядок вывода строк не имеет значения.

A. Контест для роботов

жадные алгоритмы *900

Поликарп готовит первый контест по программированию для роботов. В этом контесте \(n\) задач, и большое количество самых разных роботов попробует их решить. Каждый робот, решивший задачу \(i\), получает \(p_i\) баллов, и итоговый результат робота в соревновании считается как сумма \(p_i\) по всем задачам \(i\), которые он решил. Для каждой задачи \(p_i\) — целое число не меньше \(1\).

Две компании, специализирующиеся на робототехнике, «Robo-Coder Inc.» и «BionicSolver Industries», также собираются отправить по одному роботу на соревнование. Поликарп знает все сильные и слабые стороны роботов, производимых этими компаниями, поэтому для каждой задачи он может точно предсказать, какие из этих двух роботов решат ее, а какие — не решат. Зная эту информацию, он может оценить результаты соревнования или повлиять на них.

По какой-то причине (которая совершенно точно никак не связана с подкупом) Поликарп хочет, чтобы робот «Robo-Coder Inc.» выступил лучше, чем робот «BionicSolver Industries». Поликарп хочет выставить баллы за задачи \(p_i\) таким образом, что робот «Robo-Coder Inc.» получит строго больше баллов, чем робот «BionicSolver Industries». Однако если значения \(p_i\) будут большими, то наблюдатели могут что-то заподозрить, поэтому Поликарп хочет минимизировать максимум \(p_i\) по всем задачам. Можете ли вы помочь Поликарпу определить минимально возможное верхнее ограничение на количество баллов за каждую задачу?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — количество задач в контесте.

Во второй строке заданы \(n\) целых чисел \(r_1\), \(r_2\), ..., \(r_n\) (\(0 \le r_i \le 1\)). \(r_i = 1\) означает, что робот «Robo-Coder Inc.» решит \(i\)-ю задачу, \(r_i = 0\) означает, что он не решит \(i\)-ю задачу.

В третьей строке заданы \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) (\(0 \le b_i \le 1\)). \(b_i = 1\) означает, что робот «BionicSolver Industries» решит \(i\)-ю задачу, \(b_i = 0\) означает, что он не решит \(i\)-ю задачу.

Выходные данные

Если роботу «Robo-Coder Inc.» ни при какой разбалловке не удастся набрать больше баллов, чем наберет робот «BionicSolver Industries», выведите одно число \(-1\).

Иначе выведите минимально возможное значение \(\max \limits_{i = 1}^{n} p_i\), при котором можно расставить такие значения \(p_i\), что робот «Robo-Coder Inc.» наберет строго больше баллов, чем робот «BionicSolver Industries».

Примечание

В первом примере одна из возможных разбалловок — следующая: \(p = [3, 1, 3, 1, 1]\). Тогда «Robo-Coder» получит \(7\) баллов, «BionicSolver» — \(6\) баллов.

Во втором примере оба робота получат \(0\) баллов, поэтому разбалловка ни на что не влияет.

В третьем примере оба робота решают все задачи, поэтому разбалловка также ни на что не влияет.

C. Удаление соседних

жадные алгоритмы Конструктив Перебор Строки *1600

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пусть длина \(s\) равна \(|s|\).

За один ход вы можете выбрать любой индекс \(i\) и удалить \(i\)-й символ \(s\) (\(s_i\)), если хотя бы один из его соседних символов является предыдущей буквой в латинском алфавите для \(s_i\). Например, для буквы b предыдущей буквой является a, для буквы s предыдущей букой является r, для буквы a предыдущей буквы не существует. Заметьте, что после каждого удаления длина строки уменьшается на единицу. Таким образом, индекс \(i\) должен удовлетворять условию \(1 \le i \le |s|\) в течение каждого хода.

Соседними символами для символа \(s_i\) являются символы \(s_{i-1}\) и \(s_{i+1}\). Первый и последний символы \(s\) имеют только один соседний символ (за исключением случая \(|s| = 1\)).

Рассмотрим следующий пример. Пусть \(s=\) bacabcab.

  1. В течение первого хода вы можете удалить первый символ \(s_1=\) b, так как \(s_2=\) a. Тогда строка станет равна \(s=\) acabcab.
  2. В течение второго хода вы можете удалить пятый символ \(s_5=\) c, так как \(s_4=\) b. Тогда строка станет равна \(s=\) acabab.
  3. В течение третьего хода вы можете удалить шестой символ \(s_6=\) b, так как \(s_5=\) a. Тогда строка станет равна \(s=\) acaba.
  4. В течение четвертого хода единственным символом, который вы можете удалить, является \(s_4=\) b, так как \(s_3=\) a (или \(s_5=\) a). Строка станет равна \(s=\) acaa, и вы больше не сможете ничего с ней сделать.

Ваша задача — найти максимальное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Входные данные

Первая строка входных данных содержит одно целое число \(|s|\) (\(1 \le |s| \le 100\)) — длину \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую из \(|s|\) строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — максимально возможное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Примечание

Первый тестовый пример разобран в условии задачи. Заметьте, что последовательность ходов, представленная в условии, не является единственной, но можно показать, что максимально возможный ответ на этот тест равен \(4\).

Во втором тестовом примере вы можете удалить все символы \(s\), кроме одного. Единственный возможный ответ описан ниже.

  1. В течение первого хода следует удалить третий символ \(s_3=\) d, \(s\) станет равна bca.
  2. В течение второго хода следует удалить второй символ \(s_2=\) c, \(s\) станет равна ba.
  3. Наконец, в течение третьего хода следует удалить первый символ \(s_1=\) b, \(s\) станет равна a.

A. Интересные конкурсы

жадные алгоритмы *1300

Напомним, что скобочная последовательность называется правильной, если путем вставки в неё символов «+» и «1» можно получить из неё корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Учительница дала классу, в котором учится Дмитрий, очень странное задание — она попросила каждого из учеников придумать последовательность произвольной длины, состоящую только из открывающих и закрывающих скобок. После этого все ученики по очереди называли придуманные ими последовательности. Когда очередь дошла до Димы, он внезапно понял, что у всех его одноклассников получились правильные скобочные последовательности, а получилась ли у него правильная скобочная последовательность, он не знал.

Дима подозревает, что он просто прослушал слово «правильная» в постановке задания, поэтому хочет срочно исправить ситуацию — для этого он решил немного изменить свою последовательность. А именно, он решил произвольное число раз (возможно, нулевое) выполнить операцию перемешивания.

Для выполнения одной операции перемешивания Дима выбирает произвольный подотрезок (подстроку) последовательности и произвольным образом переставляет все символы на нём. Такая операция занимает ровно \(l\) наносекунд, где \(l\) — длина подотрезка, который Дима выбрал для перемешивания. Легко заметить, что при этом число открывающих скобок не меняется, равно как и число закрывающих. Например, для «))((» он может выбрать подотрезок «)(» и перемешать символы в нём, получив «)()(» (эта операция потребует \(2\) наносекунды).

Уже совсем скоро подойдёт очередь Димы называть свою последовательность, поэтому он обратился за помощью к вам. Помогите ему определить минимальное время, за которое он может сделать свою последовательность правильной, или определите, что сделать это невозможно.

Входные данные

В первой строке содержится одно целое число \(n\) (\(1 \le n \le 10^6\)) — длина последовательности Димы.

Вторая строка содержит строку длины \(n\), состоящую только из символов «(» и «)».

Выходные данные

Выведите единственное число — минимальное количество наносекунд, необходимое, чтобы сделать последовательность правильной, или «-1», если сделать последовательность правильной с помощью операций перемешивания невозможно.

Примечание

В первом примере можно сначала перемешать подотрезок с первого по четвёртый символ, заменив его на «()()» — получится последовательность «()()())(», а затем перемешать подотрезок с седьмого по восьмой символ, заменив его на «()». В итоге получится правильная скобочная последовательность «()()()()», такие действия займут суммарно \(4 + 2 = 6\) наносекунд.

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\), то есть чётна.

Во втором наборе входных данных существует только одно непустое подмножество элементов массива, состоящее из первого элемента. В этом подмножестве сумма нечётна, таким образом ответа не существует.

В третьем наборе входных данных подмножество, состоящее из всех элементов массива, имеет чётную сумму.

B. Посчитай подпрямоугольники

Бинарный поиск жадные алгоритмы реализация *1500

Дан массив \(a\) длины \(n\) и массив \(b\) длины \(m\), оба состоящие из чисел \(0\) и \(1\). Рассмотрим матрицу \(c\) размера \(n \times m\), построенную по следующему правилу: \(c_{i, j} = a_i \cdot b_j\) (то есть \(a_i\), умноженное на \(b_j\)). Несложно заметить, что \(c\) также состоит только из нулей и единиц.

Сколько подпрямоугольников размера \(k\), состоящих только из единиц, есть в \(c\)?

Подпрямоугольник — это пересечение непрерывного подотрезка строк и непрерывного подотрезка столбцов матрицы. Рассмотрим четыре числа \(x_1, x_2, y_1, y_2\) (\(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le m\)), тогда подпрямоугольник \(c[x_1 \dots x_2][y_1 \dots y_2]\) — это пересечение строк \(x_1, x_1+1, x_1+2, \dots, x_2\) и столбцов \(y_1, y_1+1, y_1+2, \dots, y_2\).

Размер (площадь) подпрямоугольника — это количество элементов матрицы в нём.

Входные данные

В первой строке содержатся три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 40\,000, 1 \leq k \leq n \cdot m\)) — длина массива \(a\), длина массива \(b\) и требуемый размер подпрямоугольников.

Во второй строке содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 1\)) — элементы массива \(a\).

В третьей строке содержатся \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \leq b_i \leq 1\)) — элементы массива \(b\).

Выходные данные

Выведите одно целое число — количество подпрямоугольников в \(c\) размера \(k\), состоящих только из единиц.

Примечание

В первом примере матрица \(c\) такова:

В ней есть \(4\) подпрямоугольника размера \(2\), состоящих только из единиц:

Во втором примере матрица \(c\) такова:

C. Прыгающая лягушка

Бинарный поиск жадные алгоритмы поиск в глубину и подобное реализация Структуры данных *1100

Слева от строки \(s = s_1 s_2 \ldots s_n\), состоящей из \(n\) символов, находится лягушка (точнее, изначально лягушка находится в клетке \(0\)). Каждый символ строки \(s\) — это или 'L', или 'R'. Это значит, что если лягушка находится в \(i\)-й клетке и \(i\)-й символ — это 'L', то она может прыгать только влево. Если лягушка стоит в \(i\)-й клетке и \(i\)-й символ — это 'R', то она может прыгать только вправо. Из клетки \(0\) лягушка может прыгать только вправо.

Заметим, что лягушка может прыгать в одну и ту же клетку дважды и может совершить столько прыжков, сколько ей потребуется.

Лягушка хочет достичь \(n+1\)-й клетки. Лягушка выбирает некоторое целое положительное значение \(d\) перед самым первым прыжком (и потом не может изменить его) и прыгает не более, чем на \(d\) клеток за раз. То есть, если \(i\)-й символ — 'L', то лягушка может прыгнуть в любую клетку из отрезка \([max(0, i - d); i - 1]\), а если \(i\)-й символ — 'R', то лягушка может прыгнуть в любую клетку из отрезка \([i + 1; min(n + 1; i + d)]\).

Лягушка не хочет прыгать слишком далеко, поэтому ваша задача — найти минимальное возможное значение \(d\), при котором лягушка сможет достичь клетки \(n+1\) из клетки \(0\), если будет прыгать не более, чем на \(d\) клеток за раз. Гарантируется, что всегда возможно достичь \(n+1\) из \(0\).

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. \(i\)-й описан строкой \(s\) состоящей из не менее, чем \(1\), и не более, чем \(2 \cdot 10^5\) символов 'L' и 'R'.

Гарантируется, что сумма длин строк по всем наборам входных данных не превосходит \(2 \cdot 10^5\) (\(\sum |s| \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите ответ — минимальное возможное значение \(d\), при котором лягушка может достичь клетки \(n+1\) из клетки \(0\), если будет совершать прыжки длиной не более, чем \(d\).

Примечание

Картинка, описывающая первый набор тестовых данных из примера и один из возможных ответов:

Во втором наборе тестовых данных из примера лягушка может прыгнуть только напрямую из \(0\) в \(n+1\).

В третьем наборе тестовых данных лягушка может выбрать \(d=3\), прыгнуть в клетку \(3\) из клетки \(0\) и затем прыгнуть в клетку \(4\) из клетки \(3\).

В четвертом наборе тестовых данных из примера лягушка может выбрать \(d=1\) и прыгнуть \(5\) раз вправо.

В пятом наборе тестовых данных из примера лягушка может прыгнуть только напрямую из \(0\) в \(n+1\).

В шестом наборе тестовых данных из примера лягушка может выбрать \(d=1\) и прыгнуть \(2\) раза вправо.

A. ЕхАб И нОд

жадные алгоритмы Конструктив теория чисел *800

Вам дано целое положительное число \(x\). Найдите любые такие два \(2\) целые положительные числа \(a\) и \(b\), для которых \(НОД(a,b)+НОК(a,b)=x\).

Напомним, что \(НОД(a,b)\)  — это наибольшее целое число, на которое делятся и \(a\) и \(b\). Аналогично, \(НОК(a,b)\) - это наименьшее целое число, которое делится и на \(a\) и на \(b\).

Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 100)\)  — количество наборов тестовых данных.

Каждый набор тестовых данных состоит из одной строки, содержащей одно целое число, \(x\) \((2 \le x \le 10^9)\).

Выходные данные

Для каждого набора тестовых данных, выведите пару целых положительных чисел \(a\) и \(b\) (\(1 \le a, b \le 10^9)\) таких, что \(НОД(a,b)+НОК(a,b)=x\). Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них.

Примечание

В первом наборе тестовых данных примера, \(НОД(1,1)+НОК(1,1)=1+1=2\).

Во втором наборе тестовых данных примера, \(НОД(6,4)+НОК(6,4)=2+12=14\).

B. КопияКопияКопияКопияКопия

жадные алгоритмы реализация *800

У Ехаба есть массив \(a\) длины \(n\). У него достаточно свободного времени, чтобы создать новый массив, состоящий из \(n\) копий старого массива, записанных последовательно. Чему равна длина самой длинной возрастающей подпоследовательности нового массива?

Последовательность \(a\) является подпоследовательностью массива \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) элементов. Самая длинная возрастающая подпоследовательность массива это самая длинная подпоследовательность, все элементы которой упорядочены в строго возрастающем порядке.

Входные данные

Первая строка содержит целое число \(t\)   — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\))   — количество элементов в массиве \(a\).

Вторая строка содержит \(n\) целых чисел, разделенных пробелом \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(1 \le a_i \le 10^9\))   — элементы массив \(a\).

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите длину самой длинной возрастающей подпоследовательности \(a\), если вы объедините ее с собой \(n\) раз.

Примечание

В первом наборе входных данных примера, новый массив равен \([3,2,\textbf{1},3,\textbf{2},1,\textbf{3},2,1]\). Самая длинная возрастающая подпоследовательность в нем выделена жирным.

Во втором наборе входных данных примера, самая длинная возрастающая подпоследовательность равна \([1,3,4,5,9]\).

C. Ехаб и неПутевые MEXы

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *1500

Вам дано дерево, состоящее из \(n\) вершин. Вы хотите написать какие-то числа на ребрах дерева, чтобы выполнялись следующие условия:

  • Каждое написанное число является целым числом от \(0\) до \(n-2\) включительно.
  • Все написанные числа различны.
  • Наибольшее значение среди \(MEX(u,v)\) среди всех пар вершин \((u,v)\) минимально возможно.

Здесь \(MEX(u,v)\) обозначает наименьшее неотрицательное целое число, которое не записано ни на одном ребре уникального простого пути между вершинами \(u\) и \(v\).

Входные данные

В первой строке записано целое число \(n\) (\(2 \le n \le 10^5\))   — количество узлов в дереве.

Каждая из следующих \(n-1\) строк содержит два разделенных пробелом целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые означают, что между узлами \(u\) и \(v\) есть ребро. Гарантируется, что данный граф является деревом.

Выходные данные

Выведите \(n-1\) целых чисел. \(i\)-е из них должно быть равно числу, записанным на \(i\)-м ребре (в порядке ввода).

Примечание

Дерево с второго примера:

D. Ехаб, XORминатор

битмаски жадные алгоритмы Конструктив теория чисел *1700

Для данных 2 чисел \(u\) и \(v\), найдите самые короткий массив такой, что побитовое исключающее ИЛИ его элементов равно \(u\), а сумма его элементов равна \(v\).

Входные данные

Единственная строка содержит 2 целых числа \(u\) и \(v\) \((0 \le u,v \le 10^{18})\).

Выходные данные

Если нет массива, удовлетворяющего условию, выведите "-1 ". В противном случае:

Первая строка должна содержать одно целое число, \(n\), равное длине нужного массива. Следующая строка должна содержать \(n\) положительных целых чисел, сам массив. Если есть несколько возможных ответов, выведите любой.

Примечание

В первом примере, \(3\oplus 1 = 2\) and \(3 + 1 = 4\). Заметьте, что подходящего массива меньшей длины не существует.

Обратите внимание, что в четвертом примере массив пуст.

F. Последняя теорема Ехаба

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2500

Идет 5555-й год. У вас есть граф, и вы хотите найти длинный цикл и огромный независимый набор просто потому, что можете. Но пока что вы хотите найти хоть одно из двух.

Для связного графа с \(n\) вершинами вы можете или:

  • найти независимое множество с ровно \(\lceil\sqrt{n}\rceil\) вершинами.
  • найти простой цикл длиной не менее \(\lceil\sqrt{n}\rceil\).

Независимое множество  — это множество вершин такое, что никакие две вершины из него не связаны ребром. Простой цикл  — это цикл, который не содержит ни одной вершины дважды. Гарантировано, что вы всегда можете решить хотя бы одну из этих задач.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(5 \le n \le 10^5\), \(n-1 \le m \le 2 \cdot 10^5\))  — количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит два разделенных пробелом целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые означают, что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что граф связен и не содержит никаких петель или двойных ребер.

Выходные данные

Если вы решили решить первую задачу, то в первой строке выведите 1, а затем строку, содержащую \(\lceil\sqrt{n}\rceil\) различных целых чисел, не превышающих \(n\), вершины в желаемом независимом наборе.

Если вы решили решить вторую задачу, то в первой строке выведите 2, затем строку, содержащую одно целое число \(c\), представляющее длину найденного цикла, за которой следует строка, содержащая \(c\) различных целых чисел, не превышающих \(n\)  — вершины в нужном цикле, в порядке, в котором они идут в цикле.

Примечание

В первом примере:

Обратите внимание, что вы можете решить обе задачи, поэтому вывод цикла \(2-4-3-1-5-6\) также является решением.

Во втором примере:

Обратите внимание, что если есть несколько ответов, вы можете вывести любой, поэтому, например, вывод цикла \(2-5-6\) разрешен.

В третьем примере:

C. Разбиения перестановки

жадные алгоритмы Комбинаторика математика *1300

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\) и целое число \(k\), такое что \(1 \leq k \leq n\). Перестановка обозначает, что каждое значение от \(1\) до \(n\) содержится в \(p\) ровно один раз.

Рассмотрим все разбиения этой перестановки на \(k\) отрезков. Формально, такое разбиение это множество отрезков \(\{[l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\}\), такое что:

  • \(1 \leq l_i \leq r_i \leq n\) для всех \(1 \leq i \leq k\).
  • Для всех \(1 \leq j \leq n\) существует ровно один отрезок \([l_i, r_i]\), такой что \(l_i \leq j \leq r_i\).

Два разбиения считаются различными, если существует отрезок, лежащий в одном разбиении, но не лежащий в другом.

Давайте посчитаем значение разбиения \(\sum\limits_{i=1}^{k} {\max\limits_{l_i \leq j \leq r_i} {p_j}}\) для всех возможных разбиений перестановки на \(k\) отрезков. Ваша задача найти максимальное значение разбиения по всем таким разбиениям и количество таких разбиений, значение которых равно максимально возможному. Поскольку второе число может быть слишком большим, вы должны найти его остаток при делении на \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 200\,000\)) — размер перестановки и количество отрезков в разбиениях.

Во второй строке находится \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — данная перестановка.

Выходные данные

Выведите два целых числа — максимальное возможное значение разбиения по всем разбиениям перестановки на \(k\) отрезков и количество таких разбиений, для которых значение равно максимальному возможному значению по модулю \(998\,244\,353\).

Обратите внимание, вы должны найти только второе число по модулю \(998\,244\,353\).

Примечание

В первом тесте, существует только два разбиения при \(k = 2\): \(\{[1, 1], [2, 3]\}\) и \(\{[1, 2], [3, 3]\}\). Для каждого из них значение разбиения равно \(2 + 3 = 5\). Поэтому максимальное возможное значение разбиения это \(5\) и количество разбиений равно \(2\).

Во третьем тесте при \(k = 3\), разбиения, для которых значение равно максимальному возможному это \(\{[1, 2], [3, 5], [6, 7]\}\), \(\{[1, 3], [4, 5], [6, 7]\}\), \(\{[1, 4], [5, 5], [6, 7]\}\), \(\{[1, 2], [3, 6], [7, 7]\}\), \(\{[1, 3], [4, 6], [7, 7]\}\), \(\{[1, 4], [5, 6], [7, 7]\}\). Для всех этих разбиений их значение равно \(7 + 5 + 6 = 18\).

Разбиение \(\{[1, 2], [3, 4], [5, 7]\}\), например, имеет значение \(7 + 3 + 6 = 16\), что меньше чем максимальное возможное, поэтому мы его не считаем.

D2. Префиксно-суффиксный палиндром (усложненная версия)

Бинарный поиск жадные алгоритмы Строки строковые суфф. структуры хэши *1800

Это усложненная версия этой задачи. Различия в ограничениях на сумму длин строк и на количество тестовых случаев. Вы можете делать взломы, только если обе версии этой задачи решены.

Вам дана строка \(s\), состоящая из строчных букв латинского алфавита. Вы должны найти строку \(t\) максимальной длины, которая удовлетворяет следующим условиям:

  • Длина строки \(t\) не превосходит длину строки \(s\).
  • \(t\) является палиндромом, то есть она равна себе перевернутой.
  • Существует две строки \(a\) и \(b\) (возможно пустые), такие что \(t = a + b\) (здесь операция «\(+\)» это конкатенация строк) и \(a\) является префиксом строки \(s\) и \(b\) является суффиксом строки \(s\).
Входные данные

Входные данные содержат несколько тестовых случаев. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестовых случаев. Следующие \(t\) строк описывают тестовые случаи.

Для каждого тестового случая, единственная строка содержит непустую строку \(s\), состоящую из строчных символов латинского алфавита.

Гарантируется, что сумма длин строк по всем тестовым случаям не превосходит \(10^6\).

Выходные данные

Для каждого тестового случая выведите строку максимальной длины, которая удовлетворяет описанным условиям. Если существует несколько решений, вы можете вывести любое.

Примечание

В первом тестовом случае, вся строка \(s = \)«a» удовлетворяет всем условиям.

Во втором тестовом случае, строка «abcdfdcba» удовлетворяет всем условиям, потому что:

  • ее длина равна \(9\), что не превосходит длину строки \(s\), которая равна \(11\);
  • она палиндром;
  • «abcdfdcba» \(=\) «abcdfdc» \(+\) «ba», где строка «abcdfdc» является префиксом строки \(s\) и строка «ba» является суффиксом строки \(s\).

Можно доказать, что невозможно найти более длинную такую строку.

В четвертом тестовом случае, строка «c» это правильный ответ, потому что «c» \(=\) «c» \(+\) «» и это допустимо, потому что по условию строки \(a\) и \(b\) могут быть пустыми. Другой возможный ответ на этот тест это строка «s».

B. Принцессы и принцы

графы жадные алгоритмы Перебор *1200

У короля Берляндии Поликарпа LXXXIV есть \(n\) дочерей. Чтобы показать свою власть соседним королевствам, он хочет выдать своих дочерей замуж за принцев этих королевств. По счастливой случайности других королевств так же \(n\).

Поликарп LXXXIV занумеровал своих дочерей от \(1\) до \(n\) и королевства от \(1\) до \(n\). Дальше для каждой дочери он собрал списки королевств, за принцев которых она хочет выйти замуж.

Поликарп LXXXIV — очень занятой правитель, поэтому он просто жадно находит пару своим дочерям одну за другой.

Для первой дочери он выбирает королевство с наименьшим номером из ее списка и выдает дочь за их принца. Для второй дочери он выбирает королевство с наименьшим номером из ее списка, принц которой еще не женат. Если нет неженатых принцев в списке, то дочь не выходит замуж ни за кого, а Поликарп LXXXIV переходит к следующей дочери. Процесс заканчивается после \(n\)-й дочери.

Например, пусть будет \(4\) дочери и королевства, списки дочерей: \([2, 3]\), \([1, 2]\), \([3, 4]\), \([3]\), соответственно.

В данном случае дочь \(1\) выходит замуж за принца королевства \(2\), дочь \(2\) выходит замуж за принца королевства \(1\), дочь \(3\) выходит замуж за принца королевства \(3\), оставляя дочь \(4\) без возможности выйти замуж за кого-либо.

На самом деле, до начала всех женитьб у Поликарпа LXXXIV есть время убедить одну из своих дочерей, что за принца какого-либо королевства тоже можно выйти замуж. Фактически, это значит, что он может добавить ровно одно королевство в список ровно одной из своих дочерей. Обратите внимание, что данное королевство не должно содержаться в списке данной дочери.

Поликарп LXXXIV хочет увеличить количество женатых пар.

К сожалению, на что у него нет времени, так это на нахождение записи, которую стоит добавить. Если не существует способа увеличить количество женатых пар, то сообщите, что женитьбы уже оптимальны. Иначе найдите такую запись, после добавления которой итоговое количество женатых пар увеличится.

Если существует несколько способов добавить одну запись так, что количество женатых пар увеличится, то выведите любой из них.

Для вашего и нашего удобства мы просим вас ответить на \(t\) независимых наборов тестовых данных.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов тестовых данных.

Затем следуют \(t\) наборов тестовых данных.

В первой строке каждого набора записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество дочерей и количество королевств.

В каждой из следующих \(n\) строк дано описание списка каждой дочери. Первое целое число \(k\) (\(0 \le k \le n\)) — это количество записей в списке \(i\)-й дочери. Затем следуют \(k\) различных чисел \(g_i[1], g_i[2], \dots, g_i[k]\) (\(1 \le g_i[j] \le n\)) — номера королевств в списке в возрастающем порядке (\(g_i[1] < g_i[2] < \dots < g_i[k]\)).

Гарантируется, что суммарное количество дочерей по всем наборам тестовых данных не превосходит \(10^5\).

Также гарантируется, что суммарное количество королевств в списках по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Выведите ответ на каждый тест.

Выведите «IMPROVE» в первой строке, если Поликарп LXXXIV может добавить одно королевство в список одной из его дочерей так, чтобы итоговое количество женатых пар увеличилось. Во второй строке выведите два целых числа — номер дочери и номер королевства, которое Поликарп LXXXIV должен добавить в список данной дочери.

Если существует несколько способов добавить одну запись так, что количество женатых пар увеличится, то выведите любой из них.

В противном случае выведите одно слово «OPTIMAL».

Примечание

Первый набор входных данных изображен на картинке в условии. Добавление четвертого королевства в список четвертой дочери позволит ей выйти замуж за принца четвертого королевства.

Во втором наборе входных данных любая новая запись увеличит количество женатых пар с \(0\) до \(1\).

В третьем и четвертом наборах входных данных не существует способа добавить запись.

В пятом наборе входных данных не существует способа изменить количество женитьб добавлением новой записи.

C. Троичный XOR

жадные алгоритмы реализация *1200

Число называется троичным, если оно содержит только цифры \(0\), \(1\) и \(2\). Например, следующие числа являются троичными: \(1022\), \(11\), \(21\), \(2002\).

Вам задано длинное троичное число \(x\). Первая (самая левая) цифра числа \(x\) гарантированно является \(2\), остальные цифры числа \(x\) могут быть \(0\), \(1\) или \(2\).

Определим троичную операцию XOR \(\odot\) над двумя троичными числами \(a\) и \(b\) (оба имеют длину \(n\)) как число \(c = a \odot b\) длины \(n\), где \(c_i = (a_i + b_i) \% 3\) (где \(\%\) — операция взятия по модулю). Другими словами, сложим соответствующие цифры и возьмем остатки от сумм при делении на \(3\). Например, \(10222 \odot 11021 = 21210\).

Ваша задача — найти такие троичные числа \(a\) и \(b\) (оба длины \(n\) и без лидирующих нулей), что \(a \odot b = x\) и \(max(a, b)\) — минимально возможный.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных. Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^4\)) — длину числа \(x\). Вторая строка набора содержит троичное число \(x\), состоящее из \(n\) цифр \(0, 1\) и \(2\). Гарантируется, что первой цифрой числа \(x\) является \(2\). Также гарантируется, что сумма всех \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\) (\(\sum n \le 5 \cdot 10^4\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него — два троичных числа \(a\) и \(b\) (каждое длины \(n\) и без лидирующих нулей) таких, что \(a \odot b = x\) и \(max(a, b)\) — минимально возможное. Если есть несколько возможных ответов, вы можете вывести любой.

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. Сделай k одинаковых

жадные алгоритмы *2200

Вам задан массив \(a\), состоящий из \(n\) элементов, и целое число \(k \le n\).

Вы хотите получить не менее чем \(k\) одинаковых элементов в массиве \(a\). За один ход вы можете совершить одну из следующих двух операций:

  • Взять один из минимальных элементов в массиве и увеличить его значение на один (более формально, если минимальный элемент в \(a\) равен \(mn\), то вы выбираете такой индекс \(i\), что \(a_i = mn\), и присваиваете \(a_i := a_i + 1\));
  • взять один из максимальных элементов в массиве и уменьшить его значение на один (более формально, если максимальный элемент в \(a\) равен \(mx\), то вы выбираете такой индекс \(i\), что \(a_i = mx\), и присваиваете \(a_i := a_i - 1\)).

Ваша задача — посчитать минимальное количество ходов, необходимое, чтобы получить не менее чем \(k\) одинаковых элементов в массиве.

Входные данные

Первая строка теста содержит два целых числа \(n\) и \(k\) (\(1 \le k \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\).

Выходные данные

Выведите одно целое число — минимальное количество ходов, необходимое, чтобы получить не менее чем \(k\) одинаковых элементов в массиве.

A. Dreamoon любит красить

жадные алгоритмы Конструктив математика реализация *1800

Dreamoon очень любит красить клетки.

Есть ряд из \(n\) клеток. Исходно, все клетки пустые (не содержат никакой цвет). Клетки пронумерованы от \(1\) до \(n\).

Вам дано целое число \(m\) и \(m\) целых чисел \(l_1, l_2, \ldots, l_m\) (\(1 \le l_i \le n\))

Dreamoon совершит \(m\) операций.

В \(i\)-й операции, Dreamoon выберет число \(p_i\) из отрезка \([1, n-l_i+1]\) (включительно) и покрасит все клетки от \(p_i\) до \(p_i+l_i-1\) (включительно) в \(i\)-й цвет. Обратите внимание, что клетки могут быть покрашены несколько раз, в таком случае, клетка будет покрашена в цвет из самой последней операции.

Dreamoon надеется, что после \(m\) операций, все цвета будут встречаться хотя бы один раз и все клетки будут покрашены. Пожалуйста, помогите Dreamoon выбрать \(p_i\) в каждой операции, чтобы удовлетворить всем ограничениям.

Входные данные

В первой строке записаны два целых числа \(n,m\) (\(1 \leq m \leq n \leq 100\,000\)).

Во второй строке записано \(m\) целых чисел \(l_1, l_2, \ldots, l_m\) (\(1 \leq l_i \leq n\)).

Выходные данные

Если невозможно совершить \(m\) операций, чтобы удовлетворить всем ограничениям, выведите «-1» (без кавычек).

Иначе, выведите \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \leq p_i \leq n - l_i + 1\)), после этих \(m\) операций, все цвета должны встречаться хотя бы один раз и все клетки должны быть покрашены.

Если есть несколько возможных решений, вы можете вывести любое.

C. Drazil любит кучи

жадные алгоритмы Конструктив реализация Структуры данных *2400

Drazil очень любит кучи, поэтому он придумал задачу про кучу:

Есть куча на максимум глубины \(h\), реализованная на массиве. Эта куча устроена следующим образом: куча содержит ровно \(2^h - 1\) различных положительных ненулевых целых чисел. Все целые числа различны. Эти числа содержатся в массиве \(a\), в котором элементы пронумерованы от \(1\) до \(2^h-1\). Для всех \(1 < i < 2^h\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Теперь он хочет уменьшить глубину кучи так, чтобы глубина стала \(g\), и куча содержала ровно \(2^g-1\) чисел. Чтобы уменьшить глубину, нужно применить следующую операцию \(2^h-2^g\) раз:

Выбрать индекс \(i\), который содержит элемент, и запустить функцию \(f\) от индекса \(i\):

Обратите внимание, что мы считаем, что если \(a[i]=0\), то индекс \(i\) не содержит элемент.

После всех операций, оставшиеся \(2^g-1\) элементов должны находиться в индексах от \(1\) до \(2^g-1\). Теперь Drazil хочет узнать, какая может быть минимальная сумма оставшихся \(2^g-1\) элементов. Пожалуйста, найдите эту сумму и последовательность вызовов функции, на которой эта сумма достигается.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 70\,000\)): количество наборов входных данных.

Каждый набор входных данных содержит две строки. В первой строке записаны два целых числа \(h\) и \(g\) (\(1 \leq g < h \leq 20\)). Во второй строке записаны \(n = 2^h-1\) различных положительных целых чисел \(a[1], a[2], \ldots, a[n]\) (\(1 \leq a[i] < 2^{20}\)). Для всех \(i\) от \(2\) до \(2^h - 1\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Сумма по всем \(n\) меньше чем \(2^{20}\).

Выходные данные

Для каждого набора входных данных, выведите две строки.

В первой строке вы должны вывести минимальную сумму элементов после уменьшения глубины кучи до \(g\). Вторая строка должна содержать \(2^h - 2^g\) целых чисел \(v_1, v_2, \ldots, v_{2^h-2^g}\). В \(i\)-й операции должна быть вызвана \(f(v_i)\).

E. Dreamoon любит AA

Бинарный поиск жадные алгоритмы *3300

Есть строка длины \(n+1\) из символов 'A' и 'B'. Первый и последний символ в этой строке равны 'A'.

Вам таже дано \(m\) индексов \(p_1, p_2, \ldots, p_m\)\(0\)-индексации), описывающих другие позиции символов 'A' в строке.

Обозначим минимальное расстояние между соседними буквами 'A' за \(l\), а максимальное расстояние между соседними 'A' за \(r\).

Например, \((l,r)\) строки "ABBAABBBA" равно \((1,4)\).

Обозначим за степень баланса строки величину \(r-l\).

Теперь Dreamoon хочет изменить ровно \(k\) символов 'B' на 'A', и он хочет сделать степень баланса строки как можно меньше.

Пожалуйста, найдите минимальное возможное значение степени баланса.

Входные данные

В первой строке записано одно целое число \(t\), содержащее количество наборов входных данных (\(1 \leq t \leq 400\,000\)).

В каждом наборе входных данных, первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^{15}, 0 \leq m \leq 400\,000, 0 \leq k < n - m\)).

Во второй строке записаны \(m\) целых чисел \(p_1, p_2, \ldots, p_m\), (\(0 < p_1 < p_2 < \ldots < p_m < n\)).

Сумма по всем \(m\) не превосходит \(400\,000\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число: минимальное возможное значение степени баланса после \(k\) изменений 'B' на 'A'.

A. Прогулка

жадные алгоритмы математика реализация *1100

У Алисы есть миленькая кошечка. Чтобы кошка была в форме, Алиса хочет спланировать маршрут для прогулки кошки.

Изначально, кошка Алиса находится в ячейке \((x,y)\) на бесконечном клетчатом поле. По теории Алисы кошка должна пройти:

  • ровно \(a\) шагов влево: из \((u,v)\) в \((u-1,v)\);
  • ровно \(b\) шагов вправо: из \((u,v)\) в \((u+1,v)\);
  • ровно \(c\) шагов вниз: из \((u,v)\) в \((u,v-1)\);
  • ровно \(d\) шагов вверх: из \((u,v)\) в \((u,v+1)\).

Обратите внимание, что шаги можно делать в произвольном порядке. Например, если кошка должна сделать \(1\) шаг влево, \(3\) шага вправо и \(2\) шага вниз, то маршрут вправо, вниз, влево, вправо, вправо, вниз корректный.

С другой стороны, Алиса волнуется, что кошка может потеряться, если уйдет очень далеко от нее. Поэтому она надеется, что ее кошка всегда находится в области \([x_1,x_2]\times [y_1,y_2]\), то есть для любой позиции \((u,v)\) маршрута выполняется \(x_1 \le u \le x_2\) и \(y_1 \le v \le y_2\).

Также обратите внимание, что кошка может посещать одну и ту же клетку несколько раз.

Помогите Алисе понять, существует ли маршрут, который удовлетворяет ее желаниям.

Формально, путь должен состоять ровно из \(a+b+c+d\) единичных шагов (\(a\) влево, \(b\) вправо, \(c\) вниз, \(d\) вверх). Алиса может совершать шаги в любом порядке. Её текущая позиция \((u, v)\) всегда должна удовлетворять ограничениям: \(x_1 \le u \le x_2\), \(y_1 \le v \le y_2\). Путь начинается из точки \((x, y)\).

Требуется решить задачу для \(t\) наборов входных данных независимо друг от друга.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны четыре целых числа \(a\), \(b\), \(c\), \(d\) (\(0 \le a,b,c,d \le 10^8\), \(a+b+c+d \ge 1\)).

Во второй строке каждого набора входных данных записаны шесть целых чисел \(x\), \(y\), \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(-10^8 \le x_1\le x \le x_2 \le 10^8\), \(-10^8 \le y_1 \le y \le y_2 \le 10^8\)).

Выходные данные

Для каждого набора входных данных выведите «YES» в отдельной строке, если существует маршрут, который удовлетворяет ее желаниям. Иначе выведите «NO» в отдельной строке.

Можно выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных в примере один из допустимых маршрутов такой: \(\)(0,0)\rightarrow (-1,0) \rightarrow (-2,0)\rightarrow (-2,1) \rightarrow (-2,2)\rightarrow (-1,2)\rightarrow(0,2)\rightarrow (0,1)\rightarrow (0,0) \rightarrow (-1,0)\(\)

B. Непростая покраска

жадные алгоритмы Конструктив математика Перебор теория чисел *1400

Положительное целое число называется составным, если оно представимо в виде произведения двух положительных целых чисел, каждое из которых больше \(1\). Например, следующие числа составные: \(6\), \(4\), \(120\), \(27\). Следующие числа составными не являются: \(1\), \(2\), \(3\), \(17\), \(97\).

Задана последовательность из \(n\) составных чисел \(a_1,a_2,\ldots,a_n\).

Алиса хочет выбрать любое целое число \(m \le 11\) и покрасить каждый элемент в один из \(m\) цветов от \(1\) до \(m\) так, что:

  • для каждого цвета от \(1\) до \(m\) существует хотя бы один элемент этого цвета;
  • каждый элемент покрашен и притом ровно в один цвет;
  • наибольший общий делитель любых двух одноцветных элементов больше \(1\), то есть \(\gcd(a_i, a_j)>1\) для любой пары индексов \(i, j\), если эти элементы покрашены в одинаковый цвет.

Обратите внимание, что одинаковые элементы могут быть покрашены в разные цвета — просто для каждого индекса от \(1\) до \(n\) надо выбрать один из \(m\) цветов.

Алиса уже показала, что если все \(a_i \le 1000\), то она всегда может решить эту задачу, выбрав некоторое \(m \le 11\).

Помогите Алисе найти требуемую покраску элементов. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке набора записано целое число \(n\) (\(1 \le n \le 1000\)) — количество чисел в последовательности \(a\).

Вторая строка набора входных данных содержит \(n\) составных целых чисел \(a_1,a_2,\ldots,a_n\) (\(4 \le a_i \le 1000\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(2\) строки. В первую выведите \(m\) (\(1 \le m \le 11\)) — количество использованных цветов. Считайте, что цвета пронумерованы от \(1\) до \(m\). Во вторую строку выведите любую раскраску элементов, которая удовлетворяет условиям выше. Выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — цвет \(i\)-го элемента. Если решений несколько, то выведите любое из них. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Помните, что каждый цвет от \(1\) до \(m\) должен быть использован хотя бы раз. Любые два одноцветных элемента должны не быть взаимно просты (то есть их НОД должен быть больше \(1\)).

Примечание

В первом наборе входных данных \(\gcd(6,10)=2\), \(\gcd(6,15)=3\) и \(\gcd(10,15)=5\). Таким образом, допустимо раскрасить все три элемента в один цвет. Обратите внимание, что для данного набора входных данных существуют и другие раскраски, которые удовлетворяют требованиям Алисы.

Во втором наборе входных данных в каждый цвет покрашен только один элемент, так что раскраска точно походит под все требования Алисы.

C. K-полное слово

жадные алгоритмы поиск в глубину и подобное реализация снм Строки *1500

Слово \(s\) длины \(n\) называется \(k\)-полным, если

  • \(s\) — палиндром, то есть \(s_i=s_{n+1-i}\) для всех \(1 \le i \le n\);
  • \(s\) имеет период \(k\), то есть \(s_i=s_{k+i}\) для всех \(1 \le i \le n-k\).

Например, «abaaba» — это \(3\)-полное слово, а «abccba» нет.

Бобу вручили слово \(s\) длины \(n\), состоящее только из строчных букв латинского алфавита, и целое число \(k\) такое, что \(n\) делится на \(k\). Он хочет превратить слово \(s\) в любое \(k\)-полное слово.

Для этого Боб может выбирать некоторую позицию \(i\) (\(1 \le i \le n\)) и заменять букву на позиции \(i\) на любую другую строчную букву латинского алфавита.

Поэтому теперь Боба интересует минимальное количество позиций, буквы на которых ему необходимо заменить, чтобы превратить \(s\) в любое \(k\)-полное слово.

Обратите внимание, что Боб может сделать ноль изменений, если слово \(s\) уже \(k\)-полное.

Требуется ответить на \(t\) независимых наборов входных данных.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t\le 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(1 \le k < n \le 2 \cdot 10^5\), \(n\) делится на \(k\)).

Во второй строке записано слово \(s\) длины \(n\).

Гарантируется, что слово \(s\) состоит только из строчных букв латинского алфавита. Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество позиций, буквы на которых ему придется заменить, чтобы превратить \(s\) в любое \(k\)-полное слово.

Примечание

В первом наборе входных данных одно из оптимальных решений — это «aaaaaa».

Во втором наборе входных данных слово уже \(k\)-полное.

B. Добрый Антон

жадные алгоритмы реализация *1100

Борису опять нужна помощь Антона в составлении задачи. На этот раз Антону нужно решить для Бориса следующую задачу:

Есть две массива целых чисел \(a\) и \(b\) длины \(n\). Оказалось, что массив \(a\) содержит элементы только из множества \(\{-1, 0, 1\}\).

Антон может проделать следующую последовательность операций любое количество раз:

  1. Выбрать любую пару индексов \((i, j)\) такую, что \(1 \le i < j \le n\). Одну и ту же пару индексов \((i, j)\) можно выбирать сколько угодно раз.
  2. Добавить \(a_i\) к \(a_j\). Другими словами, \(j\)-й элемент массива становится равным \(a_i + a_j\).

Например, из массива \([1, -1, 0]\) за одну операцию можно получить массивы \([1, -1, -1]\), \([1, 0, 0]\) и \([1, -1, 1]\).

Антон хочет узнать, можно ли применить некоторое количество (возможно, нулевое) операций выше к массиву \(a\), чтобы получить массив \(b\). Можете ли вы ему помочь?

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10000\)). Далее следуют описания наборов входных данных.

Первая строка каждого тестового случая содержит единственное целое положительное число \(n\) (\(1 \le n \le 10^5\))  — длину массивов.

Вторая строка каждого тестового случая содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(-1 \le a_i \le 1\))  — элементы массива \(a\). Среди этих элементов могут быть одинаковые значения.

Третья строка каждого тестового случая содержит \(n\) чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\))  — элементы массива \(b\). Среди этих элементов могут быть одинаковые значения.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого наборов входных данных выведите одну строку содержащую «YES» если можно преобразовать массив \(a\) так, чтобы он стал равен массиву \(b\), или «NO» иначе.

Вы можете выводить каждую букву каждого ответа в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно выбрать \((i, j)=(2, 3)\) дважды, затем \((i, j)=(1, 2)\) также дважды. Эти операции изменят массив следующим образом: \([1, -1, 0] \to [1, -1, -2] \to [1, 1, -2]\).

Во втором наборе входных данных нельзя сделать числа на второй позиции равными.

В третьем наборе входных данных можно выбрать \((i, j)=(1, 2)\) \(41\) раз. Аналогично в четвертом.

В последнем наборе входных данных преобразовать массив \(a\) в массив \(b\) невозможно.

D. Досуг в школе №41

графы жадные алгоритмы игры Конструктив Перебор реализация сортировки *2100

В средней школе №41 учатся \(n\) детей. Всем известно, что они хорошие математики. Однажды на перемене ребята решили провести исследование. Они выстроились в один ряд и повернули головы налево или направо.

Дети проделывали следующую операцию: каждую секунду несколько пар соседних в ряду детей, смотрящих друг на друга, могли одновременно развернуться в противоположную сторону. Таким образом, ребенок, смотрящий на правого соседа, повернется налево, и наоборот для второго ребенка. Более того, каждую секунду хотя бы одна пара соседних детей проделывала подобную операцию. Процесс заканчивается, когда нет пары соседних детей смотрящих друг на друга.

Дано число детей \(n\), изначальная расстановка детей в ряду и целое положительное число \(k\). Необходимо найти последовательность действий детей, завершающий процесс ровно за \(k\) секунд. Более формально, на каждый из \(k\) ходов нужно вывести номера детей, которые повернутся налево во время хода.

Для примера, дети могут действовать с конфигурацией приведенной ниже и \(k = 2\) следующим образом:

На первом ходу развернутся две пары: \((1, 2)\) и \((3, 4)\). После этого получается такая конфигурация:
На втором ходу развернется только пара \((2, 3)\). В итоговой конфигурации никакая пара детей не смотрит друг на друга. Хорошая работа.

Если решение существует, то гарантируется что дети совершат не более чем \(n^2\) разворотов.

Входные данные

Первая строка входных данных содержит два целых числа \(n\), \(k\) (\(2 \le n \le 3000\), \(1 \le k \le 3000000\))  — количество детей и количество ходов через которые нужно закончить.

Вторая строка входных данных содержит строку длины \(n\), которая состоит только из символов L и R. L значит, что ребенок смотрит налево, а R  — направо.

Выходные данные

Если решения не существует, выведите \(-1\).

Иначе, вывод должен состоять из \(k\) строк. Каждая строка должна начинаться с положительного целого числа \(n_i\) (\(1\le n_i \le \frac{n}{2}\))  — количества пар детей, которые развернутся на этом ходу. Далее в этой же строке должно следовать \(n_i\) попарно различных чисел  — номера детей, которые повернут голову налево во время этого хода.

После проведения всех разворотов, не должно быть пары соседних детей, смотрящих друг на друга.

Если существует более одного решения, выведите любое из них.

Примечание

Первый тест описывает пару детей смотрящих друг на друга. За один ход они развернутся.

Во втором тесте дети не могут сделать ни одного хода. В итоге они не смогут закончить за \(k>0\) ходов.

Третий тест описан в условии.

F. Катя и несовершенства

жадные алгоритмы математика реализация сортировки теория чисел *2200

У Кати есть множество \(S\) состоящее из \(n\) чисел \(\{1, \dots, n\} \).

Катя считает, что уродливость множества \(M \subseteq S\) равна максимуму из \(gcd(a, b)\), по всем парам \((a, b)\) таким, что и \(a\) и \(b\) лежат в \(M\), и \(a \neq b\).

Катя очень аккуратная девушка, поэтому для каждого \(k \in \{2, \dots, n\}\) она хочет найти подмножество имеющее наименьшую уродливость среди всех подмножеств \(S\) размера \(k\). Подмножеств заданного размера с минимальной уродливостью может быть больше одного, но вам не стоит беспокоиться по этому поводу. Катя найдет нужное ей подмножество сама. От вас ей нужно узнать лишь минимальную возможную уродливость для каждого \(k\) определенного выше, назовем ее \(I_k\).

Пожалуйста, помогите Кате найти \(I_2\), \(I_3\), ..., \(I_n\).

Входные данные

Первая и единственная строка входных данных состоит из одного целого положительного числа \(n\) (\(2\le n \le 5 \cdot 10^5\))  — размер заданного множества \(S\).

Выходные данные

Вам нужно вывести только одну строку содержащую \(n - 1\) число: \(I_2\), \(I_3\), ..., \(I_n\).

Примечание

Ответ на первый пример 1, так как \(gcd(1, 2) = 1\).

Во втором примере существуют подмножества \(S\) размеров \(2, 3\) с уродливостью 1. Например, \(\{2,3\}\) и \(\{1, 2, 3\}\).

B. Средний класс

жадные алгоритмы сортировки *1100

Давным-давно Берляндия была маленькой страной, в которой проживало только \(n\) человек. Каждый из них имел некоторое количество сбережений: у \(i\)-го человека было \(a_i\) бурлей.

Правительство считало человека богатым, если у него было хотя бы \(x\) бурлей. Чтобы увеличить количество богатых людей в Берляндии, решили провести несколько реформ. Каждая реформа выглядела следующим образом:

  • правительство выбирает некоторое подмножество людей (возможно, всех);
  • правительство забирает все сбережения у выбранных людей и перераспределяет их среди выбранных людей поровну.

Например, представим сбережения как список \([5, 1, 2, 1]\): если правительство выбирает \(1\)-го и \(3\)-го человека, то оно, сначала заберет у них все \(5 + 2 = 7\) бурлей, а потом вернет каждому по \(3.5\) бурлей. В результате сбережения примут вид \([3.5, 1, 3.5, 1]\).

Много информации было потеряно с того времени, поэтому мы не знаем, сколько реформ было проведено и на ком. Все, что мы можем — это попросить вас посчитать максимально возможное количество богатых людей после некоторого (возможно нулевого) количества реформ.

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных.

В следующих \(2T\) строках заданы сами наборы — по две строки на набор. В первой строке заданы два целых числа \(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\)) — первоначальное количество сбережений у каждого человека.

Гарантируется, что сумма всех \(n\) не превосходит \(10^5\).

Выходные данные

Выведите \(T\) чисел — по одному на набор входных данных. Для каждого набора выведите максимально возможное количество богатых людей после некоторого (возможно нулевого) количества реформ.

Примечание

Первый пример описан в условии задачи.

Во втором примере правительство, например, могло провести следующие реформы: \([\underline{11}, \underline{9}, 11, 9] \rightarrow [10, 10, \underline{11}, \underline{9}] \rightarrow [10, 10, 10, 10]\).

В третьем примере правительство не сможет сделать даже одно человека богатым.

В четвертом примере правительство могло выбрать всех людей в реформе: \([\underline{9}, \underline{4}, \underline{9}] \rightarrow [7\frac{1}{3}, 7\frac{1}{3}, 7\frac{1}{3}]\).

C. Круг монстров

жадные алгоритмы Конструктив математика Перебор *1600

Вы играете в очередную компьютерную игру, и теперь вам предстоит убить \(n\) монстров. Эти монстры стоят в круге, пронумерованном по часовой стрелке от \(1\) до \(n\). Изначально \(i\)-й монстр имеет \(a_i\) единиц здоровья.

Вы можете стрелять в монстров, чтобы убить их. Каждый выстрел требует ровно одной пули и уменьшает здоровье монстра на \(1\) (наносит ему \(1\) единицу урона). Кроме того, когда здоровье некоторого монстра \(i\) становится \(0\) или меньше \(0\), он умирает и взрывается, нанося \(b_i\) урон следующему монстру (монстру под номером \(i + 1\), если \(i < n\), или монстру под номером \(1\), если \(i = n\)). Если следующий монстр уже мертв, то ничего не происходит. Если взрыв убивает следующего монстра, он тоже взрывается, повреждая монстра после него и, возможно, вызывая еще один взрыв, и так далее.

Вы должны посчитать минимальное количество пуль, которое нужно выстрелить, чтобы убить всех \(n\) монстров в кругу.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 150000\)) — количество наборов входных данных.

Затем следуют наборы входных данных, каждый из них начинается со строки, содержащей одно целое число \(n\) (\(2 \le n \le 300000\)) — количество монстров. Затем следуют \(n\) строк, каждая из которых содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^{12}\)) — параметры \(i\)-го монстра в круге.

Гарантируется, что общее количество монстров во всех тестовых случаях не превышает \(300000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество пуль, которые нужно выстрелить, чтобы убить всех монстров.

D. Минимальный эйлеров цикл

графы жадные алгоритмы Конструктив реализация *1800

Вам задан полный ориентированный граф \(K_n\) из \(n\) вершин: у каждой пары вершин \(u \neq v\) в \(K_n\) есть обе дуги \((u, v)\) и \((v, u)\); петель в графе нет.

Вам нужно найти такой цикл в \(K_n\), который проходит по каждой дуге ровно один раз (вершины можно посещать несколько раз).

Мы можем выписать такой цикл как список из \(n(n - 1) + 1\) вершин \(v_1, v_2, v_3, \dots, v_{n(n - 1) - 1}, v_{n(n - 1)}, v_{n(n - 1) + 1} = v_1\) — порядок обхода, в котором каждая дуга \((v_i, v_{i + 1})\) встречается по одному разу.

Найдите лексикографически минимальный такой цикл. Не трудно доказать, что такой цикл всегда существует.

Так как ответ может быть слишком большим, выведите только его \([l, r]\) отрезок, то есть \(v_l, v_{l + 1}, \dots, v_r\).

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы входных данных — по одному на строку. В данной строке задано три целых числа \(n\), \(l\) и \(r\) (\(2 \le n \le 10^5\), \(1 \le l \le r \le n(n - 1) + 1\), \(r - l + 1 \le 10^5\)) — количество вершин в \(K_n\) и отрезок цикла, который нужно вывести.

Гарантируется, что сумма по \(n\) не превосходит \(10^5\) и сумма длин отрезков \(r - l + 1\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите отрезок \(v_l, v_{l + 1}, \dots, v_r\) лексикографически минимального цикла, который проходит по каждой дуге ровно один раз.

Примечание

Во втором наборе, лексикографически минимальный цикл выглядит следующим образом: \(1, 2, 1, 3, 2, 3, 1\).

В третьем примере, довольно очевидно, что цикл должен начинаться и заканчиваться в вершине \(1\).

E. Пути по делителям

графы жадные алгоритмы Комбинаторика математика теория чисел *2200

Задано целое положительное число \(D\). Построим из него следующий граф:

  • каждая вершина является делителем \(D\) (не обязательно простым, \(1\) и \(D\) тоже включаются);
  • между двумя вершинами \(x\) и \(y\) (\(x > y\)) есть неориентированное ребро, если \(x\) делится на \(y\) и \(\frac x y\) — простое число;
  • вес ребра — это количество делителей \(x\), которые не являются делителями \(y\).

Например, граф для \(D=12\):

У ребра \((4,12)\) вес \(3\), потому что у \(12\) делители \([1,2,3,4,6,12]\), а у \(4\) делители \([1,2,4]\). Поэтому существует \(3\) делителя \(12\), которые не являются делителями \(4\)\([3,6,12]\).

Между \(3\) и \(2\) нет ребра, потому что \(3\) не делится на \(2\). Между \(12\) и \(3\) нет ребра, потому что \(\frac{12}{3}=4\) не простое число.

Длина пути между некоторыми вершинами \(v\) и \(u\) в графе равна сумме весов ребер в нем. Например, длина пути \([(1, 2), (2, 6), (6, 12), (12, 4), (4, 2), (2, 6)]\) равен \(1+2+2+3+1+2=11\). Длина пустого пути равна \(0\).

Тогда кратчайший путь между двумя вершинами \(v\) и \(u\) — это путь, длина которого минимальна.

Два пути \(a\) и \(b\) различны, если либо содержат различное количество ребер, либо существует такая позиция \(i\), что ребра \(a_i\) и \(b_i\) различны.

Даны \(q\) запросов вида:

  • \(v\) \(u\) — посчитайте количество кратчайших путей между вершинами \(v\) и \(u\).

Ответ может быть довольно большим, поэтому выведите его по модулю \(998244353\).

Входные данные

В первой строке записано одно целое число \(D\) (\(1 \le D \le 10^{15}\)) — число, из которого строится граф.

Во второй строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le D\)). Гарантируется, что \(D\) делится и на \(v\), и на \(u\)\(v\), и \(u\), являются делителями \(D\)).

Выходные данные

Выведите \(q\) целых чисел — для каждого запроса выведите количество кратчайших путей между двумя данными вершинами по модулю \(998244353\).

Примечание

В первом примере:

  • на первый запрос только пустой путь — длина \(0\);
  • на второй запрос пути \([(12, 4), (4, 2), (2, 1)]\) (длина \(3+1+1=5\)), \([(12, 6), (6, 2), (2, 1)]\) (длина \(2+2+1=5\)) и \([(12, 6), (6, 3), (3, 1)]\) (длина \(2+2+1=5\)).
  • на третий запрос только путь \([(3, 1), (1, 2), (2, 4)]\) (длина \(1+1+1=3\)).

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.

C. Составление двух команд

Бинарный поиск жадные алгоритмы реализация сортировки *1100

Под вашим контролем находятся \(n\) студентов и вам нужно составить ровно две команды, состоящие из некоторого подмножества ваших студентов. У каждого студента есть свой собственный навык, навык \(i\)-го студента обозначен числом \(a_i\) (у различных студентов могут быть одинаковые навыки).

Итак, о командах. Во-первых, эти две команды должны быть одинакового размера. Есть еще два требования:

  • Первая команда должна состоять из студентов с различными навыками (то есть нет одинаковых навыков среди студентов первой команды).
  • Вторая команда должна состоять из студентов с одинаковыми навыками (то есть все навыки среди студентов второй команды равны между собой).

Отметим, что допустимо, что какой-то студент первой команды имеет такой же навык, как и студент второй команды.

Рассмотрим несколько примеров (перечислены навыки для команд):

  • \([1, 2, 3]\), \([4, 4]\) не являются подходящей парой команд, потому что их размеры должны быть одинаковыми;
  • \([1, 1, 2]\), \([3, 3, 3]\) не являются подходящей парой команд, потому что первая команда не должна включать студентов с одинаковыми навыками;
  • \([1, 2, 3]\), \([3, 4, 4]\) не являются подходящей парой команд, потому что вторая команда должна включать студентов с одинаковыми навыками;
  • \([1, 2, 3]\), \([3, 3, 3]\) — подходящая пара команд;
  • \([5]\), \([6]\) — тоже подходящая пара команд.

Ваша задача — найти максимально возможный размер команд \(x\), для которого возможно составить подходящую пару команд, где каждая команда имеет размер \(x\) (в первой команде все навыки различны, во второй — все навыки равны между собой). Студент не может входить более чем в одну команду.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(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\) (\(1 \le a_i \le n\)), где \(a_i\) — это навык \(i\)-го студента. У различных студентов могут быть одинаковые навыки.

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможный размер команд \(x\), для которого возможно составить подходящую пару команд, где каждая команда имеет размер \(x\).

Примечание

В первом наборе тестовых данных примера возможно составить две команды размера \(3\): первая команда может иметь вид \([1, 2, 4]\), вторая команда может иметь вид \([4, 4, 4]\). Заметим, есть и другие способы выбрать две команды размера \(3\), которые соответствуют требованиям выше.

F. Роботы на поле

графы жадные алгоритмы матрицы поиск в глубину и подобное снм Структуры данных *2200

Задано прямоугольное поле размера \(n \times m\). Каждая клетка поля покрашена либо в черный цвет ('0'), либо в белый цвет ('1'). Цвет клетки \((i, j)\) обозначается как \(c_{i, j}\). Вам также задана карта направлений: для каждой клетки указано направление \(s_{i, j}\), которое равно одному из четырех символов 'U', 'R', 'D' и 'L'.

  • Если \(s_{i, j}\) равно 'U', то из клетки \((i, j)\) есть переход в клетку \((i - 1, j)\);
  • если \(s_{i, j}\) равно 'R', то из клетки \((i, j)\) есть переход в клетку \((i, j + 1)\);
  • если \(s_{i, j}\) равно 'D', то из клетки \((i, j)\) есть переход в клетку \((i + 1, j)\);
  • если \(s_{i, j}\) равно 'L', то из клетки \((i, j)\) есть переход в клетку \((i, j - 1)\).

Гарантируется, что самая верхняя строка не содержит символов 'U', самая нижняя строка не содержит символов 'D', самый левый столбец не содержит символов 'L' и самый правый столбец не содержит символов 'R'.

Вы хотите поставить роботов на поле (не более одного робота в клетку). При этом следующие условия должны быть соблюдены.

  • Во-первых, каждый робот всегда обязан перемещаться (то есть он не может пропустить ход). За один ход каждый робот перемещается в соседнюю клетку в соответствии с текущим направлением.
  • Во-вторых, вам необходимо поставить роботов таким образом, что не найдется такого хода, перед которым два различных робота стоят в одной и той же клетке (это также значит, что вы не можете поставить двух роботов в одну и ту же клетку). Таким образом, Если поле равно «RL» (одна строка, два столбца, цвета здесь не важны), то вы можете поставить двух роботов в клетки \((1, 1)\) и \((1, 2)\), но если поле равно «RLL», то вы не можете поставить роботов в клетки \((1, 1)\) и \((1, 3)\), потому что в течение первой секунды оба робота будут стоять в клетке \((1, 2)\).

Роботы делают бесконечное количество ходов.

Ваша задача — поставить максимальное количество роботов таким образом, чтобы удовлетворить все условия, описанные выше, а среди всех таких способов вам необходимо выбрать такой, что количество черных клеток, на которых стоят роботы перед началом всех перемещений является максимально возможным. Заметьте, что вы можете ставить роботов только перед началом всех перемещений.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 < nm \le 10^6\)) — количество строк и количество столбцов соответственно.

Следующие \(n\) строк содержат по \(m\) символов каждая, где \(j\)-й символ \(i\)-й строки равен \(c_{i, j}\) (\(c_{i, j}\) равно либо '0', если клетка \((i, j)\) покрашена в черный цвет, либо '1', если клетка \((i, j)\) покрашена в белый цвет).

Следующие \(n\) строк также содержат по \(m\) символов каждая, где \(j\)-й символ \(i\)-й строки равен \(s_{i, j}\) (\(s_{i, j}\) равно 'U', 'R', 'D' или 'L', и описывает направление клетки \((i, j)\)).

Гарантируется, что сумма размеров полей не превосходит \(10^6\) (\(\sum nm \le 10^6\)).

Выходные данные

Для каждого набора тестовых данных выведите два числа — максимальное количество роботов, которое вы можете поставить, чтобы удовлетворить все ограничения, указанные в условии задачи, и максимальное количество черных клеток, в которых находятся роботы перед началом всех перемещений, если количество поставленных роботов максимально. Заметьте, что вы можете ставить роботов только перед началом всех перемещений.

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\).

B. Xenia и разноцветные камушки

Бинарный поиск жадные алгоритмы математика сортировки *1700

Xenia девочка, рожденная дворянкой. От скуки и одиночества, Xenia вынуждена сама искать какие-то способы развлечься.

 

Недавно Xenia купила \(n_r\) красных камушков, \(n_g\) зеленых камушков и \(n_b\) голубых камушков. Каждый камушек имеет некоторый вес.

Сейчас она хочет выбрать три камушка.

Xenia любит разноцветные вещи, поэтому она выберет ровно один камушек каждого цвета.

Xenia любит баланс, поэтому она хочет выбрать камушки с как можно меньшей разнице в весе.

Более точно, если положить веса выбранных камушков за \(x\), \(y\) и \(z\), Xenia хочет выбрать камушки, так, чтобы значение \((x-y)^2+(y-z)^2+(z-x)^2\) было как можно меньше. Как ее лучший друг, можете ли вы помочь ей?

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1\le t \le 100\))  — количество тестовых случаев. Затем следует описание \(t\) тестовых случаев.

Первая строка описания каждого тестового случая содержит три целых числа \(n_r,n_g,n_b\) (\(1\le n_r,n_g,n_b\le 10^5\))  — количество красных камушков, зеленых камушков и голубых камушков, соответственно.

Вторая строка описания каждого тестового случая содержит \(n_r\) целых чисел \(r_1,r_2,\ldots,r_{n_r}\) (\(1\le r_i \le 10^9\))  — \(r_i\) равно весу \(i\)-о красного камушка.

Третья строка описания каждого тестового случая содержит \(n_g\) целых чисел \(g_1,g_2,\ldots,g_{n_g}\) (\(1\le g_i \le 10^9\))  — \(g_i\) равно весу \(i\)-о зеленого камушка.

Четвертая строка описания каждого тестового случая содержит \(n_b\) целых чисел \(b_1,b_2,\ldots,b_{n_b}\) (\(1\le b_i \le 10^9\))  — \(b_i\) равно весу \(i\)-о голубого камушка.

Гарантируется, что \(\sum n_r \le 10^5\), \(\sum n_g \le 10^5\), \(\sum n_b \le 10^5\) (сумма берется по всем тестовым случаям).

Выходные данные

Для каждого тестового случая выведите целое число  — минимальное возможное значение, которое Xenia может получить.

Примечание

В первом тестовом случае, Xenia купила следующие камушки:

Если она возьмет красный камушек с весом \(7\), зеленый камушек с весом \(6\) и голубой камушек с весом \(4\), она получит самый сбалансированный выбор со значением \((x-y)^2+(y-z)^2+(z-x)^2=(7-6)^2+(6-4)^2+(4-7)^2=14\).

B. Kana и игра Dragon Quest

жадные алгоритмы математика реализация *900

Кana была обыкновенной старшекласницей, пока ее не обнаружил разведчик талантов. Теперь она стала идолом. Но, в отличие от стереотипа, она обожает играть в игры.

Однажды Kana заинтересовалась новой игрой, которая называется Dragon Quest. В этой игре она должна победить дракона.

 

У дракона есть некоторое количество очков здоровья, которое изначально равно \(x\). Когда количество его очков здоровья становится равным \(0\) или меньше \(0\), он погибает. Для того, чтобы победить дракона Kana может использовать два типа заклинаний.

  • Поглощение пустотой

    Предположим, что текущее количество очков здоровья дракона равно \(h\), после применения этого заклинания количество очков здоровья станет равным \(\left\lfloor \frac{h}{2} \right\rfloor + 10\). Здесь за \(\left\lfloor \frac{h}{2} \right\rfloor\) мы обозначаем число \(h\), разделенное на два с округлением вниз.

  • Удар молнии

    Это заклинание уменьшает количество очков здоровья на \(10\). Предположим, что текущее количество очков здоровья дракона равно \(h\), после применения этого заклинания, количество очков здоровья уменьшится до \(h-10\).

По некоторым причинам, Kana может применить не больше чем \(n\) Поглощений пустотой и \(m\) Ударов молнии. Она может применять заклинания в любом порядке и не обязана применить все эти заклинания. Kana не очень хороша в математике, поэтому она просит вас помочь ей определить, сможет ли она победить дракона.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\))  — количество тестовых случаев.

Следующие \(t\) строк содержат описания тестовых случаев. Каждая строка описания тестового случая содержит три целых числа \(x\), \(n\), \(m\) (\(1\le x \le 10^5\), \(0\le n,m\le30\))  — изначальное количество очков здоровья дракона, максимальное количество Поглощений пустотой и Ударов молнии, которое Kana может применить, соответственно.

Выходные данные

Если возможно победить дракона, выведите «YES» (без кавычек). Иначе, выведите «NO» (без кавычек).

Вы можете выводить каждый символ в любом регистре (в верхнем или нижнем).

Примечание

Одна из возможных последовательностей применения заклинаний в первом тестовом случае такая:

  • Поглощение пустотой \(\left\lfloor \frac{100}{2} \right\rfloor + 10=60\).
  • Удар молнии \(60-10=50\).
  • Поглощение пустотой \(\left\lfloor \frac{50}{2} \right\rfloor + 10=35\).
  • Поглощение пустотой \(\left\lfloor \frac{35}{2} \right\rfloor + 10=27\).
  • Удар молнии \(27-10=17\).
  • Удар молнии \(17-10=7\).
  • Удар молнии \(7-10=-3\).

A. Прибавление степеней

жадные алгоритмы математика *1500

У вас есть массив \(a\) длины \(n\). Для каждого положительного числа \(x\) в течение \(x\)-й секунды вы собираетесь выполнить следующую операцию:

  • Выберите несколько различных индексов \(i_{1}, i_{2}, \ldots, i_{k}\), которые находятся в диапазоне от \(1\) до \(n\) включительно, и добавьте \(2^{x-1}\) к каждой соответствующей позиции в \(a\). Формально \(a_{i_{j}} := a_{i_{j}} + 2^{x-1}\) для \(j = 1, 2, \ldots, k\). Обратите внимание, что вы можете также не выбрать ни одного индекса.

Вы должны сделать \(a\) неубывающим как можно быстрее. Найдите наименьшее число \(T\) такое, что вы можете сделать массив неубывающим не позднее, чем через \(T\) секунд.

Массив \(a\) называется неубывающим, если и только если \(a_{1} \le a_{2} \le \ldots \le a_{n}\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{4}\))  — количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\))  — длину массива \(a\). Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превышает \(10^{5}\).

Вторая строка каждого теста содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(-10^{9} \le a_{i} \le 10^{9}\)).

Выходные данные

Для каждого тестового примера выведите минимальное количество секунд, за которое вы можете сделать \(a\) неубывающим.

Примечание

В первом тестовом случае, если вы выберете индексы \(3, 4\) на \(1\)-й секунде и \(4\) на \(2\)-й секунде, то \(a\) станет равным \([1, 7, 7, 8]\). Есть и другие способы сделать \(a\) неубывающим за \(2\) секунды, но вы не сделать его неубывающим быстрее.

Во втором тестовом случае \(a\) уже неубывающий, поэтому ответ равен \(0\).

В третьем тестовом случае, если вы ничего не сделаете в первые \(2\) секунды и в течение \(3\)-й секунды выберете индекс \(2\), \(a\) станет равным \([0, 0]\).

B. Назначение весов ребрам

битмаски Деревья жадные алгоритмы Конструктив математика поиск в глубину и подобное *1800

У вас есть невзвешенное дерево на \(n\) вершинах. Вы должны назначить положительный вес каждому ребру, чтобы выполнялось следующее условие:

  • Для каждых двух разных листов \(v_{1}\) и \(v_{2}\) этого дерева, побитовое исключающее ИЛИ весов всех ребер на простом пути между \(v_{1}\) и \(v_{2}\) должно быть равно \(0\).

Обратите внимание, что вы можете назначать очень большие натуральные числа (такие как \(10^{(10^{10})}\)).

Гарантируется, что такое назначение всегда существует при данных ограничениях. Теперь определим \(f\) как количество различных весов среди назначенных весов.

В этом примере назначение верно, потому что побитовое исключающее ИЛИ всех весов ребер между каждой парой листьев равно \(0\). Значение \(f\) здесь равно \(2\), потому что есть \(2\) различных веса ребер (\(4\) и \(5\)).

В этом примере назначение не удовлетворяет условию, поскольку побитовое исключающее ИЛИ всех весов ребер между вершинами \(1\) и \(6\) (\(3, 4, 5, 4\)) не равно \(0\).

Чему равны минимальное и максимальное возможные значения \(f\) для данного дерева? Найдите и выведите оба.

Входные данные

Первая строка содержит целое число \(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\) вершин.

Выходные данные

Выведите два целых числа  — минимальное и максимальное возможное значения \(f\), которые могут быть получены из правильного назначения данного дерева. Обратите внимание, что такое назначение всегда существует при данных ограничениях.

Примечание

В первом примере возможные назначения для минимума и максимума показаны на рисунке ниже. Конечно, есть и другие назначения.

Во втором примере возможные назначения для минимума и максимума показаны на рисунке ниже. Значение \(f\) для правильного назначения этого дерева всегда равно \(3\).

В третьем примере возможные назначения для минимума и максимума показаны на рисунке ниже. Конечно, есть и другие назначения.

C. Обмены

графы жадные алгоритмы Конструктив *2200

За круглым столом сидят n игроков. У всех них в сумме s карт n цветов, причем на начальный момент у первого человека карты только первого цвета, у второго — второго цвета и так далее. Они могут меняться картами, согласно следующим правилам:

  • человек может отдавать в процессе обмена карту только своего цвета;
  • игрок не может брать карту цвета, уже у него имеющегося (в частности, карты своего цвета он брать не может, независимо от того раздал он их все или нет);
  • в процессе одного обмена пара людей обменивается картами (каждый человек отдает одну карту и получает одну карту).

Цель всех n человек: каждый из них должен отдать все карты, которые были у него в начале (то есть все карты своего цвета). Ваша задача указать, возможна ли такая последовательность обменов. Если ответ положительный, нужно указать все обмены.

Входные данные

В первой строке записаны целые числа n (1 ≤ n ≤ 200000) и s (1 ≤ s ≤ 200000). Вторая строка содержит n чисел — количество карт у 1-го, 2-го, ..., n-го игрока на момент начала игры. Игрок может не иметь карт вообще на момент начала игры.

Выходные данные

Выведите в первой строке «No», если такая последовательность обменов невозможна, и «Yes» в противном случае. Если ответ положительный, выведите далее число k — количество обменов. Далее в k строках опишите обмены — парой номеров меняющихся игроков. Обмены и номера в обменах выводите в любом порядке.

A. Настя и странный генератор

жадные алгоритмы Перебор реализация Структуры данных *1500

Расстроившись после такого отношения Насти, Денис был очень грустным. Ничего не могло развеселить отвергнутого парня. Чтобы хоть как-то развеселиться он решил побродить по подворотням. И, как ни странно, ему улыбнулась удача! Зайдя в первый двор, он встретил странного человека, который чем-то торговал.

Оглядевшись вокруг, Денис подошел к незнакомцу и купил загадочный товар. Им оказался... Генератор случайных перестановок! Именно это мальчик так давно искал!

Придя домой он стал изучать, как работает его генератор и узнал алгоритм. Процесс генерации перестановки состоит из \(n\) шагов. На \(i\)-м шаге выбирается позиция (индекс) для значения \(i\) \((1 \leq i \leq n)\). Позиция для значения \(i\) определяется следующим образом:

  • Для всех \(j\) от \(1\) до \(n\) посчитаем \(r_j\)  — минимальный такой индекс, что \(j \leq r_j \leq n\), a позиция \(r_j\) еще не занята в перестановке. Если таких позиций нет, то будем считать, что значение \(r_j\) не определено.
  • Для всех \(t\) от \(1\) до \(n\) посчитаем \(count_t\)  — количество таких позиций \(1 \leq j \leq n\), что значение \(r_j\) определено и \(r_j = t\).
  • Рассмотрим все еще не занятые позиции перестановки и среди таких рассмотрим позиции, для которых значение в массиве \(count\) максимально.
  • Генератор выбирает одну из таких позиций для значения \(i\). Генератор может выбрать любую позицию.

Рассмотрим работу алгоритма на следующем примере:

Пусть \(n = 5\) и алгоритм уже расставил значения \(1, 2, 3\) в перестановке. Рассмотрим, как генератор будет выбирать позицию для значения \(4\):

  • Значения \(r\) будут \(r = [3, 3, 3, 4, \times]\), где \(\times\) означает неопределенное значение.
  • Тогда значения \(count\) будут \(count = [0, 0, 3, 1, 0]\).
  • Есть только две не занятые позиции в перестановке: \(3\) и \(4\). Значение в массиве \(count\) для позиции \(3\) равно \(3\), для позиции \(4\) равно \(1\).
  • Максимальное значение достигается только для позиции \(3\), поэтому алгоритм однозначно выберет эту позицию для значения \(4\).

Довольный своим приобретением Денис пошел домой. Несколько дней без перерыва он генерировал перестановки и решил, что преисполнился в осознании процесса генерации. Он считает, что может придумывать случайные перестановки не хуже генератора.

После этого он выписал первую пришедшую на ум перестановку \(p_1, p_2, \ldots, p_n\) и решил узнать, могла ли она получится в результате работы генератора.

К сожалению, эта задача оказалась слишком сложна для него, и он обратился за помощью к вам. Нужно определить, могла ли получиться выписанная перестановка применением описанного алгоритма, если генератор всегда выбирает нужную Денису позицию.

Входные данные

В первой строке записано целое число \(t\) \((1 \leq t \leq 10^5)\)  — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке каждого набора находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\)  — длина перестановки.

Во второй строке набора находится \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\))  — выписанная Денисом перестановка.

Гарантируется, что сумма значений \(n\) по всем входным данным не превосходит \(10^5\).

Выходные данные

Выведите «Yes», если эта перестановка могла быть получена в результате работы генератора. В противном случае выведите «No».

Все буквы можно выводить в любом регистре.

Примечание

Промоделируем работу генератора на первом тесте.

На \(1\) шаге \(r = [1, 2, 3, 4, 5], count = [1, 1, 1, 1, 1]\). Максимальное значение достигается в любой свободной позиции, поэтому генератор может выбрать случайную позицию от \(1\) до \(5\). В нашем примере он выбрал \(5\).

На \(2\) шаге \(r = [1, 2, 3, 4, \times], count = [1, 1, 1, 1, 0]\). Максимальное значение достигается в позициях от \(1\) до \(4\), поэтому генератор может выбрать случайную позицию среди них. В нашем примере он выбрал \(1\).

На \(3\) шаге \(r = [2, 2, 3, 4, \times], count = [0, 2, 1, 1, 0]\). Максимальное значение равно \(2\) и достигается только в позиции \(2\), поэтому генератор выберет эту позицию.

На \(4\) шаге \(r = [3, 3, 3, 4, \times], count = [0, 0, 3, 1, 0]\). Максимальное значение равно \(3\) и достигается только в позиции \(3\), поэтому генератор выберет эту позицию.

На \(5\) шаге \(r = [4, 4, 4, 4, \times], count = [0, 0, 0, 4, 0]\). Максимальное значение равно \(4\) и достигается только в позиции \(4\), поэтому генератор выберет эту позицию.

Итого мы получили перестановку \(2, 3, 4, 5, 1\), то есть генератор мог её сгенерировать.

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\) палочек, чтобы на табло получилась какая-то последовательность цифр.

B. Настя и дверь

жадные алгоритмы реализация *1300

На 14 февраля Денис решил подарить валентинку Насте и не придумал ничего лучше чем нарисовать на двери длины \(k\) (\(k \ge 3\)) огромное красное сердечко. Настю такой подарок очень смутил, поэтому она решила сломать дверь, сбросив её на горы.

Горы описываются последовательностью высот \(a_1, a_2, \dots, a_n\) в порядке слева направо (\(k \le n\)). Гарантируется, что соседние высоты не равны друг другу (то есть \(a_i \ne a_{i+1}\) для всех \(i\) от \(1\) до \(n-1\)).

Пиками гор на отрезке \([l,r]\) (от \(l\) до \(r\)) называются такие индексы \(i\), что \(l < i < r\), \(a_{i - 1} < a_i\) и \(a_i > a_{i + 1}\). Стоит отметить, что граничные для отрезка индексы \(l\) и \(r\) пиками не являются. Например, если \(n=8\) и \(a=[3,1,4,1,5,9,2,6]\), то на отрезке \([1,8]\) всего два пика (с индексами \(3\) и \(6\)), а на отрезке \([3, 6]\) — пиков нет.

Чтобы сломать дверь, Настя сбрасывает ее на некоторый отрезок \([l,l+k-1]\) подряд идущих гор длины \(k\) (\(1 \le l \le n-k+1\)). Когда дверь касается пиков гор, она разламывается на две части, после этого эти части продолжат падать в разных половинах и также ломаться на части при касании пиков гор и так далее. Формально, количество частей, на которое разобьется дверь, будет равно \(p+1\), где \(p\) — количество пиков на отрезке \([l,l+k-1]\).

Настя хочет сломать ее на максимальное количество кусочков. Помогите ей выбрать такой отрезок гор \([l, l+k-1]\), что количество пиков на нём — максимально. Если существует несколько оптимальных отрезков, Настя желает найти такой, для которого значение \(l\) — минимально.

Формально, то вам нужно выбрать такой отрезок гор \([l, l+k-1]\), на котором количество пиков максимально. Среди всех таких отрезков, вам нужно найти отрезок, имеющий минимальное значение \(l\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке набора находятся два целых числа \(n\) и \(k\) (\(3 \leq k \leq n \leq 2 \cdot 10^5\))  — количество гор и длина Настиной двери.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10 ^ 9\), \(a_i \neq a_{i + 1}\)), задающие высоты гор.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа \(t\) и \(l\)  — максимальное количество частей, на которое может разбиться дверь, и левую границу отрезка длины \(k\), на который надо сбросить дверь.

Примечание

В первом примере нужно выбрать отрезок гор со \(2\) по \(7\), на этом отрезке индексы \(3\) и \(6\) являются пиками, поэтому ответ равен \(3\) (всего \(2\) пика, значит дверь разломится на \(3\) части). Не трудно заметить, что отрезки гор \([1, 6]\) и \([3, 8]\) не подойдут, так как на них всего \(1\) пик (для первого отрезка индекс \(6\) не является пиком, а для второго отрезка индекс \(3\) не является пиком).

Во втором примере нужно выбрать отрезок гор со \(2\) по \(4\), на этом отрезке индекс \(3\) является пиком, поэтому ответ равен \(2\) (всего \(1\) пик, значит дверь разломится на \(2\) части).

В третьем примере нужно выбрать отрезок гор с \(1\) по \(4\), на этом отрезке индекс \(3\) является пиком, поэтому ответ равен \(2\) (всего \(1\) пик, значит дверь разломится на \(2\) части). Можно заметить, что на отрезках \([2, 5]\), \([4, 7]\) и \([5, 8]\) количество пиков также равно \(1\), но у этих отрезков левая граница больше, чем у отрезка \([1, 4]\), поэтому они не являются правильным ответом.

A. Получи два нуля

жадные алгоритмы математика *1000

Вам заданы два числа \(x\) и \(y\). Вы можете выполнять операции двух типов:

  1. Заплатить \(a\) долларов и увеличить либо уменьшить любое из чисел на \(1\). Например, если \(x = 0\) и \(y = 7\) возможны четыре варианта после такой операции:
    • \(x = 0\), \(y = 6\);
    • \(x = 0\), \(y = 8\);
    • \(x = -1\), \(y = 7\);
    • \(x = 1\), \(y = 7\).

  2. Заплатить \(b\) долларов и увеличить либо уменьшить оба числа на \(1\). Например, если \(x = 0\) и \(y = 7\) возможны два варианта после такой операции:
    • \(x = -1\), \(y = 6\);
    • \(x = 1\), \(y = 8\).

Ваша задача сделать оба числа равными нулю одновременно, т.е. достичь состояния \(x = y = 0\). Других каких-либо требований нет. В частности, переход из \(x=1\), \(y=0\) в \(x=y=0\) допустим.

Посчитайте минимально количество долларов, которое вам нужно потратить для этого.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(x\) и \(y\) (\(0 \le x, y \le 10^9\)).

Вторая строка каждого набора входных данных содержит два числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

Выходные данные

На каждый набор входных данных выведите ответ — минимальное количество долларов, которое придется потратить.

Примечание

В первом наборе входных данных вы можете применить следующие операции: первую, вторую и первую. Таким образом, вы потратите \(391 + 555 + 391 = 1337\) долларов.

Во втором наборе входных данных оба числа равны нулю изначально, а значит вам не нужно ничего тратить.

D. Наборы входных данных

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1900

Итак, вы решили провести свой раунд на Codeforces. Приготовили задачи: условия, решения, чекеры, валидаторы, тесты... И тут внезапно ваш координатор просит вас заменить все ваши тесты в самой простой задачи на наборы входных данных!

Изначально каждый тест в данной задаче — это просто массив. Максимальный размер массива равен \(k\). Для простоты будем считать, что содержимое массива не важно. У вас есть \(n\) тестов; \(i\)-й тест — это массив размера \(m_i\) (\(1 \le m_i \le k\)).

Ваш координатор просит вас распределить все ваши массивы по нескольким наборам входных данных. Каждый набор может включать в себя несколько массивов. Однако, в каждом наборе входных данных должно быть не больше \(c_1\) массивов размера больше или равного \(1\) (\(\ge 1\)), не больше \(c_2\) массивов размера больше или равного \(2\), \(\dots\), не больше \(c_k\) массивов размера больше или равного \(k\). Также \(c_1 \ge c_2 \ge \dots \ge c_k\).

Теперь ваша задача — составить новые наборы входных данных так, чтобы:

  • каждый из изначальных массивов встречается ровно в одном наборе входных данных;
  • для каждого набора тестовых данных выполняются приведенные условия;
  • количество наборов тестовых данных минимально возможно.

Выведите минимальное количество наборов тестовых данных, которое можно достичь, а также размеры массивов в каждом наборе входных данных.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — изначальное количество тестов и ограничение на размер каждого массива.

Во второй строке записаны \(n\) целых чисел \(m_1, m_2, \dots, m_n\) (\(1 \le m_i \le k\)) — размеры массивов в изначальных тестах.

В третьей строке записаны \(k\) целых чисел \(c_1, c_2, \dots, c_k\) (\(n \ge c_1 \ge c_2 \ge \dots \ge c_k \ge 1\)); \(c_i\) — это максимальное количество массивов размера больше или равного \(i\), которые могут быть внутри одного набора входных данных.

Выходные данные

В первой строке выведите одно целое число \(ans\) (\(1 \le ans \le n\)) — минимальное количество наборов входных данных, которое можно достичь.

Каждая из следующих \(ans\) строк должна содержать описание набора входных данных в следующем формате:

\(t\) \(a_1\) \(a_2\) \(\dots\) \(a_{t}\) (\(1 \le t\le n\)) — в наборе входных данных содержится \(t\) массивов, \(a_i\) — это размер \(i\)-го массива в этом наборе входных данных.

Каждый из изначальных массивов должен содержаться в ровно одном наборе входных данных. В частности, это подразумевает, что сумма всех значений \(t\) по всем \(ans\) наборам входных данных должна быть равна \(n\).

Обратите внимание, что ответ существует всегда, потому что \(c_k \ge 1\) (а следовательно \(c_1 \ge 1\)).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере не существует способа распределить все тесты по меньше, чем \(3\), наборам входных данных. Данный ответ удовлетворяет всем условиям: в каждом наборе входных данных не больше \(4\) массивов размера больше или равного \(1\) и не больше \(1\) массива размера больше или равного \(2\) и \(3\).

Обратите внимание, что существует несколько правильных ответов на данный тест. Например, наборы входных данных с размерами \([[2], [1, 2], [3]]\) тоже будут правильными.

Однако, наборы тестовых данных с размерами \([[1, 2], [2, 3]]\) будут неправильными, потому что во втором наборе входных данных есть \(2\) массива размера больше или равного \(2\).

Обратите внимание на разницу между третьим и четвертым примером. В третьем примере можно собрать до \(5\) массивов размера больше или равного \(1\) в набор входных данных, поэтому одного набора достаточно. А в четвертом примере можно иметь не больше \(1\) массива. Поэтому каждый массив приходится выделять в отдельный набор входных данных.

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}]\).

D. Одинаковая палиндромная сумма

жадные алгоритмы Перебор Структуры данных *1700

Вам задан массив \(a\), состоящий из \(n\) целых чисел (гарантируется, что \(n\) четное, то есть делится на \(2\)). Все \(a_i\) не превосходят некоторое число \(k\).

Ваша задача — заменить минимальное количество элементов (под заменой понимается следующая операция: выбрать некоторый индекс \(i\) от \(1\) до \(n\) и заменить \(a_i\) на некоторое целое число в отрезке \([1; k]\)) так, чтобы удовлетворялись следующие условия:

  • после всех замен все \(a_i\) — положительные целые числа, не превосходящие \(k\);
  • для всех \(i\) от \(1\) до \(\frac{n}{2}\) верно следующее равенство: \(a_i + a_{n - i + 1} = x\), где \(x\) должен быть одинаковым для всех \(\frac{n}{2}\) пар элементов.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5, 1 \le k \le 2 \cdot 10^5\)) — длину \(a\) и максимально возможное значение \(a_i\) соответственно. Гарантируется, что \(n\) четное (то есть делится на \(2\)). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\)\(i\)-й элемент в \(a\).

Гарантируется, что сумма чисел \(n\) (так же, как и сумма чисел \(k\)) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum k \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите в ответ на него — минимальное количество элементов, которое нужно заменить в \(a\), чтобы удовлетворить все условия задачи.

E. Распределение весов

графы жадные алгоритмы кратчайшие пути Перебор сортировки *2100

Вам задан неориентированный невзвешенный граф, состоящий из \(n\) вершин и \(m\) ребер (который представляет карту Бертауна), а также массив цен \(p\) длины \(m\). Гарантируется, что между каждой парой вершин (районов) существует путь.

Майк планирует совершить путешествие из вершины (района) \(a\) в вершину (район) \(b\), а затем из вершины (района) \(b\) в вершину (район) \(c\). Он может посещать один и тот же район дважды или даже большее число раз. Но есть небольшая проблема: власти города хотят ввести цену за использование дорог, таким образом, что если кто-то проходит по ней, то он должен заплатить цену, соответствующую этой дороге (он платит каждый раз, когда проходит по дороге). Список используемых цен \(p\) готов и они просто хотят распределить его между всеми дорогами в городе таким образом, что каждая цена из массива соответствует ровно одной дороге.

Вы являетесь хорошим другом Майка (и, внезапно, мэром Бертауна) и хотите помочь сделать его путешествие настолько дешевым, насколько это возможно. Таким образом, ваша задача заключается в том, чтобы распределить цены между дорогами таким образом, что если Майк выберет оптимальный путь, то цена его путешествия будет минимально возможной. Заметьте, что вы не можете перераспределять цены после после начала путешествия.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит пять целых чисел \(n, m, a, b\) и \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(n-1 \le m \le min(\frac{n(n-1)}{2}, 2 \cdot 10^5)\), \(1 \le a, b, c \le n\)) — количество вершин, количество ребер и районы в путешествии Майка.

Вторая строка набора тестовых данных содержит \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le 10^9\)), где \(p_i\) равно \(i\)-й цене из массива.

Следующие \(m\) строк набора тестовых данных описывают ребра: ребро \(i\) предствалено парой целых чисел \(v_i\), \(u_i\) (\(1 \le v_i, u_i \le n\), \(u_i \ne v_i\)), которые означают индексы вершин, соединенных ребром. Гарантируется, что в графе не существует петель и кратных ребер, то есть для каждой пары (\(v_i, u_i\)) в списке ребер не существует других пар (\(v_i, u_i\)) или (\(u_i, v_i\)), а также для каждой пары \((v_i, u_i)\) выполняется условие \(v_i \ne u_i\). Гарантируется, что заданный граф является связным.

Гарантируется, что сумма \(n\) (также как и сумма \(m\)) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum m \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — минимально возможную цену путешествия Майка, если вы распределите цены между ребрами оптимально.

Примечание

Одно из возможных решение первого набора тестовых данных из примера:

Одно из возможных решение второго набора тестовых данных из примера:

F. Восстановить перестановку по отсортированным отрезкам

жадные алгоритмы Конструктив Перебор реализация Структуры данных *2400

Мы загадали перестановку \(p\), состоящую из \(n\) целых чисел. Перестановкой длины \(n\) называется массив длины \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз. Эта перестановка вам неизвестна.

Для каждой позиции \(r\) от \(2\) до \(n\) мы выбрали некоторый другой индекс \(l\) (\(l < r\)) и дали вам отрезок \(p_l, p_{l + 1}, \dots, p_r\) в отсортированном порядке (то есть мы переставили элементы на этом отрезке так, что элементы на этом отрезке оказались отсортированными). Таким образом, вам задан ровно \(n-1\) отрезок первоначальной перестановки, но элементы внутри каждого отрезка отсортированы. Отрезки даны вам в случайном порядке.

Например, если загаданная перестановка — \(p=[3, 1, 4, 6, 2, 5]\), то возможное заданное множество отрезков:

  • \([2, 5, 6]\)
  • \([4, 6]\)
  • \([1, 3, 4]\)
  • \([1, 3]\)
  • \([1, 2, 4, 6]\)

Ваша задача — найти любую подходящую перестановку (то есть любую перестановку, соответствующую входным данным). Гарантируется, что входные данные соответствуют некоторой перестановке (то есть перестановка существует).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 200\)) — длину перестановки.

Следующая \(n-1\) строка описывает заданные отрезки.

\(i\)-я строка содержит описание \(i\)-го отрезка. Строка начинается с числа \(k_i\) (\(2 \le k_i \le n\)) — длины \(i\)-го отрезка. Затем следуют \(k_i\) целых чисел. Все числа в строке различны, отсортированы по возрастанию, между \(1\) и \(n\), включительно.

Гарантируется, что искомая перестановка \(p\) существует для каждого набора тестовых данных.

Также гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(200\) (\(\sum n \le 200\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ: \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — любую подходящую перестановку (то есть любую перестановку, удовлетворяющую входным данным набора тестовых данных).

D. Составление резюме

Бинарный поиск жадные алгоритмы математика *2700

О нет! Скоро закончится время, когда еще можно подать заявку на стажировку в IT компанию, а вы медлили, участвуя в контестах вместо этого! (Давайте пока притворимся, что в наше неопределенное время можно будет найти работу.)

Вы сделали много проектов по программированию. Существует ровно \(n\) типов проектов и вы сделали \(a_i\) проектов типа \(i\). Ваше резюме имеет ограниченный размер, но вы хотите аккуратно выбрать проекты, чтобы максимизировать шанс того, что вас возьмут на работу.

Вы хотите включить несколько проектов одного типа, чтобы подчеркнуть вашу компетентность, но вы также не хотите включать их так много, что среди них начнут появляться некачественные проекты. Поэтому, вы придумали следующую формулу, которая является хорошим индикатором того, что вас возьмут на работу:

\(\) f(b_1,\ldots,b_n)=\sum\limits_{i=1}^n b_i(a_i-b_i^2). \(\)

Здесь \(b_i\) обозначает количество проектов типа \(i\), которое вы включите в ваше резюме. Конечно, вы не можете включить в резюме больше проектов, чем вы сделали, поэтому для всех \(i\) должно быть выполнено \(0\le b_i \le a_i\).

В вашем резюме хватает места для \(k\) проектов, и вы абсолютно точно не будете приняты на работу, если в вашем резюме будет пустая строчка. Поэтому вы хотите, чтобы было выполнено \(\sum\limits_{i=1}^n b_i=k\).

Найдите значения \(b_1,\ldots, b_n\), которые максимизируют значение \(f(b_1,\ldots,b_n)\) при том, что все описанные условия выполнены.

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) (\(1\le n\le 10^5\), \(1\le k\le \sum\limits_{i=1}^n a_i\)) — количество типов проектов и размер резюме, соответственно.

В следующей строке находятся \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le 10^9\)), \(a_i\) равно количеству сделанных проектов типа \(i\).

Выходные данные

В единственной строке выведите \(n\) целых чисел \(b_1,\ldots, b_n\), для которых достигается максимальное значение \(f(b_1,\ldots,b_n)\) в условиях ограничений \(0\le b_i\le a_i\) и \(\sum\limits_{i=1}^n b_i=k\). Если существует несколько возможных решений, выведите любое.

Обратите внимание, что вы не должны выводить само значение \(f(b_1,\ldots,b_n)\).

Примечание

В первом тесте оптимальный ответ это \(f=-269\). Обратите внимание, что большее значение \(f\) возможно, только если мы уберем ограничение \(\sum\limits_{i=1}^n b_i=k\).

Во втором тесте оптимальный ответ \(f=9\).

B. Сборы по программированию

*особая задача жадные алгоритмы *1400

Берляндский государственный университет (БГУ) проводит сборы по программированию. Сборы продлятся \(n\) дней, и в эти дни лекторы БГУ планируют прочитать несколько лекций.

Некоторые дни сборов уже запланированы как экскурсионные дни, и в эти дни не следует проводить лекции. Чтобы участники не слишком устали от обучения программированию, количество лекций для каждого дня не должно превышать \(k_1\), а количество лекций для каждой пары последовательных дней не должно превышать \(k_2\).

Можете ли вы посчитать максимальное количество лекций, которое можно провести? Формально, необходимо определить максимальное целое число \(m\), для которого можно выбрать \(n\) неотрицательных целых чисел \(c_1\), \(c_2\), ..., \(c_n\) (где \(c_i\) — количество лекций, проведенных в течение дня \(i\)), чтобы:

  • \(c_1 + c_2 + \dots + c_n = m\);
  • для каждого экскурсионного дня \(d\), \(c_d = 0\);
  • для каждого дня \(i\), \(c_i \le k_1\);
  • для каждой пары последовательных дней \((i, i + 1)\), \(c_i + c_{i + 1} \le k_2\).

Обратите внимание, что можно не проводить лекции в дни, в которые нет экскурсий (т. е., \(c_i = 0\) возможно даже в том случае, если \(i\) не является экскурсионным днем).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Затем следуют наборы входных данных, каждый из которых состоит из двух строк. Первая строка содержит три целых числа \(n\), \(k_1\), \(k_2\) (\(1 \le n \le 5000\); \(1 \le k_1 \le k_2 \le 200\,000\)).

Вторая строка содержит одну строку \(s\), состоящую из ровно \(n\) символов, каждый из которых является 0 или 1. Если \(s_i = 0\), то день \(i\) является днем экскурсий (поэтому в этот день не должно быть лекций); если \(s_i = 1\), то день \(i\) не является экскурсионным днем.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение \(m\) (максимальное количество лекций, которое можно провести).

C. Весенняя уборка

*особая задача жадные алгоритмы сортировки *1600

Таня планирует разобрать свой книжный шкаф. В шкафу есть \(n\) полок для книг, на \(i\)-й полке лежит \(a_i\) книг. Таня будет довольна, если на каждой полке будет лежать не более \(k\) книг.

Таня может совершать одну из двух операций, чтобы достичь желаемого:

  1. Выбрать ровно одну книжную полку и убрать все книги с нее в кладовку (то есть выбрать некоторое \(i\) и присвоить \(a_i := 0\)). На эту операцию она тратит \(x\) секунд.
  2. Взять все книги со всех \(n\) полок и распределить их по всем \(n\) полкам равномерно (определение этого понятия написано ниже). На эту операцию она тратит \(y\) секунд.

Рассмотрим последовательность \(a\) из \(n\) целых чисел. Тогда ее равномерное распределение — это такая последовательность \(b\) из \(n\) целых чисел, что сумма \(b\) равна сумме \(a\), а значение \(max(b) - min(b)\) минимально возможное.

Например, если массив \(a=[5, 4, 3]\), то его равномерное распределение — это \(b=[4, 4, 4]\). Если \(a=[1, 2, 3, 4]\), то его равномерное распределение — это \(b=[2, 3, 3, 2]\) (или любая другая перестановка этого массива).

Ваша задача — найти минимальное количество секунд, за которое Таня сможет получить книжный шкаф с не более чем \(k\) книгами на каждой полке.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов.

В первой строке набора входных данных записаны четыре целых числа \(n, k, x\) и \(y\) (\(1 \le k \le n \le 2 \cdot 10^5; 1 \le x, y \le 10^4\)) — количество книжных полок, максимальное разрешенное количество книг на каждой полке и количество секунд, которые Таня тратит на первую и вторую операцию, соответственно.

Во второй строке набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — это количество книг на \(i\)-й полке.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите ответ — минимальное количество секунд, необходимые Тане, чтобы получить книжный шкаф такой, что на каждой полке стоит не более \(k\) книг.

Примечание

В первом наборе входных данных примера будет оптимальным совершить первую операцию над пятой книжной полкой. Таким образом, массив \(a\) станет равен \([1, 2, 2, 3, 5] \rightarrow [1, 2, 2, 3, 0]\).

Во втором наборе входных данных примера будет оптимальным совершить первую операцию над второй книжной полкой, а затем совершить вторую операцию. Таким образом, массив \(a\) станет равен \([1, 5, 1, 5, 5] \rightarrow [1, 0, 1, 5, 5] \rightarrow [2, 2, 3, 3, 2]\).

В третьем наборе входных данных примера будет оптимальным совершить вторую операцию. Таким образом, массив \(a\) станет равен \([1, 2, 5, 3, 5] \rightarrow [4, 3, 3, 3, 3]\).

В четвертом наборе входных данных примера будет оптимальным совершить первую операцию над первой и второй книжными полками. Таким образом, массив \(a\) станет равен \([4, 4, 1, 1] \rightarrow [0, 0, 1, 1]\).

В пятом наборе входных данных примера будет оптимальным использовать вторую операцию. Таким образом, массив \(a\) станет равен \([4, 4, 1, 1] \rightarrow [2, 3, 2, 3]\).

D. Построение подземелья

*особая задача графы жадные алгоритмы *1600

Поликарп разрабатывает RPG-видеоигру, главный герой которой сражается с монстрами и ищет сокровища в подземельях. Сейчас Поликарп добавляет в игру одно из подземелий.

Подземелье состоит из \(n\) комнат, соединенных \(m\) двусторонними туннелями, используя которые, можно добраться из любой комнаты в любую другую комнату. Комнаты охраняются монстрами (количество монстров в \(i\)-й комнате равно \(a_i\)), а в туннелях можно найти золотые монеты (количество монет в \(i\)-м туннеле равно \(w_i\)). \(i\)-й двусторонний туннель соединяет комнаты \(v_i\) и \(u_i\).

Поликарп уже определил количество монет в каждом туннеле (значения \(w_i\) уже известны), и теперь он пытается распределить монстров по комнатам (значения \(a_i\) пока не известны). Поликарп хочет выбрать количество монстров в каждой комнате так, чтобы выполнялись два условия:

  • количество монет в туннеле, соединяющем комнаты \(x\) и \(y\), равно минимум из \(a_x\) и \(a_y\). То есть, для каждого туннеля \(i\) выполняется \(w_i = \min (a_{v_i}, a_{u_i})\);
  • суммарное количество монстров во всех комнатах как можно меньше. То есть, значение \(a_1 + a_2 + \dots + a_n\) — минимально возможное.

Помогите Поликарпу выбрать значения \(a_1\), \(a_2\), ..., \(a_n\), или скажите ему, что это невозможно и в плане подземелья что-то необходимо поменять.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100000\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 200000\); \(n - 1 \le m \le \min(200000, \frac{n(n-1)}{2})\)) — количество комнат и туннелей в подземелье, соответственно.

Затем следуют \(m\) строк, каждая из которых содержит описание туннеля. В \(i\)-й строке заданы три целых числа \(v_i\), \(u_i\) и \(w_i\) (\(1 \le v_i, u_i \le n\); \(v_i \ne u_i\); \(1 \le w_i \le 10^9\)), обозначающих двусторониий туннель между комнатами \(v_i\) и \(u_i\), содержащий \(w_i\) монет. В каждом наборе входных данных система туннелей связна (можно добраться из любой комнаты в любую другую по туннелям). Каждая пара комнат соединена не более чем одним туннелем.

Сумма \(n\) по всем наборам входных данных не превосходит \(200000\). Аналогично, сумма \(m\) по всем наборам входных данных не превосходит \(200000\).

Выходные данные

Выведите ответ на каждый набор входных данных следующим образом:

Если невозможно найти значения \(a_1\), \(a_2\), ..., \(a_n\), удовлетворяющие всем условиям, в единственной строке выведите NO. Иначе выведите YES в первой строке и \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) во второй строке. Если возможных ответов несколько, выведите любой из них.

F. Dune II: Battle For Arrakis

*особая задача жадные алгоритмы математика Структуры данных *2000

Вы дошли до последней миссии в очень старой и очень популярной стратегии Dune II: Battle For Arrakis. Карта этой миссии может быть представлена в виде прямоугольной матрицы размера \(n \times m\). Изначально, в клетке \((i, j)\) стоит \(a_{i, j}\) отрядов вашей армии.

Вы готовитесь к последней битве, поэтому вы хотите собрать всю вашу армию в ровно одну клетку на карте (то есть \(nm-1\) клетка должна содержать \(0\) отрядов, а оставшаяся клетка должна содержать всю армию).

Чтобы достичь этого, вы можете совершить несколько (возможно, ноль) ходов. За один ход можно выбрать ровно один отряд из некоторой клетки и отправить его в соседнюю по стороне клетку. То есть из клетки \((i, j)\) можно отправить отряд в клетки:

  • \((i - 1, j)\);
  • \((i, j - 1)\);
  • \((i + 1, j)\);
  • \((i, j + 1)\).

Разумеется, вы хотите собрать армию в ровно одной клетке как можно быстрее. Поэтому вы хотите узнать минимальное необходимое для этого число ходов.

Также, жизнь не стоит на месте, а ситуация на карте меняется. Всего есть \(q\) изменений, \(i\)-е изменение задается тремя целыми числами \(x, y, z\). Это изменение затрагивает армию в клетке \((x, y)\): после этого изменения количество отрядов в клетке \((x, y)\) становится \(z\) (то есть \(a_{x, y}\) заменяется на \(z\)).

Также вы хотите знать для каждого \(i\) минимальное количество ходов, необходимое для сбора всей армии в ровно одной клетке после применения первых \(i\) изменений к изначальной карте. Другими словами, карта после \(i\)-го изменения равна изначальной карте с первыми \(i\) изменениями, примененными к ней.

Входные данные

В первой строке записаны три целых числа \(n, m\) и \(q\) (\(1 \le n, m \le 1000; 1 \le q \le 5000\)) — размеры матрицы и количество изменений, соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, где \(j\)-е число \(i\)-й строки — это \(a_{i, j}\) (\(1 \le a_{i, j} \le 10^9\)) — количество отрядов в клетке \((i, j)\).

В каждой из следующих \(q\) строк записаны три целых числа, в \(i\)-й строке записаны три целых числа \(x_i, y_i\) и \(z_i\) (\(1 \le x_i \le n; 1 \le y_i \le m; 1 \le z_i \le 10^9\)) — клетка, в которой изменяется количество отрядов, и новое количество отрядов, соответственно.

Выходные данные

Выведите \(q+1\) целое число \(r_0, r_1, r_2, \dots, r_n\), где \(r_0\) — это минимальное количество ходов, необходимые для сбора всей армии в ровно одной клетке, а \(r_i\) для каждого \(i\) от \(1\) до \(q\) — минимальное количество ходов, необходимые для сбора всей армии в ровно одной клетке, после \(i\) изменений.

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

A. Феникс и баланс

жадные алгоритмы математика *800

У Феникса есть \(n\) монет с весами \(2^1, 2^2, \dots, 2^n\). Он знает, что \(n\) — четное.

Он хочет сложить монеты в две кучки так, что в каждой кучке будет ровно \(\frac{n}{2}\) монет и разница суммарных весов между кучками будет минимальна. Формально, обозначим за \(a\) сумму весов в первой кучке, а за \(b\) — сумму весов во второй. Помогите Фениксу минимизировать \(|a-b|\), то есть модуль числа \(a-b\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 30\); \(n\) — четное) — количество монет в распоряжении Феникса.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможную разницу весов между двумя кучками.

Примечание

В первом наборе входных данных, у Феникса есть две монеты с весами \(2\) и \(4\). Как бы он ни разделил монеты, разница будет равна \(4-2=2\).

Во втором наборе входных данных, у Феникса есть четыре монеты с весами \(2\), \(4\), \(8\) и \(16\). Фениксу выгодно положить монеты с весами \(2\) и \(16\) в одну кучку, а монеты с весами \(4\) и \(8\) — в другую. Разница будет равна \((2+16)-(4+8)=6\).

B. Феникс и красота

жадные алгоритмы Конструктив сортировки Структуры данных *1400

Феникс любит красивые массивы. Он считает массив красивым, если все его подмассивы длины \(k\) имеют равную сумму. Подмассив массива — это последовательность подряд идущих элементов массива.

У Феникса есть массив \(a\) длины \(n\). Он хочет вставить несколько (возможно, ноль) целых чисел в свой массив, чтобы он стал красивым. Вставляемые числа должны иметь значения от \(1\) по \(n\) включительно. Числа можно вставлять куда угодно (даже перед первым или после последнего элемента). Феникс не пытается минимизировать количество вставленных чисел.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)).

Во второй строке каждого набора задано \(n\) целых чисел через пробел (\(1 \le a_i \le n\)) — первоначальный массив Феникса. Массив уже может быть красивым, а может и не быть.

Выходные данные

Для каждого набора входных данных, если невозможно получить крассивый массив, выведите -1. Иначе, выведите две строки.

В первой строке выведите длину красивого массива \(m\) (\(n \le m \le 10^4\)). Вам не нужно минимизировать \(m\).

Во второй строке выведите \(m\) целых чисел через пробел (\(1 \le b_i \le n\)) — красивый массив, который Феникс сможет получить вставляя несколько (возможно, ноль) целых чисел в свой массив \(a\). Вы можете выводить числа, которых не было в массиве \(a\) первоначально.

Если существует несколько решений, выведите любое. Гарантируется, что если мы можем сделать массив \(a\) красивым, то мы всегда сможем добиться этого при итоговой длине не более \(10^4\).

Примечание

В первом наборе входных данных, мы можем сделать массив \(a\) красивым, если вставим число \(1\) в позицию \(3\) (между двумя числами \(2\)). Теперь все подмассивы длины \(k=2\) будут иметь одинаковую сумму \(3\). Существует много других возможных решений, например:

  • \(2, 1, 2, 1, 2, 1\)
  • \(1, 2, 1, 2, 1, 2\)

Во втором наборе, массив уже красивый: все подмассивы длины \(k=3\) имеют одинаковую сумму \(5\).

В третьем наборе, можно показать, что невозможно вставить числа так, чтобы сделать массив \(a\) красивым.

В четвертом наборе, предложенный массив \(b\) является красивым — все его подмассивы длины \(k=4\) имеют равную сумму \(10\). Также существуют и другие решения.

C. Феникс и распределение

жадные алгоритмы Конструктив сортировки Строки *1600

У Феникса есть строка \(s\), состоящая из строчных букв латинского алфавита. Он хочет распределить все буквы своей строки по \(k\) непустым строкам \(a_1, a_2, \dots, a_k\) так, что каждая буква из \(s\) попадет ровно в одну из строк \(a_i\). Строки \(a_i\) не обязаны быть подстроками \(s\). Феникс может распределить буквы \(s\) и переупорядочить их внутри каждой строки \(a_i\) так как захочет.

Например, если \(s = \) baba и \(k=2\), Феникс может распределить буквы своей строки множеством способов, в том числе:

  • ba и ba
  • a и abb
  • ab и ab
  • bb и aa

Однако получить такие варианты он не может:

  • baa и ba
  • b и ba
  • baba и пустая строка (\(a_i\) должны быть непустыми)

Феникс хочет разделить свою строку \(s\) на \(k\) строк \(a_1, a_2, \dots, a_k\) так, чтобы минимизировать лексикографически максимальную строку среди них, т. е. минимизировать \(max(a_1, a_2, \dots, a_k)\). Помогите ему найти оптимальное распределение и выведите минимально возможное значение \(max(a_1, a_2, \dots, a_k)\).

Строка \(x\) лексикографически меньше, чем строка \(y\), если либо \(x\) является префиксом \(y\)\(x \ne y\)), либо существует такой индекс \(i\) (\(1 \le i \le min(|x|, |y|))\), что \(x_i\) < \(y_i\) и для всех \(j\) \((1 \le j < i)\) \(x_j = y_j\). Здесь \(|x|\) обозначает длину строки \(x\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Каждый набор состоит из двух строк.

В первой строке каждого набора задано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\))  — длина строки \(s\) и количество не пустых строк, в которые Феникс хочет распределить буквы \(s\), соответственно.

Во второй строке каждого набора задана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных \(\le 10^5\).

Выходные данные

Выведите \(t\) ответов — по одному на набор входных данных; \(i\)-й ответ — минимально возможный \(max(a_1, a_2, \dots, a_k)\) в \(i\)-м наборе.

Примечание

В первом наборе входных данных, одно из оптимальных решений — разбить baba на ab и ab.

Во втором наборе входных данных, одно из оптимальных решений — разбить baacb на abbc и a.

В третьем наборе, одно из оптимальных решений — разбить baacb на ac, ab и b.

В четвертом наборе, одно из оптимальных решений — разбить aaaaa на aa, aa и a.

В пятом наборе, одно из оптимальных решений — разбить aaxxzz на az, az, x и x.

В шестом наборе, одно из оптимальных решений — разбить phoenix на ehinopx.

D. Феникс и наука

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1900

Феникс решил стать ученым! Сейчас он изучает рост бактерий.

Изначально, в день \(1\), есть одна бактерия массой \(1\).

Каждый день некоторое количество бактерий делятся (возможно, все или ни одной). Когда бактерия массой \(m\) делится, она превращается в две бактерии массой \(\frac{m}{2}\) каждая. Например, бактерия массой \(3\) может разделиться на две бактерии массой \(1.5\).

Каждую ночь масса каждой бактерии увеличивается на один.

Феникса интересует вопрос: может ли общая масса бактерий стать в точности равна \(n\). Если может, то его интересует как добиться такой массы за минимальное количество ночей. Помогите ему стать самым лучшим ученым!

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 10^9\)) — суммарная масса бактерий, которой хочет добиться Феникс.

Выходные данные

Для каждого набора входных данных, если не существует способа получить общую массу равную \(n\), выведите -1. В противном случае, выведите две строки.

В первой строке выведите целое число \(d\) — минимальное необходимое количество ночей.

В следующей строке выведите \(d\) целых чисел, где \(i\)-е число обозначает количество бактерий, которые поделятся в \(i\)-й день.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе, можно получить общую массу бактерий ровно \(9\) следующим образом:

  • День \(1\): Бактерия с массой \(1\) делится. Получаем две бактерии с массой \(0.5\).
  • Ночь \(1\): Все бактерии увеличивают массу на один. Получаем две бактерии с массой \(1.5\).
  • День \(2\): Ни одна бактерия не делится.
  • Ночь \(2\): Получаем две бактерии с массой \(2.5\).
  • День \(3\): Обе бактерии делятся. Получаем четыре бактерии с массой \(1.25\).
  • Ночь \(3\): Получаем четыре бактерии с массой \(2.25\).
Суммарная масса равна \(2.25+2.25+2.25+2.25=9\). Можно доказать, что \(3\) — минимальное необходимое количество ночей. Есть и другие способы добиться суммарной массы 9 за 3 ночи.

\( \)

В втором наборе, можно получить общую массу бактерий ровно \(11\) следующим образом:

  • День \(1\): Бактерия с массой \(1\) делится. Получаем две бактерии с массой \(0.5\).
  • Ночь \(1\): Получаем две бактерии с массой \(1.5\).
  • День \(2\): Одна бактерия делится. Получаем три бактерии с массами \(0.75\), \(0.75\) и \(1.5\).
  • Ночь \(2\): Получаем три бактерии с массами \(1.75\), \(1.75\) и \(2.5\).
  • День \(3\): Бактерия с массой \(1.75\) и бактерия с массой \(2.5\) делятся. Получаем пять бактерий с массами \(0.875\), \(0.875\), \(1.25\), \(1.25\) и \(1.75\).
  • Ночь \(3\): Получаем пять бактерий с массами \(1.875\), \(1.875\), \(2.25\), \(2.25\) и \(2.75\).
Суммарная масса равна \(1.875+1.875+2.25+2.25+2.75=11\). Можно доказать, что \(3\) — минимальное необходимое количество ночей. Есть и другие способы добиться суммарной массы 11 за 3 ночи.

\( \)

Во третьем наборе, бактерия не делится в день \(1\), а потом увеличивает массу до \(2\) в ночь \(1\).

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\).

В четвертом примере, Феникс может положить все красные ягоды в корзины, оставив синюю ягоду нетронутой.

F. Феникс и память

графы жадные алгоритмы поиск в глубину и подобное Структуры данных *2600

Феникс хотел сделать фото своих \(n\) друзей, пронумерованных \(1, 2, \dots, n\). Друзья стояли в ряд в некотором порядке. И тут вдруг пришли печенеги с половцами и всех переставили.

Теперь Фениксу нужно восстановить данный порядок, но он почти ничего не помнит! Все, что Феникс запомнил, — что \(i\)-й слева друг имеет номер от \(a_i\) по \(b_i\) включительно. Единственным ли является порядок друзей, подходящий под его воспоминания?

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество друзей.

В \(i\)-й из следующих \(n\) строк заданы два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le b_i \le n\)) — то, что запомнил Феникс про \(i\)-ю позицию слева.

Гарантируется, что информация, которую запомнил Феникс, не противоречива, и существует хотя бы один подходящий порядок.

Выходные данные

Если существует единственный подходящий порядок друзей, выведите YES, а далее \(n\) целых чисел, где \(i\)-е число означает номер \(i\)-го слева друга.

В противном случае, выведите NO. Далее, выведите любые два подходящих порядка на следующих двух строках. Если существует несколько ответов, выведите любой.

B. Орак и медианы

жадные алгоритмы Конструктив математика *2000

У Слайма есть последовательность натуральных чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию Орак может выбрать произвольный отрезок \([l \ldots r]\) этой последовательности и заменить все числа \(a_l, a_{l + 1}, \ldots, a_r\) на значение медианы \(\{a_l, a_{l + 1}, \ldots, a_r\}\).

В этой задаче для мультимножества натуральных чисел \(s\), медиана \(s\) равна \(\lfloor \frac{|s|+1}{2}\rfloor\)-у числу в порядке возрастания в нем. Например, медиана \(\{1,4,4,6,5\}\) равна \(4\), а медиана \(\{1,7,5,8\}\) равна \(5\).

Слайм хочет, чтобы Орак добился \(a_1 = a_2 = \ldots = a_n = k\) с помощью этих операций.

Орак думает, что это невозможно, и он не хочет тратить свое время, поэтому он решил спросить вас, можно ли исполнить желание Слайма, и он может задавать вам запросы такого вида несколько раз.

Входные данные

В первой строке записано одно целое число \(t\): количество запросов.

В первой строке каждого запроса записано два целых числа \(n\ (1\le n\le 100\,000)\) и \(k\ (1\le k\le 10^9)\), во второй строке записаны \(n\) натуральных чисел \(a_1,a_2,\dots,a_n\ (1\le a_i\le 10^9)\)

Сумма \(n\) по всем запросам не превосходит \(100\,000\).

Выходные данные

Вы должны вывести \(t\) строк. В \(i\)-й из них должно быть записано 'yes', если возможно превратить все числа в \(k\) за какое-нибудь число операций или 'no', иначе. Каждая выведенная буква может быть как строчной, так и заглавной.

Примечание

В первом запросе Орак не может превратить все элементы в \(3\).

Во втором запросе \(a_1=6\) уже выполнено.

В третьем запросе Орак может для операции выбрать весь массив и превратить его в \(2\).

В четвертом запросе Орак не может превратить все элементы в \(3\).

В пятом запросе Орак может сначала выбрать \([1,6]\), а затем \([2,10]\).

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\) ушел, но они должны ждать следующего хода, чтобы уйти.

В третьем примере нет никакой информации об игре, так что любой ответ корректен.

A. Замена

жадные алгоритмы реализация сортировки *1300

Маленький Петя очень любит массивы из n целых чисел, каждое из которых лежит в диапазоне от 1 до 109, включительно. Недавно мама подарила ему один такой массив. Пете он сразу не понравился. Он решил выбрать ровно одно число из массива и заменить его на другое целое число, которое также лежит в диапазоне от 1 до 109, включительно. Нельзя менять число само на себя или же не менять ни одного числа вовсе.

После этой замены Петя отсортировал массив по неубыванию. Теперь он хочет узнать, какое наименьшее число могло стоять на каждой позиции после замены и сортировки.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — количество чисел в массиве. Следующая строка содержит n целых чисел, разделенных одним пробелом — описание самого массива. Все элементы массива лежат в диапазоне от 1 до 109, включительно.

Выходные данные

Выведите n целых чисел через пробел — минимальные возможные значения каждого из элементов массива после выполнения одной замены и сортировки.

C. Ноль-один

жадные алгоритмы игры Конструктив *1900

Маленький Петя очень любит играть с маленькой Машей. Недавно мама подарила ему игру под названием «Ноль-один». Петя сразу же предложил Маше сыграть в эту игру.

Перед игрой на столе выкладывается несколько карточек в один ряд, слева направо. На каждой карточке написано число: 0 либо 1. Игроки ходят по очереди, первой ходит Маша. На каждом ходу игроку требуется взять одну карточку со стола, а все остальные карточки сдвинуть так, чтобы закрыть пустоту на месте вытянутой карточки. Например, если перед чьим-то ходом на столе карточки образовывали последовательность 01010101, то после вытягивания четвертой по счету карточки (нумерация с единицы), последовательность станет такой: 0100101.

Игра заканчивается, когда на столе остается ровно две карточки. Цифры на этих карточках задают число в двоичной системе счисления: старший бит находится слева. Цель Маши — минимизировать это число, а цель Пети — максимизировать его.

Перед самым началом игры случилась неприятность. Дети пролили сок на некоторые карточки и цифры на них расплылись. На каждой из испорченных карточек могло быть написано как число 0, так и число 1. Рассмотрим все возможные начальные расклады (до проливания сока). Для каждого из этих раскладов найдем, какие 2 карточки останутся на столе после игры, при условии, что и Петя, и Маша играют оптимально. Упорядоченная пара цифр, написанных на этих двух карточках, называется исходом игры. Ваша задача — найти множество исходов для всех возможных начальных раскладов.

Входные данные

Первая строка содержит последовательность символов, каждый из которых может быть либо «0», либо «1», либо «?». Эта последовательность задает начальный расклад карточек на столе слева направо. Символы «?» означают, что соответствующая карточка перед началом игры была испорчена. Длина последовательности лежит в диапазоне от 2 до 105, включительно.

Выходные данные

Выведите множество исходов для всех начальных раскладов игры. Каждый исход выводите в отдельной строке. Каждый исход представляет собой два символа — цифры, написанные на карточках, оставшихся после конца игры. Исходы должны быть отсортированы лексикографически (см. первый пример).

Примечание

В первом примере возможны 16 вариантов начального расклада карточек. Для варианта 0000 исходом будет 00. Для варианта 1111 исходом будет 11. Для варианта 0011 исходом будет 01. Для варианта 1100 исходом будет 10. Вне зависимости от исходов для всех остальных раскладов, искомое множество содержит все 4 возможных исхода.

В третьем примере возможны всего 2 варианта начального расклада: 111 и 101. Для варианта 111 исходом будет 11. Для варианта 101 исходом будет 01, поскольку Маша на первом ходу может забрать первую слева карточку, после чего игра закончится.

A. Наиболее нестабильный массив

жадные алгоритмы Конструктив математика *800

Вам даны два целых числа \(n\) и \(m\). Вам нужно построить массив \(a\) длины \(n\) состоящий из неотрицательных целых чисел (т.е. целых чисел больших или равных нулю) такой, что сумма элементов этого массива в точности равна \(m\) и величина \(\sum\limits_{i=1}^{n-1} |a_i - a_{i+1}|\) максимально возможная. Напомним, что \(|x|\) — абсолютное значение \(x\).

Другими словами, вы хотите максимизировать сумму абсолютных разностей между соседними (последовательными) элементами. Например, если массив \(a=[1, 3, 2, 5, 5, 0]\), то величина, описанная выше, для этого массива равна \(|1-3| + |3-2| + |2-5| + |5-5| + |5-0| = 2 + 1 + 3 + 0 + 5 = 11\). Заметьте, что этот пример не показывает оптимальный ответ, но показывает, как считается необходимое значение для какого-то массива.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — длину массива и его сумму соответственно.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможное значение \(\sum\limits_{i=1}^{n-1} |a_i - a_{i+1}|\) для массива \(a\), состоящего из \(n\) неотрицательных целых чисел, сумма которых равна \(m\).

Примечание

В первом наборе тестовых данных примера единственный возможный массив — \([100]\), и ответ очевидно равен \(0\).

Во втором наборе тестовых данных примера один из возможных массивов — \([2, 0]\), и ответ равен \(|2-0| = 2\).

В третьем наборе тестовых данных примера один из возможных массивов — \([0, 2, 0, 3, 0]\), и ответ равен \(|0-2| + |2-0| + |0-3| + |3-0| = 10\).

B. Два массива и обмены

жадные алгоритмы сортировки *800

Вам даны два массива \(a\) и \(b\), оба состоят из \(n\) положительных (больших нуля) целых чисел. Также вам задано число \(k\).

За один ход вы можете выбрать два индекса \(i\) и \(j\) (\(1 \le i, j \le n\)) и поменять местами \(a_i\) и \(b_j\) (i.e. \(a_i\) становится \(b_j\) и наоборот). Заметьте, что \(i\) и \(j\) могут совпадать или отличаться (в частности, обмен \(a_2\) с \(b_2\) или обмен \(a_3\) с \(b_9\) оба считаются приемлемыми ходами).

Ваша задача — назвать максимальную возможную сумму, которую вы можете получить в массиве \(a\), если вы сделаете не более \(k\) таких ходов (обменов).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 30; 0 \le k \le n\)) — количество элементов в \(a\) и \(b\) и максимальное количество ходов, которое вы можете сделать. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 30\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Третья строка набора тестовых данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 30\)), где \(b_i\) — это \(i\)-й элемент в \(b\).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимальную возможную сумму, которую вы можете получить в массиве \(a\), если вы можете совершить не более \(k\) обменов.

Примечание

В первом наборе тестовых данных примера вы можете поменять местами \(a_1 = 1\) и \(b_2 = 4\) и тогда получите \(a=[4, 2]\) и \(b=[3, 1]\).

Во втором наборе тестовых данных примера вам не нужно ничего менять.

В третьем наборе тестовых данных примера вы можете поменять местами \(a_1 = 1\) и \(b_1 = 10\), \(a_3 = 3\) и \(b_3 = 10\) и \(a_2 = 2\) и \(b_4 = 10\), и получить \(a=[10, 10, 10, 4, 5]\) и \(b=[1, 9, 3, 2, 9]\).

В четвертом наборе тестовых данных примера вы не можете ничего поменять.

В пятом наборе тестовых данных примера вы можете поменять местами массивы \(a\) и \(b\) и получить \(a=[4, 4, 5, 4]\) и \(b=[1, 2, 2, 1]\).

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. Призыв существ

дп жадные алгоритмы Конструктив Паросочетания Потоки сортировки *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\) не войдет в состав ни одной группы.

E. Реставрационное расстояние

Бинарный поиск жадные алгоритмы математика сортировки Тернарный поиск *2100

Вам нужно отреставрировать стену. Стена состоит из \(N\) столбиков кирпичей, высота \(i\)-го столбика изначально равна \(h_{i}\), высота измеряется количеством кирпичей. После реставрации все \(N\) столбиков должны иметь одинаковую высоту.

Вам доступны следующие операции:

  • положить кирпич на верх одного из столбиков, стоимость этой операции равна \(A\);
  • убрать кирпич с верха одного из непустых столбиков, стоимость этой операции равна \(R\);
  • переложить один кирпич с верха одного из непустых столбиков на верх другого столбика, стоимость этой операции равна \(M\).

Вы не можете создавать дополнительные столбики или игнорировать какие-то из существующих столбиков, даже если их высота стала равна \(0\).

За какую минимальную суммарную стоимость возможно провести реставрацию, то есть сделать высоты всех столбиков равными?

Входные данные

В первой строке записаны четыре целых числа \(N\), \(A\), \(R\), \(M\) (\(1 \le N \le 10^{5}\), \(0 \le A, R, M \le 10^{4}\)) — количество столбиков кирпичей в стене, а также стоимости доступных операций.

Во второй строке записаны \(N\) целых чисел \(h_{i}\) (\(0 \le h_{i} \le 10^{9}\)) — изначальные высоты столбиков.

Выходные данные

Выведите одно целое число — минимальную суммарную стоимость реставрации стены.

A. Освещение парка

жадные алгоритмы математика *800

В связи с эпидемией коронавируса власти города обязали жителей соблюдать социальную дистанцию. Мэр города Семён Сергеевич хочет осветить парк Глухарники, чтобы люди даже ночью могли видеть друг друга и соблюдали дистанцию.

Парк представляет из себя прямоугольную таблицу состоящую из \(n\) строк и \(m\) столбцов, где клетки таблицы — площади, а границы между клетками — улицы. Также улицами являются внешние границы. Каждая улица имеет длину \(1\). Например, у парка размера \(n=m=2\) всего \(12\) улиц.

Вам поручили разработать план освещения парка. Вы можете ставить фонари в серединах улиц. Фонарь освещает две площади, между которыми он стоит (или только одну площадь, если он стоит на границе парка).

Пример парка размеров: \(n=4\), \(m=5\). Освещенные площади отмечены жёлтым цветом. Обратите внимание, что все улицы имеют длины \(1\). Фонари ставятся в середины улиц. На картинке не все площади освещены.

Семён Сергеевич хочет потратить на освещение наименьшее возможное количество денег, но также хочет чтобы люди по всему парку держали социальную дистанцию. Поэтому он просит вас узнать, какое минимальное количество фонарей понадобится, чтобы осветить все площади.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных записывается одной строкой, содержащей два натуральных числа \(n\) и \(m\) (\(1 \le n, m \le 10^4\)) — размеры парка.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ должен содержать одно целое число — минимальное количество фонарей для того, чтобы осветить все площади.

Примечание

Возможное оптимальное расположение фонарей для \(2\)-го набора входных данных примера:

Возможное оптимальное расположение фонарей для \(3\)-го набора входных данных примера:

B. Марья Ивановна нарушает самоизоляцию

жадные алгоритмы сортировки *1000

Марье Ивановне, самой активной бабушке двора, надоело сидеть дома. Она решила организовать обряд против коронавируса.

У неё есть \(n\) подруг-бабушек (сама Марья Ивановна в это количество не входит). Бабушка с номером \(i\) готова прийти на обряд при условии, если в момент её появления во дворе кроме неё там будет как минимум \(a_i\) других бабушек. Обратите внимание, что бабушки могут приходить во двор одновременно. Формально, бабушка \(i\) готова прийти, если количество бабушек пришедших ранее или одновременно с ней больше или равно \(a_i\).

Бабушки собираются во дворе так.

  • Изначально во дворе находится только Марья Ивановна (то есть количество бабушек во дворе равно \(1\)). Все остальные \(n\) бабушек пока сидят по домам.
  • На очередном шаге Марья Ивановна выбирает подмножество бабушек, ни одна из которых ещё не вышла во двор. Каждой из них она обещает, что когда бабушка выйдет, во дворе будет не менее \(a_i\) других бабушек (включая Марью Ивановну). Марья Ивановна может звонить сразу нескольким соседкам. В таком случае выбранные бабушки выйдут во двор одновременно.
  • Вы не можете обманывать бабушек, то есть ситуация, когда \(i\)-я бабушка, после выхода во двор обнаружит, что сейчас во дворе строго меньше \(a_i\) других бабушек (кроме неё самой, но включая Марью Ивановну), запрещена. Обратите внимание, что если несколько бабушек появились во дворе одновременно, то они каждая из них видит в том числе остальных в момент выхода.

Ваша задача — найти, какое максимальное количество бабушек (включая себя) Марья Ивановна может собрать во дворе для проведения обряда «обкуривания от Короны-Вируса». Ведь чем больше людей в одном месте во время карантина, тем эффективнее обряд!

Рассмотрим пример: если \(n=6\) и \(a=[1,5,4,5,1,9]\), то:

  • на первом шаге Марья Ивановна может позвать бабушек с номерами \(1\) и \(5\), каждая из них будет видеть двух бабушек в момент выхода во двор (заметим, что \(a_1=1 \le 2\) и \(a_5=1 \le 2\));
  • на втором шаге Марья Ивановна может позвать бабушек с номерами \(2\), \(3\) и \(4\), каждая из них будет видеть пять бабушек в момент выхода во двор (заметим, что \(a_2=5 \le 5\), \(a_3=4 \le 5\) и \(a_4=5 \le 5\));
  • бабушку номер \(6\) позвать во двор не получится — следовательно, ответ на для такого примера равен \(6\) (сама Марья Ивановна и еще \(5\) суммарно вышедших бабушек).
Входные данные

В первой строке находится одно целое число \(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 2\cdot10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(k\) (\(1 \le k \le n + 1\)) — максимальное возможное количество бабушек во дворе.

Примечание

В первом наборе входных данных примера Марья Ивановна на первом шаге может позвать всех бабушек. Тогда каждая из них увидит пять бабушек, когда выйдет. Иными словами, ни одна не уйдёт домой. Поэтому во дворе будет Марья Ивановна и пять других бабушек.

Во втором наборе входных данных примера никто не сможет находиться во дворе, поэтому Марья Ивановна останется там одна.

Третий набор входных данных примера подробно разобран выше.

В четвёртом тестовом случае Марья Ивановна на первом шаге может позвать бабушек с номерами \(1\), \(2\) и \(3\). Если на втором шаге Марья Ивановна позовёт только \(4\)-ю или только \(5\)-ю, то когда эта бабушка выходила бы во двор, то она бы увидела четверых бабушек, то есть Марья Ивановна по отдельности позвать \(4\)-ю и \(5\)-ю не может. Если она позовёт сразу обеих — \(4\)-ю и \(5\)-ю, то когда они будут выходить, то увидят по \(4+1=5\) бабушек. Несмотря на то, что \(4\)-ю бабушку это устраивает, \(5\)-ю — этот вариант не устраивает. Следовательно, позвать одновременно \(4\)-ю и \(5\)-ю Марья Ивановна тоже не может. То есть во дворе будет только Марья Ивановна и три бабушки из первого шага.

D. Лучший отпуск

Бинарный поиск жадные алгоритмы Перебор реализация *1900

Вы давно влюблены в Коронавирус-тян, но до сих пор не знали, где она живёт. И буквально сейчас выяснили, что она живёт в далёком местечке под названием Ньаху.

Вы немедленно решили взять отпуск на своей скучной работы и навестить Коронавирус-тян. Ваш отпуск длится ровно \(x\) дней, и ровно столько дней вы проведёте в гостях у подруги. В гостях вы проведёте ровно \(x\) подряд идущих дней.

В Ньаху используется очень необычный календарь: всего в году \(n\) месяцев, \(i\)-й месяц длится ровно \(d_i\) дней. Дни в \(i\)-м месяце пронумерованы от \(1\) до \(d_i\). В Ньаху нет високосных годов.

Настроение Коронавирус-тян (и, соответственно, её желание вас обнять) зависит от номера дня в месяце. А именно, в \(j\)-й день месяца вы получаете \(j\) объятий, если вы находитесь в гостях у Коронавирус-тян.

Вы знаете об этой особенности своей подруги и хотите спланировать свою поездку так, чтобы суммарно получить наибольшее возможное количество объятий (и тогда, быть может, вы сможете завоевать сердечко Коронавирус-тян).

Обратите внимание, ваша поездка не обязательно должна начаться и закончиться в одном и том же году.

Входные данные

В первой строке входных данных даны два натуральных числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\)) — количество месяцев в году и количество дней, которые вы можете провести в гостях у подруги.

Во второй строке даны \(n\) целых чисел \(d_1, d_2, \ldots, d_n\), где \(d_i\) — количество дней в \(i\)-м месяце (\(1 \le d_i \le 10^6\)).

Гарантируется, что \(1 \le x \le d_1 + d_2 + \ldots + d_n\).

Выходные данные

Выведите единственное число — максимальное число объятий, которое вы можете получить от Коронавирус-тян за время лучшего отпуска в своей жизни.

Примечание

В первом примере номера дней года (номера в соответствующих месяцах) имеет вид: \(\{1,1,2,3,1\}\). Коронавирус-тян обнимет вас больше всего раз, если вы приедете в третий день года: \(2+3=5\) объятий.

Во втором примере номера дней года (номера в соответствующих месяцах) имеет вид: \(\{1,2,3,1,2,3,1,2,3\}\). Больше всего объятий вы получите если приедете в третий день года: \(3+1+2+3+1+2=12\) объятий.

В третьем примере номера дней имеют вид: \(\{1,2,3,4,1,2, 1,2,3, 1, 1,2,3\}\). Больше всего объятий вы получите если приедете в двенадцатый день года: подруга обнимет вас \(2+3+1+2+3+4=15\) раз.

E. Вы уволены?

жадные алгоритмы Конструктив реализация Структуры данных *2400

Левиан работает бухгалтером в большой компании. Он знает, сколько компания заработала в каждый из \(n\) подряд идущих месяцев — в \(i\)-й месяц у компании доход был равен \(a_i\) (положительный доход означает прибыль, отрицательный доход означает убыль, нулевой доход означает отсутствие изменений). Из-за всеобщей самоизоляции, первые \(\lceil \tfrac{n}{2} \rceil\) месяцев доход мог быть совершенно нестабилен, но потом всё стабилизировалось и последние \(\lfloor \tfrac{n}{2} \rfloor\) месяцев доход был одинаковый.

Левиан решил, что на совете директоров сообщит \(n-k+1\) число — суммарный доход компании за каждые \(k\) подряд идущих месяцев. Формально, для всех \(i\) от \(1\) до \(n-k+1\) он скажет число \(a_i + a_{i+1} + \ldots + a_{i + k - 1}\). Например, если \(a=[-1, 0, 1, 2, 2]\) и \(k=3\), то он сообщит числа \(0, 3, 5\).

К большому сожалению, если хоть один суммарный доход, сообщаемый Левианом, не является прибылью (то есть доход \(\le 0\)), то начальство разозлится и уволит не справившегося с работой бухгалтера.

Спасите карьеру Левиана: найдите такое число \(k\), что за любые \(k\) подряд идущих месяцев компания получила прибыль или скажите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 5\cdot 10^5\)) — количество месяцев, за которые Левиан должен отчитаться.

Вторая строка содержит \(\lceil{\frac{n}{2}}\rceil\) целых чисел \(a_1, a_2, \ldots, a_{\lceil{\frac{n}{2}}\rceil}\), где \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — доход компании в \(i\)-м месяце.

Третья строка содержит одно целое число \(x\) (\(-10^9 \le x \le 10^9\))— доход в каждый месяц с \(\lceil{\frac{n}{2}}\rceil + 1\) до \(n\).

Выходные данные

В единственной строке выведите искомое число \(k\) или \(-1\), если его не существует. Если существует несколько возможных решений, выведите любое из них.

Примечание

В первом примере подходят \(k=2\) и \(k=3\): в первом случае Левиан сообщит числа \(1, 1\) а во втором — одно число \(3\).

Во втором примере ни одно \(k\) не подходит.

В третьем примере ответом является только \(k=4\): он сообщит числа \(1,2,3\).

F. Вкусная печенька

Бинарный поиск жадные алгоритмы Конструктив реализация *2700

О нет!

Вас поймал коронавирус, и теперь вы сидите в тёмном подвале, связанные по ногам (но не по рукам). У вас есть вкусная печенька, а также перед вами стоит ноутбук, и там открыта ваша любимая среда разработки. Коронавирус убеждает вас решить следующую задачу.

Вам дано два массива \(A\) и \(B\) размера \(n\). Вы можете делать операции двух типов с массивом \(A\):

  • Развернуть массив \(A\). То есть массив \([A_1,\ A_2,\ \ldots,\ A_n]\) переходит в \([A_n,\ A_{n-1},\ \ldots,\ A_1]\)
  • Заменить \(A\) на массив его префиксных сумм. То есть массив \([A_1,\ A_2,\ \ldots,\ A_n]\) переходит в \([A_1,\ (A_1+A_2),\ \ldots,\ (A_1+A_2+\ldots+A_n)]\)

Вам нужно понять, можно ли из массива \(A\) получить массив \(B\). Если это можно сделать, то вам придётся восстановить порядок этих операций, минимизировав количество операций второго типа. К счастью, коронавирус сегодня добрый, поэтому он разрешил вам не восстанавливать действия, если минимальное количество операций второго типа превышает \(2\cdot 10^5\). Но коронавирус обижен на вас, поэтому если вы восстанавливаете ответ, то суммарное количество операций не должно превышать \(5\cdot 10^5\).

Решите эту задачу, или коронавирус продлит карантин на пять лет и заставит всю экономику рухнуть!

Входные данные

В первой строке входных данных вводится число \(n\) (\(1\le n \le 2\cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(A_1, A_2, \ldots, A_n\) (\(1 \le A_i \le 10 ^ {12}\)).

Третья строка содержит \(n\) целых чисел \(B_1, B_2, \ldots, B_n\) (\(1 \le B_i \le 10 ^ {12}\)).

Выходные данные

Если из массива \(A\) нельзя получить массив \(B\), в единственной строке выведите «IMPOSSIBLE» (без кавычек).

Если минимальное количество операций второго типа превышает \(2\cdot 10^5\), то в первой строке выведите «BIG» (без кавычек). Во второй строке выведите минимальное количество операций второго типа, которые нужно применить, чтобы из массива \(A\) получить \(B\).

Иначе, в первой строке выведите «SMALL» (без кавычек). Во второй строке выведите суммарное количество операций первого и второго типа \(m \le 5\cdot 10^5\) (гарантируется, что в этом случае существует такая последовательность действий). В третьей строке выведите строку длины \(m\), состоящую из символов «R» и «P» (без кавычек):

\(i\)-й символ должен быть равен 'R', если \(i\)-е действие первого типа, и должен быть равен 'P', иначе.

Если таких последовательностей несколько, выведите любую из них.

Вы можете выводить все символы как в нижнем регистре, так и в верхнем.

Примечание

В первом примере массивы \(A\) и \(B\) уже совпадает, поэтому количество нужных операций \(=0\).

Во втором примере надо \(299999\) раз заменить \(A\) на префиксную сумму, а потом развернуть массив. Так как \(299999>2\cdot 10^5\), то восстанавливать ответ не нужно.

В четвёртом примере из массива \(A\) никак нельзя получить \(B\).

A. Берляндский покер

жадные алгоритмы математика Перебор *1000

В берляндский покер играют с колодой из \(n\) карт, \(m\) из которых являются джокерами. В игре участвует \(k\) игроков (\(n\) делится на \(k\)).

В начале игры каждый игрок берет \(\frac{n}{k}\) карт из колоды (таким образом, каждая карта берется ровно одним игроком). Игрок, у которого максимальное количество джокеров в руке, является победителем, и он получает количество очков, равное \(x - y\), где \(x\) — количество джокеров в руке победителя, а \(y\) — максимальное количество джокеров среди всех других игроков. Если есть два или более игроков с максимальным количеством джокеров, все они являются победителями, и они получают \(0\) очков.

Вот несколько примеров:

  • \(n = 8\), \(m = 3\), \(k = 2\). Если один игрок получает \(3\) джокера и \(1\) простую карту, а другой игрок получает \(0\) джокеров и \(4\) простые карты, то первый игрок является победителем и получает \(3 - 0 = 3\) очка;
  • \(n = 4\), \(m = 2\), \(k = 4\). Два игрока получают простые карты, а два других игрока получают джокеры, так что оба они являются победителями и получают \(0\) очков;
  • \(n = 9\), \(m = 6\), \(k = 3\). Если первый игрок получает \(3\) джокера, второй игрок получает \(1\) джокера и \(2\) простые карты, а третий игрок получает \(2\) джокера и \(1\) простую карту, то первый игрок является победителем, и он получает \(3 - 2 = 1\) очко;
  • \(n = 42\), \(m = 0\), \(k = 7\). Поскольку джокеров нет, каждый получает \(0\) джокеров, каждый является победителем, и каждый получает \(0\) очков.

Для заданных \(n\), \(m\) и \(k\) вычислите максимальное количество очков, которое игрок может получить за победу в игре.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50\), \(0 \le m \le n\), \(2 \le k \le n\), \(k\) делит \(n\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество очков, которое игрок может получить за победу в игре.

Примечание

Тесты из примера разобраны в условии.

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\).

A. Минимальный квадрат

жадные алгоритмы математика *800

Найдите минимальную площадь квадратного участка земли, на котором можно разместить два одинаковых прямоугольных дома размерами \(a \times b\). Стороны домов должны быть параллельны сторонам искомого квадратного участка.

Формально:

  • Вам даны два одинаковых прямоугольника с длинами сторон \(a\) и \(b\) (\(1 \le a, b \le 100\)) — целые положительные числа (вам заданы просто размеры, но не их положения).
  • Найдите квадрат минимальной площади, который содержит в себе оба заданных прямоугольника. Прямоугольники можно поворачивать (оба или любой один), перемещать, но стороны прямоугольников должны быть параллельны сторонам искомого квадрата.

Два прямоугольника могут произвольным образом касаться друг друга (по стороне или углу), но не могут пересекаться. Также прямоугольники могут касаться сторон квадрата, но обязаны полностью находиться внутри него. Поворачивать прямоугольники можно. Изучите примеры для лучшего понимания.

На картинке изображен квадрат, который содержит в себе красный и зеленый прямоугольники.
Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор представляет собой строку, в которой записано два целых числа \(a\), \(b\) (\(1 \le a, b \le 100\)) — стороны прямоугольников.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ должен содержать одно целое число — минимальную площадь квадрата, содержащего два прямоугольника \(a \times b\).

Примечание

Ниже изображены ответы для первых двух наборов тестовых данных:

B. Честный тренер

жадные алгоритмы сортировки *800

Перед вами стоит \(n\) спортсменов. Спортсмены пронумерованы от \(1\) до \(n\) слева направо. Про каждого спортсмена вы знаете его силу — спортсмен с номером \(i\) имеет силу \(s_i\).

Вы хотите разделить всех спортсменов на две команды. В каждой команде должен быть хотя бы один спортсмен, и каждый спортсмен должен быть ровно в одной команде.

Вы хотите, чтобы самый сильный спортсмен из первой команды по силе как можно меньше отличался от самого слабого спортсмена из второй команды. Формально, вы хотите разделить спортсменов на две команды \(A\) и \(B\) так, чтобы величина \(|\max(A) - \min(B)|\) была как можно меньше, где \(\max(A)\) — максимальная сила спортсмена из команды \(A\), а \(\min(B)\) — минимальная сила спортсмена из команды \(B\).

Например, если \(n=5\) и силы спортсменов равны \(s=[3, 1, 2, 6, 4]\), то одно из возможных разделений на команды имеет вид:

  • первая команда: \(A = [1, 2, 4]\),
  • вторая команда: \(B = [3, 6]\).

В этом случае величина \(|\max(A) - \min(B)|\) будет равна \(|4-3|=1\). Этот пример иллюстрирует один из способов оптимального разбиения на две команды.

Выведите минимальное значение \(|\max(A) - \min(B)|\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее записаны \(t\) наборов тестовых данных.

Каждый набор состоит из двух строк. В первой строке содержится целое положительное число \(n\) (\(2 \le n \le 50\)) — количество спортсменов.

В следующей строке содержится \(n\) положительных целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 1000\)), где \(s_i\) — это сила \(i\)-го спортсмена. Обратите внимание, что среди элементов массива \(s\) могут быть равные значения.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное значение величины \(|\max(A) - \min(B)|\) при оптимальном разбиении всех спортсменов на команды. Каждый из спортсменов должен оказаться членом ровно одной из двух команд.

Примечание

Первый набор тестовых данных разобран в условии. Во втором наборе одно из оптимальных разбиений имеет вид \(A=[2, 1]\), \(B=[3, 2, 4, 3]\), поэтому ответ равен \(|2-2|=0\).

C. Похожие пары

жадные алгоритмы Конструктив Паросочетания сортировки *1100

Назовем два числа \(x\) и \(y\) похожими, если они имеют одинаковую четность (одинаковый остаток при делении на \(2\)), или если \(|x-y|=1\). Например, в каждой из пар \((2, 6)\), \((4, 3)\), \((11, 7)\) числа похожи между собой, а в парах \((1, 4)\), \((3, 12)\) — нет.

Вам дан массив \(a\) из \(n\) (число \(n\) четно) целых положительных чисел. Проверьте, существует ли такое разбиение массива на пары, что каждый элемент массива принадлежит ровно одной паре, и в каждой паре числа похожи между собой.

Например для массива \(a = [11, 14, 16, 12]\) существует разбиение на пары \((11, 12)\) и \((14, 16)\). Числа в первой паре похожи, потому что модуль их разности равен единице, а во второй паре — потому что они оба четные.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор задается двумя строками. В первой строке записано четное целое число \(n\) (\(2 \le n \le 50\)) — длина массива \(a\).

Во второй строке записано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)).

Выходные данные

Для каждого набора тестовых данных выведите:

  • YES, если разбиение существует;
  • NO, если разбиения не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе два заданных числа не являются похожими.

В третьем наборе подходит любое разбиение.

G. A/B матрица

жадные алгоритмы Конструктив математика *1900

Вам даны четыре целых положительных числа \(n\), \(m\), \(a\), \(b\) (\(1 \le b \le n \le 50\); \(1 \le a \le m \le 50\)). Найдите любую такую прямоугольную матрицу размера \(n \times m\), что выполняются все следующие условия:

  • в каждой строке матрицы ровно \(a\) единиц;
  • в каждом столбце матрицы ровно \(b\) единиц;
  • все остальные элементы — нули.

Если искомой матрицы не существует, то укажите это.

Например, для \(n=3\), \(m=6\), \(a=2\), \(b=1\) существует такая матрица, удовлетворяющая условиям выше:

\(\) \begin{vmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 \end{vmatrix} \(\)

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор тестовых данных описывается четырьмя целыми положительными числами \(n\), \(m\), \(a\), \(b\) (\(1 \le b \le n \le 50\); \(1 \le a \le m \le 50\)), где \(n\) и \(m\) — размеры матрицы, а \(a\) и \(b\) — ограничения на количества единиц для строк и столбцов, соответственно.

Выходные данные

Для каждого набора тестовых данных выведите:

  • «YES» (без кавычек) и искомую матрицу (если существует несколько ответов, выведите любой), если она существует, или,
  • «NO» (без кавычек), если ее не существует.

Чтобы вывести матрицу \(n \times m\), выведите \(n\) строк, каждая из которых содержит \(m\) чисел \(0\) или \(1\), описывающих очередную строку матрицы. Числа нужно выводить без пробелов.

A. Джонни и вклад

графы жадные алгоритмы Конструктив сортировки *1700

Сегодня Джонни хочет увеличить свой вклад. Его план подразумевает написание \(n\) блогов. Один блог покрывает одну тему, но одна тема может быть покрыта несколькими блогами. Также, некоторые блоги связаны друг с другом ссылками. Каждая пара блогов, связанных ссылкой, должна покрывать две разные темы. Потому что иначе читатели могут заметить, что блоги разделены только для того, чтобы набрать больше вклада. Множество блогов и двусторонние ссылки между некоторыми парами из них называются сетью блогов.

Всего есть \(n\) различных тем, пронумерованных от \(1\) до \(n\), упорядоченных по пониманию Джонни. Структура сети блогов уже приготовлена. Теперь Джонни должен написать все блоги в некотором порядке. Он ленивый, поэтому каждый раз перед написанием блога, он смотрит на все уже написанные соседние блоги (связанные ссылкой с текущим) и выбирает тему с минимальным номером, которая еще не покрыта соседними блогами. Можно заметить, что такая стратегия всегда позволит ему выбрать тему, потому что максимальное количество соседних блогов равно \(n - 1\).

Например, если уже написанные, соседние с текущим, блоги покрывают темы с номерами \(1\), \(3\), \(1\), \(5\) и \(2\), Джонни выберет тему номер \(4\) для текущего блога, потому что темы номер \(1\), \(2\) и \(3\) уже покрыты соседними блогами, а тема номер \(4\) — нет.

Как хороший друг, вы провели некоторые исследования и предсказали наилучшую темы для каждого блога. Не могли бы вы сказать Джонни, в каком порядке он должен писать блоги, чтобы в результате его стратегии каждый блог покрывал выбранную вами тему?

Входные данные

Первая строка содержит два целых числа \(n\) \((1 \leq n \leq 5 \cdot 10^5)\) и \(m\) \((0 \leq m \leq 5 \cdot 10^5)\) — количество блогов и ссылок, соответственно.

Каждая из следующих \(m\) строк содержит два целых числа \(a\) и \(b\) (\(a \neq b\); \(1 \leq a, b \leq n\)), которые означают, что в сети блогов есть ссылка между блогами с номерами \(a\) и \(b\). Гарантируется, что граф сети блогов не содержит кратных ребер.

Последняя строка содержит \(n\) целых чисел \(t_1, t_2, \ldots, t_n\), \(i\)-е из них обозначает желаемую тему для \(i\)-го блога (\(1 \le t_i \le n\)).

Выходные данные

Если решение не существует, выведите \(-1\). Иначе, выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) \((1 \leq p_i \leq n)\), которые обозначают номера блогов в том порядке, в котором Джонни должен их написать. Если существует несколько решений, выведите любое.

Примечание

В первом примере, Джонни начинает с написания блога номер \(2\), у него пока еще нет написанных соседних блогов, поэтому Джонни выбирает тему номер один. Потом он пишет блог номер \(1\), у него есть ссылка на уже написанный второй блог, поэтому Джонни выбирает вторую тему. Наконец, он пишет блог номер \(3\), у него есть ссылки на блоги номер \(1\) и \(2\), поэтому Джонни выбирает третью тему.

Второй пример: Не существует ни одной перестановки, удовлетворяющей всем условиям.

Третий пример: Сначала Джонни пишет блог номер \(2\), который получает тему \(1\). Затем, он пишет блог \(5\), который тоже получает тему \(1\), потому из него нет ссылки на единственный уже написанный блог (номер \(2\)). Затем, он пишет блог \(1\), он получает тему \(2\), потому что из него есть ссылка на блог \(2\) с темой \(1\). Затем, он пишет блог \(3\), из него есть ссылка на блог \(2\), поэтому он получает тему \(2\). Наконец, он пишет блог \(4\), из него есть ссылка на блог \(5\), поэтому он получает тему \(2\).

B. Джонни и гроссмейстер

жадные алгоритмы математика реализация сортировки *1900

Джонни недавно нашел новый отличный туториал: «Как стать гроссмейстером?». В туториале говорится много странных и неожиданных для Джонни вещей, таких как то, что он должен быть терпеливым или что очень важно решать много все более и более сложных задач.

Мальчик нашел онлайн архив с задачами, разделенными по темам. Он выбрал \(p^{k_i}\) задач из \(i\)-й категории (\(p\) — его любимое число). Он хочет решить все эти задачи за две недели (терпение еще слишком сложно для Джонни, поэтому он смотрит только на простые задачи, которые могут быть решены за такой период). Теперь наш будущий гроссмейстер должен решить, какие темы покрыть на первой неделе, а какие на второй. Помогите ему распределить темы таким образом, чтобы нагрузка была равномерной.

Формально, дано \(n\) чисел \(p^{k_i}\), мальчик хочет разделить их на два непересекающихся набора, минимизировав разность между суммами чисел в наборах. Найдите минимальное значение модуля такой разности. Выведите остаток от деления результата на \(10^{9}+7\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 10^5)\) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(p\) \((1 \leq n, p \leq 10^6)\). Вторая строка содержит \(n\) целых чисел \(k_i\) \((0 \leq k_i \leq 10^6)\).

Сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Выведите одно целое число — остаток от деления ответа на \(1\,000\,000\,007\).

Примечание

Вы должны минимизировать модуль разности, а не остаток модуля разности. Например, если минимальная разность равна \(2\), но существует также разбиение, при котором разность равна \(10^9 + 8\), ответ равен \(2\), а не \(1\).

В первом наборе входных данных числа равны: \(4\), \(8\), \(16\), \(16\) и \(8\). Мы можем разделить их на два набора: \({4, 8, 16}\) и \({8, 16}\). Тогда модуль разности между суммами чисел в наборах будет равен \(4\).

D. Джонни и Джеймс

Деревья жадные алгоритмы математика реализация *2900

У Джеймса Бонда, любимого секретного агента Джонни, новая миссия. Есть \(n\) вражеских баз, каждая из которых задана своими координатами, так что мы можем рассматривать их как точки на плоскости.

Базы могут общаться друг с другом, посылая сигнал, который является лучом, из выбранной точки в направлении начала координат или в противоположном направлении. Исключением является центральная база, расположенная в начале координат. Она может посылать сигнал в любом направлении.

Когда какие-то две базы хотят коммуницировать, существует два возможных сценария. Если они лежат на одной прямой с началом координат, одна из них посылает сигнал непосредственно второй. Иначе, из первой базы сигнал посылается на центральную, и оттуда — на вторую. Обозначим расстоянием между двумя базами суммарное Евклидово расстояние, которое сигнал, посланный между ними, должен пройти.

Бонд может повредить все, кроме некоторых \(k\) баз, которые он может выбрать на свое усмотрение. Поврежденная база не может посылать или получать сигнал напрямую, но все еще может передавать его между двумя работающими базами. В частности, Джеймс может повредить центральную базу, и сигнал все еще может быть послан между любыми двумя неповрежденными базами, как и раньше, и расстояние между ними останется неизменным. Какова максимальная сумма расстояний между всеми парами оставшихся баз, которую 007 может достичь, уничтожив ровно \(n - k\) баз?

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) \((2 \leq k \leq n \leq 5 \cdot 10^5)\) — количество баз и количество баз, которое должно остаться, соответственно.

Каждая из следующих \(n\) строк содержит два целых числа \(x\) и \(y\) \((-10^9 \leq x, y \leq 10^9)\), \(i\)-я строка содержит координаты \(i\)-й базы. Гарантируется, что никакие две точки не совпадают и что одна из точек равна \((0, 0)\).

Выходные данные

Вы должны вывести одно число — максимальную возможную сумму расстояний между всеми парами некоторых \(k\) из баз. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает \(10^{-6}\).

Примечание

В первом примере, в оптимальном решении Бонд не разрушает базы с номерами \(4\) и \(6\) (помечены оранжевым):

Следующая иллюстрация показывает оптимальное решение для второго примера. Следующие базы не разрушены: \(2\), \(3\), \(4\), \(5\), \(6\) (помечены оранжевым).

Оптимальное решение для третьего теста изображено на иллюстрации. Только базы с номерами \(3\), \(4\) и \(5\) разрушены. Снова, не разрушенные базы помечены оранжевым.

C. Джонни и ещё одно падение рейтинга

битмаски жадные алгоритмы математика *1400

Последний контест, проведённый на любимой Джонни платформе по спортивному программированию, был встречен довольно позитивно. Однако, рейтинг Джонни снова упал! Он думает, что хотя задачи были неплохие, они не показывают истинный уровень участников.

Теперь мальчик смотрит на рейтинги соседних участников, записанные в двоичной системе счисления. Он считает, что чем больше эти рейтинги различаются, тем более нечестно, что эти участники расположены на соседних позициях. Он определяет различие между двумя числами как количество позиций битов, на которых одно из чисел содержит ноль, а другое — единицу (мы считаем, что числа дополнены ведущими нулями до одинаковой длины). Например, различие между числами \(5 = 101_2\) и \(14 = 1110_2\) равно \(3\), так как \(0101\) и \(1110\) отличаются в \(3\) позициях. Джонни определяет нечестность контеста как сумму таких различий для всех пар соседних участников.

Джонни только что прислал вам последовательность рейтингов и хочет, чтобы вы вычислили нечестность контеста. Вы заметили, что вы получили последовательные целые числа от \(0\) до \(n\). Это странно, но мальчик упорно твердит, что все правильно. Поэтому, помогите ему и вычислите желаемую нечестность для полученной последовательности чисел.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Следующие \(t\) строк содержат описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^{18})\).

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных, вы должны вывести одну строку, содержащую одно целое число — нечестность контеста, если последовательность рейтингов равна \(0\), \(1\), ..., \(n - 1\), \(n\).

Примечание

Для \(n = 5\), мы вычисляем нечестность следующей последовательности (числа от \(0\) до \(5\), записанные в двоичной системе счисления и дополненные ведущими нулями до одинаковой длины):

  • \(000\)
  • \(001\)
  • \(010\)
  • \(011\)
  • \(100\)
  • \(101\)

Различия равны \(1\), \(2\), \(1\), \(3\), \(1\), соответственно. Поэтому, нечестность равна \(1 + 2 + 1 + 3 + 1 = 8\).

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\).

B. Наиболее социально-дистанцированная подпоследовательность

жадные алгоритмы *1300

Для заданной перестановки \(p\) длины \(n\), найдите ее подпоследовательность \(s_1\), \(s_2\), \(\ldots\), \(s_k\) длины хотя бы \(2\) такую, что:

  • \(|s_1-s_2|+|s_2-s_3|+\ldots+|s_{k-1}-s_k|\) является максимально возможным среди всех подпоследовательностей \(p\) длины хотя бы \(2\).
  • среди всех таких подпоследовательностей выберите ту, длина которой \(k\) как можно меньше.

Если несколько подпоследовательностей удовлетворяют этим условиям, вы можете найти любую из них.

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Перестановка длины \(n\) — это массив длины \(n\), в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 10^5\)) — длину перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1\), \(p_2\), \(\ldots\), \(p_{n}\) (\(1 \le p_i \le n\), \(p_i\) попарно различны) — элементы перестановки \(p\).

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных первая строка должна содержать длину найденной подпоследовательности, \(k\). Вторая строка должна содержать \(s_1\), \(s_2\), \(\ldots\), \(s_k\)  — ее элементы.

Если несколько подпоследовательностей удовлетворяют этим условиям, вы можете найти любую из них.

Примечание

В первом тестовом примере есть \(4\) подпоследовательности длиной не менее \(2\):

  • \([3,2]\), что дает нам \(|3-2|=1\).
  • \([3,1]\), что дает нам \(|3-1|=2\).
  • \([2,1]\), что дает нам \(|2-1|=1\).
  • \([3,2,1]\), что дает нам \(|3-2|+|2-1|=2\).

Таким образом, ответ либо \([3,1]\), либо \([3,2,1]\). Поскольку мы хотим, чтобы подпоследовательность была как можно короче, ответ будет \([3,1]\).

C. Ехаб и префиксные MEXы

жадные алгоритмы Конструктив Перебор *1600

Для данного массива \(a\) длины \(n\) найдите другой массив \(b\) длины \(n\) такой, что:

  • для каждого \(i\) \((1 \le i \le n)\) \(MEX(\{b_1\), \(b_2\), \(\ldots\), \(b_i\})=a_i\).

\(MEX\) множества целых чисел равен наименьшему неотрицательному целому числу, которое не принадлежит этому множеству.

Если такого массива не существует, определите это.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(0 \le a_i \le i\)) — элементы массива \(a\). Гарантируется, что \(a_i \le a_{i+1}\) для \(1\le i < n\).

Выходные данные

Если такого массива нет, выведите одну строку, содержащую \(-1\).

В противном случае выведите одну строку, содержащую \(n\) целых чисел \(b_1\), \(b_2\), \(\ldots\), \(b_n\) (\(0 \le b_i \le 10^6\)).

Если есть несколько ответов, выведите любой.

Примечание

Во втором примере допустимы другие ответы, например, \([1,1,1,0]\).

D. Последнее следствие Ехаба

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация *2100

Для связного неориентированного графа с \(n\) вершинами и целого числа \(k\), вы должны, на ваш выбор:

  • или найти независимое множество с ровно \(\lceil\frac{k}{2}\rceil\) вершинами.
  • или найти простой цикл длины не более \(k\).

Независимое множество  — это набор вершин такой, что никакие две из них не связаны ребром. Простой цикл  — это цикл, который не содержит ни одной вершины дважды.

У меня есть доказательство, что для любых входных данных вы всегда можете решить по крайней мере одну из этих задач, но оно слишком тривиально, чтобы поместиться здесь.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\), and \(k\) (\(3 \le k \le n \le 10^5\), \(n-1 \le m \le 2 \cdot 10^5\)) — количество вершин и ребер в графе и параметр \(k\) из условия.

Каждая из следующих \(m\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые обозначают, что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что граф связен и не содержит петель или кратных ребер.

Выходные данные

Если вы решили решить первую задачу, то в первой строке выведите \(1\), а затем строку, содержащую \(\lceil\frac{k}{2}\rceil\) различных целых чисел, не превышающих \(n\)  — вершины в желаемом независимом наборе.

Если же вы решили решить вторую задачу, то в первой строке выведите \(2\), затем строку, содержащую одно целое число, \(c\), представляющее длину найденного цикла, а затем строку, содержащую \(c\) различных целых чисел, не превышающих \(n\) — вершины в нужном цикле, в порядке их появления в цикле.

Примечание

В первом примере:

Обратите внимание, что вывод независимого множества \(\{2,4\}\) тоже зачтется, но вывод цикла \(1-2-3-4\) — нет, потому что его длина должна быть не более \(3\).

Во втором примере:

Обратите внимание, что вывод независимого множества \(\{1,3\}\) или цикла \(2-1-4\) также зачтутся.

В третьем примере:

В четвертом примере:

A. Игра с таблицей

жадные алгоритмы игры реализация *1100

Ashish и Vivek играют в игру на таблице с \(n\) строками и \(m\) столбцами, захватывая клетки. Незахваченные клетки обозначены \(0\), а захваченные клетки обозначены \(1\). Вам дано исходное состояние таблицы.

На каждом ходу, игрок должен захватить одну клетку. Клетку можно захватить, если она еще не захвачена, и она не находится в одной строке или столбце с другой захваченной клеткой. Игра кончается, когда игрок не может сделать ход, в таком случае, он проигрывает.

Если Ashish и Vivek ходят по очереди и Ashish ходит первым, найдите победителя игры если они оба играют оптимально.

Оптимальная игра между двумя игроками означает, что оба игрока выбирают лучшую возможную стратегию, чтобы получить наиболее благоприятный для себя результат игры.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 50)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\), \(m\) \((1 \le n, m \le 50)\) — количество строк и столбцов в таблице.

В каждой из следующих \(n\) строк записаны \(m\) целых чисел, \(j\)-е число на \(i\)-й строке описывает \(a_{i,j}\) \((a_{i,j} \in \{0, 1\})\).

Выходные данные

Для каждого набора входных данных, если Ashish выиграет при правильной игре, выведите «Ashish», иначе выведите «Vivek» (без кавычек).

Примечание

В первом наборе входных данных: Один из возможных исходов игры следующий: Ashish захватывает клетку \((1, 1)\), затем Vivek захватывает клетку \((2, 2)\). Ashish не может захватить ни клетку \((1, 2)\), ни клетку \((2, 1)\), так как клетки \((1, 1)\) и \((2, 2)\) уже захвачены. Таким образом, Ashish проигрывает. Можно показать, что вне зависимости от ходов Ashish, Vivek выиграет. Во втором наборе входных данных: Ashish захватывает клетку \((1, 1)\), единственная клетка, которую можно захватить. После этого у Vivek не будет возможных ходов.

В третьем наборе входных данных: Ashish не может сделать ход, поэтому Vivek выиграет.

В четвертом наборе входных данных: Ashish захватывает клетку \((2, 3)\), у Vivek не останется возможных ходов.

C. Соответствия поворотом

жадные алгоритмы Конструктив реализация Структуры данных *1400

После мистического исчезнования Ashish, каждый из его любимых учеников Ishika и Hriday, получил одну половину секретного сообщения. Эти сообщения могут быть описаны перестановками размера \(n\). Назовем их \(a\) и \(b\).

Напомним, что перестановка из \(n\) элементов это последовательность чисел \(a_1, a_2, \ldots, a_n\), в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Сообщение может быть расшифровано из конфигурации перестановок \(a\) и \(b\), в котором количество совпадающих пар элементов максимально. Пара элементов \(a_i\) и \(b_j\) называется совпадающей, если:

  • \(i = j\), таким образом, у них один и тот же индекс.
  • \(a_i = b_j\)

Его ученикам разрешается совершать следующую операцию произвольное число раз:

  • выбрать число \(k\) и циклически сдвинуть одну из перестановок влево или вправо \(k\) раз.

Циклический сдвиг перестановки \(c\) влево это операция, которая присваивает \(c_1:=c_2, c_2:=c_3, \ldots, c_n:=c_1\) одновременно. Аналогично, циклический сдвиг перестановки \(c\) вправо это операция, которая присваивает \(c_1:=c_n, c_2:=c_1, \ldots, c_n:=c_{n-1}\) одновременно.

Помогите Ishika и Hriday найти наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — размеры массивов.

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le n)\) — элементы первой перестановки.

В третьей строке записаны \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) \((1 \le b_i \le n)\) — элементы второй перестановки.

Выходные данные

Выведите наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Примечание

В первом примере можно сдвинуть \(b\) направо на \(k = 1\). Получившиеся перестановки будут \(\{1, 2, 3, 4, 5\}\) и \(\{1, 2, 3, 4, 5\}\).

Во втором примере не требуется совершать никаких операций. По всем возможным сдвигам \(a\) и \(b\), число совпадающих пар не будет превышать \(1\).

В третьем примере можно сдвинуть \(b\) влево на \(k = 1\). Получившиеся перестановки будут \(\{1, 3, 2, 4\}\) и \(\{2, 3, 1, 4\}\). Позиции \(2\) и \(4\) будут являться совпадающей парой. По всем возможным циклическим сдвигам \(a\) и \(b\), количество совпадающих пар не будет превышать \(2\).

D. Решить лабиринт

графы жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное реализация снм *1700

Vivek столкнулся с интересной задачей. У него есть лабиринт, который можно описать таблицей \(n \times m\). Каждая клетка может быть одного из следующих типов:

  • Пустая — '.'
  • Стена — '#'
  • Хороший человек  — 'G'
  • Плохой человек — 'B'

Единственный выход из лабиринта находится в клетке \((n, m)\).

Человек может перейти в клетку если она не содержит стену и она имеет общую сторону с его текущей клеткой. Vivek хочет заблокировать (заменить на стены) некоторые пустые клетки, чтобы все хорошие люди могли дойти до выхода из лабиринта, но чтобы все плохие люди не могли. Клетку которая исходно содержит 'G' или 'B' нельзя блокировать, но через нее можно проходить.

Ваша задача  — определить, можно ли заменить несколько (ноль или более) пустых клеток на стены, чтобы удовлетворить описанным ограничениям.

Гарантируется, что клетка \((n,m)\) пустая. Vivek разрешается ее блокировать.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\), \(m\) \((1 \le n, m \le 50)\) — количество строк и столбцов в лабиринте.

В каждой из следующих \(n\) строк записаны \(m\) символов. Они описывают исходный лабиринт. Если символ в строке равен '.', тогда соответствующая клетка пустая, если символ равен '#', тогда клетка содержит стену, а 'G' и 'B' обозначают, что клетка содержит хорошего или плохого человека, соответственно.

Выходные данные

Для каждого набора входных данных, выведите «Yes» или «No», в зависимости от того, можно ли заменить некоторые пустые клетки на стены, чтобы удовлетворить описанным ограничениям.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом и во втором наборах входных данных все условия уже выполнены.

В третьем наборе входных данных есть только одна свободная клетка \((2,2)\), и если мы заменим ее на стену, то хороший человек в клетке \((1,2)\) не сможет выйти.

В четвертом наборе входных данных хороший человек в клетке \((1,1)\) не может сбежать с самого начала, поэтому ответ «No».

В пятом наборе входных данных можно заблокировать клетки \((2,3)\) и \((2,2)\).

В последнем наборе входных данных можно заблокировать выход \((2, 2)\).

A. Лопаты и мечи

Бинарный поиск жадные алгоритмы математика *1100

Поликарп играет в известную компьютерную игру (мы не хотим упоминать ее название). В этой игре он может создавать инструменты двух видов — лопаты и мечи. На создание лопаты Поликарп тратит две палки и один алмаз; на создание меча Поликарп тратит два алмаза и одну палку.

Каждый инструмент может быть продан за один изумруд. Как много изумрудов может заработать Поликарп, если у него есть \(a\) палок и \(b\) алмазов?

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два числа \(a\) и \(b\) (\(0 \le a, b \le 10^9\)) — количество палок и алмазов соответственно.

Выходные данные

На каждый набор входных данных выведите число — максимальное количество изумрудов, которое может заработать Поликарп.

Примечание

В первом наборе входных данных Поликарп может заработать два изумруда следующим образом: создать один меч и одну лопату.

Во втором наборе входных данных у Поликарпа нет алмазов, а значит, он не сможет ничего создать.

C. Палиндромные пути

жадные алгоритмы математика *1500

Вам задана матрица из \(n\) строк (пронумерованных от \(1\) до \(n\)) и \(m\) столбцов (пронумерованных от \(1\) до \(m\)). Обозначим за \(a_{i, j}\) число в клетке на пересечении \(i\)-й строки и \(j\)-го столбца, каждое число либо \(0\), либо \(1\).

Изначально в ячейке \((1, 1)\) находится фишка, которая будет перемещена в ячейку \((n, m)\) при помощи последовательности шагов. На каждом шаге фишка перемещается либо в ячейку справа от текущей, либо в ячейку снизу (если фишка сейчас в ячейке \((x, y)\), ее можно переместить либо в \((x + 1, y)\), либо в \((x, y + 1)\)). Фишка не может покидать матрицу.

Рассмотрим все пути фишки из ячейки \((1, 1)\) в ячейку \((n, m)\). Назовем путь палиндромным, если число в первой ячейке пути равно числу в последней ячейке пути, число во второй ячейке равно числу в предпоследней ячейке, и так далее.

Ваша цель — заменить минимальное количество элементов матрицы так, чтобы все пути стали палиндромными.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \le n, m \le 30\)) — размеры матрицы.

Затем следуют \(n\) строк, \(i\)-я из которых содержит \(m\) целых чисел \(a_{i, 1}\), \(a_{i, 2}\), ..., \(a_{i, m}\) (\(0 \le a_{i, j} \le 1\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которое надо заменить.

Примечание

Итоговые матрицы в первых трех примерах:

\(\begin{pmatrix} 1 & 1\\ 0 & 1 \end{pmatrix}\)
\(\begin{pmatrix} 0 & 0 & 0\\ 0 & 0 & 0 \end{pmatrix}\)
\(\begin{pmatrix} 1 & 0 & 1 & 1 & 1 & 1 & 1\\ 0 & 1 & 1 & 0 & 1 & 1 & 0\\ 1 & 1 & 1 & 1 & 1 & 0 & 1 \end{pmatrix}\)

B. Четный массив

жадные алгоритмы математика *800

Вам дан массив \(a[0 \ldots n-1]\) длины \(n\), который состоит из неотрицательных целых чисел. Обратите внимание: массив нумеруется с нуля.

Назовём массив хорошим, если четность каждой позиции совпадает с четностью элемента в ней. Более формально, массив является хорошим, если для всех \(i\) (\(0 \le i \le n - 1\)) выполнено равенство \(i \bmod 2 = a[i] \bmod 2\), где \(x \bmod 2\) — остаток от деления \(x\) на 2.

Например, массивы [\(0, 5, 2, 1\)] и [\(0, 17, 0, 3\)] — хорошие, а массив [\(2, 4, 6, 7\)] — плохой, потому что для \(i=1\) четность \(i\) и \(a[i]\) различна: \(i \bmod 2 = 1 \bmod 2 = 1\), но \(a[i] \bmod 2 = 4 \bmod 2 = 0\).

За один ход вы можете взять любые два элемента массива и поменять их местами (эти элементы не обязательно соседние).

Найдите минимальное количество ходов, за которое можно сделать массив \(a\) хорошим, либо укажите, что это сделать невозможно.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано целое число \(n\) (\(1 \le n \le 40\)) — размер массива \(a\).

Далее следует строка, содержащая \(n\) целых чисел \(a_0, a_1, \ldots, a_{n-1}\) (\(0 \le a_i \le 1000\)) — исходный массив.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество ходов, за которое можно сделать заданный массив \(a\) хорошим, или -1, если это сделать невозможно.

Примечание

В первом наборе тестовых данных в первый ход можно поменять местами элементы на позициях \(0\) и \(1\), а во второй ход поменять местами элементы на позициях \(2\) и \(3\).

Во втором наборе тестовых данных в первый ход надо поменять местами элементы на позициях \(0\) и \(1\).

В третьем наборе тестовых данных нельзя сделать массив хорошим.

C. Социальная дистанция

жадные алгоритмы Конструктив математика *1300

Поликарп с друзьями хочет сходить в новый ресторан. Ресторан представляет из себя \(n\) столиков, расставленных вдоль прямой. За некоторыми столиками уже сидят люди. Столики пронумерованы от \(1\) до \(n\) в порядке слева направо. Состояние ресторана описывается строкой длины \(n\), которая содержит символы '1' (столик занят) и '0' (столик свободен).

Правила ресторана запрещают людям садиться на расстоянии \(k\) или меньше друг от друга. То есть, если человек сидит за столиком номер \(i\), то все столики с номерами от \(i-k\) до \(i+k\) (кроме \(i\)-го) должны быть свободны. Иными словами, разница (то есть модуль разности) номеров между любыми двумя занятыми столиками должна быть строго больше \(k\).

Например, если \(n=8\) и \(k=2\), то:

  • строки «10010001», «10000010», «00000000», «00100000» соответствуют правилам ресторана;
  • строки «10100100», «10011001», «11111111» не соответствуют правилам ресторана, так как в каждой из них есть пара единиц на расстоянии меньшем или равном \(k=2\).

В частности, если состояние ресторана описывается строкой без единиц или строкой с одной единицей, то требование ресторана выполнено.

Вам задана бинарная строка \(s\), которая описывает текущее состояние ресторана. Гарантируется, что для строки \(s\) правила ресторана выполнены.

Найдите максимальное количество свободных столиков, которые можно занять, чтобы не нарушить правила ресторана. Формально, какое максимальное количество нулей можно заменить на единицы так, что требование все еще будет выполняться?

Например, если \(n=6\), \(k=1\), \(s=\) «100010», то ответ на задачу будет \(1\), так как есть только один свободный столик на позиции \(3\), который можно занять в соответствии с правилами ресторана.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2\cdot 10^5\)) — количество столиков в ресторане и минимальное разрешенное расстояние между двумя людьми.

Во второй строке каждого набора записана строка \(s\) длины \(n\), состоящая из нулей и единиц — описание свободных и занятых столиков в ресторане. Заданная строка соответствует правилам ресторана — разница индексов между любыми двумя единицами строго больше \(k\).

Сумма \(n\) по всем наборам тестовых данных в одном тесте не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого тестового набора выведите одно целое число — количество столиков, которые можно дополнительно занять, чтобы не нарушить правила ресторана. Если дополнительных столиков занять нельзя, то, очевидно, надо вывести \(0\).

Примечание

Первый набор тестовых данных разобран в условии.

Во втором наборе тестовых данных ответ \(2\), так как можно выбрать первый и шестой столики.

В третьем наборе тестовых данных нельзя занять никакой свободный столик, не нарушив правила ресторана.

D. Задача на доске

жадные алгоритмы Конструктив реализация сортировки *1800

Поликарп написал на доске некоторую строку \(s\) из строчных букв латинского алфавита ('a'-'z'). Эта строка вам известна и задана во входных данных.

После этого он стёр какие-то буквы из строки \(s\), а оставшиеся буквы он переписал в произвольном порядке. В результате он получил некоторую новую строку \(t\). Её вам и предстоит найти по некоторой дополнительной информации.

Предположим, что длина строки \(t\) равна \(m\), а символы пронумерованы слева направо от \(1\) до \(m\). В таком случае вам задана последовательность из \(m\) целых чисел: \(b_1, b_2, \ldots, b_m\), где \(b_i\) равно сумме расстояний \(|i-j|\) от индекса \(i\) до всех таких индексов \(j\), что \(t_j > t_i\) (считайте, что 'a'<'b'<...<'z'). Иными словами, для вычисления \(b_i\) Поликарп находит все такие индексы \(j\), что в индексе \(j\) находится буква, которая стоит позже в алфавите чем \(t_i\), и суммирует все значения \(|i-j|\).

Например, если \(t\)abzb», то:

  • так как \(t_1\)='a', то все остальные индексы содержат буквы, которые позже в алфавите, то есть: \(b_1=|1-2|+|1-3|+|1-4|=1+2+3=6\);
  • так как \(t_2\)='b', то только индекс \(j=3\) содержит букву, которая позже в алфавите, то есть: \(b_2=|2-3|=1\);
  • так как \(t_3\)='z', то индексов \(j\), что \(t_j>t_i\) не существует: \(b_3=0\);
  • так как \(t_4\)='b', то только индекс \(j=3\) содержит букву, которая позже в алфавите, то есть: \(b_4=|4-3|=1\).

Таким образом, если \(t\)abzb», то \(b=[6,1,0,1]\).

По заданной строке \(s\) и массиву \(b\) найдите любую возможную строку \(t\), для которой выполняются следующие два требования одновременно:

  • \(t\) получается из \(s\) путём стирания некоторых букв (возможно, нуля) и потом записи оставшихся в произвольном порядке;
  • по строке \(t\) получается заданный во входных данных массив \(b\), если его построить по правилам, которые описаны выше.
Входные данные

В первой строке записано целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте. Далее следуют \(q\) наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • строки \(s\), которая имеет длину от \(1\) до \(50\) и состоит из строчных букв латинского алфавита;
  • строки, которая содержит целое число \(m\) (\(1 \le m \le |s|\)), где \(|s|\) — длина строки \(s\), а \(m\) — длина массива \(b\);
  • строки, которая содержит целые числа \(b_1, b_2, \dots, b_m\) (\(0 \le b_i \le 1225\)).

Гарантируется, что в каждом наборе данных входные данные таковы, что ответ существует.

Выходные данные

Выведите \(q\) строк: \(k\)-я из них должна содержать ответ (строку \(t\)) на \(k\)-й набор входных данных. Гарантируется, что ответ на каждый набор входных данных существует. Если ответов несколько, то выведите любой.

Примечание

В первом наборе входных данных подходят такие строки \(t\): «aac», «aab».

Во втором наборе входных данных подходят такие строки \(t\): «a», «b», «c».

В третьем наборе входных данных подходит только строка \(t\) равная «aba», но символ 'b' может быть со второй или с третьей позиции.

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]\).

В третьем тестовом наборе массив уже отсортирован.

A. C+=

жадные алгоритмы математика Перебор реализация *800

Лео создал новый язык программирования C+=. В C+= целочисленные переменные можно изменять только операцией «+=», которая прибавляет значение справа к переменной слева. Например, если выполнить «a += b», когда a = \(2\), b = \(3\), значение a станет равно \(5\) (значение b при этом не изменится).

Лео создал программу-прототип с двумя целочисленными переменными a и b, исходно содержащими некоторые положительные значения. Он может выполнить некоторое количество операций «a += b» или «b += a». Лео хочет протестировать обработку больших целых чисел, поэтому ему нужно сделать значение a либо b строго больше, чем некоторое данное число \(n\). Какое наименьшее количество операций ему необходимо выполнить?

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 100\)) — количество наборов входных данных.

Каждая из следующих \(T\) строк описывает один набор входных данных и содержит три целых числа \(a, b, n\) (\(1 \leq a, b \leq n \leq 10^9\)) — исходные значения a и b, и значение, которое одна из переменных должна превысить, соответственно.

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое количество операций. Разделяйте ответы переводами строк.

Примечание

В первом наборе входных данных мы не сможем за одну операцию записать значение, большее \(3\), ни в какую переменную. Один из способов сделать это за две операции — выполнить «b += a» дважды.

B. Подпоследовательности Codeforces

жадные алгоритмы Конструктив математика Перебор Строки *1500

Карл любит Codeforces и подпоследовательности. Он хочет составить строку из маленьких английских букв, которая содержит как минимум \(k\) подпоследовательностей codeforces. Из всех таких строк Карл хочет выбрать самую короткую.

Формально, подпоследовательность codeforces строки \(s\) — это подмножество из десяти символов \(s\), которые образуют codeforces, если читать их в строке слева направо. Например, строка codeforces содержит одну подпоследовательность codeforces, а codeforcesisawesome содержит четыре подпоследовательности codeforces: codeforcesisawesome, codeforcesisawesome, codeforcesisawesome, codeforcesisawesome.

Помогите Карлу найти любую кратчайшую строку, которая содержит как минимум \(k\) подпоследовательностей codeforces.

Входные данные

В единственной строке записано одно целое число \(k\) (\(1 \leq k \leq 10^{16})\).

Выходные данные

Выведите кратчайшую строку из маленьких английских букв, которая содержит не менее \(k\) подпоследовательностей codeforces. Если таких строк несколько, выведите любую из них.

D. AND, OR и сумма квадратов

битмаски жадные алгоритмы математика *1700

Готтфрид узнал про двоичное представление чисел. Он придумал эту задачу и предложил её вам.

Вам дан набор из \(n\) неотрицательных целых чисел \(a_1, \ldots, a_n\). Вы можете выполнять следующую операцию: выбрать два различных индекса \(1 \leq i, j \leq n\). Если перед операцией \(a_i = x\), \(a_j = y\), то после операции \(a_i = x~\mathsf{AND}~y\), \(a_j = x~\mathsf{OR}~y\), где \(\mathsf{AND}\) и \(\mathsf{OR}\) — операции побитового И и ИЛИ соответственно (для формального описания см. раздел Комментарии). Данную операцию можно применять любое количество раз (возможно, ноль).

После того, как все операции выполнены, вычислим \(\sum_{i=1}^n a_i^2\) — сумму квадратов всех \(a_i\). Какую максимальную сумму квадратов можно получить?

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Во второй строке записано \(n\) целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_i < 2^{20}\)).

Выходные данные

Выведите одно число — максимально возможная сумма квадратов после применения нескольких операций (возможно, ни одной).

Примечание

В первом примере нельзя сделать ни одной операции, поэтому ответ равен \(123^2\).

Во втором примере мы можем получить набор \(1, 1, 7\), и \(1^2 + 1^2 + 7^2 = 51\).

Если \(x\) и \(y\) записаны в двоичной системе с одинаковым числом бит (возможно, с ведущими нулями), то любой бит \(x~\mathsf{AND}~y\) равен \(1\) тогда и только тогда, когда оба соответствующих бита \(x\) и \(y\) равны \(1\). Аналогично, любой бит \(x~\mathsf{OR}~y\) равен \(1\) тогда и только тогда, когда хотя бы один из соответствующих битов \(x\) и \(y\) равен \(1\). Например, \(x = 3\) и \(y = 5\) можно представить как \(011_2\) и \(101_2\) (старший бит слева). Тогда \(x~\mathsf{AND}~y = 001_2 = 1\) и \(x~\mathsf{OR}~y = 111_2 = 7\).

E. Происшествия на лыжах

графы жадные алгоритмы Конструктив *2500

Артур — владелец горнолыжного курорта. На горе расположено \(n\) площадок, пронумерованных от \(1\) до \(n\), начиная с вершины и заканчивая подножьем горы. Площадки соединены однонаправленными треками. Все треки направлены от вершины к подножью, поэтому они не могут образовывать направленных циклов. Из каждой площадки исходит не более, чем две трека, но в одну и ту же площадку может входить любое количество треков.

Лыжник может спуститься с одной из площадок до другой, если существует путь из треков, которая ведёт из стартовой площади в конечную. К сожалению, в последнее время участились несчастные случаи из-за того, что лыжники, спускающийся по опасному пути, набирают слишком большую скорость и ставят в опасность себя и окружающих. Путь считается опасным, если он состоит из двух или более треков.

Артур хочет обезопасить своих клиентов и закрыть несколько площадок таким образом, чтобы устранить опасные пути. Если площадка закрыта, все треки, входящие и исходящие из этой площадки, также закрываются.

Формально, после закрытия площадок в оставшейся части не должно существовать пути из двух или более треков.

Артур не хочет закрывать слишком много площадок. Он будет доволен, если удастся найти способ закрыть не более \(\frac{4}{7}n\) площадок, чтобы оставшаяся часть была безопасна. Помогите ему найти любой способ этого добиться.

Входные данные

В первой строке записано одно положительное целое число \(T\) — количество наборов входных данных. После этого следует \(T\) блоков с описанием наборов входных данных.

Первая строка каждого блока содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество площадок и треков соответственно.

Следующие \(m\) строк описывают треки. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x < y \leq n\)) — номера стартовой и финишной площадки очередного трека. Гарантируется, что из каждой площадки исходит не более двух треков. Могут существовать треки, у которых и начала, и концы совпадают.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) (\(0 \leq k \leq \frac{4}{7}n\)) — количество площадок, которые нужно закрыть. В следующей строке выведите \(k\) различных целых чисел — номера площадок, которые нужно закрыть, в любом порядке.

Если существует несколько ответов, разрешается вывести любой из них. Обратите внимание, что минимизировать \(k\) не требуется. Можно показать, что подходящий ответ всегда существует.

Примечание

В первом наборе входных данных можно закрыть любые две площадки.

Во втором наборе входных данных закрыть только площадку \(1\) также является корректным.

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\) символов и описывают слева направо порты на верхней и нижней стороне соответственно.

Выходные данные

Выведите одно число — пропускную споособность заданной платы.

B. ОчиститеЛи

жадные алгоритмы реализация Строки *1200

Ли убирался у себя в дома перед вечеринкой, когда нашел под ковром «грязную» строку. Теперь он хочет очистить строку, но сделать это стильно...

Строка \(s\), которую нашел Ли, является двоичной строкой длины \(n\) (т. е. строка состоит только из символов 0 и 1).

За один шаг, он может выбрать два последовательных символа \(s_i\) и \(s_{i+1}\) и, если символ \(s_i\) равен 1 и \(s_{i + 1}\) равен 0, он может удалить ровно один из символов (Ли может выбрать какой удалить, но не может удалить оба символа одновременно). После удаления строка сжимается.

Ли может сделать произвольное количество шагов (возможно, ни одного шага) и он хочет сделать строку \(s\) как можно более чистой. Он считает, что из двух различных строк \(x\) и \(y\) более короткая строка чище, а если они равны по длине, то чище та, что лексикографически меньше.

Сейчас же вам необходимо ответить на \(t\) наборов входных данных: для \(i\)-го набора, выведите самую чистую строку, которую может получить Ли за произвольное количество шагов.

Небольшое напоминание: если у нас есть две строки \(x\) и \(y\) равной длины, то \(x\) лексикографически меньше чем \(y\), если существует такая позиция \(i\), что \(x_1 = y_1\), \(x_2 = y_2\),..., \(x_{i - 1} = y_{i - 1}\) и \(x_i < y_i\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(2t\) строках заданы сами наборы входных данных — по одному на две строки.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина строки \(s\).

Во второй строке задана сама бинарная строка \(s\). Строка \(s\) — это строка длины \(n\), состоящая только из нулей и единиц.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Выведите \(t\) ответов — по одному на набор входных данных.

Ответом на \(i\)-й набор является самая чистая строка, которую может получить Ли за произвольное (возможно, нулевое) количество шагов.

Примечание

В первом наборе входных данных, Ли не может сделать ни одного шага.

Во втором наборе, Ли должен удалить \(s_2\).

В третьем наборе, Ли может, например, выполнить следующие шаги: 1100110\(\rightarrow\) 1100101 \(\rightarrow\) 110101 \(\rightarrow\) 10101 \(\rightarrow\) 110\(\rightarrow\) 10\(\rightarrow\) 01.

C. ПриятеЛи

жадные алгоритмы математика сортировки *1400

Ли наконец стал мастером на Codeforces, и потому решил сходить за подарками своим друзьям. Он приобрел \(n\) целых чисел, и теперь настало время распределить их между друзьями...

У Ли есть \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в своем рюкзаке, а также у него \(k\) друзей. Ли хочет распределить все целые числа из рюкзака между друзьями так, чтобы \(i\)-му другу досталось ровно \(w_i\) чисел и каждое число досталось ровно одному другу.

Назовем уровнем счастья друга сумму максимального и минимального числа, которое он получит.

Ли хочет сделать друзей как можно более счастливыми, другими словами, он хочет максимизировать суммарный уровень счастья друзей. Конечно же, Ли просит вас помочь ему посчитать этот максимальный суммарный уровень счастья.

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(3t\) строках заданы сами наборы — по одному на три строки.

В первой строке каждого набора входных данных заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le n\)) — количество целых чисел в рюкзаке Ли и количество его друзей.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сами числа в рюкзаке.

В третьей строке заданы \(k\) целых чисел \(w_1, w_2, \ldots, w_k\) (\(1 \le w_i \le n\); \(w_1 + w_2 + \ldots + w_k = n\)) — количество чисел, которое Ли собирается дать каждому другу.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите по одному числу — максимальный суммарный уровень счастья, который сможет достигнуть Ли.

Примечание

В первом наборе входных данных, Ли нужно отдать наибольшее число первому другу (его уровень счастья будет равен \(17 + 17\)) и остальные числа — второму (его уровень счастья будет равен \(13 + 1\)).

В втором наборе, Ли нужно отдать \(\{10, 10, 11\}\) и первому и второму другу, тогда суммарный уровень счастья будет равен \((11 + 10) + (11 + 10)\)

В третьем наборе, у Ли четыре друга и четыре числа. Не важно, как он распределит числа между ними.

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.

E. ВыживатеЛи

жадные алгоритмы поиск в глубину и подобное реализация сортировки Структуры данных *2400

Ли приобрел некоторой еды на обед, но приглашать друзей Ли на обед смертельно опасно. Ли напуган, он не хочет умирать, хотя бы пока не увидит Online IOI 2020...

Всего есть \(n\) различных видов еды и \(m\) лучших друзей Ли. У Ли есть \(w_i\) тарелок \(i\)-го вида еды, и у каждого друга Ли есть два любимых вида еды: любимые блюда \(i\)-го друга — это \(x_i\) и \(y_i\) (\(x_i \ne y_i\)).

Ли начнет вызывать своих друзей по одному. Каждый, кого вызвали, пойдет на кухню и попытается съесть по одной тарелке каждого из его любимых видов еды. Каждый друг зайдет на кухню ровно один раз.

Но проблема в следующем: если друг съест хотя бы одну тарелку еды (суммарно), то он станет абсолютно безвреден. Но если другу нечего есть (не осталось ни \(x_i\), ни \(y_i\)), то он съест самого Ли \(\times\_\times\).

Ли может выбрать, в каком порядке приглашать друзей, а потому Ли хочет понять, может ли он пережить ужин или нет. Также его интересует непосредственно сам порядок.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — количество видов еды и количество друзей Ли.

Во второй строке заданы \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 10^6\)) — количество тарелок с едой каждого вида.

В \(i\)-й строке из следующих \(m\) строк заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — любимые виды еды \(i\)-го друга.

Выходные данные

Если Ли может пережить обед, выведите ALIVE (регистр букв не важен), иначе выведите DEAD (регистр не важен).

Также, если он может пережить обед, выведите порядок, в котором Ли следует вызывать друзей. Если существует несколько возможных порядков, выведите любой из них.

Примечание

В первом примере, любой из следующих порядков друзей будет корректным: \([1, 3, 2]\), \([3, 1, 2]\), \([2, 3, 1]\), \([3, 2, 1]\).

Во втором примере, Ли следует вызвать второго друга первым (тогда он съест тарелку еды \(1\)), а потом и первого друга (этот друг съесть тарелку еды \(2\)). Если же Ли вызовет сначала первого друга, то он съесть по одной тарелке еды \(1\) и \(2\), а следовательно другому другу ничего не останется.

B. Перестановка

жадные алгоритмы *1000

«Пора делать домашку», — подумал Поликарп и конечно начал со своего любимого предмета — информатики. Все задачи кроме одной Поликарп смог решить за 20 минут. Не сумев за долгое время решить последнюю задачу, он попросил вас помочь ему.

Последовательность из n чисел называется перестановкой, если она содержит в себе все числа от 1 до n ровно по одному разу.

Вам задана произвольная последовательность a1, a2, ..., an из n целых чисел. Каждое число не меньше 1 и не больше 5000. Определите наименьшее количество чисел, которое нужно изменить, чтобы получилась перестановка (удалять или добавлять числа нельзя). Замена — это изменение произвольного элемента последовательности на новое значение.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 5000) — количество чисел в последовательности. Во второй строке задана последовательность целых чисел ai (1 ≤ ai ≤ 5000, 1 ≤ i ≤ n).

Выходные данные

Выведите единственное число — наименьшее количество замен, необходимое для получения перестановки.

Примечание

В первом примере задана перестановка, поэтому не нужно делать никаких замен.

Во втором примере можно изменить первый элемент на число 1, и получится перестановка.

В третьем примере можно изменить второй элемент на число 4, а четвертый на число 2.

A. Максимальный НОД

жадные алгоритмы математика реализация теория чисел *800

Рассмотрим все целые числа в промежутке от \(1\) до \(n\) (включительно).

По всем парам различных целых чисел из этого промежутка, найдите максимальное возможное значение наибольшего общего делителя чисел в паре. Более формально, найдите максимальное значение \(\mathrm{gcd}(a, b)\) по всем \(1 \leq a < b \leq n\).

Наибольшим общим делителем \(\mathrm{gcd}(a, b)\) пары положительных целых чисел \(a\) и \(b\) называется наибольшее целое число, являющееся делителем числа \(a\) и делителем числа \(b\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\))  — количество наборов входных данных. Описание наборов входных данных следует.

В единственной строке описания каждого набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 10^6\)).

Выходные данные

Для каждого набора входных данных, выведите максимальное значение \(\mathrm{gcd}(a, b)\) по всем \(1 \leq a < b \leq n\).

Примечание

В первом наборе входных данных \(\mathrm{gcd}(1, 2) = \mathrm{gcd}(2, 3) = \mathrm{gcd}(1, 3) = 1\).

Во втором наборе входных данных \(2\) является максимальным возможным значением, соответствующим \(\mathrm{gcd}(2, 4)\).

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\).

E. Сдвиги подпоследовательностей

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2100

У Naman есть две бинарные строки \(s\) и \(t\) длины \(n\) (бинарной строкой называется строка, состоящая из символов «0» и «1»). Он хочет сделать из строки \(s\) строку \(t\) используя следующую операцию как можно меньшее количество раз.

За одну операцию, он может выбрать некоторую подпоследовательность \(s\) и сдвинуть символы на позициях этой подпоследовательности по часовой стрелке один раз.

Например, если \(s = 1\textbf{1}101\textbf{00}\), он может выбрать подпоследовательность, соответствущую позициям (нумерация с \(1\)) \(\{2, 6, 7 \}\) и сдвинуть символы на этих позициях один раз по часовой стрелке. В результате строка, которая получится, будет \(s = 1\textbf{0}101\textbf{10}\).

Строка \(a\) называется подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) с помощью удаления некоторых символов без изменения порядка оставшихся символов.

Для того, чтобы сделать сдвиг последовательности \(c\) размера \(k\) по часовой стрелке один раз, нужно сделать следующие замены символов \(c_1:=c_k, c_2:=c_1, c_3:=c_2, \ldots, c_k:=c_{k-1}\) одновременно.

Определите минимальное число операций, которое необходимо сделать Naman, чтобы получить из строки \(s\) строку \(t\) или определите, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^6)\) — длина строк.

Во второй строке находится бинарная строка \(s\) длины \(n\).

В третьей строке находится бинарная строка \(t\) длины \(n\).

Выходные данные

Если невозможно получить из строки \(s\) строку \(t\) после применения любого числа операций, выведите \(-1\).

Иначе выведите минимальное количество операций, которое для этого требуется.

Примечание

В первом тесте, Naman может выбрать подпоследовательность, соответствующую позициям \(\{2, 6\}\) и сдвинуть символы строки, на этих позициях один раз по часовой стрелке. В результате, он сможет получить из строки \(s\) строку \(t\) за одну операцию.

Во втором тесте, он может сделать операцию на подпоследовательности из всех индексов \(5\) раз подряд. Можно доказать, что это минимальное необходимое количество операций.

В последнем тесте, невозможно получить из строки \(s\) строку \(t\).

C. Печенье для тебя

жадные алгоритмы математика реализация *1300

Анна очень смелая девочка, ее любят все в городе. Также все горожане обожают ее печенье. Она планирует провести вечеринку с печеньем. Сейчас у нее есть \(a\) единиц ванильного печенья и \(b\) единиц шоколадного печенья для вечеринки.

Она пригласит \(n\) гостей первого типа и \(m\) гостей второго типа на вечеринку. Они придут на вечеринку в некотором порядке. После того, как они придут на вечеринку, каждый гость выберет один из двух типов печенья (ванильное или шоколадное), чтобы съесть. Есть различие в том, как гости выбирают тип печенья:

Если всего \(v\) единиц ванильного печенья и \(c\) единиц шоколадного печенья в момент, когда гость приходит, тогда

  • если гость первого типа: если \(v>c\) гость выбирает ванильное печенье. Иначе, гость выбирает шоколадное печенье.
  • если гость второго типа: если \(v>c\) гость выбирает шоколадное печенье. Иначе, гость выбирает ванильное печенье.

После этого:

  • Если есть хотя бы одна единица выбранного типа печенья, гость съедает одну.
  • Иначе (если не осталось печенья выбранного типа), гость остается голодным и уходит домой.

Анна хочет узнать, существует ли какой-то порядок гостей, такой что ни один гость не останется голодным. Ваша задача состоит в том, чтобы ответить на ее вопрос.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(t\) строк содержат описания набов входных данных.

Для каждого набора входных данных в единственной строке находится четыре целых числа \(a\), \(b\), \(n\), \(m\) (\(0 \le a,b,n,m \le 10^{18}, n+m \neq 0\)).

Выходные данные

Для каждого набора входных данных, выведите ответ в одной строке. Если есть хотя бы один подходящий порядок гостей, выведите «Yes». Иначе, выведите «No».

Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных рассмотрим порядок \(\{1, 2, 2\}\) типов гостей. Тогда:

  • Первый гость съедает шоколадное печенье. После этого остается \(2\) единицы ванильного печенья и \(1\) единица шоколадного печенья.
  • Второй гость съедает шоколадное печенье. После этого остается \(2\) единицы ванильного печенья и \(0\) единиц шоколадного печенья.
  • Последний гость выбирает шоколадное печенье, чтобы съесть, но больше не осталось шоколадного печенья. Поэтому гость остается голодным.

Поэтому такой порядок гостей Анна выбрать не может.

Рассмотрим порядок \(\{2, 2, 1\}\) типов гостей. Тогда:

  • Первый гость съедает ванильное печенье. После этого остается \(1\) единица ванильного печенья и \(2\) единицы шоколадного печенья.
  • Второй гость съедает ванильное печенье. После этого остается \(0\) единиц ванильного печенья и \(2\) единицы шоколадного печенья.
  • Последний гость съедает шоколадное печенье. После этого остается \(0\) единиц ванильного печенья и \(1\) единица шоколадного печенья.

Поэтому ответ для этого набора входных данных «Yes».

В пятом наборе входных данных можно увидеть, что количество единиц печенья (\(a + b\)) может быть равно нулю, но количество гостей (\(n + m\)) никогда не равно нулю.

В шестом наборе входных данных будьте осторожны с переполнением \(32\)-битного целочисленного типа.

D. Таблица-00100

жадные алгоритмы Конструктив реализация *1600

Безумный ученый Dr.Jubal придумал задачу по программированию. Попробуйте решить ее!

Вам даны целые числа \(n,k\). Постройте таблицу \(A\), имеющую размер \(n \times n\) и состоящую из целых чисел \(0\) или \(1\). Должно быть выполнено очень важное условие: сумма всех элементов в таблице равна \(k\). Другими словами, количество чисел \(1\) в таблице равно \(k\).

Давайте определим:

  • \(A_{i,j}\) как число, стоящее в \(i\)-й строке и \(j\)-м столбце.
  • \(R_i = A_{i,1}+A_{i,2}+...+A_{i,n}\) (для всех \(1 \le i \le n\)).
  • \(C_j = A_{1,j}+A_{2,j}+...+A_{n,j}\) (для всех \(1 \le j \le n\)).
  • Другими словами, \(R_i\) это суммы чисел в строках и \(C_j\) это суммы чисел в столбцах таблицы \(A\).
  • Для таблицы \(A\) определим значение \(f(A) = (\max(R)-\min(R))^2 + (\max(C)-\min(C))^2\) (здесь для последовательности целых чисел \(X\) мы определяем \(\max(X)\) как максимальное число в \(X\) и \(\min(X)\) как минимальное число в \(X\)).

Найдите любую таблицу \(A\), удовлетворяющую описанному условию. Среди всех таких таблиц найдите такую, для которой значение \(f(A)\) минимально возможное. Среди всех таких таблиц найдите любую.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(t\) строк содержат описания набов входных данных.

Для каждого набора входных данных в единственной строке находится два целых числа \(n\), \(k\) \((1 \le n \le 300, 0 \le k \le n^2)\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите минимальное возможное значение \(f(A)\) среди всех таблиц, для которых условие выполнено.

После этого, выведите \(n\) строк, каждая содержит по \(n\) символов. \(j\)-й символ в \(i\)-й строке должен быть равен \(A_{i,j}\).

Если есть несколько возможных решений, вы можете вывести любое.

Примечание

В первом наборе входных данных сумма всех чисел таблицы равна \(2\), поэтому условие выполнено. \(R_1 = 1, R_2 = 1\) и \(C_1 = 1, C_2 = 1\). Тогда \(f(A) = (1-1)^2 + (1-1)^2 = 0\), что является минимальным возможным значением \(f(A)\).

Во втором наборе входных данных сумма всех чисел таблицы равна \(8\), значит условие выполнено. \(R_1 = 3, R_2 = 3, R_3 = 2\) и \(C_1 = 3, C_2 = 2, C_3 = 3\). Тогда \(f(A) = (3-2)^2 + (3-2)^2 = 2\). Можно доказать, что это минимальное возможное значение \(f(A)\).

B. Омкар и последний урок математики

жадные алгоритмы математика теория чисел *1300

На последнем уроке математики Омкар он узнал о наименьшем общем кратном, или \(HOK\). \(HOK(a, b)\)  — это наименьшее положительное целое число \(x\), которое делится и на \(a\) и на \(b\).

Омкар, обладающий похвально любопытным умом, сразу же подумал о задаче, связанной с операцией \(HOK\): по целому числу \(n\) найдите положительные целые числа \(a\) и \(b\) такие, что \(a + b = n\) и \(HOK(a, b)\) принимает минимально возможное значение.

Можете ли вы помочь Омкару решить его смешную математическую задачу?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10\)). Описание наборов входных данных приведено ниже.

Каждый набор входных данных состоит из одного целого числа \(n\) (\(2 \leq n \leq 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите два положительных целых числа \(a\) и \(b\) такие, что \(a + b = n\) и \(HOK(a, b)\) минимально возможный.

Примечание

Для первого набора входных данных мы можем выбрать числа \(1, 3\) или \(2, 2\). \(HOK(1, 3) = 3\) и \(HOK(2, 2) = 2\), поэтому мы выводим \(2 \ 2\).

Для второго набора входных данных мы можем выбрать числа \(1, 5\), \(2, 4\) или \(3, 3\). \(HOK(1, 5) = 5\), \(HOK(2, 4) = 4\) и \(HOK(3, 3) = 3\), поэтому мы выводим \(3 \ 3\).

Для третьего набора входных данных \(HOK(3, 6) = 6\). Можно показать, что нет других пар чисел с суммой \(9\), имеющих меньший \(HOK\).

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\). Можно показать, что нет плана пола с более высоким качеством.

A. Магазины пончиков

жадные алгоритмы математика реализация *1000

Существует два конкурирующих магазина пончиков.

Первый магазин продает пончики в розницу: каждый пончик стоит \(a\) долларов.

Второй магазин продает пончики оптом: коробка из \(b\) пончиков стоит \(c\) долларов. То есть если вы хотите купить \(x\) пончиков в этом магазине, то вам придется купить минимальное количество коробок такое, что суммарное количество пончиков больше или равно \(x\).

Вы хотите определить два положительных целых значения:

  1. сколько пончиков можно купить, чтобы они стоили дешевле в первом магазине, чем во втором?
  2. сколько пончиков можно купить, чтобы они стоили дешевле во втором магазине, чем в первом?

Если какое-то из значений не существует, то оно должно быть равно \(-1\). Если существует несколько решений, выведите любое из них.

Выведенные значения должны быть меньше или равны \(10^9\). Можно показать, что в данных ограничениях такие значения всегда существуют, если значения существуют вообще.

Входные данные

В первой строке записано одно целое \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записаны по три целых числа \(a\), \(b\) и \(c\) (\(1 \le a \le 10^9\), \(2 \le b \le 10^9\), \(1 \le c \le 10^9\)).

Выходные данные

На каждый набор входных данных выведите два положительных целых числа. Для обоих магазинов выведите такой \(x\), что купить \(x\) пончиков в этом магазине строго дешевле, чем купить \(x\) пончиков в другом магазине. \(x\) должно быть больше \(0\) и меньше или равно, чем \(10^9\).

Если такого \(x\) не существует, то выведите \(-1\). Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных любое количество пончиков будет дешевле во втором магазине. Например, для \(3\) или \(5\) пончиков придется купить коробку из \(10\) пончиков за \(4\) доллара. Однако \(3\) или \(5\) пончиков будут стоить \(15\) или \(25\) долларов, соответственно. Для \(20\) пончиков придется купить две коробки за \(8\) долларов суммарно. Обратите внимание, что \(3\) и \(5\) также являются правильными ответами для второго магазина вместе со многими другими ответами.

Во втором наборе входных данных любое количество пончиков будет либо дешевле в первом магазине, либо по одинаковой цене. \(8\) пончиков стоят \(32\) доллара в первом магазине и \(40\) долларов во втором магазине (потому что придется купить две коробки). \(10\) пончиков будут стоить \(40\) долларов в обоих магазинах, поэтому \(10\) не будет правильным ответом ни для одного из магазинов.

В третьем наборе входных данных \(1\) пончик стоит \(2\) и \(3\) доллара, соответственно. \(2\) пончика стоят \(4\) и \(3\) доллара. Поэтому \(1\) является правильным ответом для первого магазина, а \(2\) является правильным ответом для второго магазина.

В четвертом наборе входных данных \(10^9\) пончиков стоят \(10^{18}\) долларов в первом магазине и \(10^9\) долларов во втором магазине.

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\), соответствующее этому условию.

F. Покрытие Интернетом

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2400

Правительство Берляндии наконец-то решило улучшить покрытие сетью Интернет в своей стране. Берляндия имеет уникальную структуру: в самом центре находится столица, а \(n\) городов расположены вокруг нее по кругу. В столице нет проблем с Интернетом (поэтому правительство игнорирует ее), но в \(i\)-м городе необходимо провести соединение в \(a_i\) домов.

Правительство разработало план постройки \(n\) базовых станций между каждой парой соседних городов, которые будут обслуживать только эти города. Другими словами, \(i\)-я базовая станция будет обслуживать только \(i\)-й и \((i + 1)\)-й город (\(n\)-я станция будет обслуживать \(n\)-й и \(1\)-й город).

Все базовые станции имеют ограниченную мощность: к \(i\)-й станции может быть подключено не более \(b_i\) домов.

Сейчас же правительство просит вас проверить: могут ли спроектированные станции удовлетворить потребности всех городов или нет; то есть можно ли каждый дом подключить к базовой станции так, что к каждой станции \(i\) подключено не более \(b_i\) домов.

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано единственное целое число \(n\) (\(2 \le n \le 10^6\)) — количество городов и станций.

Во второй строке каждого набора заданы \(n\) целых чисел (\(1 \le a_i \le 10^9\)) — количество необходимых соединений для \(i\)-го города.

В третьей строке каждого набора заданы \(n\) целых чисел (\(1 \le b_i \le 10^9\)) — мощности планируемых базовых станций.

Гарантируется, что сумма \(n\) по наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, выведите YES, если спроектированные станции смогут удовлетворить потребности всех городов, или NO в противном случае (регистр букв не важен).

Примечание

В первом наборе входных данных:

  • первая базовая станция может предоставить \(2\) соединения первому городу и \(1\) соединение второму городу;
  • вторая станция может предоставить \(2\) соединения второму городу и \(1\) соединение третьему городу;
  • третья станция может предоставить \(3\) соединения третьему городу.

Во втором наборе:

  • \(1\)-я станция может предоставить \(2\) соединения \(1\)-му городу;
  • \(2\)-я станция может предоставить \(3\) соединения \(2\)-му городу;
  • \(3\)-я станция может предоставить \(3\) соединения \(3\)-му городу и \(1\) соединение \(1\)-му городу.

В третьем примере, четвертому городу необходимо \(5\) соединений, но третья и четвертая станции могут предоставить только \(4\) соединения суммарно.

G. Пешки

жадные алгоритмы разделяй и властвуй Структуры данных *2600

У вас есть шахматная доска состоящая из \(n\) строк и \(n\) столбцов. Строки пронумерованы снизу вверх от \(1\) до \(n\). Столбцы пронумерованы слева направо от \(1\) до \(n\). Поле находящееся на пересечении \(x\)-го столбца и \(y\)-й строки обозначается как \((x, y)\). Кроме того, \(k\)-й столбец является специальным столбцом.

Изначально доска пуста. Есть \(m\) изменений; \(i\)-е изменение добавляет или удаляет одну пешку. Текущая доска называется хорошей если мы можем переместить все пешки на специальный столбец по следующим правилам:

  • Пешку на поле \((x, y)\) можно переместить на поля \((x, y + 1)\), \((x - 1, y + 1)\) или \((x + 1, y + 1)\);
  • Вы можете сделать сколько угодно таких ходов;
  • Пешки нельзя перемещать за пределы доски;
  • В каждом поле не может находится более одной пешки.

Текущая доска может и не быть хорошей. Чтобы исправить это, вы можете добавить дополнительные строки. Эти строки добавляются сверху, т. е. они будут иметь номера \(n+1, n+2, n+3, \dots\).

После каждого из \(m\) изменений выведите одно число — минимальное количество строк, которые нужно добавить, чтобы доска стала хорошей.

Входные данные

Первая строка содержит три числа \(n\), \(k\) and \(m\) (\(1 \le n, m \le 2 \cdot 10^5; 1 \le k \le n\)) — размер доски, индекс специального столбца и количество изменений соответственно.

Затем следует \(m\) строк. В \(i\)-й строке содержится два числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — индексы столбца и строки соответственно. Если в поле \((x, y)\) нет пешки — то вы добавляете туда пешку, иначе — удаляете ее.

Выходные данные

После каждого изменения выведите число — минимальное количество строк, которые нужно добавить, чтобы доска стала хорошей.

C. Перемещай скобки

жадные алгоритмы Строки *1000

Вам задана скобочная последовательность \(s\) длины \(n\), где \(n\) четное (без остатка делится на 2). Строка \(s\) состоит из \(\frac{n}{2}\) открывающих скобок '(' и \(\frac{n}{2}\) закрывающих скобок ')'.

За один ход вы можете выбрать ровно одну скобку и передвинуть ее в начало или в конец строки (т.е. вы можете выбрать некоторый индекс \(i\), удалить \(i\)-й символ из \(s\) и вставить его перед или после всех остальных символов в \(s\)).

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить правильную скобочную последовательность из \(s\). Можно доказать, что ответ всегда существует при данных ограничениях.

Напомним, что такое правильная скобочная последовательность:

  • «()» — правильная скобочная последовательность;
  • если \(s\) — правильная скобочная последовательность, то «(» + \(s\) + «)» — правильная скобочная последовательность;
  • если \(s\) и \(t\) — правильные скобочные последовательности, то \(s\) + \(t\) — правильная скобочная последовательность.

Например, «()()», «(())()», «(())» и «()» являются правильными скобочными последовательностями, а «)(», «()(» и «)))» — нет.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 50\)) — длину \(s\). Гарантируется, что \(n\) четное. Вторая строка набора тестовых данных содержит строку \(s\), состоящую из \(\frac{n}{2}\) открывающих и \(\frac{n}{2}\) закрывающих скобок.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — минимальное количество ходов, необходимое, чтобы получить правильную скобочную последовательность из \(s\). Можно доказать, что ответ всегда существует при данных ограничениях.

Примечание

В первом наборе тестовых данных примера достаточно передвинуть первую скобку в конец строки.

В третьем наборе тестовых данных примера достаточно передвинуть последнюю скобку в начало строки.

В четвертом наборе тестовых данных примера мы можем выбрать три последние открывающие скобки, переместить их в начало строки и получить «((()))(())».

E1. Чтение книг (простая версия)

жадные алгоритмы сортировки Структуры данных *1600

Простая и сложная версии на самом деле являются разными задачами, поэтому прочитайте условия обеих задач полностью и внимательно.

Летние каникулы начались, поэтому Алиса и Боб хотят играть и веселиться, но... Их мама не согласна с этим. Она говорит, что они должны прочитать какое-то количество книг перед всеми развлечениями. Алиса и Боб прочитают каждую книгу вместе, чтобы быстрее закончить это задание.

В семейной библиотеке есть \(n\) книг. \(i\)-я книга характеризуется тремя целыми числами: \(t_i\) — количество времени, которое Алиса и Боб должны потратить, чтобы прочитать ее, \(a_i\) (равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\), если не нравится), и \(b_i\) (равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\), если не нравится).

Поэтому им нужно выбрать какие-то книги из имеющихся \(n\) книг таким образом, что:

  • Алисе нравятся не менее \(k\) книг из выбранного множества и Бобу нравятся не менее \(k\) книг из выбранного множества;
  • общее время, затраченное на прочтение этих книг минимизировано (ведь они дети и хотят начать играть и веселиться как можно скорее).

Множество, которое они выбирают, одинаковое и для Алисы и для Боба (они читают одни и те же книги), и они читают все книги вместе, таким образом, суммарное время чтения равно сумме \(t_i\) по всем книгам, которые находятся в выбранном множестве.

Ваша задача — помочь им и найти любое подходящее множество книг или определить, что такое множество найти невозможно.

Входные данные

Первая строка теста содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Следующие \(n\) строк содержат описания книг, по одному описанию в строке: \(i\)-я строка содержит три целых числа \(t_i\), \(a_i\) и \(b_i\) (\(1 \le t_i \le 10^4\), \(0 \le a_i, b_i \le 1\)), где:

  • \(t_i\) — количество времени, необходимое для прочтения \(i\)-й книги;
  • \(a_i\), равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\) в обратном случае;
  • \(b_i\), равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\) в обратном случае.
Выходные данные

Если подходящего решения не существует, выведите число -1. Иначе выведите целое число \(T\) — минимальное суммарное время, необходимое для прочтения подходящего множества книг.

E2. Чтение книг (сложная версия)

жадные алгоритмы реализация сортировки Структуры данных Тернарный поиск *2500

Простая и сложная версии на самом деле являются разными задачами, поэтому прочитайте условия обеих задач полностью и внимательно.

Летние каникулы начались, поэтому Алиса и Боб хотят играть и веселиться, но... Их мама не согласна с этим. Она говорит, что они должны прочитать ровно \(m\) книг перед всеми развлечениями. Алиса и Боб прочитают каждую книгу вместе, чтобы быстрее закончить это задание.

В семейной библиотеке есть \(n\) книг. \(i\)-я книга характеризуется тремя целыми числами: \(t_i\) — количество времени, которое Алиса и Боб должны потратить, чтобы прочитать ее, \(a_i\) (равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\), если не нравится), и \(b_i\) (равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\), если не нравится).

Поэтому им нужно выбрать ровно \(m\) книг из имеющихся \(n\) книг таким образом, что:

  • Алисе нравятся не менее \(k\) книг из выбранного множества и Бобу нравятся не менее \(k\) книг из выбранного множества;
  • общее время, затраченное на прочтение этих \(m\) книг минимизировано (ведь они дети и хотят начать играть и веселиться как можно скорее).

Множество, которое они выбирают, одинаковое и для Алисы и для Боба (они читают одни и те же книги), и они читают все книги вместе, таким образом, суммарное время чтения равно сумме \(t_i\) по всем книгам, которые находятся в выбранном множестве.

Ваша задача — помочь им и найти любое подходящее множество книг или определить, что такое множество найти невозможно.

Входные данные

Первая строка теста содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le k \le m \le n \le 2 \cdot 10^5\)).

Следующие \(n\) строк содержат описания книг, по одному описанию в строке: \(i\)-я строка содержит три целых числа \(t_i\), \(a_i\) и \(b_i\) (\(1 \le t_i \le 10^4\), \(0 \le a_i, b_i \le 1\)), где:

  • \(t_i\) — количество времени, необходимое для прочтения \(i\)-й книги;
  • \(a_i\), равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\) в обратном случае;
  • \(b_i\), равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\) в обратном случае.
Выходные данные

Если подходящего решения не существует, выведите целое число -1.

Если решение существует, выведите \(T\) первой строкой — минимальное суммарное время, необходимое для прочтения подходящего множества книг. Второй строкой выведите \(m\) различных целых чисел от \(1\) до \(n\) в любом порядке — индексы книг, включенных в выбранное вами множество.

Если существует несколько подходящих ответов, вы можете вывести любой из них.

B. Таблица соседей

жадные алгоритмы Конструктив *1200

Вам дана таблица с \(n\) строками и \(m\) столбцами, где в каждой ячейке написано неотрицательное целое число. Мы говорим, что таблица является хорошей, если для каждой ячейки выполняется следующее условие: если в ней написано число \(k > 0\), то ровно в \(k\) соседних с ней ячейках написано число, большее \(0\). Заметьте, что если число в ячейке равно \(0\), то нет никаких условий на соседние ячейки.

Вы можете взять любое число в таблице и увеличить его на \(1\). Вы можете применять эту операцию столько раз, сколько хотите, к любым числам в таблице. Выполните несколько операций (возможно, ноль), чтобы сделать сетку хорошей, или скажите, что это невозможно. Если существует несколько возможных ответов, вы можете вывести любой из них.

Две ячейки считаются соседними, если они имеют общее ребро.

Входные данные

Ввод состоит из нескольких наборов входных данных. В первой строке записано целое число \(t\) (\(1 \le t \le 5000\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 300\))  — количество строк и столбцов соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки равен \(a_{i, j}\)  — это число, записанное в \(j\)-й ячейке \(i\)-й строки (\(0 \le a_{i, j} \le 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем тестовым случаям не превышает \(10^5\).

Выходные данные

Если получить хорошую таблицу невозможно, выведите одну строку, содержащую "NO".

В противном случае выведите одну строку, содержащую "YES", за которой следуют \(n\) строк, каждая из которых содержит \(m\) целых чисел, которые описывают конечное состояние сетки. Эта конечная таблица должна быть доступна из начальной с помощью применения нескольких операций (возможно, ни одной).

Если существует несколько возможных ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных мы можем получить хорошую таблицу, увеличив число в строке \(2\), столбце \(3\) один раз. Обе ячейки, содержащие \(1\), имеют ровно одного соседа, который больше нуля, поэтому таблица хорошая. Существует много других решений, таких как таблица

\(\)0\;1\;0\;0\(\) \(\)0\;2\;1\;0\(\) \(\)0\;0\;0\;0\(\)

Все они принимаются как действительные ответы.

Во втором наборе входных данных невозможно сделать таблицу хорошей.

В третьем наборе входных данных обратите внимание, что ни в одной ячейке нет числа больше нуля, поэтому таблица изначально хорошая.

C. Уничтожение элементов

жадные алгоритмы Конструктив Структуры данных *1400

Вам дан массив \(a\) длины \(n\), который изначально является перестановкой чисел от \(1\) до \(n\). За одну операцию, вы можете выбрать индекс \(i\) (\(1 \leq i < n\)), такой что \(a_i < a_{i + 1}\), и удалить либо \(a_i\) или \(a_{i + 1}\) из массива (после удаления оставшиеся части воссоединяются).

Например, если у вас есть массив \([1, 3, 2]\), вы можете выбрать \(i = 1\) (так как \(a_1 = 1 < a_2 = 3\)), и либо удалить \(a_1\), что даст новый массив \([3, 2]\), или удалить \(a_2\), что даст новый массив \([1, 2]\).

Можно ли сделать длину этого массива равной \(1\) с помощью этих операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\), \(a_i\) попарно различны) — элементы массива.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке слово "YES", если возможно свести массив к одному элементу с помощью вышеупомянутой операции, или "NO", если это невозможно сделать.

Примечание

Для первых двух и четвертого наборов входных данных мы можем действовать следующим образом (выделенные жирным шрифтом элементы  — это пара, выбранная для этой операции):

\([\text{1}, \textbf{2}, \textbf{3}] \rightarrow [\textbf{1}, \textbf{2}] \rightarrow [\text{1}]\)

\([\text{3}, \textbf{1}, \textbf{2}, \text{4}] \rightarrow [\text{3}, \textbf{1}, \textbf{4}] \rightarrow [\textbf{3}, \textbf{4}] \rightarrow [\text{4}]\)

\([\textbf{2}, \textbf{4}, \text{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\textbf{4}, \textbf{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\text{4}, \text{1}, \textbf{3}, \textbf{5}] \rightarrow [\text{4}, \textbf{1}, \textbf{5}] \rightarrow [\textbf{4}, \textbf{5}] \rightarrow [\text{4}]\)

E. Сортировка инверсиями

жадные алгоритмы Конструктив сортировки *2500

У Madeline есть массив \(a\) состоящий из \(n\) целых чисел. Пара \((u, v)\) образует инверсию в массиве \(a\) если

  • \(1 \le u < v \le n\).
  • \(a_u > a_v\).

Madeline только что обнаружила магический листочек, который позволяет ей написать два индекса \(u\) и \(v\) и поменять местами значения \(a_u\) и \(a_v\). Будучи скучающим, она решила написать список пар \((u_i, v_i)\) со следующими условиями:

  • Все пары в списке различны и каждая из них является инверсией в массиве \(a\).
  • Все пары которые образуют инверсию в массиве \(a\) присутствуют в списке.
  • Начиная с данного массива, если поменять местами числа стоящие в позициях \(u_1\) и \(v_1\), потом числа стоящие в позициях \(u_2\) и \(v_2\), и так далее, то после всех этих операций массив \(a\) будет отсортирован в порядке неубывания.
Создайте такой список или скажите что сделать это невозможно. Если есть несколько решений, вы можете найти любое из них.
Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — длину массива.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2,...,a_n\) \((1 \le a_i \le 10^9)\)  — элементы массива.

Выходные данные

Выведите -1 если нет подходящего списка. В противном случае выведите \(m\) (\(0 \le m \le \dfrac{n(n-1)}{2}\)) — количество пар в списке.

\(i\)-я из следующих \(m\) строк должна состоять из двух целых чисел \(u_i, v_i\) (\(1 \le u_i < v_i\le n\)).

Если есть несколько решений, вы можете найти любое из них.

Примечание

В первом примере массив будет изменен следующим образом \([3,1,2] \rightarrow [2,1,3] \rightarrow [1,2,3]\).

Во втором примере \([1,8,1,6] \rightarrow [1,6,1,8] \rightarrow [1,1,6,8]\).

В третем примере массив уже отсортирован.

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\).

B. Перестановки цифр

жадные алгоритмы *1900

Любимое число Андрея — n. На Новый год друзья подарили Андрею сразу два одинаковых экземпляра числа n. Он повесил их на стенку один под другим и долго ими любовался.

Потом Андрею надоело смотреть на одно и то же число, и он стал менять местами цифры то в одном, то в другом числе (цифры из разных чисел Андрей местами не менял). В какой-то момент оказалось, что если сложить получившиеся числа, то количество нулей, на которые заканчивается сумма, максимально среди всевозможных вариантов перестановок цифр в этих числах.

Сможете ли Вы по числу n найти две перестановки его цифр, обладающих этим свойством?

Входные данные

В первой строке содержится натуральное число n  — исходное число. Количество цифр в этом числе не превосходит 105. В записи числа нет ведущих нулей.

Выходные данные

Выведите две перестановки цифр числа n, таких что сумма получившихся чисел оканчивается на максимальное количество нулей. В перестановках могут быть ведущие нули (если они есть, их все нужно вывести). Перестановки не обязаны быть различными. Если ответов несколько, выведите любой из них.

B. Универсальное решение

жадные алгоритмы *1400

Недавно, вы обнаружили бота, с которым можно сыграть в «Камень, ножницы, бумага». К сожалению, бот использует довольно примитивный алгоритм игры: у него есть строка \(s = s_1 s_2 \dots s_{n}\) длины \(n\), где каждый символ — это R, S или P.

Во время инициализации, бот выбирает стартовую позицию \(pos\) (\(1 \le pos \le n\)), и потом может сыграть любое количество раундов. В первом раунде, он выбирает «Камень», «Ножницы» или «Бумагу» на основании значения \(s_{pos}\):

  • если \(s_{pos}\) равняется R, то бот выбирает «Камень»;
  • если \(s_{pos}\) равняется S, то бот выбирает «Ножницы»;
  • если \(s_{pos}\) равняется P, то бот выбирает «Бумагу»;

Во втором раунде, выбор бота основан на значении \(s_{pos + 1}\). В третьем раунде — на \(s_{pos + 2}\) и так далее. После \(s_n\), бот возвращается к \(s_1\) и продолжает игру.

Вы планируете сыграть \(n\) раундов и уже определили строку \(s\), однако не знаете, чему равняется стартовая позиция \(pos\). Но так как тактика бота очень скучная, вы решили найти такие \(n\) ходов в раундах, чтобы максимизировать среднее количество побед.

Другими словами, предположим, что ваши ходы — это \(c_1 c_2 \dots c_n\) и если бот начнет с позиции \(pos\), то вы выиграете в \(win(pos)\) раундах. Найдите \(c_1 c_2 \dots c_n\) такие, что \(\frac{win(1) + win(2) + \dots + win(n)}{n}\) — максимально возможное.

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(t\) строках заданы сами наборы — по одному в строке. В единственной строке каждого набора задана строка \(s = s_1 s_2 \dots s_{n}\) (\(1 \le n \le 2 \cdot 10^5\); \(s_i \in \{\text{R}, \text{S}, \text{P}\}\)) — строка бота.

Гарантируется, что суммарная длина всех строк в одном тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите \(n\) ходов \(c_1 c_2 \dots c_n\) таких, которые максимизируют среднее количество побед. Выведите их в том же формате, в котором задана строка \(s\).

Если существует несколько оптимальных ответов, выведите любой из них.

Примечание

В первом наборе входных данных, бот (с какой бы позиции не начал) будет всегда выбирать «Камень», поэтому мы можем всегда выбирать «Бумагу». То есть, в любом случае, мы выиграем все \(n = 4\) раунда, и, соответственно, среднее количество побед также равно \(4\).

Во втором наборе:

  • если бот начнет с позиции \(pos = 1\), то \((s_1, c_1)\) — ничья, \((s_2, c_2)\) — ничья и \((s_3, c_3)\) — ничья, поэтому \(win(1) = 0\);
  • если бот начнет с позиции \(pos = 2\), то \((s_2, c_1)\) — победа, \((s_3, c_2)\) — победа и \((s_1, c_3)\) — победа, поэтому \(win(2) = 3\);
  • если бот начнет с позиции \(pos = 3\), то \((s_3, c_1)\) — проигрыш, \((s_1, c_2)\) — проигрыш и \((s_2, c_3)\) — проигрыш, поэтому \(win(3) = 0\);
Среднее равно \(\frac{0 + 3 + 0}{3} = 1\), и можно доказать, что это максимально возможное среднее количество побед.

Картинка из Википедии, описывающая игру «Камень, ножницы, бумага»:

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\).

Выходные данные

На каждый набор входных данных выведите одно число — максимальное количество команд, которое вы можете собрать.

D. Берсерк и Огненный Шар

жадные алгоритмы Конструктив математика реализация *2000

В ряд стоят \(n\) воинов. Сила \(i\)-го воина равна \(a_i\). Все силы различны.

Вы можете использовать заклинания двух типов:

  1. Огненный Шар: вы тратите \(x\) маны и уничтожаете ровно \(k\) последовательных воинов;
  2. Берсерк: вы тратите \(y\) маны, выбираете двух соседних воинов, и воин с большей силой убивает воина с меньшей силой.

Например, пусть силы воинов равны \([2, 3, 7, 8, 11, 5, 4]\), и \(k = 3\). Если использовать Берсерк на воинах с силой \(8\) и \(11\), последовательность станет \([2, 3, 7, 11, 5, 4]\). Если после этого использовать Огненный Шар на воинах с силами \([7, 11, 5]\), последовательность станет \([2, 3, 4]\).

Вам необходимо превратить последовательность сил воинов \(a_1, a_2, \dots, a_n\) в \(b_1, b_2, \dots, b_m\). Посчитайте минимальное количество маны, которое вы должны затратить.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина последовательности \(a\) и длина последовательности \(b\) соответственно.

Вторая строка содержит три числа \(x, k, y\) (\(1 \le x, y, \le 10^9; 1 \le k \le n\)) — стоимость Огненного Шара, длина действия Огненного Шара и стоимость Берсерка соответсвенно.

Третья строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Гарантируется что числа \(a_i\) попарно различны.

Четвертая строка содержит \(m\) чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le n\)). Гарантируется что числа \(b_i\) попарно различны.

Выходные данные

Выведите минимальное количество маны для превращения последовательности \(a_1, a_2, \dots, a_n\) в \(b_1, b_2, \dots, b_m\) (или \(-1\), если это невозможно).

G. Круговое подземелье

жадные алгоритмы математика Теория вероятностей *2600

Вы проектируете уровень для компьютерной игры. Этот уровень состоит из \(n\) комнат, расположенных по кругу. Комнаты пронумерованы от \(1\) до \(n\). У каждой комнаты ровно один выход: после завершения \(j\)-й комнаты вы отправляетесь в \((j+1)\)-ю комнату (а после завершения \(n\)-й комнаты вы отправляетесь в \(1\)-ю комнату).

Вам задано описание мультимножества из \(n\) сундуков: ценность сокровища в \(i\)-м сундуке равна \(c_i\).

Каждый сундук может быть одного из двух типов:

  • обычный сундук — когда игрок заходит в комнату с таким сундуком, то он забирает сокровище и проходит в следующую комнату;
  • сундук-мимик — когда игрок заходит в комнату с таким сундуком, то сундук его съедает, и игрок проигрывает.

Игрок начинает в случайной комнате, и у каждой комнаты равная вероятность быть выбранной. Доход игрока равен сумме ценностей сокровищ в тех сундуках, которые он собрал до своего поражения.

Вы можете выбрать порядок, в котором сундуки будут установлены в комнатах. Для каждого \(k\) от \(1\) до \(n\) расставьте сундуки таким образом, что:

  • в каждой комнате находится ровно один сундук;
  • ровно \(k\) сундуков являются мимиками;
  • математическое ожидание дохода игрока минимально возможно.

Обратите внимание, что для каждого \(k\) расстановка выбирается независимо.

Можно показать, что данное математическое ожидание можно представить в виде \(\frac{P}{Q}\), где \(P\) и \(Q\) являются неотрицательными целыми числами \(Q \ne 0\). Выведите значения \(P \cdot Q^{-1} \pmod {998244353}\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество комнат и количество сундуков.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^6\)) — ценности сокровищ в каждом сундуке.

Выходные данные

Выведите \(n\) целых чисел — \(k\)-е число должно быть равно минимальному математическому ожиданию дохода игрока, если сундуки расставлены по комнатам в каком-то порядке и ровно \(k\) из сундуков являются мимиками.

Можно показать, что данное математическое ожидание можно представить в виде \(\frac{P}{Q}\), где \(P\) и \(Q\) являются неотрицательными целыми числами \(Q \ne 0\). Выведите значения \(P \cdot Q^{-1} \pmod {998244353}\).

Примечание

В первом примере точные значения минимального математического ожидания равны: \(\frac 1 2\), \(\frac 0 2\).

Во втором примере точные значения минимального математического ожидания равны: \(\frac{132} 8\), \(\frac{54} 8\), \(\frac{30} 8\), \(\frac{17} 8\), \(\frac{12} 8\), \(\frac 7 8\), \(\frac 3 8\), \(\frac 0 8\).

C. Гениальный шифр

жадные алгоритмы Конструктив Паросочетания реализация сортировки *2500

В игре «Гениальный шифр» есть два игрока  — Алиса и Боб. У Алисы есть секретный код, который Боб хочет отгадать. Код определяется последовательностью из \(n\) цветов. Всего существует \(n+1\) цвет, они пронумерованы целыми числами от \(1\) до \(n+1\).

После того как Боб сделал свою догадку, Алиса говорит ему некоторую информацию о том, насколько его код правильный, в виде двух целых чисел \(x\) и \(y\).

Первое число \(x\) равно количеству индексов, в которых цвет кода Боба совпал с правильным цветом в коде Алисы. Второе число \(y\) равно размеру пересечения двух кодов, как мультимножеств. Другими словами, если Боб может поменять порядок цветов в его догадке, \(y\) равно максимальному количеству правильных индексов, которое он сможет получить.

Например, допустим \(n=5\), код Алисы будет \([3,1,6,1,2]\) и догадка Боба будет \([3,1,1,2,5]\). В позициях \(1\) и \(2\) цвета совпали, тогда как в других позициях нет. Поэтому \(x=2\). И два кода имеют четыре общих цвета \(1,1,2,3\), поэтому \(y=4\).

Обычные линии обозначают совпадающие цвета на одинаковых позициях. Пунктирные линии обозначают одинаковые цвета на разных позициях. Тогда \(x\) равно количеству обычных линий и \(y\) равно количеству всех линий.

Вам дан код-догадка Боба и два значения \(x\) и \(y\). Можете ли вы найти какой-то возможный загаданный код Алисы, такой что числа \(x\) и \(y\) будут правильными?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится три целых числа \(n,x,y\) (\(1\le n\le 10^5, 0\le x\le y\le n\))  — длины кодов и два числа, которые сказала Алиса.

Во второй строке каждого набора входных данных находится \(n\) целых чисел \(b_1,\ldots,b_n\) (\(1\le b_i\le n+1\))  — догадка Боба, где \(b_i\) равно \(i\)-у цвету в его коде.

Гарантируется что сумма всех \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES», если существует решение или «NO», если не существует ни одного секретного кода Алисы, соответствующего данной ситуации. Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Если ответ «YES», на следующей строке выведите \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le n+1\))  — секретный код Алисы, где \(a_i\) равно \(i\)-у цвету этого кода.

Если существует несколько возможных решений, выведите любое.

Примечание

Первый набор входных данных описан в условии.

Во втором наборе в входных данных \(x=3\), потому что цвета совпадают на позициях \(2,4,5\). И \(y=4\), потому что цвета \(1,1,1,2\) общие у двух кодов.

В третьем наборе входных данных \(x=0\), потому что цвета не совпадают ни в одной из позиций. Но \(y=4\), потому что цвета \(3,3,5,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)\).

A. Трансформация строки 1

графы Деревья жадные алгоритмы снм сортировки Строки *1700

Обратите внимание, что единственная разница между Трансформация строки 1 и Трансформация строки 2 заключается в операции, которую делает Коа. В этой версии буква \(y\), которую выбирает Koa, должна быть строго больше по алфавиту, чем \(x\) (для лучшего понимания прочитайте условие). Вы можете делать взломы по этим задачам независимо.

У Коалы Коа есть две строки \(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\) строчных букв английского алфавита) такую, что \(y>x\) (т. е. буква \(y\) в алфавитном порядке строго больше, чем \(x\)).

  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\)-м наборе входных данных Коа:
    1. выбирает позиции \(1\) и \(2\) и устанавливает \(A_1 = A_2 = \) b (\(\color{red}{aa}b \rightarrow \color{blue}{bb}b\)).
    2. выбирает позиции \(2\) b \(3\) и устанавливает \(A_2 = A_3 = \) c (\(b\color{red}{bb} \rightarrow b\color{blue}{cc}\)).

  • Во \(2\)-м наборе входных данных Коа не может сделать строку \(A\) равной строке \(B\).

  • В \(3\)-м наборе входных данных Коа:
    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}\)).

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\), поэтому Коа выигрывает.

D. Переставьте

графы жадные алгоритмы Конструктив Перебор сортировки *2800

Коала Коа имеет матрицу \(A\) из \(n\) строк и \(m\) столбцов. Элементы этой матрицы — различные целые числа от \(1\) до \(n \cdot m\) (каждое число от \(1\) до \(n \cdot m\) встречается в матрице ровно один раз).

Для любой матрицы \(M\) из \(n\) строк и \(m\) столбцов определим следующее:

  • \(i\)-я строка \(M\) определяется как \(R_i(M) = [ M_{i1}, M_{i2}, \ldots, M_{im} ]\) для всех \(i\) (\(1 \le i \le n\)).
  • \(j\)-й столбец \(M\) определяется как \(C_j(M) = [ M_{1j}, M_{2j}, \ldots, M_{nj} ]\) для всех \(j\) (\(1 \le j \le m\)).

Коа определяет \(S(A) = (X, Y)\) как спектр \(A\), где \(X\)  — множество максимумов в строках \(A\), а \(Y\) — множество максимумов в столбцах \(A\) соответственно.

Более формально:

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \ldots, \max(R_n(A)) \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \ldots, \max(C_m(A)) \}\)

Коа просит вас найти некоторую матрицу \(A'\) из \(n\) строк и \(m\) столбцов такую, чтобы каждое число от \(1\) до \(n \cdot m\) встречалось в матрице ровно один раз, и выполнялись следующие условия:

  • \(S(A') = S(A)\)
  • \(R_i(A')\) является битоническим для всех \(i\) (\(1 \le i \le n\))
  • \(C_j(A')\) является битоническим для всех \(j\) (\(1 \le j \le m\)).
Массив \(t\) (\(t_1, t_2, \ldots, t_k\)) называется битоническим, если он сначала возрастает, а затем спадает.

Более формально: \(t\) является битоническим, если существует некоторая позиция \(p\) (\(1 \le p \le k\)) такая, что: \(t_1 < t_2 < \ldots < t_p > t_{p+1} > \ldots > t_k\).

Помогите Коа найти такую матрицу, или определить, что ее не существует.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 250\))  — количества строк и столбцов в \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке обозначает элемент \(A_{ij}\) (\(1 \le A_{ij} \le n \cdot m\)) матрицы \(A\). Гарантируется, что каждое число от \(1\) до \(n \cdot m\) встречается ровно один раз среди элементов матрицы.

Выходные данные

Если такой матрицы не существует, в отдельной строке выведите \(-1\).

В противном случае вы должны вывести \(n\) строк, каждая из которых должная состоять из \(m\) целых чисел, разделенных пробелом  — описание \(A'\).

\(j\)-е число в \(i\)-й строке обозначает элемент \(A'_{ij}\).

Каждое число от \(1\) до \(n \cdot m\) должно встречаться в \(A'\) ровно один раз, каждая строка и столбец в \(A'\) должны быть битоническими и должно выполняться \(S(A) = S(A')\).

Если ответов несколько, выведите любой.

Примечание

Проанализируем первый пример:

Для матрицы \(A\):

    • Строки:
      • \(R_1(A) = [3, 5, 6]; \max(R_1(A)) = 6\)
      • \(R_2(A) = [1, 7, 9]; \max(R_2(A)) = 9\)
      • \(R_3(A) = [4, 8, 2]; \max(R_3(A)) = 8\)

    • Столбцы:
      • \(C_1(A) = [3, 1, 4]; \max(C_1(A)) = 4\)
      • \(C_2(A) = [5, 7, 8]; \max(C_2(A)) = 8\)
      • \(C_3(A) = [6, 9, 2]; \max(C_3(A)) = 9\)

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \max(R_3(A)) \} = \{ 6, 9, 8 \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \max(C_3(A)) \} = \{ 4, 8, 9 \}\)
  • Поэтому \(S(A) = (X, Y) = (\{ 6, 9, 8 \}, \{ 4, 8, 9 \})\)

Для матрицы \(A'\):

    • Строки:
      • \(R_1(A') = [9, 5, 1]; \max(R_1(A')) = 9\)
      • \(R_2(A') = [7, 8, 2]; \max(R_2(A')) = 8\)
      • \(R_3(A') = [3, 6, 4]; \max(R_3(A')) = 6\)

    • Столбцы:
      • \(C_1(A') = [9, 7, 3]; \max(C_1(A')) = 9\)
      • \(C_2(A') = [5, 8, 6]; \max(C_2(A')) = 8\)
      • \(C_3(A') = [1, 2, 4]; \max(C_3(A')) = 4\)

  • Заметим, что каждый из этих массивов является битоническим.
  • \(X = \{ \max(R_1(A')), \max(R_2(A')), \max(R_3(A')) \} = \{ 9, 8, 6 \}\)
  • \(Y = \{ \max(C_1(A')), \max(C_2(A')), \max(C_3(A')) \} = \{ 9, 8, 4 \}\)
  • Поэтому \(S(A') = (X, Y) = (\{ 9, 8, 6 \}, \{ 9, 8, 4 \})\)

A. Общие префиксы

жадные алгоритмы Конструктив Строки *1200

Длина самого длинного общего префикса двух строк \(s = s_1 s_2 \ldots s_n\) и \(t = t_1 t_2 \ldots t_m\) определяется как наибольшее целое число \(k\) (\(0 \le k \le min(n,m)\)) такое, что \(s_1 s_2 \ldots s_k\) равняется \(t_1 t_2 \ldots t_k\).

У Коалы Коа изначально есть \(n+1\) строка \(s_1, s_2, \dots, s_{n+1}\).

Для каждого \(i\) (\(1 \le i \le n\)) она вычислила \(a_i\) — длину самого длинного общего префикса \(s_i\) и \(s_{i+1}\).

Несколько дней спустя Коа нашла эти числа, но не могла вспомнить строки.

Поэтому Коа хотела бы найти какие-нибудь строки \(s_1, s_2, \dots, s_{n+1}\), которые дали бы числа \(a_1, a_2, \dots, a_n\). Можете ли вы ей помочь?

Если ответов несколько, выведите любой. Можно показать, что для данных ограничений ответ всегда существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество элементов в списке \(a\).

Вторая строка каждого тестового примера содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 50\)) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\).

Выходные данные

Для каждого набора входных данных:

Выведите \(n+1\) строку. В \(i\)-й строке выведите строку \(s_i\) (\(1 \le |s_i| \le 200\)), , состоящую из строчных латинских букв. Длина самого длинного общего префикса строк \(s_i\) и \(s_{i+1}\) должна быть равна \(a_i\).

Если ответов несколько, выведите любой. Можно показать, что для данных ограничений ответ всегда существует.

Примечание

В \(1\)-м наборе входных данных один из возможных ответов это \(s = [aeren, ari, arousal, around, ari]\).

Длины самых длинных общих префиксов равны:

  • Между \(\color{red}{a}eren\) и \(\color{red}{a}ri\) \(\rightarrow 1\)
  • Между \(\color{red}{ar}i\) и \(\color{red}{ar}ousal\) \(\rightarrow 2\)
  • Между \(\color{red}{arou}sal\) и \(\color{red}{arou}nd\) \(\rightarrow 4\)
  • Между \(\color{red}{ar}ound\) и \(\color{red}{ar}i\) \(\rightarrow 2\)

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\) Коа не сможет доплыть до острова.

B. Восстановление перестановки после слияния

жадные алгоритмы *800

Перестановкой длины \(n\) называется последовательность целых чисел от \(1\) до \(n\) длины \(n\), содержащая каждое число ровно один раз. Например, \([1]\), \([4, 3, 5, 1, 2]\), \([3, 2, 1]\) являются перестановками, а \([1, 1]\), \([0, 1]\), \([2, 2, 1, 4]\) — нет.

Была задана перестановка \(p[1 \dots n]\). Она была слита сама с собой. Другими словами, были взяты две копии \(p\) и элементы второй копии \(p\) были вставлены в первую без изменения относительного порядка элементов. Результатом является последовательность длины \(2n\).

Например, если \(p=[3, 1, 2]\), то некоторыми возможными результатами являются: \([3, 1, 2, 3, 1, 2]\), \([3, 3, 1, 1, 2, 2]\), \([3, 1, 3, 1, 2, 2]\). Следующие последовательности не являются возможными результатами слияния: \([1, 3, 2, 1, 2, 3\)], [\(3, 1, 2, 3, 2, 1]\), \([3, 3, 1, 2, 2, 1]\).

Например, если \(p=[2, 1]\), то возможными результатами являются: \([2, 2, 1, 1]\), \([2, 1, 2, 1]\). Следующие последовательности не являются возможными результатами слияния: \([1, 1, 2, 2\)], [\(2, 1, 1, 2]\), \([1, 2, 2, 1]\).

Ваша задача — восстановить перестановку \(p\) по заданной результирующий последовательности \(a\). Гарантируется, что ответ существует и единственен.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 400\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длину перестановки. Вторая строка набора тестовых данных содержит \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le n\)), где \(a_i\)\(i\)-й элемент в \(a\). Гарантируется, что массив \(a\) представляет собой результат слияния некоторой перестановки \(p\) с такой же перестановкой \(p\).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)), представляющих собой изначальную перестановку. Гарантируется, что ответ существует и единственен.

C. Сделай хорошо

жадные алгоритмы *1200

Вам задан массив \(a\), состоящий из \(n\) целых чисел. Вам нужно найти длину наименьшего (кратчайшего) префикса элементов, которые вам нужно удалить из \(a\), чтобы сделать его хорошим массивом. Напомним, что префиксом массива \(a=[a_1, a_2, \dots, a_n]\) называется подмассив, состоящий из первых нескольких элементов: префикс массива \(a\) длины \(k\) — это массив \([a_1, a_2, \dots, a_k]\) (\(0 \le k \le n\)).

Массив \(b\) длины \(m\) называется хорошим, если вы можете получить из него неубывающий массив \(c\) (\(c_1 \le c_2 \le \dots \le c_{m}\)), повторяя следующую операцию \(m\) раз (изначально массив \(c\) пустой):

  • выбрать первый или последний элемент в \(b\), удалить его из \(b\) и добавить его в конец массива \(c\).

Например, если делаем \(4\) операции: возьмем \(b_1\), затем \(b_{m}\), затем \(b_{m-1}\) и в конце \(b_2\), то \(b\) становится \([b_3, b_4, \dots, b_{m-3}]\) и \(c =[b_1, b_{m}, b_{m-1}, b_2]\).

Рассмотрим следующий пример: \(b = [1, 2, 3, 4, 4, 2, 1]\). Этот массив хороший, потому что мы можем получить неубывающий массив \(c\) из него с помощью следующей последовательности операций:

  1. возьмем первый элемент из \(b\), тогда \(b = [2, 3, 4, 4, 2, 1]\), \(c = [1]\);
  2. возьмем последний элемент из \(b\), тогда \(b = [2, 3, 4, 4, 2]\), \(c = [1, 1]\);
  3. возьмем последний элемент из \(b\), тогда \(b = [2, 3, 4, 4]\), \(c = [1, 1, 2]\);
  4. возьмем первый элемент из \(b\), тогда \(b = [3, 4, 4]\), \(c = [1, 1, 2, 2]\);
  5. возьмем первый элемент из \(b\), тогда \(b = [4, 4]\), \(c = [1, 1, 2, 2, 3]\);
  6. возьмем последний элемент из \(b\), тогда \(b = [4]\), \(c = [1, 1, 2, 2, 3, 4]\);
  7. возьмем единственный элемент из \(b\), тогда \(b = []\), \(c = [1, 1, 2, 2, 3, 4, 4]\) — и массив \(c\) является неубывающим.

Заметьте, что массив, состоящий из одного элемента считается хорошим.

Выведите длину кратчайшего префикса \(a\), который необходимо удалить для того, чтобы сделать \(a\) хорошим массивом. Заметьте, что необходимая длина может быть равна \(0\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 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 2 \cdot 10^5\)), где \(a_i\)\(i\)-й элемент в \(a\).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: длину кратчайшего префикса элементов, которые нужно удалить из \(a\), чтобы он стал хорошим массивом.

Примечание

В первом наборе тестовых данных примера массив \(a\) уже является хорошим, поэтому нам нет необходимости удалять какой-либо префикс.

Во втором наборе тестовых данных примера изначальный массив \(a\) не является хорошим. Давайте удалим первые \(4\) элемента \(a\), результат будет равен \([4, 5, 2]\). Получившийся массив является хорошим. Вы можете доказать, что если удалить меньшее количество первых элементов, результат не будет хорошим.

F. Удаление листьев

Деревья жадные алгоритмы реализация Структуры данных *2300

Вам дано дерево (связный граф без циклов), состоящее из \(n\) вершин. Дерево не является корневым — это просто неориентированный связный граф без циклов.

За один ход вы можете выбрать ровно \(k\) листьев (лист — это такая вершина, которая соединена только с одной другой вершиной), соединенных с одной и той же вершиной, и удалить их вместе с ребрами, инцидентными им. То есть вы выбираете такие листья \(u_1, u_2, \dots, u_k\), что существуют ребра \((u_1, v)\), \((u_2, v)\), \(\dots\), \((u_k, v)\), и удаляете эти листья вместе с этими ребрами.

Ваша задача — найти максимальное количество ходов, которое вы можете совершить, если вы будете удалять листья оптимально.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k < n\)) — количество вершин в дереве и количество листьев, которые вы удаляете за один ход, соответственно. Следующие \(n-1\) строк описывают ребра. \(i\)-е ребро представлено в виде пары целых чисел \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)), где \(x_i\) и \(y_i\) — это вершины, которые соединяет \(i\)-е ребро. Гарантируется, что заданный набор ребер образует дерево.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — максимальное количество ходов, которое вы можете совершить, если вы будете удалять листья оптимально.

Примечание

Картинка, соответствующая первому набору тестовых данных примера:

Здесь вы можете удалить вершины \(2\), \(5\) и \(3\) в течение первого хода и вершины \(1\), \(7\) и \(4\) в течение второго хода.

Картинка, соответствующая второму набору тестовых данных примера:

Здесь вы можете удалить вершины \(7\), \(8\) и \(9\) в течение первого хода, затем вершины \(5\), \(6\) и \(10\) в течение второго хода, и вершины \(1\), \(3\) и \(4\) в течение третьего хода.

Картинка, соответствующая третьему набору тестовых данных примера:

Здесь вы можете удалить вершины \(5\) и \(7\) в течение первого хода, затем вершины \(2\) и \(4\) в течение второго хода, и вершины \(1\) и \(6\) в течение третьего хода.

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 баллов) Без дополнительных ограничений.

A. Капитан Флинт и набор матросов

жадные алгоритмы математика Перебор теория чисел *800

Несмотря на грозную репутацию, Капитан Флинт всегда был миролюбив (по крайней мере это проявлялось в любви к животным). Сегодня Джон Флинт в поисках новой команды (исключительно для мирного плаванья) и ищет достойных матросов. Достойным считается тот матрос, кто успешно справится с задачей Капитана.

Недавно Флинт, неожиданно для себя, увлекся математикой и ввел ранее неизвестное понятие почти простого числа. Число \(x\) называется почти простым, если его можно представить в виде \(p \cdot q\), где \(1 < p < q\), а \(p\) и \(q\) — простые числа. Например, числа \(6\) и \(10\) — почти простые (так как \(2 \cdot 3 = 6\) и \(2 \cdot 5 = 10\)), a числа \(1\), \(3\), \(4\), \(16\), \(17\) и \(44\) таковыми не являются.

Флинт загадал Вам некоторое целое число \(n\), которое нужно представить в виде суммы \(4\) различных положительных целых чисел так, чтобы хотя бы \(3\) из них были почти простыми или сказать, что это невозможно.

Дядя Богдан с легкостью справился с задачей и попал в команду капитана Флинта. Удастся ли это Вам?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее в \(t\) строках заданы сами наборы — по одному в строке. Единственная строка каждого набора содержит одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — число загаданное Флинтом.

Выходные данные

Для каждого набора входных данных выведите:

  • YES и \(4\) различных целых положительных числа таких, что хотя бы \(3\) из них почти простые и их сумма в точности равна \(n\) (если ответов несколько, то выведите любой из них);
  • NO если невозможно представить \(n\) в виде суммы \(4\) различных положительных целых чисел так, чтобы хотя бы \(3\) из них были почти простыми.
Буквы в словах YES и NO можно выводить в любом регистре.
Примечание

В первом и втором наборах входных данных, можно показать, что не существует четырех различных целых положительных чисел таких, что хотя бы три из них почти простые.

В третьем наборе, \(n=31=2 \cdot 7 + 2 \cdot 5 + 2 \cdot 3 + 1\): числа \(14\), \(10\), \(6\) — почти простые.

В четвертом наборе, \(n=36=5 + 2 \cdot 3 + 2 \cdot 5 + 3 \cdot 5\): числа \(6\), \(10\), \(15\) — почти простые.

В пятом наборе, \(n=44=2 \cdot 3 + 7 + 2 \cdot 5 + 3 \cdot 7\): числа \(6\), \(10\), \(21\) — почти простые.

В шестом наборе, \(n=100=2 + 2 \cdot 5 + 3 \cdot 11 + 5 \cdot 11\): числа \(10\), \(33\), \(55\) — почти простые.

В седьмом наборе, \(n=258=2 \cdot 5 + 3 \cdot 7 + 13 \cdot 17 + 2 \cdot 3\): числа \(10\), \(21\), \(221\), \(6\) — почти простые.

B. Капитан Флинт и дальнее плаванье

жадные алгоритмы математика *1000

Вот уже несколько месяцев Капитан Флинт и его матросы держат курс к диким берегам Байтляндии, вечерами вдоволь напиваясь ромом и болтая о том о сём. В такие моменты дядя Богдан часто вспоминает своего одаренного племянника Дениса. Сегодня он поведал историю о том, как мальчик помог придумать очень интересную задачу, и предложил команде справиться с ней.

Сначала, Дядя Богдан записал на доске целое положительное десятичное число \(x\) длины \(n\). Потом, немного подумав, стер \(x\) и написал число \(k\), образованное путем конкатенации двоичных записей цифр числа \(x\) (без ведущих нулей). Например, пусть \(x = 729\), тогда \(k = 111101001\) (так как \(7 = 111\), \(2 = 10\), \(9 = 1001\)).

Через некоторое время дядя Богдан понял, что не знает, что делать с \(k\) дальше и позвал на помощь Дениса. Денис, недолго думая, стер последние \(n\) цифр числа \(k\) и назвал полученное число \(r\).

В результате, Денис предложил искать такое число \(x\) длины \(n\), что полученное \(r\) (как число) максимально возможное. Если же подходящих \(x\) несколько, то Дениса интересует только минимальное из них.

Все члены команды, в том числе капитан Флинт, успешно справились с задачей. Все, кроме юного матроса Кости, который перебрал с выпивкой и был уже не в том состоянии. А Вы в состоянии сегодня решить эту задачу?

Уточнение: в данной задаче, мы сравниваем числа (\(x\) или \(k\)) как числа (независимо от того, в какой системе счисления они записаны), поэтому \(729 < 1999\) или \(111 < 1000\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(t\) строках заданы сами наборы — по одному в строке. В единственной строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина числа \(x\), записаного дядей Богданом.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное число \(x\) длины \(n\) такое, что полученное Денисом \(r\) максимально возможное.

Примечание

Во втором наборе входных данных (с \(n = 3\)), если дядя Богдан записал \(x = 998\), то \(k = 100110011000\). Денис же (удалением последних \(n = 3\) цифр) получит \(r = 100110011\).

Можно доказать, что \(100110011\) — максимально возможное число \(r\), которое может получить Денис, и \(998\) — минимальный \(x\), из которого его можно получить.

C. Дядя Богдан и настроение страны

Деревья жадные алгоритмы математика поиск в глубину и подобное *1800

Дядя Богдан, будучи матросом на корабле капитана Флинта, порой скучает по родине. Сегодня он рассказал о том, как в его государстве вводили индекс счастья населения.

Всего в стране \(n\) городов и \(n−1\) двусторонняя дорога, соединяющая некоторые пары городов. Из любого города можно попасть в любой другой, пройдя по некоторым дорогам. Города пронумерованы от \(1\) до \(n\) и город \(1\) является столицей. Таким образом, структура государства является корневым деревом.

Всего в стране проживает \(m\) человек. В \(i\)-м городе проживает \(p_i\) человек, но все работают в столице. После напряженного рабочего дня, каждый из жителей возвращается в свой город по кратчайшему пути.

У каждого жителя есть свое настроение: кто-то уходит с рабочего места в хорошем настроении, а у кого-то настроение уже испорчено. Более того, и по пути домой настроение жителя может испортиться. Если настроение человека испортилось, то оно уже не может улучшиться.

В каждом городе установлен детектор настроения — он отслеживает настроение каждого, кто побывал в этом городе. Детектор настроения \(i\)-го города считает индекс счастья \(h_i\) как количество человек в хорошем настроении минус количество в плохом. Для простоты будем считать, что настроение жителя внутри города не меняется.

Детектор настроения — это новая разработка и нет полной уверенности, что все приборы отработают должным образом. После того, как все жители страны добрались до своих городов, власти обратились к Дяде Богдану, лучшему программисту государства, с просьбой определить корректны ли данные индекса счастья всех городов или где-то закралась ошибка.

Дядя Богдан успешно справился с задачей. А удастся ли это Вам?

Более формально, Вам требуется определить: «Возможно ли, что, после возвращения всех жителей по домам, для каждого города \(i\) будет верно, что индекс счастья в этом городе в точности равен \(h_i\)».

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\); \(0 \le m \le 10^9\)) — количество городов и жителей в стране соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел \(p_1, p_2, \ldots, p_{n}\) (\(0 \le p_i \le m\); \(p_1 + p_2 + \ldots + p_{n} = m\)), где \(p_i\) — численность населения города \(i\).

В третьей строке заданы \(n\) целых чисел \(h_1, h_2, \ldots, h_{n}\) (\(-10^9 \le h_i \le 10^9\)), где \(h_i\) — индекс счастья города \(i\).

В следующих \(n − 1\) строках заданы описания дорог, по одному в строке. В каждой строке заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \neq y_i\)), где \(x_i\) и \(y_i\) — номера городов, которые соединены \(i\)-й дорогой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если все детекторы настроения исправны или NO — иначе. Буквы в словах YES и NO можно выводить в любом регистре.

Примечание

Рассмотрим первый набор входных данных первого теста:

Под конец рабочего дня все жители страны находятся в столице. Рассмотрим один из возможных вариантов развития событий:

  • житель города \(1\): живет в столице и его настроение не ухудшалось;
  • житель города \(4\): посетил города \(1\) и \(4\), настроение ухудшилось между городами \(1\) и \(4\);
  • житель города \(3\): посетил города \(1\) и \(3\) в хорошем настроении;
  • житель города \(6\): посетил города \(1\), \(3\) и \(6\), настроение ухудшилось между городами \(1\) и \(3\);
Таким образом,
  • \(h_1 = 4 - 0 = 4\),
  • \(h_2 = 0\),
  • \(h_3 = 1 - 1 = 0\),
  • \(h_4 = 0 - 1 = -1\),
  • \(h_5 = 0\),
  • \(h_6 = 0 - 1 = -1\),
  • \(h_7 = 0\).

Второй набор первого теста:

У всех жителей страны уже испортилось настроение в столице. Это единственный возможный вариант развития событий.

Первый набор второго теста:

Второй набор второго теста:

Можно показать, что требуемые значения индексов счастья недостижимы в обоих наборах второго теста.

D. Капитан Флинт и сокровище

графы Деревья жадные алгоритмы поиск в глубину и подобное реализация Структуры данных *2000

В погоне за очередным сокровищем капитан Флинт наткнулся на некоторую задачу, которая может быть связана с поиском сокровища, а может и не быть. Поэтому капитан Флинт поручил ее решение своим матросам и назначил огромное вознаграждение: целый один выходной день. Задача же звучит так...

Заданы массивы \(a\) и \(b\) длины \(n\). Изначально, \(ans\) равен \(0\) и определена следующая операция:

  1. Выбрать позицию \(i\) (\(1 \le i \le n\));
  2. Добавить к \(ans\) значение \(a_i\);
  3. Если \(b_i \neq -1\), то добавить к \(a_{b_i}\) значение \(a_i\);

Какой максимальный \(ans\) можно получить, применив эту операцию к каждой позиции \(i\) (\(1 \le i \le n\)) ровно один раз?

Дядя Богдан очень хочет получить вознаграждение и просит Вас помочь ему с решением задачи, а также предоставить порядок позиций, в котором нужно применять операцию выше.

Входные данные

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массивов \(a\) и \(b\).

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(−10^6 \le a_i \le 10^6\)).

В третьей строке каждого набора задано \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\) или \(b_i = -1\)).

Дополнительное ограничение: гарантируется, что для \(i\) (\(1 \le i \le n\)) последовательность \(b_i, b_{b_i}, b_{b_{b_i}}, \ldots\) не зациклится, то есть будет всегда оканчиваться на \(-1\).

Выходные данные

В первой строке выведите одно целое число, максимальный \(ans\), который можно получить.

Во второй строке опишите последовательность выполнения операций, чтобы получить этот максимальный ответ: \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) обозначает позицию, операция над которой выполняется \(i\)-й по порядку. Если существует несколько таких последовательностей, выведите любою из них.

A. Задача про LCM

жадные алгоритмы Конструктив математика теория чисел *800

Пусть \(LCM(x, y)\) — наименьшее положительное целое число, которое делится и на \(x\), и на \(y\). Например, \(LCM(13, 37) = 481\), \(LCM(9, 6) = 18\).

Вам даны два числа \(l\) и \(r\). Найдите два целых числа \(x\) и \(y\), для которых выполняются условия: \(l \le x < y \le r\) и \(l \le LCM(x, y) \le r\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных.

Каждый набор входных данных задается одной строкой, содержащей два целых числа \(l\) и \(r\) (\(1 \le l < r \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • если невозможно найти удовлетворяющие условиям числа \(x\) и \(y\), два раза выведите \(-1\);
  • иначе выведите значения \(x\) и \(y\) (если существует несколько возможных решений, выведите любое из них).

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\) уже является хорошей.

D. Пересечения отрезков

жадные алгоритмы математика Перебор реализация *2100

Вам заданы два списка отрезков \([al_1, ar_1], [al_2, ar_2], \dots, [al_n, ar_n]\) и \([bl_1, br_1], [bl_2, br_2], \dots, [bl_n, br_n]\).

Первоначально, все отрезки \([al_i, ar_i]\) равны \([l_1, r_1]\) и все отрезки \([bl_i, br_i]\) равны \([l_2, r_2]\).

За один шаг вы можете выбрать один отрезок (либо из первого списка, либо из второго) и удлинить его на \(1\). Другими словами, предположим, вы выбрали отрезок \([x, y]\), тогда вы можете его превратить либо в \([x - 1, y]\), либо в \([x, y + 1]\).

Объявим суммарное пересечение \(I\) как сумму длин пересечений соответствующих пар отрезков, то есть \(\sum\limits_{i=1}^{n}{\text{intersection_length}([al_i, ar_i], [bl_i, br_i])}\). Пустое пересечение имеет длину \(0\), а длина отрезка \([x, y]\) равна \(y - x\).

Какое минимальное количество шагов необходимо выполнить, чтобы сделать \(I\) большим или равным \(k\)?

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — длина каждого из списков и минимально необходимое суммарное пересечение.

Во второй строке каждого набора заданы два целых числа \(l_1\) и \(r_1\) (\(1 \le l_1 \le r_1 \le 10^9\)) — отрезок, которому первоначально равны все \([al_i, ar_i]\).

В третьей строке каждого набора заданы два целых числа \(l_2\) и \(r_2\) (\(1 \le l_2 \le r_2 \le 10^9\)) — отрезок, которому первоначально равны все \([bl_i, br_i]\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел — по одному на набор входных данных. Для каждого набора, выведите минимальное количество необходимых шагов, чтобы сделать \(I\) больше или равным \(k\).

Примечание

В первом наборе входных данных, мы можем достигнуть суммарного пересечения \(5\), используя, например, следующую стратегию:

  • превратим \([al_1, ar_1]\) из \([1, 2]\) в \([1, 4]\) за \(2\) шага;
  • превратим \([al_2, ar_2]\) из \([1, 2]\) в \([1, 3]\) за \(1\) шаг;
  • превратим \([bl_1, br_1]\) из \([3, 4]\) в \([1, 4]\) за \(2\) шага;
  • превратим \([bl_2, br_2]\) из \([3, 4]\) в \([1, 4]\) за \(2\) шага.
В результате, \(I = \text{intersection_length}([al_1, ar_1], [bl_1, br_1]) + \text{intersection_length}([al_2, ar_2], [bl_2, br_2]) + \\ + \text{intersection_length}([al_3, ar_3], [bl_3, br_3]) = 3 + 2 + 0 = 5\).

Во втором наборе, мы можем сделать \([al_1, ar_1] = [0, 1000000000]\) за \(1000000000\) шагов и \([bl_1, br_1] = [0, 1000000000]\) за \(1000000000\) шагов.

В третьем наборе, суммарное пересечение \(I\) уже равно \(10 > 3\), а потому, не нужно делать ни одного шага.

B. Начни с себя

жадные алгоритмы Перебор реализация *800

Рассмотрим конвейер, представляющий собой сетку, состоящую из \(n\) строк и \(m\) столбцов. Ячейка в \(i\)-й строке сверху и в \(j\)-м слева столбце обозначается как \((i,j)\).

Каждой ячейке, кроме \((n,m)\), назначено направление R (вправо) или D (вниз). Если ячейке \((i,j)\) назначено направление R, любой багаж в ней переместится в ячейку \((i,j+1)\). Аналогично, если ячейке \((i,j)\) назначено D, любой багаж в ней переместится в ячейку \((i+1,j)\). Если в любой момент времени багаж выходит за пределы сетки, он считается утерянным.

В ячейке \((n,m)\) есть стойка, где подбирается весь багаж. Конвейер называется работоспособным тогда и только тогда, когда любой багаж достигнет стойки, независимо от того, в какую ячейку он изначально помещен. Более формально, для каждой ячейки \((i,j)\) любой багаж, помещенный в эту ячейку, должен в итоге оказаться в ячейке \((n,m)\).

Может случиться такое, что это условие изначально не выполняется; вам, однако, разрешено изменять направления некоторых ячеек для обеспечения работоспособности конвейера. Пожалуйста, определите минимальное количество ячеек, направления в которых вы должны изменить.

Обратите внимание, что всегда можно сделать любой конвейер работоспособным, изменив направления набора ячеек.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n \le 100\), \(1 \le m \le 100\)) — количество строк и столбцов соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов. \(j\)-й символ в строке \(i\), \(a_{i,j}\), является начальным направлением ячейки \((i, j)\). Обратите внимание, что \(a_{n,m}=\) C.

Выходные данные

Для каждого случая выведите в новой строке минимальное количество ячеек, которое необходимо изменить, чтобы обеспечить работоспособность конвейера.

Примечание

В первом случае достаточно просто изменить направление \((2,3)\) на D.

Вы можете проверить работоспособность полученного конвейера. Например, если мы поместим багаж в \((2,2)\), он сначала переместится в \((3,2)\), а затем в \((3,3)\).

Во втором случае у нас нет другого выбора, кроме как изменить первые \(3\) ячейки с D на R, сделав сетку равной RRRC.

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\).

E. Пары пар

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2600

У вас есть простой связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

Рассмотрим все способы разбить на пары некоторое подмножество из этих \(n\) вершин, чтобы ни одна вершина не присутствовала более чем в одной паре.

Такое паросочетание считается хорошим, если для каждой пары выбранных пар индуцированный подграф, содержащий все \(4\) вершины, по два из каждой пары, имеет не более \(2\) ребер (из \(6\) возможных ребер). Более формально, для любых двух выбранных пар \((a,b)\) и \((c,d)\) индуцированный подграф с вершинами \(\{a,b,c,d\}\) должен иметь не более \(2\) ребер.

Обратите внимание, что подграф, индуцированный набором вершин, содержит вершины только из этого набора и ребра, оба конца которых находятся в этом наборе.

Теперь сделайте одно из двух

  • Найдите простой путь, состоящий как минимум из \(\lceil \frac{n}{2} \rceil\) вершин. Здесь путь называется простым, если он не посещает какую-либо вершину несколько раз.
  • Найдите хорошее паросочетание, в котором по крайней мере у \(\lceil \frac{n}{2} \rceil\) вершин есть пара.

Можно показать, что в каждом графе, удовлетворяющим ограничениям из условия, можно найти или первое, или второе (или оба).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n, m\) (\(2 \le n \le 5\cdot 10^5\), \(1 \le m \le 10^6\)), обозначающих количество вершин и ребер графа соответственно.

Каждая из следующих \(m\) строк содержит \(2\) целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), что обозначает наличие неориентированного ребра между вершинами \(u\) и \(v\) в данном графе.

Гарантируется, что данный граф является связным и простым  — он не содержит кратных ребер и петель.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5\cdot 10^5\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных придерживайтесь следующего формата вывода:

Если вы нашли хорошее паросочетание, в первой строке выведите «PAIRING» (без кавычек).

  • Затем выведите \(k\) (\(\lceil \frac{n}{2} \rceil \le 2\cdot k \le n\)), количество пар в вашем паросочетании.
  • Затем в каждой из следующих \(k\) строк выведите по \(2\) целых числа \(a\) и \(b\)  —, обозначающих, что \(a\) и \(b\) находятся в одной паре. Заметьте, что в графе не обязано быть ребро между вершинами \(a\) и \(b\)!
  • Это паросочетание должно быть хорошим, и каждая вершина должен входить не более в \(1\) пару.

В противном случае в первой строке выведите «PATH» (без кавычек).

  • Затем выведите \(k\) (\(\lceil \frac{n}{2} \rceil \le k \le n\)), количество узлов на вашем пути.
  • Затем во второй строке выведите \(k\) целых чисел, \(v_1, v_2, \ldots, v_k\), в том порядке, в котором они встречаются на пути. Формально, \(v_i\) и \(v_{i+1}\) должны иметь ребро между ними для каждого \(i\) (\(1 \le i < k\)).
  • Этот путь должен быть простым, то есть ни одна вершина не должна встречаться на нем более одного раза.
Примечание

Путь, полученный в первом наборе входных данных, следующий.

Вот хорошее паросочетание для первого набора входных данных.

Вот нехорошее паросочетание для первого набора входных данных  — подграф \(\{1,3,4,5\}\) имеет \(3\) ребра.

Вот паросочетание, полученное во втором наборе входных данных.

Оно хорошее потому, что  —

  • Подграф \(\{1,8,2,5\}\) содержит ребра (\(1\),\(2\)) и (\(1\),\(5\)).
  • Подграф \(\{1,8,4,10\}\) содержит ребра (\(1\),\(4\)) и (\(4\),\(10\)).
  • Подграф \(\{4,10,2,5\}\) содержит ребра (\(2\),\(4\)) и (\(4\),\(10\)).

Вот еще одно хорошее паросочетание для второго набора входных данных.

A. Омкар и пароль

жадные алгоритмы математика *800

Лорд Омкар разрешил тебе войти в Храм Омкара! Чтобы проверить, достоин ли ты, Омкар дает тебе пароль, который ты должен понять!

Пароль представляет собой массив \(a\) из \(n\) положительных целых чисел. Вы можете применить к массиву следующую операцию: выбрать любые два соседних числа, которые не равны друг другу, и заменить их на их сумму. Формально, вы должны выбрать индекс \(i\) такой, что \(1 \leq i < n\) и \(a_{i} \neq a_{i+1}\), удалить \(a_i\) и \(a_{i+1}\) с массива, и на их место вставить \(a_{i}+a_{i+1}\).

Например, для массива \([7, 4, 3, 7]\) можно выбрать \(i = 2\) и массив станет равным \([7, 4+3, 7] = [7, 7, 7]\). Обратите внимание, что в этом массиве уже не получится применить данную операцию.

Обратите внимание, что одна операция уменьшает длину пароля на \(1\). Какую наименьшую длину пароля можно получить после некоторого количества (возможно \(0\)) операций?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \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\).

Выходные данные

Для каждого пароля выведите одно целое число — наименьшую возможную длину пароля после некоторого количества операций.

Примечание

В первом наборе входных данных вы можете сделать следующее для достижения длины в \(1\):

Выберите \(i=2\), чтобы получить \([2, 4, 1]\).

Выберите \(i=1\), чтобы получить \([6, 1]\).

Выберите \(i=1\), чтобы получить \([7]\).

Во втором наборе входных данных вы не можете выполнить ни одной операции, потому что нет \(i\), которые удовлетворяли бы вышеперечисленным требованиям.

C. Омкар и водная горка

жадные алгоритмы реализация *1200

Омкар строит водную горку в своем аквапарке, и ему нужна ваша помощь, чтобы сделать это как можно эффективнее.

В настоящее время у Омкара есть \(n\) опор, выстроенных в линию, \(i\)-я из которых имеет высоту \(a_i\). Омкар хочет построить свою водную горку справа налево, поэтому его опоры должны быть неспадающими по высоте, чтобы выдержать водную горку. За \(1\) операцию Омкар может сделать следующее: взять любой последовательный подотрезок опор, неспадающий по высотам, и добавить \(1\) к высоте каждой из них.

Помогите Омкару найти минимальное количество операций, которые ему нужно сделать, чтобы его опоры смогли выдержать его водную горку!

Последовательность \(b\) является подотрезком \(c\), если \(b\) может быть получена из \(c\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Массив \(b_1, b_2, \dots, b_n\) называется неспадающим, если \(b_i\le b_{i+1}\) для каждого \(i\) от \(1\) до \(n-1\).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \leq t \leq 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество опор Омкара.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},...,a_{n}\) \((0 \leq a_{i} \leq 10^9)\) — высоты опор.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое необходимо выполнить Омкару, чтобы его опоры могли выдерживать его водную горку.

Примечание

Подмассив, с которым Омкар выполняет операцию, выделен жирным шрифтом.

В первом наборе входных данных:

  • Первая операция:

    \([5, 3, \textbf{2}, 5] \to [5, 3, \textbf{3}, 5]\)

  • Вторая операция:

    \([5, \textbf{3}, \textbf{3}, 5] \to [5, \textbf{4}, \textbf{4}, 5]\)

  • Третья операция:

    \([5, \textbf{4}, \textbf{4}, 5] \to [5, \textbf{5}, \textbf{5}, 5]\)

В третьем наборе входных данных массив уже является неспадающим, поэтому Омкар выполняет \(0\) операций.

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\).

F. Омкар и оползень

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *2400

Омкар стоит у подножия горы Селеста. Вершина находится в \(n\) метрах от него, и он может видеть всю гору до вершины, поэтому для каждого \(1 \leq j \leq n\) он знает, что высота горы в точке в \(j\) метрах от него равна \(h_j\). Известно, что для всех \(j\) удовлетворяющих \(1 \leq j \leq n - 1\), \(h_j < h_{j + 1}\) (то есть высоты строго возрастают).

Внезапно происходит оползень! Пока происходит оползень, происходит следующее: каждую минуту, если \(h_j + 2 \leq h_{j + 1}\), то один квадратный метр грязи будет скользить с позиции \(j + 1\) в позицию \(j\), так что \(h_{j + 1}\) уменьшается на \(1\), а \(h_j\) увеличивается на \(1\). Эти изменения происходят одновременно, так, например, если \(h_j + 2 \leq h_{j + 1}\) и \(h_{j + 1} + 2 \leq h_{j + 2}\) для какого-то \(j\), то \(h_j\) будет увеличено на \(1\), \(h_{j + 2}\) будет уменьшено на \(1\), а \(h_{j + 1}\) будет увеличено и уменьшено на \(1\), что означает, что на самом деле \(h_{j + 1}\) в течение этой минуты не изменится.

Оползень заканчивается, когда не будет такого \(j\), что \(h_j + 2 \leq h_{j + 1}\). Помогите Омкару выяснить, каковы будут значения \(h_1, \dots, h_n\) после окончания оползня. Можно доказать, что при заданных ограничениях оползень всегда заканчивается через некоторое число минут.

Обратите внимание, что из-за большого количества входных данных, рекомендуется, чтобы ваш код использовал быстрый ввод.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)).

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) удовлетворяющих \(0 \leq h_1 < h_2 < \dots < h_n \leq 10^{12}\) — высоты.

Выходные данные

Выведите \(n\) целых чисел, где \(j\)-е число  — это значение \(h_j\) после остановки оползня.

Примечание

Первоначально гора имеет высоты \(2, 6, 7, 8\).

В первую минуту у нас есть \(2 + 2 \leq 6\), таким образом \(2\) увеличивается до \(3\), а \(6\) уменьшается до \(5\), оставляя \(3, 5, 7, 8\).

Во вторую минуту у нас есть \(3 + 2 \leq 5\) и \(5 + 2 \leq 7\), таким образом \(3\) увеличивается до \(4\), \(5\) остается без изменений, а \(7\) уменьшается до \(6\), оставляя \(4, 5, 6, 8\).

На третьей минуте у нас есть \(6 + 2 \leq 8\), так что \(6\) увеличивается до \(7\), а \(8\) уменьшается до \(7\), оставляя \(4, 5, 7, 7\).

На четвертой минуте у нас есть \(5 + 2 \leq 7\), таким образом \(5\) увеличивается до \(6\), а \(7\) уменьшается до \(6\), оставляя \(4, 6, 6, 7\).

На пятой минуте у нас есть \(4 + 2 \leq 6\), поэтому \(4\) увеличивается до \(5\), а \(6\) уменьшается до \(5\), оставляя \(5, 5, 6, 7\).

На шестой минуте ничего больше не может измениться, поэтому оползень останавливается, и наш ответ  — \(5, 5, 6, 7\).

A. Радуга, Флаттершай и шахматная раскраска

жадные алгоритмы математика *800

Одним вечером Радуга и Флаттершай придумали игру. Так как пони дружат, то и в игре они решили не соревноваться, а вместе двигаться к общей цели.

Игра начинается на квадратном плоском поле, у которого изначально выложены внешние границы. У Радуги и Флаттершай есть квадратные плоские фишки размера \(1\times1\), у Радуги бесконечное число голубых фишек, у Флаттершай бесконечное число желтых фишек.

Фишки выкладываются по следующему правилу: каждая новая выкладываемая фишка должна соприкасаться стороной с уже построенной фигурой (внешняя граница игрового поля считается построенной изначально). На очередном ходу одна пони может выложить любое количество фишек своего цвета в соответствие с правилами игры.

Радуга и Флаттершай догадались, что таким образом можно выкладывать различные узоры на игровом поле. Они решили начать с чего-то простого, поэтому решили выложить фишки так, чтобы они образовали шахматную раскраску. Радуга славится своей скоростью, поэтому ей стало интересно, за какое минимальное количество ходов они с Флаттершай смогут получить шахматную раскраску, закрыв все поле фишками. Помогите ей найти это количество!

Так как пони могут играть много раз на разных досках, Радуга просит найти минимальное количество ходов для нескольких игровых полей.

Напоминаем, что шахматная раскраска поля в два цвета — та, в которой любая клетка соседствует по стороне только с клетками другого цвета.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество игровых полей. Каждая из следующих \(T\) строк содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — сторона поля.

Выходные данные

Для каждого игрового поля выведите минимальное количество ходов, чтобы выложить на нем шахматную раскраску из фишек.

Примечание

Для поля \(3\times3\) пони могут сделать два следующих хода:

B. Эпплджек и хранилища

жадные алгоритмы Конструктив реализация Структуры данных *1400

Этот год в Эквестрии выдался урожайным, и Эпплджек захотела построить новые хранилища для яблок. По советам проектировщиков фермы она решила построить два хранилища ненулевой площади: одно в форме квадрата, другое в форме прямоугольника (который, возможно, тоже является квадратом).

Хранилища Эпплджек будет строить из досок, на каждую сторону хранилища она собирается потратить ровно одну доску. Доски она может заказать в одной фирме у своего приятеля. Изначально на складе фирмы есть \(n\) досок, длины которых Эпплджек известны. Работа фирмы не стоит на месте, она периодически получает заказы и сама заказывает новые доски. Приятель Эпплджек может предоставить ей информацию о всех операциях. Для удобства он будет сообщать информацию в следующем формате:

  • \(+\) \(x\) — на склад поступила доска с длиной \(x\)
  • \(-\) \(x\) — со склада отгрузили доску с длиной \(x\) (при этом гарантируется, что на складе были какие-то доски длины \(x\))

Эпплджек пока не определилась, когда она будет заказывать доски, поэтому она хочет после каждого события на складе знать, может ли она заказать доски, чтобы построить прямоугольное и квадратное хранилища. Эпплджек занята сбором яблок, поэтому у нее нет времени на подсчеты, и она попросила вас помочь ей!

Напоминаем, что у квадрата все четыре стороны равны, а у прямоугольника две пары равных сторон.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — изначальное количество досок на складе фирмы, вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — длины досок.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество событий в фирме. Каждая из следующих \(q\) строк содержит описание событий в данном формате: сначала идет тип события (символ \(+\) или \(-\)), а затем число \(x\) (\(1 \le x \le 10^5\)).

Выходные данные

После каждого события на фирме выведите «YES», если из досок на складе фирмы можно собрать два хранилища нужной формы, и «NO» иначе (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

После второго события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(2\), \(1\), \(2\) и квадратное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\).

После шестого события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\) и квадратное хранилище из досок с длинами \(2\), \(2\), \(2\), \(2\).

C. Пинки Пай поедает пирожные

жадные алгоритмы Конструктив математика сортировки *1700

Пинки Пай купила пакет пирожных с разными начинками! Но оказалось, что не все пирожные различаются начинкой между собой, то есть в пакете есть какие-то пирожные с одинаковой начинкой.

Пинки Пай ест пирожные по одному подряд. Она любит веселиться, поэтому решила не просто поедать пирожные, а стараться не есть пирожные с одной начинкой слишком часто. Для этого она хочет, чтобы минимальное расстояние между съеденными пирожными с одинаковой начинкой было как можно больше. При этом расстоянием между двумя пирожными Пинки Пай решила назвать количество съеденных пирожных между ними.

Пинки Пай может поедать пирожные в любом порядке. Ей не терпится скорее съесть все пирожные, поэтому она просит вас помочь посчитать наибольшее минимальное расстояние между съеденными пирожными с одинаковой начинкой среди всех возможных порядков поедания!

Пинки Пай собирается покупать еще пакеты с пирожными, поэтому просит вас решить задачу для нескольких пакетов!

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество пакетов, для которых нужно решить задачу.

Первая строка описания пакета содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество пирожных в нем. Вторая строка описания пакета содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — информация о начинках пирожных: одинаковые начинки обозначены одинаковым числом, разные начинки — разным. Гарантируется, что в каждом пакете есть как минимум два пирожных с одинаковой начинкой.

Гарантируется, что сумма значений \(n\) по всем пакетам не превосходит \(10^5\).

Выходные данные

Для каждого пакета в отдельной выведите одно целое число — наибольшее минимальное расстояние между съеденными пирожными с одинаковой начинкой среди всех возможных порядков поедания пирожных из этого пакета.

Примечание

Для первого пакета Пинки Пай может есть пирожные в следующем порядке (по начинкам): \(1\), \(6\), \(4\), \(7\), \(1\), \(6\), \(4\) (таким образом, минимальное расстояние будет равно \(3\)).

Для второго пакета Пинки Пай может есть пирожные в следующем порядке (по начинкам): \(1\), \(4\), \(6\), \(7\), \(4\), \(1\), \(6\), \(4\) (таким образом, минимальное расстояние будет равно \(2\)).

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\), и это минимальный возможный ответ.

A. Кратные длине

жадные алгоритмы Конструктив теория чисел *1600

Вам дан массив \(a\) из \(n\) целых чисел.

Вы хотите сделать все элементы \(a\) равными нулю, применив следующую операцию ровно три раза:

  • Выберите отрезок, к каждому числу на этом отрезке добавьте число кратное \(len\), где \(len\) это длина этого отрезка (добавленные числа могут быть разными).

Можно доказать, что таким образом всегда можно превратить все элементы \(a\) в нули.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\,000\)): количество элементов массиве.

Во второй строке записаны \(n\) элементов массива \(a\), разделенные пробелами: \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Выходные данные

Выведите шесть строк, описывающих три операции.

Для каждой операции, выведите две строки:

  • В первой строке выведите два числа \(l\), \(r\) (\(1 \le l \le r \le n\)): границы выбранного отрезка.

  • Во второй строке выведите \(r-l+1\) целых чисел \(b_l, b_{l+1}, \dots, b_r\) (\(-10^{18} \le b_i \le 10^{18}\)): числа, которые нужно прибавить к \(a_l, a_{l+1}, \ldots, a_r\), соответственно; \(b_i\) должно делиться на \(r - l + 1\).

B. Каменная игра

жадные алгоритмы игры Конструктив Перебор *1800

T играет в игру со своим другом HL.

Есть \(n\) кучек с камнями, в \(i\)-й из них исходно содержится \(a_i\) камней.

T и HL будут ходить чередуясь, и T ходит первым. В каждом ходу, игрок выбирает непустую кучу и удаляет из нее один камень. Однако, нельзя выбирать кучку, которая была выбрана на прошлом ходу (кучку которая была выбрана другим игроком, или если текущий ход это первый ход первого игрока, то можно выбрать любую кучу). Игрок, который не может выбрать кучу на своем ходу, проигрывает.

Считая, что оба игрока играют оптимально, для заданных стартовых конфигураций \(t\) игр, определите победителя.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество игр. Далее следуют описания игр, описание каждой игры состоит из двух строк:

В первой строке записано одно целое число \(n\) \((1 \le n \le 100)\) — количество куч.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 100)\).

Выходные данные

Для каждой игры, выведите в отдельной строке имя победителя, «T» или «HL» (без кавычек).

Примечание

В первой игре, T убирает один камень из единственной кучи. После этого, несмотря на то, что в куче еще остался \(1\) камень, HL не можем сходить, из-за того что T использовал эту кучу на прошлом ходу. Таким образом, T побеждает.

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\), а когда все боссы убиты.

A. Жонглирование буквами

жадные алгоритмы Строки *800

Вам дано \(n\) строк \(s_1, s_2, \ldots, s_n\) состоящих из строчных букв латинского алфавита.

За одну операцию вы можете удалить один символ из строки \(s_i\) и вставить его в любую позицию строки \(s_j\) (\(j\) может быть равно \(i\)). Вы можете совершать эту операцию сколько угодно раз. Возможно ли сделать все \(n\) строк равными?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)): количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 1000\)): количество строк.

В следующих \(n\) строках, \(i\)-я из них содержит \(s_i\) (\(1 \le \lvert s_i \rvert \le 1000\)).

Сумма длин всех строк по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Если возможно сделать все строки равными, выведите «YES» (без кавычек).

Иначе, выведите «NO» (без кавычек).

Вы можете выводить каждый символ как в нижнем, так и в верхнем регистре.

Примечание

В первом наборе входных данных, вы можете сделать следующее:

  • Удалить третий символ первой строки и вставить его после второго символа второй строки, превратив две строки в «ca» и «cbab», соотвестственно.
  • Удалить второй символ второй строки и вставить его после второго символа первой строки, сделав обе строки равными «cab».

Во втором наборе входных данных невозможно сделать все \(n\) строк равными.

B. Игра с удалением подстрок

жадные алгоритмы игры сортировки *800

Алиса и Боб играют в игру. У них есть бинарная строка \(s\) (каждый символ бинарной строки — либо \(0\), либо \(1\)). Алиса ходит первой, потом Боб, потом снова Алиса, и так далее.

В свой ход игрок должен выбрать несколько (не менее одного) последовательных одинаковых символов в \(s\) и удалить их.

Например, если текущая строка — \(10110\), существует \(6\) возможных ходов (удаляемые символы выделены жирным):

  1. \(\textbf{1}0110 \to 0110\);
  2. \(1\textbf{0}110 \to 1110\);
  3. \(10\textbf{1}10 \to 1010\);
  4. \(101\textbf{1}0 \to 1010\);
  5. \(10\textbf{11}0 \to 100\);
  6. \(1011\textbf{0} \to 1011\).

После удаления символов те символы, которые стояли слева и справа от удаленного блока, становятся последовательными. Т. е. следующая последовательность операций возможна: \(10\textbf{11}0 \to 1\textbf{00} \to 1\).

Игра заканчивается, когда строка становится пустой. Счет каждого игрока равен кол-ву символов \(1\), которые он удалил.

Каждый игрок хочет набрать максимально возможное количество очков. Посчитайте, сколько очков наберет Алиса.

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 500\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну бинарную строку \(s\) (\(1 \le |s| \le 100\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него — счет Алисы в конце игры (количество символов \(1\), которые она удалит).

Примечание

Вопросы по поводу оптимальной стратегии будут игнорироваться.

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\). Обратите внимание, что больше прямоугольников нельзя построить, потому что не разрешается иметь обе взятые пары одного цвета.

E. Два типа заклинаний

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *2200

Поликарп играет в компьютерную игру (да, опять). В этой игре он сражается с монстрами при помощи заклинаний.

Есть два типа заклинаний: огненный шар силы \(x\) наносит \(x\) урона монстру, а молния силы \(y\) наносит \(y\) урона монстру и удваивает урон следующего заклинания. Каждое заклинание может быть использовано только один раз, но Поликарп может применять их в любом порядке.

Например, предположим, что Поликарп знает три заклинания: огненный шар силы \(5\), молнию силы \(1\) и молнию силы \(8\). Всего есть \(6\) способов выбрать порядок заклинаний:

  • первое, второе, третье. В таком случае вы нанесете \(5 + 1 + 2 \cdot 8 = 22\) урона;
  • первое, третье, второе. В таком случае вы нанесете \(5 + 8 + 2 \cdot 1 = 15\) урона;
  • второе, первое, третье. В таком случае вы нанесете \(1 + 2 \cdot 5 + 8 = 19\) урона;
  • второе, третье, первое. В таком случае вы нанесете \(1 + 2 \cdot 8 + 2 \cdot 5 = 27\) урона;
  • третье, первое, второе. В таком случае вы нанесете \(8 + 2 \cdot 5 + 1 = 19\) урона;
  • третье, второе, первое. В таком случае вы нанесете \(8 + 2 \cdot 1 + 2 \cdot 5 = 20\) урона.

Изначально Поликарп знает \(0\) заклинаний. Его набор заклинаний меняется \(n\) раз, каждый раз он либо учит новое заклинание, либо забывает старое. После каждого изменения выведите максимально количество урона, которое можно нанести при помощи имеющихся заклинаний.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество заклинаний в наборе.

Каждая из следующих \(n\) строк содержит два числа \(tp\) и \(d\) (\(0 \le tp_i \le 1\); \(-10^9 \le d \le 10^9\); \(d_i \neq 0\)) — описание изменений. Если \(tp_i\) равно \(0\), Поликарп учит (или забывает) огненный шар, иначе он учит (или забывает) молнию.

Если \(d_i > 0\), то Поликарп учит заклинание силы \(d_i\). Иначе, Поликарп забывает заклинание силы \(-d_i\), и гарантируется, что он знал это заклинание до этого.

Гарантируется, что после каждого изменения все силы заклинаний различны (Поликарп не может знать одновременно два заклинания одинаковой силы).

Выходные данные

После каждого изменения выведите максимально количество урона, которое можно нанести при помощи имеющихся заклинаний.

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\) то завершенных сетов нет.

A. Удалить наименьшее

жадные алгоритмы сортировки *800

Вам дан массив \(a\), состоящий из \(n\) положительных (больших нуля) целых чисел.

За один ход вы можете выбрать два индекса \(i\) и \(j\) (\(i \ne j\)) таких, что абсолютная разность между \(a_i\) и \(a_j\) не превосходит единицу (\(|a_i - a_j| \le 1\)), и удалить наименьший из этих двух элементов. Если два элемента равны, вы можете удалить любой из них (но только один).

Ваша задача — определить, возможно ли получить массив, состоящий только из одного элемента, применив несколько (возможно, ноль) таких ходов, или нет.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длину \(a\). Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\)\(i\)-й элемент \(a\).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: «YES», если возможно получить массив, состоящий только из одного элемента, применив несколько (возможно, ноль) ходов, описанных в условии задачи, или «NO» в обратном случае.

Примечание

В первом наборе тестовых данных примера мы можем применить следующую последовательность ходов:

  • выбрать \(i=1\) и \(j=3\), а затем удалить \(a_i\) (таким образом, \(a\) превратится в \([2; 2]\));
  • выбрать \(i=1\) и \(j=2\), а затем удалить \(a_j\) (таким образом, \(a\) превратится в \([2]\)).

Во втором наборе тестовых данных примера мы можем выбирать любые возможные \(i\) и \(j\) в течение любого хода и удалять любой элемент из пары.

В третьем наборе тестовых данных примера не существует способа избавиться от \(2\) и \(4\).

B. Уравнивание подарков

жадные алгоритмы *800

У вас есть \(n\) подарков, и вы хотите подарить все эти подарки детям. Конечно же, вам не хочется кого-то обидеть, поэтому все подарки должны быть равны между собой. \(i\)-й подарок состоит из \(a_i\) конфет и \(b_i\) апельсинов.

За один ход вы можете выбрать некоторый подарок \(1 \le i \le n\) и совершить одно из следующих действий:

  • съесть ровно одну конфету из этого подарка (уменьшить \(a_i\) на один);
  • съесть ровно один апельсин из этого подарка (уменьшить \(b_i\) на один);
  • съесть ровно одну конфету и ровно один апельсин из этого подарка (уменьшить и \(a_i\), и \(b_i\) на один).

Разумеется, вы не можете съесть конфету или апельсин, если их нет в подарке (поэтому ни \(a_i\), ни \(b_i\) не могут стать меньше нуля).

Как было сказано выше, все подарки должны быть равны. Это означает, что после некоторой последовательности ходов должны быть выполнены следующие два условия: \(a_1 = a_2 = \dots = a_n\) и \(b_1 = b_2 = \dots = b_n\) (и равенство \(a_i\) и \(b_i\) не является необходимым).

Ваша задача — найти минимальное количество ходов, необходимое, чтобы уравнять все заданные подарки.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество подарков. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество конфет в \(i\)-м подарке. Третья строка набора тестовых данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)), где \(b_i\) — количество апельсинов в \(i\)-м подарке.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число: минимальное количество ходов, необходимое, чтобы уравнять все заданные подарки.

Примечание

В первом наборе тестовых данных примера мы можем выполнить следующую последовательность ходов:

  • выбрать первый подарок и съесть один апельсин из него, таким образом \(a = [3, 5, 6]\) и \(b = [2, 2, 3]\);
  • выбрать второй подарок и съесть одну конфету из него, таким образом \(a = [3, 4, 6]\) и \(b = [2, 2, 3]\);
  • выбрать второй подарок и съесть одну конфету из него, таким образом \(a = [3, 3, 6]\) и \(b = [2, 2, 3]\);
  • выбрать третий подарок и съесть одну конфету и один апельсин из него, таким образом \(a = [3, 3, 5]\) и \(b = [2, 2, 2]\);
  • выбрать третий подарок и съесть одну конфету из него, таким образом \(a = [3, 3, 4]\) и \(b = [2, 2, 2]\);
  • выбрать третий подарок и съесть одну конфету из него, таким образом \(a = [3, 3, 3]\) и \(b = [2, 2, 2]\).

C. Лодочное соревнование

жадные алгоритмы Перебор *1200

Есть \(n\) людей, желающих принять участие в лодочном соревновании. Вес \(i\)-го участника равен \(w_i\). Принять участие могут только команды, состоящие из двух человек. Как организатор вы считаете честным допустить к соревнованию только команды с одинаковым суммарным весом.

Таким образом, для \(k\) команд \((a_1, b_1)\), \((a_2, b_2)\), \(\dots\), \((a_k, b_k)\), где \(a_i\) — вес первого участника \(i\)-й команды, а \(b_i\) — вес второго участника \(i\)-й команды, должно выполняться условие \(a_1 + b_1 = a_2 + b_2 = \dots = a_k + b_k = s\), где \(s\) — суммарный вес для каждой команды.

Ваша задача — выбрать такое число \(s\), что количество команд, которые могут быть созданы, максимально возможное. Обратите внимание: каждый участник может состоять не более чем в одной команде.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество участников. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le n\)), где \(w_i\) — вес \(i\)-го участника.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число \(k\): максимальное число команд, которые могут быть составлены при суммарном весе участников в команде, равном \(s\), если выбирать \(s\) оптимально.

Примечание

В первом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=6\). Тогда первая лодка будет использоваться участниками \(1\) и \(5\), а вторая лодка — участниками \(2\) и \(4\) (индексы совпадают с весами).

Во втором наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=12\). Тогда первые \(6\) участников смогут образовать \(3\) пары.

В третьем наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=3\). Ответ равен \(4\), потому что у нас есть \(4\) участника с весом \(1\) и \(4\) участника с весом \(2\).

В четвертом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=4\) или \(s=6\).

В пятом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=3\). Заметьте, что участник с весом \(3\) не может использовать лодку, потому что для него в списке нет подходящей пары.

D. Из бинарной строки в подпоследовательности

жадные алгоритмы Конструктив реализация Структуры данных *1500

Вам задана бинарная строка \(s\), состоящая из \(n\) нулей или единиц.

Ваша задача – разделить заданную строку на минимальное число подпоследовательностей таким образом, что каждый символ строки принадлежит ровно одной подпоследовательности и каждая подпоследовательность выглядит подобно «010101 ...» или «101010 ...» (т.е. подпоследовательность не должна содержать два соседних нуля или единицы).

Напомним, что подпоследовательность — это последовательность, которая может быть получена путем удаления из заданной последовательности с помощью удаления нуля или более элементов без изменения порядка остальных элементов. Например, подпоследовательностями «1011101» являются «0», «1», «11111», «0111», «101», «1001», но не «000», «101010» и «11100».

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(s\). Вторая строка набора тестовых данных содержит \(n\) символов '0' и '1' — строку \(s\).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: первой строкой выведите одно целое число \(k\) (\(1 \le k \le n\)) — минимальное количество подпоследовательностей, на которые вы можете разделить строку \(s\). Второй строкой выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\) — номер подпоследовательности, к которой принадлежит \(i\)-й символ строки \(s\).

Если существует несколько ответов, вы можете вывести любой.

E1. Деление весов (простая версия)

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2000

Простая и сложная версии на самом деле являются разными задачами, поэтому прочитайте условия обеих задач внимательно.

Вам задано взвешенное корневое дерево, вершина \(1\) — корень этого дерева.

Дерево — это связный граф без циклов. У корневого дерева есть специальная вершина, называемая корнем. Предком вершины \(v\) называется последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Потомками вершины \(v\) называются все вершины, для которых \(v\) является предком. Вершина называется листом, если у нее нет потомков. Взвешенное дерево — это такое дерево, в котором у каждого ребра есть некоторый вес.

Вес пути — это сумма весов всех ребер на этом пути. Вес пути от вершины до самой себя равен \(0\).

Вы можете совершить последовательность из нуля или более ходов. В течение одного хода вы можете выбрать ребро и поделить его вес на \(2\) с округлением вниз. Более формально, в течение одного хода вы выбираете какое-то ребро \(i\) и делите его вес на \(2\) с округлением вниз (\(w_i := \left\lfloor\frac{w_i}{2}\right\rfloor\)).

Ваша задача — найти минимальное количество ходов, необходимых для того, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\). Другими словами, если \(w(i, j)\) — это вес пути от вершины \(i\) до вершины \(j\), то вам необходимо сделать \(\sum\limits_{v \in leaves} w(root, v) \le S\), где \(leaves\) — это список всех листьев.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(S\) (\(2 \le n \le 10^5; 1 \le S \le 10^{16}\)) — количество вершин в дереве и максимально возможная сумма весов, которую вы можете получить. Следующая \(n-1\) строка описывает ребра дерева. Ребро \(i\) описывается тремя целыми числами \(v_i\), \(u_i\) и \(w_i\) (\(1 \le v_i, u_i \le n; 1 \le w_i \le 10^6\)), где \(v_i\) и \(u_i\) — вершины, которые соединены ребром \(i\), а \(w_i\) — вес этого ребра.

Гарантируется, что сумма всех \(n\) не превосходит \(10^5\) (\(\sum n \le 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: минимальное количество ходов, необходимое, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\).

E2. Деление весов (сложная версия)

Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное сортировки *2200

Простая и сложная версии на самом деле являются разными задачами, поэтому прочитайте условия обеих задач внимательно.

Вам задано взвешенное корневое дерево, вершина \(1\) — корень этого дерева. Также каждое ребро имеет свою собственную стоимость.

Дерево — это связный граф без циклов. У корневого дерева есть специальная вершина, называемая корнем. Предком вершины \(v\) называется последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Потомками вершины \(v\) называются все вершины, для которых \(v\) является предком. Вершина называется листом, если у нее нет потомков. Взвешенное дерево — это такое дерево, в котором у каждого ребра есть некоторый вес.

Вес пути — это сумма весов всех ребер на этом пути. Вес пути от вершины до самой себя равен \(0\).

Вы можете совершить последовательность из нуля или более ходов. В течение одного хода вы можете выбрать ребро и поделить его вес на \(2\) с округлением вниз. Более формально, в течение одного хода вы выбираете какое-то ребро \(i\) и делите его вес на \(2\) с округлением вниз (\(w_i := \left\lfloor\frac{w_i}{2}\right\rfloor\)).

Каждое ребро \(i\) имеет свою стоимость \(c_i\), которая равна либо \(1\), либо \(2\) монетам. Каждый ход с ребром \(i\) стоит \(c_i\) монет.

Ваша задача — найти минимальную суммарную стоимость, необходимую для того, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\). Другими словами, если \(w(i, j)\) — это вес пути от вершины \(i\) до вершины \(j\), то вам необходимо сделать \(\sum\limits_{v \in leaves} w(root, v) \le S\), где \(leaves\) — это список всех листьев.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(S\) (\(2 \le n \le 10^5; 1 \le S \le 10^{16}\)) — количество вершин в дереве и максимально возможная сумма весов, которую вы можете получить. Следующая \(n-1\) строка описывает ребра дерева. Ребро \(i\) описывается четырьмя целыми числами \(v_i\), \(u_i\), \(w_i\) и \(c_i\) (\(1 \le v_i, u_i \le n; 1 \le w_i \le 10^6; 1 \le c_i \le 2\)), где \(v_i\) и \(u_i\) — вершины, которые соединены ребром \(i\), \(w_i\) — вес этого ребра, а \(c_i\) — цена этого ребра.

Гарантируется, что сумма всех \(n\) не превосходит \(10^5\) (\(\sum n \le 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: минимальную суммарную стоимость, необходимую, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\).

B. Новогодние открытки

жадные алгоритмы Перебор реализация *1800

В то время как хозяйственный Геральд накрывает стол, Александр закончил очередной пост на Codeforces и начинает отвечать на новогодние поздравления друзей. У Александра n друзей, и каждый из них отправляет Александру ровно одну электронную открытку. Будем нумеровать друзей числами от 1 до n в том порядке, в котором они отправляют открытки. Для открыток введем ту же самую нумерацию, то есть получается, что i-ый друг отправил Александру открытку с номером i.

Александр тоже отправляет друзьям открытки, причем чтобы не искать открытки в Интернете, он просто использует ранее присланные ему (иногда, правда, дорисовывая необходимые элементы). Изначально у Александра нет открыток. Александр всегда придерживается двух правил:

  1. Он никогда не отправляет другу открытку, присланную этим же другом.
  2. Среди остальных открыток, имеющихся у него в данный момент, Александр всегда выбирает ту, которая больше всех нравится ему самому.

Каждому другу Александр планирует отправить ровно по одной открытке. Разумеется, Александр может отправлять одну и ту же открытку несколько раз.

У Александра и у каждого из друзей есть список предпочтений, представляющий собой перестановку чисел от 1 до n. Первое число в списке — это номер самой любимой открытки, второе — следующей за ней, и так далее, последний номер — наименее предпочтительная открытка.

Ваша задача — определить, в какие моменты времени Александр должен отправлять открытки своим друзьям, чтобы порадовать каждого из них как можно больше. Иначе говоря, чтобы в результате применения двух Сашиных правил, каждый друг получил как можно более предпочтительную для него открытку.

Обратите внимание, что Александр не обладает свободой выбора в том, какую открытку отправить, а всегда строго придерживается двух правил.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 300) — количество друзей Александра, равное количеству открыток. Следующие n строк содержат списки предпочтений друзей. Каждый список состоит из n различных целых чисел от 1 до n. Последняя строка содержит список предпочтений самого Александра в том же формате.

Выходные данные

Выведите n чисел, разделенных пробелами: i-ое число должно являться номером друга, после получения открытки от которого Александр должен отправить открытку i-ому другу. Если решений несколько, выведите любое.

Примечание

В примере алгоритм действий Александра и его друзей таков:

  1. Александр получает открытку 1 от первого друга.
  2. Александр отправляет полученную открытку (на данный момент она у него одна, а значит, самая предпочтительная для него) друзьям с номерами 2 и 3.
  3. Александр получает открытку 2 от второго друга, теперь у него две открытки — 1 и 2.
  4. Александр отправляет открытку первому другу. Несмотря на то, что открытка 1 Александру нравится больше, он отправляет открытку 2, потому что не может отправлять другу открытку, присланную им же.
  5. Александр получает открытку 3 от третьего друга.
  6. Александр получает открытку 4 от четвертого друга.
  7. Среди имеющихся у Александра открыток 1, 2, 3, 4 самая любимая его открытка — 3, и он отправляет ее четвертому другу.

Заметим, что можно делать отправку открытки сразу нескольким друзьям (в данном случае второму и третьему). Четвертому другу можно отправить открытку номер 3 как после получения третьей открытки, так и после получения четвертой открытки (оба варианта являются правильными).

C. Новогодние снеговики

Бинарный поиск жадные алгоритмы Структуры данных *1800

Пока хозяйственный Геральд накрывает стол и никогда не дающий скучать друзьям Александр отправляет открытки, Сергей лепит снеговиков. Каждый снеговик должен состоять из трех комов — большого, среднего и маленького. Сергею помогают его двойники: они уже слепили n снежных комов, которые представляют собой шары с радиусами r1, r2, ..., rn. Снеговика можно слепить из любых трех комов, радиусы которых попарно различны. Например, из комов с радиусами 1, 2 и 3 можно слепить снеговика, а 2, 2, 3 или 2, 2, 2 — нельзя. Помогите Сергею и его двойникам определить, какое наибольшее количество снеговиков они смогут слепить из своих комов.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество комов. В следующей строке заданы n целых чисел — радиусы комов r1, r2, ..., rn (1 ≤ ri ≤ 109). Радиусы комов могут совпадать.

Выходные данные

В первой строке выведите одно целое число k — наибольшее количество снеговиков. Следующие k строк должны содержать описания снеговиков. Описание каждого снеговика должно состоять из трех чисел, разделенных пробелами — радиуса большого кома, радиуса среднего кома и радиуса маленького кома. Снеговиков разрешается выводить в любом порядке. Если решений несколько, выведите любое.

D. Новогодний контест

жадные алгоритмы сортировки *1800

Пока Геральд накрывает стол, Александр отправляет открытки, а Сергей и его двойники создают армию (клонов) снеговиков, Геннадий пишет новогодний контест.

Новогодний контест начинается в 18:00 31 декабря и заканчивается в 6:00 1 января. На контесте предлагается n задач. Штрафное время по каждой сданной задаче начисляется как расстояние от момента ее сдачи до Нового года в минутах. Например, задача, сданная в 21:00 получает штрафное время 180, так же как задача, сданная в 3:00. Общее штрафное время считается как сумма штрафных времен по всем сданным задачам. Разрешается сдавать задачу ровно в момент окончания контеста 6:00.

Геннадий открыл задачи ровно в 18:00 и за первые 10 минут контеста успел оценить их сложность. Он полагает, что потратит на решение i-ой задачи ai минут. Отправить решение на проверку Геннадий сможет в любой момент времени после завершения его написания. Вероятно, ему придется отрываться от решения одной задачи, чтобы отправить на проверку решение по другим. Временем отправки решения можно пренебречь, то есть считать его равным нулю. Генндий может одновременно отправить несколько решений. Кроме того, он может в любой момент перейти от решения одной задачи к другой, а потом вернуться к первой задаче с того же места, на котором закончил. При этом суммарное время решения i-ой задачи составит также ai минут. Разумеется, Геннадий не совершает штрафных попыток, и все его решения проходят с первого раза. Он может приступать к решению задач начиная с 18:10.

Помогите Геннадию выбрать из стратегий, при которых он решит максимальное возможное количество задач, ту, при которой его общее штрафное время будут минимальным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100) — количество задач. В следующей строке через пробел заданы n целых чисел ai (1 ≤ ai ≤ 720) — количества времени в минутах, которые Геннадий потратит на решение задач.

Выходные данные

Выведите два целых числа — количество решенных Геннадием задач и общее штрафное время при оптимальной стратегии.

Примечание

В примере одна из возможных оптимальных стратегий Геннадия такова. В 18:10 он начинает решать первую задачу и решает ее через 30 минут (в 18:40). В 18:40 он начинает решать вторую задачу. До Нового года остается 320 минут, поэтому Геннадий не успевает закончить решение второй задачи до Нового года. В 0:00 он отрывается от решения второй задачи и сдает первую, и сразу же возвращается к решению второй задачи. В 0:10 он дописывает решение по второй задаче и сдает его, получая 10 минут штрафного времени. Заметим, что так как общая продолжительность контеста 720 минут и 10 минут Геннадий уже потратил на чтение задач, он вообще не успеет решить за контест третью задачу. Да, такие задачи бывают.

Соревнования по описанным правилам ежегодно проходят на сайте http://b23.ru/3wvc

B. Главный герой RPG

жадные алгоритмы математика Перебор *1700

Вы играете в одну RPG из 2010-х. Вы планируете поднять свой уровень кузнечного дела, а потому вам нужно как можно больше ресурсов. Как же получить эти ресурсы? Конечно, украсть.

Вы решили ограбить городского кузнеца и взяли собой напарника. Вы можете переносить не более \(p\) единиц, а ваш напарник — не более \(f\) единиц.

В кузнечной лавке вы нашли \(cnt_s\) мечей и \(cnt_w\) боевых топоров. Каждый меч весит \(s\) единиц, а каждый топор — \(w\) единиц. Вам не важно, что брать, потому что и меч и топор переплавляются в один стальной слиток.

Какое максимальное количество оружия (мечей и топоров) вы со своим напарником сможете унести из лавки?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора данных заданы два целых числа \(p\) и \(f\) (\(1 \le p, f \le 10^9\)) — ваша грузоподъемность и грузоподъемность вашего напарника.

Во второй строке каждого набора заданы два целых числа \(cnt_s\) и \(cnt_w\) (\(1 \le cnt_s, cnt_w \le 2 \cdot 10^5\)) — количество мечей и боевых топоров в кузнечной лавке.

В третьей строке каждого набора заданы два целых числа \(s\) и \(w\) (\(1 \le s, w \le 10^9\)) — веса каждого меча и каждого топора.

Гарантируется, что суммарное количество мечей и суммарное количество топоров во всех наборах входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество оружия (мечей и топоров), которое вы со своим напарником сможете унести.

Примечание

В первом наборе входных данных:

  • вы можете взять \(3\) меча и \(3\) боевых топора: \(3 \cdot 5 + 3 \cdot 6 = 33 \le 33\),
  • а ваш напарник — \(3\) меча и \(2\) топора: \(3 \cdot 5 + 2 \cdot 6 = 27 \le 27\).
\(3 + 3 + 3 + 2 = 11\) единиц оружия в сумме.

Во втором наборе, вы можете взять все доступное оружие даже без помощи напарника, так как \(5 \cdot 10 + 5 \cdot 10 \le 100\).

В третьем наборе, вы не можете взять ничего, но ваш напарник может взять \(3\) топора: \(3 \cdot 5 \le 19\).

C. Восстановление бинарной строки

2-sat жадные алгоритмы Конструктив Перебор *1500

Рассмотрим следующий процесс. У вас есть бинарная строка (строка, состоящая только из символов 0 и 1) \(w\) длины \(n\) и число \(x\). Вы создаете новую бинарную строку \(s\) длины \(n\); \(i\)-й символ новой строки \(s\) выбирается следующим образом:

  • если символ \(w_{i-x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i > x\) и \(w_{i-x} = \) 1, то \(s_i = \) 1);
  • если символ \(w_{i+x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i + x \le n\) и \(w_{i+x} = \) 1, то \(s_i = \) 1);
  • если оба описанных выше условия неверны, то \(s_i\) равно 0.

Вам заданы число \(x\) и строка \(s\). Восстановите изначальную строку \(w\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит две строки. Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^5\), каждый символ строки \(s\) равен либо 0, либо 1). Вторая строка содержит целое число \(x\) (\(1 \le x \le |s| - 1\)).

Суммарная длина всех длин строк \(s\) во входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ:

  • если не существует строки \(w\), которая может породить строку \(s\), то выведите \(-1\);
  • иначе, выведите бинарную строку \(w\) состоящую из \(|s|\) символов. Если возможных ответов несколько — вы можете вывести любой из них.

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\)).

Выходные данные

Выведите одно число — наименьшее количество операций, за которое можно удалить все элементы из мультимножества.

B. Троичная последовательность

жадные алгоритмы Конструктив математика *1100

Вам заданы две последовательности \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_n\). Каждый элемент обеих последовательностей — это \(0\), \(1\) или \(2\). Количество чисел \(0\), \(1\), \(2\) в последовательности \(a\) равно \(x_1\), \(y_1\), \(z_1\) соответственно, а количество чисел \(0\), \(1\), \(2\) в последовательности \(b\) равно \(x_2\), \(y_2\), \(z_2\) соответственно.

Вы можете переставить элементы в обеих последовательностях \(a\) и \(b\) как захотите. После этого, определим последовательность \(c\) следующим образом:

\(c_i = \begin{cases} a_i b_i & \mbox{если }a_i > b_i \\ 0 & \mbox{если }a_i = b_i \\ -a_i b_i & \mbox{если }a_i < b_i \end{cases}\)

Вам нужно сделать \(\sum_{i=1}^n c_i\) (сумму всех элементов последовательности \(c\)) как можно больше. Какую максимально возможную сумму можно получить?

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из двух строк. В первой строке каждого набора заданы три целых числа \(x_1\), \(y_1\), \(z_1\) (\(0 \le x_1, y_1, z_1 \le 10^8\)) — количество \(0\)-й, \(1\)-ц и \(2\)-к в последовательности \(a\).

Во второй строке каждого набора заданы три целых числа \(x_2\), \(y_2\), \(z_2\) (\(0 \le x_2, y_2, z_2 \le 10^8\); \(x_1 + y_1 + z_1 = x_2 + y_2 + z_2 > 0\)) — количество \(0\)-й, \(1\)-ц и \(2\)-к в последовательности \(b\).

Выходные данные

Для каждого набора входных данных, выведите максимально возможную сумму последовательности \(c\).

Примечание

В первом наборе входных данных, одно из оптимальнных решений следующее:

\(a = \{2, 0, 1, 1, 0, 2, 1\}\)

\(b = \{1, 0, 1, 0, 2, 1, 0\}\)

\(c = \{2, 0, 0, 0, 0, 2, 0\}\)

Во втором наборе, одно из оптимальных решений следующее:

\(a = \{0, 2, 0, 0, 0\}\)

\(b = \{1, 1, 0, 1, 0\}\)

\(c = \{0, 2, 0, 0, 0\}\)

В третьем наборе, единственное решение следующее:

\(a = \{2\}\)

\(b = \{2\}\)

\(c = \{0\}\)

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. Уничтожение фиксированных точек

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2300

Дан массив \(a_1, \ldots, a_n\) из \(n\) положительных целых чисел. За одну операцию можно выбрать индекс \(i\), удовлетворяющий \(a_i = i\), и удалить \(a_i\) из массива (после удаления остальные части массива соединяются).

Вес \(a\) определяется как максимальное количество элементов, которые можно удалить.

Вы должны ответить на \(q\) независимых запросов \((x, y)\): после замены первых \(x\) элементов \(a\) и последних \(y\) элементов \(a\) на \(n+1\) (делая их удаление невозможным), чему будет равен вес \(a\)?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\))  — длину массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(x, y \ge 0\) и \(x+y < n\)).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число  — ответ на \(i\)-й запрос.

Примечание

Объяснение первого запроса:

После того, как первые \(x = 3\) и последние \(y = 1\) элементов стало невозможно удалить, \(a\) становится равным \([\times, \times, \times, 9, 5, 4, 6, 5, 7, 8, 3, 11, \times]\) (для наглядности мы представляем \(14\) как \(\times\)).

Вот стратегия, которая удаляет \(5\) элементов (удаленный элемент окрашен в красный цвет):

  • \([\times, \times, \times, 9, \color{red}{5}, 4, 6, 5, 7, 8, 3, 11, \times]\)
  • \([\times, \times, \times, 9, 4, 6, 5, 7, 8, 3, \color{red}{11}, \times]\)
  • \([\times, \times, \times, 9, 4, \color{red}{6}, 5, 7, 8, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 7, \color{red}{8}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, \color{red}{7}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 3, \times]\) (конечное состояние)

Невозможно удалить более \(5\) элементов, поэтому вес составляет \(5\).

A. Mex подмножеств

жадные алгоритмы математика реализация *900

Вам дан набор целых чисел (он может содержать одинаковые элементы).

Вы должны разделить его на два подмножества \(A\) и \(B\) (каждое из них также может содержать одинаковые элементы или может быть пустым). Вы должны максимизировать значение \(mex(A)+mex(B)\).

Здесь \(mex\) набора целых чисел определяется как наименьшее неотрицательное целое число, которое не принадлежит этому набору. Например:

  • \(mex(\{1,4,0,2,2,1\})=3\)
  • \(mex(\{3,3,2,1,3,0,0\})=4\)
  • \(mex(\varnothing)=0\) (\(mex\) пустого множества)

Набор разделен на два подмножества \(A\) и \(B\), если для любого целого числа \(x\) количество вхождений \(x\) в этот набор равно сумме количеств вхождений \(x\) в \(A\) и \(x\) в \(B\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\leq n\leq 100\)) — размер набора целых чисел.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1,a_2,\dots a_n\) (\(0\leq a_i\leq 100\)) — элементы данного вам набора целых чисел.

Выходные данные

Для каждого набора входных данных, выведите максимальное значение \(mex(A)+mex(B)\).

Примечание

В первом наборе входных данных \(A=\left\{0,1,2\right\},B=\left\{0,1,5\right\}\) является возможным выбором разделения.

Во втором наборе входных данных \(A=\left\{0,1,2\right\},B=\varnothing\) является возможным выбором разделения.

В третьем наборе входных данных \(A=\left\{0,1,2\right\},B=\left\{0\right\}\) является возможным выбором разделения.

В четвертом наборе входных данных \(A=\left\{1,3,5\right\},B=\left\{2,4,6\right\}\) является возможным выбором разделения.

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\) целых чисел \(a_1, a_2, \ldots, a_n\).

Вы должны построить две последовательности целых чисел \(b\) и \(c\) длины \(n\), которые удовлетворяют условиям:

  • для всех \(i\) (\(1\leq i\leq n\)) \(b_i+c_i=a_i\);
  • \(b\) неубывающая, что означает, что для всех \(1<i\leq n\), выполнено \(b_i\geq b_{i-1}\);
  • \(c\) невозрастающая, что означает, что для всех \(1<i\leq n\), выполнено \(c_i\leq c_{i-1}\).

Вы хотите минимизировать \(\max(b_i,c_i)\). Другими словами, вы хотите минимизировать максимум чисел в последовательностях \(b\) и \(c\).

Также будет сделано \(q\) изменений, \(i\)-е изменение описывается тройкой чисел \(l,r,x\). Вы должны добавить \(x\) к \(a_l,a_{l+1}, \ldots, a_r\).

Вы должны найти минимальное значение \(\max(b_i,c_i)\) для изначальной последовательности и для последовательности после каждого изменения.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\leq n\leq 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq i\leq n\), \(-10^9\leq a_i\leq 10^9\)).

В третьей строке находится единственное целое число \(q\) (\(1\leq q\leq 10^5\)).

Каждая из следующих \(q\) строк содержит три целых числа \(l,r,x\) (\(1\leq l\leq r\leq n,-10^9\leq x\leq 10^9\)), описывающих очередное изменение.

Выходные данные

Выведите \(q+1\) строку.

В \(i\)-й (\(1 \leq i \leq q+1\)) строке выведите ответ на задачу для последовательности после \(i-1\) изменения.

Примечание

В первом тесте:

  • Изначальная последовательность \(a = (2, -1, 7, 3)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,2,2,-2)\) является возможным выбором.
  • После первого изменения \(a = (2, -4, 4, 0)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,-1,-1,-5)\) является возможным выбором.
  • После второго изменения \(a = (2, -4, 6, 2)\). Пара последовательностей \(b=(-4,-4,6,6),c=(6,0,0,-4)\) является возможным выбором.

B. Большой Вова

жадные алгоритмы математика Перебор теория чисел *1300

Александр — известный в узких кругах программист. Однажды он решил наконец-то выйти на улицу и активно провести время с мячом, но первым же ударом он оставил вмятину на новом Rolls-Royce богатого и влиятельного предпринимателя Большого Вовы. Бизнесмен недавно открыл интернет-магазин на популярной торговой площадке «Змей-Горыныч», и предлагает Саше устроиться на работу: если он продемонстрирует свои способности, решив задачу, то получит должность специалиста по безопасности, а в противном случае — должность курьера.

Вам даны \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\). Используя каждое из данных чисел ровно 1 раз, Вы должны составить такую последовательность \(b_1, b_2, \dots, b_n\), что последовательность \(c_1, c_2, \dots, c_n\) лексикографически максимальна, где \(c_i=GCD(b_1,\dots,b_i)\) — наибольший общий делитель первых \(i\) чисел последовательности \(b\).

Александр сильно испугался условия этой несложной задачи, и поэтому он просит у Вас помощи.

Последовательность \(a\) лексикографически меньше последовательности \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в последовательности \(a\) элемент меньше, чем соответствующий элемент в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину последовательности \(a\).

Вторая строка каждого набора данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^3\)) — последовательность \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

На каждый набор входных данных выведите ответ в отдельной строке — искомую последовательность \(b\). Если существует несколько подходящих последовательностей, выведите любую из них.

Примечание

В первом наборе тестовых данных примера есть всего две возможные перестановки \(b\): \([2, 5]\) и \([5, 2]\). В первом случае \(c=[2, 1]\), во втором \(c=[5, 1]\).

В третьем наборе тестовых данных примера число \(9\) должно идти первым в \(b\), а \(GCD(9, 3)=3\), \(GCD(9, 8)=1\), поэтому вторым в \(b\) идёт число \(3\).

В седьмом наборе тестовых данных примера первые четыре числа попарно имеют общий делитель (степень двойки), однако ни одно из них не может идти первым в оптимальной перестановке \(b\).

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\). Обратите внимание: может существовать дорога, соединяющая город с самим собой.

B. Суммы массивов

жадные алгоритмы Конструктив математика *1400

Вам дан неубывающий массив, состоящий из неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Также вам дано положительное целое число \(k\).

Вы хотите найти \(m\) неубывающих массивов, состоящих из неотрицательных целых чисел \(b_1, b_2, \ldots, b_m\), таких что:

  • размер \(b_i\) равен \(n\) для всех \(1 \leq i \leq m\);
  • для всех \(1 \leq j \leq n\), \(a_j = b_{1, j} + b_{2, j} + \ldots + b_{m, j}\). Другими словами, массив \(a\) равен поэлементной сумме массивов \(b_i\);
  • количество различных элементов массива \(b_i\) не превосходит \(k\) для всех \(1 \leq i \leq m\).

Найдите минимальное возможное значение \(m\) или сообщите, что ни одного возможного значения \(m\) не существует.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(1 \leq n \leq 100\), \(1 \leq k \leq n\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq 100\), \(a_n > 0\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: минимальное возможное значение \(m\). Если таких \(m\) не существует, выведите \(-1\).

Примечание

В первом наборе входных данных не существует ни одного возможного значения \(m\), потому что все элементы всех массивов должны будут быть равными \(0\). Но в этом случае невозможно получить \(a_4 = 1\) как сумму нескольких нулей.

Во втором наборе входных данных мы можем взять \(b_1 = [3, 3, 3]\). \(1\) — это минимальное возможное значение \(m\).

В третьем наборе входных данных мы можем взять \(b_1 = [0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2]\) и \(b_2 = [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2]\). Легко заметить, что \(a_i = b_{1, i} + b_{2, i}\) для всех \(i\) и количество различных элементов в каждом из массивов \(b_1\) и \(b_2\) равно \(3\) (что не превосходит \(3\)). Можно доказать, что \(2\) — это минимальное возможное значение \(m\).

E. Избегайте разноцветных циклов

графы Деревья жадные алгоритмы снм сортировки Структуры данных *2400

Вам дано \(m\) множеств \(A_1, A_2, \ldots, A_m\), состоящих из целых чисел; элементы этих множеств — целые числа от \(1\) до \(n\) включительно.

Есть два массива положительных целых чисел \(a_1, a_2, \ldots, a_m\) и \(b_1, b_2, \ldots, b_n\).

За одну операцию вы можете удалить элемент \(j\) из множества \(A_i\) и заплатить за это \(a_i + b_j\) монет.

Вы можете сделать несколько (возможно, ноль) операций (после этого некоторые множества могут стать пустыми).

После этого вы построите неориентированный граф, где каждое ребро будет иметь цвет. Граф будет иметь \(n\) вершин. Для каждого множества \(A_i\) вы добавите ребро \((x, y)\) цвета \(i\) для всех \(x, y \in A_i\) и \(x < y\). Некоторые пары вершин могут быть соединены больше чем одним ребром, но такие ребра будут иметь разные цвета.

Мы называем цикл \(i_1 \to e_1 \to i_2 \to e_2 \to \ldots \to i_k \to e_k \to i_1\) (\(e_j\) это какое-то ребро, соединяющее вершины \(i_j\) и \(i_{j+1}\) этого графа) разноцветным, если цвета всех ребер этого цикла различны.

Найдите минимальное количество монет, которое нужно заплатить, чтобы получить граф без разноцветных циклов.

Входные данные

В первой строке находится два целых числа \(m\) и \(n\) (\(1 \leq m, n \leq 10^5\)), количество множеств и количество вершин в графе.

Во второй строке находятся \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(1 \leq a_i \leq 10^9\)).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^9\)).

В каждой из следующих \(m\) строк находится описание множества. В \(i\)-й строке первое число \(s_i\) (\(1 \leq s_i \leq n\)) равно размеру \(A_i\). Затем следуют \(s_i\) целых чисел — элементы множества \(A_i\). Эти целые числа различны и находятся в пределах от \(1\) до \(n\) включительно.

Гарантируется, что сумма \(s_i\) для всех \(1 \leq i \leq m\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите единственное целое число — минимальное количество монет, которое нужно заплатить, чтобы получить граф без разноцветных циклов.

Примечание

В первом тесте можно сделать следующие операции.

  • Удалить элемент \(1\) из множества \(1\). Вы должны заплатить \(a_1 + b_1 = 5\) монет за эту операцию.
  • Удалить элемент \(1\) из множества \(2\). Вы должны заплатить \(a_2 + b_1 = 6\) монет за эту операцию.

Суммарно вы заплатите \(11\) монет. После этих операций первое и второй множества будут равны \(\{2\}\), а третье множество будет равно \(\{1, 2\}\). Поэтому построенный граф будет содержать одно ребро \((1, 2)\) цвета \(3\).

Во втором тесте можно сделать следующие операции.

  • Удалить элемент \(1\) из множества \(1\). Вы должны заплатить \(a_1 + b_1 = 11\) монет за эту операцию.
  • Удалить элемент \(4\) из множества \(2\). Вы должны заплатить \(a_2 + b_4 = 13\) монет за эту операцию.
  • Удалить элемент \(7\) из множества \(3\). Вы должны заплатить \(a_3 + b_7 = 13\) монет за эту операцию.
  • Удалить элемент \(4\) из множества \(4\). Вы должны заплатить \(a_4 + b_4 = 16\) монет за эту операцию.
  • Удалить элемент \(7\) из множества \(6\). Вы должны заплатить \(a_6 + b_7 = 13\) монет за эту операцию.

Суммарно вы заплатите \(66\) монет. После этих операций будут следующие множества:

  • \(\{2, 3\}\);
  • \(\{1\}\);
  • \(\{1, 3\}\);
  • \(\{3\}\);
  • \(\{3, 4, 5, 6, 7\}\);
  • \(\{5\}\);
  • \(\{8\}\).

Вы построите такой граф:

В нем нет разноцветных циклов.

H. Разноцветные тройки

Бинарный поиск жадные алгоритмы Потоки Структуры данных *3300

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) неотрицательных целых чисел.

Вам нужно найти наибольшее число \(m\) троек \((i_1, j_1, k_1)\), \((i_2, j_2, k_2)\), ..., \((i_m, j_m, k_m)\) таких, что выполняются следующие условия:

  • \(1 \leq i_p < j_p < k_p \leq n\) для всех \(p\) среди \(1, 2, \ldots, m\);
  • \(a_{i_p} = a_{k_p} = 0\), \(a_{j_p} \neq 0\);
  • значения \(a_{j_1}, a_{j_2}, \ldots, a_{j_m}\) различны;
  • значения \(i_1, j_1, k_1, i_2, j_2, k_2, \ldots, i_m, j_m, k_m\) различны.
Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\,000\)): количество наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 500\,000\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Сумма по всем \(n\) не превосходит \(500\,000\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число \(m\): наибольшее количество троек, которое вы можете найти.

Примечание

В первых двух примерах не хватает элементов даже для одной тройки, так что ответ \(0\).

Во втором примере вы можете выбрать одну тройку \((1, 2, 3)\).

В четвертом примере можно выбрать две тройки \((1, 3, 5)\) и \((2, 4, 6)\).

В пятом примере можно выбрать одну тройку \((1, 2, 3)\). Мы не можем выбрать тройки \((1, 2, 3)\) и \((4, 5, 6)\) одновременно, так как \(a_2 = a_5\).

A. Ещё одна задача о двух числах

жадные алгоритмы математика *800

Вам даны два целых числа \(a\) и \(b\).

За один ход вы можете выбрать некоторое целое число \(k\) от \(1\) до \(10\) и прибавить его к \(a\) или вычесть из \(a\). Другими словами, вы выбираете целое число \(k \in [1; 10]\) и выполняете \(a := a + k\) или \(a := a - k\). Вы можете использовать различные значения \(k\) во время разных ходов.

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить \(b\) из \(a\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: минимальное количество ходов, необходимое, чтобы получить \(b\) из \(a\).

Примечание

В первом наборе тестовых данных примера вам ничего не нужно делать.

Во втором наборе тестовых данных примера может быть применена следующая последовательность ходов: \(13 \rightarrow 23 \rightarrow 32 \rightarrow 42\) (прибавить \(10\), прибавить \(9\), прибавить \(10\)).

В третьем наборе тестовых данных примера может быть применена следующая последовательность ходов: \(18 \rightarrow 10 \rightarrow 4\) (вычесть \(8\), вычесть \(6\)).

B. Минимальное произведение

жадные алгоритмы математика Перебор *1100

Вам даны четыре целых числа \(a\), \(b\), \(x\) и \(y\). Изначально \(a \ge x\) и \(b \ge y\). Вы можете применить следующую операцию не более \(n\) раз:

  • Выбрать \(a\) или \(b\) и уменьшить это число на единицу. Однако в результате этой операции значение \(a\) не может стать меньше \(x\), а значение \(b\) не может стать меньше \(y\).

Ваша задача — найти минимальное возможное произведение \(a\) и \(b\) (\(a \cdot b\)), которое можно получить, применив данную операцию не более \(n\) раз.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит пять целых чисел \(a\), \(b\), \(x\), \(y\) и \(n\) (\(1 \le a, b, x, y, n \le 10^9\)). Дополнительное ограничение на входные данные: всегда справедливы неравенства \(a \ge x\) и \(b \ge y\).

Выходные данные

Для каждого набора тестовых данных выведите число: минимальное возможное произведение \(a\) и \(b\) (\(a \cdot b\)), которое можно получить, применив данную операцию не более \(n\) раз.

Примечание

В первом наборе тестовых данных примера нужно уменьшить \(b\) три раза и получить \(10 \cdot 7 = 70\).

Во втором наборе тестовых данных примера нужно уменьшить \(a\) один раз, \(b\) один раз и получить \(11 \cdot 7 = 77\).

В шестом наборе тестовых данных примера нужно уменьшить \(a\) пять раз и получить \(5 \cdot 11 = 55\).

В седьмом наборе тестовых данных примера нужно уменьшить \(b\) десять раз и получить \(10 \cdot 1 = 10\).

D. Уменьшение суммы цифр

жадные алгоритмы математика *1500

Вам задано целое положительное число \(n\). За один ход вы можете увеличить \(n\) на единицу (то есть сделать \(n := n + 1\)). Ваша задача — найти минимальное количество ходов, которое надо совершить, чтобы сделать сумму цифр \(n\) не превышающей \(s\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит два целых числа \(n\) и \(s\) (\(1 \le n \le 10^{18}\); \(1 \le s \le 162\)).

Выходные данные

На каждый набор тестовых данных выведите ответ: минимальное количество ходов, которое надо совершить, чтобы сделать сумму цифр \(n\) не превышающей \(s\).

C. Очередь

жадные алгоритмы Конструктив сортировки *1800

В Главном Банке Берляндии в очереди в кассу стоят n человек, каждый знает свой рост hi, а также росты остальных людей в очереди. Каждый из них мысленно запомнил число ai — сколько людей, которые выше ростом и стоят в очереди раньше.

Проходит некоторое время, и кассир уходит на обеденный перерыв, а люди из очереди рассаживаются на стулья в зале ожидания в произвольном порядке.

Когда обеденный перерыв закончился, то выясняется, что никто из них не помнит точного порядка людей в очереди, но каждый помнит свое число ai.

Ваша задача — если это возможно, восстановить порядок людей в очереди. Может быть, что допустимых порядков несколько, но вам требуется найти любой из них. Также требуется вывести возможный набор чисел hi — росты людей в очереди, так чтобы числа ai были корректны.

Входные данные

Первая строка входных данных содержит целое число n — количество людей в очереди (1 ≤ n ≤ 3000). Далее в n строках по одному на строке даны описания людей в формате «namei ai», где namei — непустая строка из строчных латинских букв длиной не более 10 символов (имя i-ого человека), ai — целое число (0 ≤ ai ≤ n - 1), обозначающее количество людей, которые выше ростом и стоят в очереди раньше i-ого человека. Гарантируется, что все имена различны.

Выходные данные

Если не существует ни одного допустимого порядка людей в очереди, то выведите единственную строку, содержащую «-1» (без кавычек). В противном случае в n строках выведите людей в формате «namei hi», где hi — целое число от 1 до 109 (включительно), предполагаемый рост человека с именем namei. Людей выводите в порядке очереди от начала к концу. Числа hi не обязаны быть уникальными.

D. Грайм Зоопарк

жадные алгоритмы Перебор реализация Строки *2100

Сейчас рэп ХХОСа представляет из себя строку из нулей, единиц и знаков вопроса. К сожалению, хейтеры не дремлют. За каждое вхождение подпоследовательности 01 в рэп ХХОСа хейтеры напишут \(x\) гневных комментариев, а за каждое вхождение подпоследовательности 10 будет написано \(y\) гневных комментариев. Вы должны заменить каждый знак вопроса на 0 либо 1, чтобы минимизировать число гневных комментариев, которые получит ХХОС.

Подпоследовательностью строки \(a\) называется строка \(b\), которая может получиться в результате удаления нескольких символов из строки \(a\). Два вхождения подпоследовательности считаются разными, если различаются множества позиций оставленных символов.

Входные данные

В первой строке записан рэп ХХОСа — строка \(s\) (\(1 \le |s| \leq 10^5\)). Во второй строке даны два целых числа \(x\) и \(y\) — количество гневных комментариев, которые ХХОС получит за каждую подпоследовательность 01 и 10, соответственно (\(0 \leq x, y \leq 10^6\)).

Выходные данные

В единственной строке выведите минимальное число гневных комментариев, которые может получить ХХОС.

Примечание

В первом примере одним из оптимальных вариантов замены является 001. Тогда в строке будет \(2\) подпоследовательности 01 и \(0\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(2 \cdot 2 + 0 \cdot 3 = 4\).

Во втором примере одним из оптимальных вариантов замены является 11111. Тогда в строке будет \(0\) подпоследовательностей 01 и \(0\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(0 \cdot 13 + 0 \cdot 37 = 0\).

В третьем примере одним из оптимальных вариантов замены является 1100. Тогда в строке будет \(0\) подпоследовательностей 01 и \(4\) подпоследовательности 10. Суммарное количество гневных комментариев равно \(0 \cdot 239 + 4 \cdot 7 = 28\).

В четвёртом примере одним из оптимальных вариантов замены является 01101001. Тогда в строке будет \(8\) подпоследовательностей 01 и \(8\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(8 \cdot 5 + 8 \cdot 7 = 96\).

E. Ромские цифры

битмаски жадные алгоритмы математика Строки *2300

Ваш друг прислал вам строку \(S\), состоящую из \(n\) строчных английских букв. Оказывается, это число, записанное в ромской системе счисления. Знания о ромских числах давно утрачены, но сохранился алгоритм перевода ромских чисел в привычные нам. Пронумеруем символы \(S\) от \(1\) до \(n\) слева направо. Значение числа \(S\) обозначим как \(f(S)\), оно определяется следующим образом:

  • Если \(|S| > 1\), то выбирается произвольное значение \(m\) (\(1 \le m < |S|\)) и считается, что \(f(S) = -f(S[1, m]) + f(S[m + 1, |S|])\), где \(S[l, r]\) — это подстрока \(S\) с \(l\)-й позиции до \(r\)-й включительно.
  • Иначе \(S = c\), где \(c\) — какая-то буква. В таком случае \(f(S) = 2^{pos(c)}\), где \(pos(c)\) — это позиция буквы \(c\) в английском алфавите (\(pos(\)a\() = 0\), \(pos(\)z\() = 25\)).

Обратите внимание, что \(m\) выбирается независимо на каждом шаге.

Друг уверен, что правильно выбирая \(m\) на каждом шаге, можно получить \(f(S) = T\). Прав ли он?

Входные данные

В первой строке даны числа \(n\) и \(T\) (\(2 \leq n \leq 10^5\), \(-10^{15} \leq T \leq 10^{15}\)).

Во второй строке дана строка \(S\) длины \(n\), состоящая из строчных английских букв.

Выходные данные

Выведите «Yes», если можно получить требуемое значение, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Во втором примере нельзя получить \(-7\). Но можно получить, например, \(1\) следующим образом:

  1. Сперва выбираем \(m = 1\), тогда \(f(\)abc\() = -f(\)a\() + f(\)bc\()\)
  2. \(f(\)a\() = 2^0 = 1\)
  3. \(f(\)bc\() = -f(\)b\() + f(\)c\() = -2^1 + 2^2 = 2\)
  4. Итого \(f(\)abc\() = -1 + 2 = 1\)

F. Тернистый путь

жадные алгоритмы математика *3000

Легенда гласит, что в Ханойском храме хранится перестановка чисел от \(1\) до \(n\). Перед храмом в линию лежат \(n\) разноцветных камней. Жрецы могут проводить следующую операцию над камнями: выбрать позицию \(i\) (\(1 \le i \le n\)) и циклически сдвинуть камни на позициях \(i\), \(p[i]\), \(p[p[i]]\), .... То есть, камень с позиции \(i\) перейдет на позицию \(p[i]\), камень с позиции \(p[i]\) перейдет на позицию \(p[p[i]]\), и т.д., на позицию \(i\) перейдет камень с позиции \(j\), такой что \(p[j] = i\).

Каждый день жрецы обязаны получать новую расстановку камней, используя произвольное количество этих операций. Когда все возможные расстановки будут получены, наступит конец света. Вам стало интересно, что если бы перед самым началом можно было бы поменять местами некоторые элементы перестановки? Сколько дней бы просуществовал мир?

Вы хотите за минимальное количество обменов двух элементов, получить перестановку, которая позволит миру просуществовать как можно дольше.

Две расстановки камней, считаются различными, если существует позиция \(i\) такая, что цвета камней на этой позиции в расстановках различаются.

Входные данные

В первой строке дано целое число \(t\)  — количество тестовых случаев (\(1 \leq t \leq 10^3\)). Далее дано описание тестовых случаев.

В первой строке дано целое число \(n\) — длина перестановки (\(3 \leq n \leq 10^6\)). Во второй строке находится \(n\) целых чисел \(p_1, \dots, p_n\) — перестановка (\(1 \le p_i \le n\)). Гарантируется, что \(p\) является перестановкой.

Сумма \(n\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого из \(t\) тестовых случаев в новой строке выведите два целых числа: наибольшее возможное количество дней, которые может просуществовать мир, по модулю \(10^9 + 7\) и минимальное количество необходимых для этого обменов.

Примечание

Обозначим цвета камней буквами. Пояснения для первых двух тестовых случаев первого примера:

  1. Используя перестановку \([2, 3, 1]\), из ABC можно дополнительно получить расстановки CAB и BCA. Что уже является максимально возможным результатом.
  2. Используя перестановку \([2, 1, 3]\), из ABC можно получить только BAC. Как мы видели в предыдущем примере, две расстановки не являются максимально возможным количеством для \(n = 3\). Для получения оптимальной перестановки, например, можно поменять местами \(1\) и \(3\), чтобы получить перестановку \([2, 3, 1]\).

D. Сюрикены

жадные алгоритмы реализация Структуры данных *1700

Тентен продает оружие в магазине для ниндзя. Сегодня она хочет продать \(n\) сюрикенов стоимостью \(1\), \(2\), ..., \(n\) рё (местная валюта). В течение дня она будет выкладывать сюрикены на витрину, которая в начале дня пуста. Работа в магазине достаточно простая: в каждый момент времени либо Тентен выкладывает на витрину очередной сюрикен из еще не выложенных, либо к ней в магазин заходит ниндзя и покупает сюрикен с витрины. Поскольку ниндзя очень экономные, то в магазине они покупают самый дешевый из сюрикенов, которые сейчас лежат на витрине. В течение дня Тентен ведет список событий, и в ее списке есть два типа записей:

  • + означает, что она выкладывает на витрину очередной сюрикен;
  • - x означает, что у нее купили сюрикен стоимостью \(x\).

Сегодня у Тентен выдался удачный день, и у нее купили все сюрикены. В конце дня ей стало интересно, не ошиблась ли она в своих записях, и в каком порядке она могла выкладывать сюрикены, чтобы у нее получился такой список.

Входные данные

В первой строке дано целое число \(n\) (\(1\leq n\leq 10^5\)) — количество сюрикенов.

В следующих \(2n\) строках дана информация о произошедших событиях в формате, описанном выше. Гарантируется, что среди событий ровно \(n\) событий первого типа, а также, что во всех событиях второго типа присутствуют все числа от \(1\) до \(n\) по одному разу.

Выходные данные

Необходимо вывести «YES», если такой список мог получиться, и «NO» иначе.

Если список получиться мог, то в следующей строке необходимо вывести \(n\) различных чисел через пробел — стоимости сюрикенов в порядке, в котором Тентен должна выкладывать их на витрину. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Тентен сначала выложила на витрину сюрикены стоимостью \(4\) и \(2\). После этого к ней пришел покупатель и забрал самый дешевый сюрикен стоимостью \(2\). После этого к оставшемуся сюрикену стоимостью \(4\) она выложила сюрикен стоимостью \(3\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(3\). После этого она выложила сюрикен стоимостью \(1\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(1\). Потом к ней пришел еще один покупатель и забрал последний сюрикен стоимостью \(4\). Обратите внимание, что порядок \([2, 4, 3, 1]\) также является верным.

Во втором примере первый покупатель пришел и купил сюрикен раньше, чем Тентен выложила хотя бы один сюрикен на витрину, что, очевидно, невозможно.

В третьем примере Тентен выложила на витрину все сюрикены, после этого к ней пришел покупатель и забрал сюрикен стоимостью \(2\). Такого быть не могло, потому что этот сюрикен не был самым дешевым из тех, что лежали на витрине (ведь там был еще сюрикен стоимостью \(1\)).

E. Oracle соло мид

жадные алгоритмы математика Тернарный поиск *2100

Меха-Наруто играет в компьютерную игру. У его персонажа есть следующая способность: нанести вражескому герою \(a\) единиц урона, затем восполнять ему \(b\) единиц здоровья в конце каждой секунды, начиная со следующей, на протяжении ровно \(c\) секунд. В частности, если эта способность применяется в момент времени \(t\), то здоровье врага уменьшается на \(a\) в момент времени \(t\), а затем увеличивается на \(b\) в моменты \(t + 1\), \(t + 2\), ..., \(t + c\).

У способности есть время перезарядки, равное \(d\) секундам, то есть если Меха-Наруто применяет способность в момент времени \(t\), то в следующий раз он может её применить не раньше момента \(t + d\). По некоторым причинам Меха-Наруто может использовать способность только в целые моменты времени, поэтому все изменения здоровья врага также происходят в целочисленные моменты.

Эффекты от разных применений заклинания накладываются друг на друга. В частности, если вражеский герой находится под действием \(k\) заклинаний, применённых ранее и ещё не истёкших, то его здоровье увеличится на \(k\cdot b\). Помимо этого все изменения, которые происходят в один и тот же момент времени, учитываются одновременно.

Теперь Меха-Наруто интересно, может ли он убить своего оппонента просто применяя свою способность так часто, как только можно (то есть каждые \(d\) секунд). Герой считается погибшим, если уровень его здоровья становится равным \(0\) или ниже. Предположим, что здоровье вражеского персонажа не изменяется никаким образом, кроме как от применения заклинания. Какое наибольшее количество здоровья может быть у врага, чтобы Меха-Наруто мог его убить?

Входные данные

Первая строка содержит единственное число \(t\) (\(1\leq t\leq 10^5\)) — число тестов.

Каждый тест описывается четвёркой натуральных чисел \(a\), \(b\), \(c\) и \(d\) (\(1\leq a, b, c, d\leq 10^6\)), записанных через пробел и означающих соответственно мгновенный урон от способности, ежесекундно восполняемый объём здоровья, время действия каждого заклинания и время перезарядки способности.

Выходные данные

Для каждого теста выведите на отдельной строке \(-1\), если способность может рано или поздно убить любого врага, каким бы большим ни был его уровень здоровья; в противном случае выведите наибольшее число здоровья, при котором оппонент будет убит.

Примечание

В первом тесте из условия любая единица урона отменяется через секунду, поэтому Меха-Наруто не может нанести больше, чем 1 единицу урона.

В четвёртом тесте из условия герой оппонента получает:

  • \(4\) урона (\(1\)-е применение способности) в момент \(0\);
  • \(4\) урона (\(2\)-е применение способности), и \(3\) единицы здоровья восполняются (\(1\)-е применение) в момент \(1\) (всего \(5\) урона к начальному уровню здоровья);
  • \(4\) урона (\(3\)-е применение способности), и \(6\) здоровья восполняется (\(1\)-е и \(2\)-е применения) в момент \(2\) (всего \(3\) урона к изначальному здоровью);
  • и так далее.

Можно доказать, что ни к какому моменту времени враг не получит суммарно \(6\) или больше урона, поэтому ответ на этот тест есть \(5\). Обратите внимание, как производится пересчёт здоровья: например, если бы у врага было \(8\) здоровья, он бы не умер в момент времени \(1\), как если бы мы сначала вычли из его здоровья \(4\) единицы, а затем сочли бы его мёртвым, не успев добавить \(3\) единицы от лечения.

В шестом тесте из условия герой со сколько угодно большим количеством здоровья рано или поздно умрёт.

В седьмом тесте из условия ответ не вмещается в 32-битный целочисленный тип.

B. Перекраска улицы

жадные алгоритмы Перебор Перебор *1100

На некоторой улице построены \(n\) домов, по порядку пронумерованных от \(1\) до \(n\). Дом номер \(i\) изначально покрашен в цвет \(c_i\). Улица называется красивой, если все дома на ней покрашены в один и тот же цвет. Маляр Том — ответственный за перекраску улицы так, чтобы она стала красивой. Скорость работы Тома определяется целым числом \(k\).

За один день Том может перекрасить некоторое количество домов, выполнив два следующих шага:

  1. Сначала он выбирает два целых числа \(l\) и \(r\) так, что \( 1 \le l \le r \le n \) и \( r - l + 1 = k \).
  2. Затем для всех домов \(i\) таких, что \(l \le i \le r\), он может либо перекрасить этот дом в любой цвет на свой выбор, либо пропустить и не перекрашивать этот дом.

Обратите внимание, что в один и тот же день Том может перекрашивать дома в разные цвета.

Том хочет знать минимальное количество дней, необходимое для того, чтобы сделать улицу красивой.

Входные данные

Первая строка содержит целое число \(t\) (\( 1 \le t \le 10^4\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел. \(i\)-е из этих чисел равно \(c_i\) (\(1 \le c_i \le 100\)) — цвету, в который покрашен дом номе \(i\) изначально.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит одно целое число: для каждого тестового случая минимальное количество дней, необходимое Тому, чтобы сделать улицу красивой.

Примечание

В первом тестовом случае Том может покрасить дома 1 и 2 в первый день в цвет 2, дома 5 и 6 во второй день в цвет 2, и последний дом в цвет 2 в третий день.

Во втором тестовом случае Том может, например, потратить 6 дней на покраску домов 1, 2, 4, 5, 6, 7 в цвет 3.

В третьем тестовом случае Том может покрасить первый дом в первый день, а дома 6, 7 и 8 во второй день в цвет 3.

E. Новая игра плюс!

жадные алгоритмы Конструктив математика *2200

Кролик играет в игру, в которой есть \(n\) боссов, пронумерованных от \(1\) до \(n\). Боссов можно побеждать в любом порядке. Каждого босса нужно победить ровно один раз. Также в игре присутствует параметр, называемый комбо-бонусом, изначально равный \(0\).

Когда игрок побеждает \(i\)-го босса, ко счету игрока добавляется текущее значение комбо-бонуса, а затем значение комбо-бонуса изменяется на величину \(c_i\). Обратите внимание, что величина \(c_i\) может быть отрицательной, что означает, что дальнейшие боссы будут давать меньше очков.

Кролик нашел в игре лазейку. В любой момент времени он может сбросить прохождение игры и начать новое. Это сбросит текущее значение комбо-бонуса в \(0\), но все побежденные боссы останутся побежденными. Кроме того, текущий счет тоже сохраняется и не сбрасывается в ноль после этой операции. Эта лазейка может быть использована не более \(k\) раз. Можно сбрасывать игру после победы над любым количеством боссов, в том числе перед или после всех, также можно сбрасывать игру несколько раз подряд, не побеждая ни одного босса между сбросами.

Помогите кролику определить максимально возможный счет, который он может получить, победив всех \(n\) боссов.

Входные данные

В первой строке содержатся два целых числа \(n\) и \(k\) (\(1 \leq n \leq 5 \cdot 10^5\), \(0 \leq k \leq 5 \cdot 10^5\)) — количество боссов и максимальное количество сбросов соответственно.

Вторая строка содержит \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(-10^6 \leq c_i \leq 10^6\)) — влияние на комбо-бонус каждого из \(n\) боссов.

Выходные данные

Выведите одно целое число — максимальный счет, который кролик может получить, победив всех \(n\) боссов (обратите внимание, это число может быть отрицательным).

Примечание

В первом тесте запрещено делать сбросы. Оптимальное решение будет таким.

  • Победить первого босса \((+0)\). Комбо-бонус становится равным \(1\).
  • Победить второго босса \((+1)\). Комбо-бонус становится равным \(2\).
  • Победить третьего босса \((+2)\). Комбо-бонус становится равным \(3\).

Поэтому ответ в первом примере равен \(0+1+2=3\).

Во втором примере можно показать, что оптимальное решение будет таким:

  • Победить пятого босса \((+0)\). Комбо-бонус становится равным \(5\).
  • Победить первого босса \((+5)\). Комбо-бонус становится равным \(4\).
  • Победить второго босса \((+4)\). Комбо-бонус становится равным \(2\).
  • Победить третьего босса \((+2)\). Комбо-бонус становится равным \(-1\).
  • Сбросить. Комбо-бонус становится равным \(0\).
  • Победить четвертого босса \((+0)\). Комбо-бонус становится равным \(-4\).

Поэтому ответ будет равен \(0+5+4+2+0=11\).

B. Приравнять их всех

жадные алгоритмы Конструктив математика *2000

Дан массив \(a\), состоящий из \(n\) положительных целых чисел, пронумерованных от \(1\) до \(n\). Вы можете выполнять с этим массивом следующую операцию не более \(3n\) раз:

  1. выбрать три целых числа \(i\), \(j\) и \(x\) (\(1 \le i, j \le n\); \(0 \le x \le 10^9\));
  2. присвоить \(a_i := a_i - x \cdot i\), \(a_j := a_j + x \cdot i\).

После каждой операции все элементы должны быть неотрицательными.

Можете ли вы задать такую последовательность из не более чем \(3n\) операций, после которой все элементы массива будут равны?

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует \(t\) наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)) — длина массива. Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если описанной в условии последовательности операций не существует, выведите \(-1\);
  • иначе выведите целое число \(k\) (\(0 \le k \le 3n\)) — количество операций, которые вы совершаете. Затем выведите \(k\) строк, \(m\)-я из которых должна содержать три целых числа \(i\), \(j\) и \(x\) (\(1 \le i, j \le n\); \(0 \le x \le 10^9\)) для \(m\)-й операции.

Если возможных последовательностей операций несколько, выведите любую из них. Обратите внимание, что минимизировать \(k\) не обязательно.

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|\).

F. Понты

жадные алгоритмы Паросочетания Потоки реализация *3300

В очередной скучный день карантина BThero принялся изучать матрицы размера \(n \times m\). Строки матрицы нумеруются от \(1\) до \(n\) сверху вниз, а столбцы нумеруются от \(1\) до \(m\) слева направо. Клетка в \(i\)-й строке и \(j\)-м столбце обозначается \((i, j)\).

Для каждой клетки \((i, j)\) матрицы у BThero были два значения:

  1. ценность данной клетки, которая выражается одним положительным целым числом;
  2. направление данной клетки, которое выражается одним из символов L, R, D, U. Данные символы означают переходы в соседние клетки \((i, j - 1)\), \((i, j + 1)\), \((i + 1, j)\), \((i - 1, j)\), соответственно. Никакой переход не вел за границу матрицы.

Назовем клетку \((i_2, j_2)\) достижимой из \((i_1, j_1)\), если, начав из клетки \((i_1, j_1)\) и переходя в соседнюю клетку в соответствии с направлением текущей клетки, мы рано или поздно посетим \((i_2, j_2)\).

BThero решил создать еще одну матрицу из имеющихся двух. Для клетки \((i, j)\) обозначим \(S_{i, j}\) как множество достижимых из нее клеток (включая саму клетку \((i, j)\)). Значение новой матрицы в клетке \((i, j)\) будет равно сумме ценностей всех клеток из \(S_{i, j}\).

Быстро посчитав новую матрицу, BThero разослал ее всем своим друзьям. Однако он не сохранил обе изначальные матрицы! Помогите ему восстановить любые две изначальные матрицы, из которых могла получиться заданная.

Входные данные

В первой строке входного файла дано одно целое число \(T\) (\(1 \le T \le 100\)) — кол-во наборов входных данных. Далее следуют \(T\) наборов входных данных в следующем формате:

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^5\)).

Каждая из последующих \(n\) строк содержит ровно \(m\) целых чисел — элементы созданной матрицы. Все элементы находятся в отрезке \([2, 10^9]\).

Гарантируется, что \(\sum{(n \cdot m)}\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора, если ответа не существует выведите одну единственную строку NO. Иначе выведите строку YES и две матрицы в таком же формате, как и во вводе.

  • Первая матрица должна быть матрицей ценностей, а вторая должна быть матрицей направлений.
  • Все числа в матрице ценностей должны быть положительными.
  • Все буквы в матрице направлений должны быть допустимыми. Никакой переход не должен указывать за границы матрицы.

A. Копипаст

жадные алгоритмы математика *800

— Народ, как вам такая задача?

— Да норм.

BThero — волшебник, живущий в мире чудес. У него на столе находятся \(n\) кучек конфет. В \(i\)-й слева куче находится ровно \(a_i\) конфет. BThero умеет применять мощное заклинание копипаст:

  1. Он выбирает две произвольные кучки конфет \((i, j)\) такие, что \(1 \le i, j \le n\) и \(i \ne j\).
  2. Все конфеты из кучки с номером \(i\) копируются и вставляются в кучку \(j\). Более формально, выполняется операция \(a_j := a_j + a_i\).

BtHero может применять заклинание неограниченное количество раз — но, к сожалению, если в результате применения заклинания в какой-то куче станет строго больше, чем \(k\) конфет, волшебник теряет свои магические способности. Какое максимальное количество раз волшебник сможет применить заклинание, при этом не потеряв магические способности?

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 1000\), \(2 \le k \le 10^4\));
  • вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le k\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\), а сумма \(k\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество раз, которое волшебник BThero может применить свое заклинание.

Примечание

В первом наборе входных данных из условия после первого заклинания мы получим \(a = [1, 2]\) или \(a = [2, 1]\). В обоих случаях мы уже не сможем применить заклинание вновь, поскольку тогда потеряются наши магические способности.

B. Два массива

жадные алгоритмы математика сортировки *1100

У RedDreamer есть массив \(a\), состоящий из \(n\) неотрицательных целых чисел. Также у RedDreamer есть свое несчастливое число — \(T\).

Обозначим неудачливость массива \(b\) длины \(m\) как \(f(b)\) — количество пар целых чисел \((i, j)\), в которых \(1 \le i < j \le m\) и \(b_i + b_j = T\). RedDreamer должен покрасить каждый элемент массива \(a\) в один из двух цветов — белый или черный (цвет каждого элемента выбирается независимо от остальных элементов), а после этого создать два массива \(c\) и \(d\) таким образом, что все белые элементы принадлежат \(c\), а все черные — \(d\) (возможно, что один из этих массивов окажется пустым). RedDreamer хочет покрасить массив так, чтобы значение \(f(c) + f(d)\) было минимально возможным.

Например:

  • если \(n = 6\), \(T = 7\) и \(a = [1, 2, 3, 4, 5, 6]\), можно покрасить \(1\)-й, \(4\)-й и \(5\)-й элемент в белый цвет, а все остальные — в черный. Тогда \(c = [1, 4, 5]\), \(d = [2, 3, 6]\), и \(f(c) + f(d) = 0 + 0 = 0\);
  • если \(n = 3\), \(T = 6\) и \(a = [3, 3, 3]\), можно покрасить \(1\)-й элемент в белый цвет, а все остальные — в черный. Тогда \(c = [3]\), \(d = [3, 3]\), и \(f(c) + f(d) = 0 + 1 = 1\).

Помогите RedDreamer раскрасить массив оптимальным образом!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора содержит два целых числа \(n\) и \(T\) (\(1 \le n \le 10^5\), \(0 \le T \le 10^9\)) — длина массива и несчастливое число, соответственно.

Вторая строка набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Для каждого набора тестовых данных выведите \(n\) целых чисел: \(p_1\), \(p_2\), ..., \(p_n\) (\(p_i\) равняется либо \(0\), либо \(1\)), описывающих раскраску. Если \(p_i\) равняется \(0\), то элемент \(a_i\) — белый и принадлежит массиву \(c\), в противном случае он — черный и принадлежит массиву \(d\).

Если существует несколько ответов, при которых достигается минимальное значение \(f(c) + f(d)\), выведите любой из них.

B. Отрицательные префиксы

жадные алгоритмы сортировки *1300

Задан массив \(a\), состоящий из \(n\) целых чисел.

Каждая позиция массива \(i\) (\(1 \le i \le n\)) либо заблокирована, либо разблокирована. Разрешается взять все значения на разблокированных позициях, переупорядочить их произвольным образом и вернуть их на разблокированные позиции. Не разрешается удалять значения, добавлять новые или переупорядочивать значения на заблокированных позициях.

Например, если \(a = [-1, 1, \underline{3}, 2, \underline{-2}, 1, -4, \underline{0}]\), подчеркнутые позиции заблокированы. Можно получить следующие массивы:

  • \([-1, 1, \underline{3}, 2, \underline{-2}, 1, -4, \underline{0}]\);
  • \([-4, -1, \underline{3}, 2, \underline{-2}, 1, 1, \underline{0}]\);
  • \([1, -1, \underline{3}, 2, \underline{-2}, 1, -4, \underline{0}]\);
  • \([1, 2, \underline{3}, -1, \underline{-2}, -4, 1, \underline{0}]\);
  • и некоторые другие.

Пусть \(p\) будет последовательностью префиксных сумм массива \(a\) после переупорядочения. То есть \(p_1 = a_1\), \(p_2 = a_1 + a_2\), \(p_3 = a_1 + a_2 + a_3\), \(\dots\), \(p_n = a_1 + a_2 + \dots + a_n\).

Пусть \(k\) будет максимальным \(j\) (\(1 \le j \le n\)) таким, что \(p_j < 0\). Если нет таких \(j\), что \(p_j < 0\), то \(k = 0\).

Ваша цель — переупорядочить значения таким образом, чтобы \(k\) было минимально возможным.

Выведите массив \(a\) после переупорядочения такой, что значение \(k\) для него минимально возможно. Если существует несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В первой строке каждого набора записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество элементов в массиве \(a\).

Во второй строке каждого набора записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^5 \le a_i \le 10^5\)) — начальный массив \(a\).

В третьей строке каждого набора записаны \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(0 \le l_i \le 1\)), где \(l_i = 0\) значит, что позиция \(i\) разблокирована, а \(l_i = 1\) значит, что позиция \(i\) заблокирована.

Выходные данные

Выведите \(n\) целых чисел — массив \(a\) после переупорядочения. Значение \(k\) (максимальное такое \(j\), что \(p_j < 0\) (или \(0\), если таких \(j\) нет)) должно быть минимально возможно. Для каждой заблокированной позиции выведенное число должно совпадать с начальным. Значения на всех разблокированных позициях должны быть перестановкой начальных значений.

Если существует несколько ответов, то выведите любой из них.

Примечание

В первом наборе входных данных можно переставить все значения как угодно, но любое переупорядочение приведет к \(k = 0\). Например, для переупорядочения \([1, 2, 3]\), \(p=[1, 3, 6]\), поэтому нет такого \(j\), что \(p_j < 0\). Таким образом, \(k = 0\).

Во втором наборе не разрешается переупорядочивать элементы вообще. Поэтому массив в выводе должен совпадать с данным массивом.

В третьем наборе префиксные суммы в выведенном массиве равны \(p = [-8, -14, -13, -9, -5, 2, 0]\). Максимальное \(j\) равно \(5\), поэтому \(k = 5\). Невозможно переупорядочить так, чтобы было \(k < 5\).

В четвертом наборе \(p = [-4, -4, -3, 3, 6]\).

В пятом наборе \(p = [-1, 3, 10, 2, 12, 11]\).

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\) боссов в заданном порядке.

A. Цифробой

жадные алгоритмы игры реализация *900

Ни для кого не секрет, что в Валоранте агенты разыгрывают стороны до начала матча, и делают это именно Рейз и Брич, которые решили, что для этого надо сыграть \(t\) партий следующей игры...

В каждой из \(t\) партий игры сначала генерируется какое-то положительное целое число, состоящее из \(n\) цифр. Цифры этого числа пронумерованы целыми числами от \(1\) до \(n\) от старшего разряда к младшему. После того, как число становится известно, начинается партия.

Агенты ходят по очереди, Рейз начинает первой. За один ход агент выбирает любую незакрашенную цифру и закрашивает её. Рейз может выбирать цифры на нечётных позициях, но не может на чётных, а Брич может выбирать цифры на чётных позициях, но не может на нечётных. Партия заканчивается тогда, когда остаётся одна незакрашенная цифра. Если единственная оставшаяся цифра нечётная, то выигрывает Рейз, иначе выигрывает Брич.

Можно доказать, что до того как партия закончится (при любом изначальном целом, состоящем из \(n\) цифр), каждый агент будет иметь возможность сделать ход, то есть будет хотя бы одна незакрашенная цифра, стоящая на позиции нужной чётности.

Для каждой из \(t\) партий определите, кто из агентов выиграет, если оба игрока хотят победить и действуют оптимально.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) \((1 \le t \le 100)\)  — количество партий.

В первой строке описания каждой партии находится единственное целое число \(n\) \((1 \le n \le 10^3)\)  — количество цифр в числе, с которым будет проведена партия.

Во второй строке описания каждой партии находится целое положительное число, состоящее из \(n\) цифр  — число, с которым будет проведена партия. Гарантируется, что это число без лидирующих нулей.

Выходные данные

Для каждой партии выведите \(1\), если выиграет Рейз, и \(2\), если выиграет Брич.

Примечание

В первой партии никто не может сделать ход, единственная оставшаяся цифра  — это \(2\), она четная, поэтому выигрывает Брич.

Во второй партии единственная оставшаяся цифра  — это \(3\), она нечётная, поэтому выигрывает Рейз.

В третьей партии Рейз может закрасить последнюю цифру, после чего Брич может закрасить только \(0\). Останется только цифра \(1\), и она нечётная, поэтому выигрывает Рейз.

В четвертой партии вне зависимости от игры Рейз, Брич может закрасить \(9\), и в конце игры останется \(0\)  — чётная цифра, поэтому выигрывает Брич.

B. Лесенки

жадные алгоритмы Конструктив математика Перебор реализация *1200

Джет устала после уничтожения города и хочет отдохнуть. Она любит высоты, поэтому для отдыха ей надо забраться повыше, и для этого она решила делать лесенки.

Лесенка является клетчатой фигурой, состоящей из одинаковых квадратных клеточек. Если лесенка состоит из \(n\) ступенек, то это означает, что такая лесенка состоит из \(n\) столбиков, первый имеет высоту \(1\) клетку, второй имеет высоту \(2\) клетки, \(\ldots\), \(n\)-й имеет высоту \(n\) клеток. Нижние клетки всех столбиков должны находятся в одной строке.

Лесенка, имеющая \(n\) ступенек, называется красивой, если ее можно покрыть \(n\) непересекающимися квадратами. Все квадраты должны состоять целиком из клеточек лесенки.

Покрытая квадратами красивая лесенка с \(7\) ступеньками:

Скажите Джет, какое максимальное количество различных красивых лесенок она может построить, используя суммарно не больше \(x\) клеточек. Ни одна клеточка не может быть использована больше одного раза.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Единственная строка описания каждого набора входных данных содержит единственное целое число \(x\) \((1 \le x \le 10^{18})\)  — количество клеточек для постройки лесенок.

Выходные данные

Для каждого набора входных данных выведите единственное число  — максимальное количество различных красивых лесенок, которые можно построить, используя суммарно не больше \(x\) клеточек.

Примечание

В первом наборе входных данных можно построить только одну лесенку, состоящую из \(1\) ступеньки. Она является красивой. Поэтому ответ равен \(1\).

Во втором наборе входных данных можно построить две различные красивые лесенки: из \(1\) ступеньки и из \(3\) ступенек. На это уйдёт \(7\) клеточек. В таком случае останется еще одна клеточка, но из нее уже нельзя сделать ни одной красивой лесенки такого размера, которого еще нет. Поэтому ответ равен \(2\).

В третьем наборе входных данных можно построить только одну из двух красивых лесенок: с \(1\) ступенькой или с \(3\) ступеньками. В первом случае останется \(5\) клеточек, из которых можно сделать только лесенку из \(2\) ступенек. Она не является красивой, а Джет строит только красивые лесенки. Поэтому в данном случае ответ \(1\). Если же Джет построит лесенку с \(3\) ступеньками, то у неё не останется ни одной клеточки. В этом случае ответ тоже \(1\).

C. Киллджой

жадные алгоритмы математика реализация *1500

Новый агент Киллджой изобрела вирус COVID-2069, который заражает аккаунты на Codeforces. Каждый аккаунт имеет рейтинг — целое число (возможно, отрицательное или очень большое).

Аккаунт Киллджой имеет рейтинг \(x\) и изначально заражён. Рейтинг её аккаунта не изменяется. Кроме её аккаунта существуют ещё \(n\) аккаунтов, пронумерованных целыми числами от \(1\) до \(n\). Рейтинг \(i\)-го аккаунта равен \(a_i\). Любой заражённый аккаунт (изначально это только аккаунт Киллджой) моментально заражает любой здоровый аккаунт, если их рейтинги равны. Заражения могут произойти в самом начале (перед любыми изменениями рейтингов) и после каждого изменения рейтинга. Если аккаунт был заражён, то он не может быть излечен.

На Codeforces регулярно проходят контесты. В каждом контесте участвуют любые из \(n\) аккаунтов (в том числе и заражённые). Киллджой не может участвовать в контестах. В результате контеста рейтинг участников пересчитывается следующим образом: рейтинг каждого участника может измениться на любое целое число, но сумма изменений рейтингов должна быть равна нулю. Новый рейтинг каждого участника может быть любым целым числом.

Найдите, за какое минимальное количество контестов могут заразиться все аккаунты. Вы можете выбирать, какие аккаунты участвуют в контестах, и какими будут изменения рейтингов участников каждого контеста.

Можно доказать, что за конечное количество контестов могут заразиться все аккаунты.

Входные данные

В первой строке содержится единственное целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(x\) (\(2 \le n \le 10^3\), \(-4000 \le x \le 4000\)) — количество аккаунтов на Codeforces и рейтинг аккаунта Киллджой.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((-4000 \le a_i \le 4000)\) — изначальные рейтинги других аккаунтов на Codeforces.

Выходные данные

Для каждого набора входных данных выведите минимальное количество контестов, за которое могут заразиться все аккаунты.

Примечание

В первом наборе входных данных за один контест рейтинг каждого из аккаунтов может стать равен \(69\). Рейтинг первого участника увеличится на \(1\), а второго — уменьшится на \(1\). При этом сумма изменений рейтингов будет равна нулю.

Во втором наборе входных данных все аккаунты сразу же будут заражены, потому что рейтинг каждого аккаунта (включая аккаунт Киллджой) равен \(4\).

D1. День рождения Сажи (простая версия)

Бинарный поиск жадные алгоритмы Конструктив сортировки *1000

Это простая версия задачи. Различие между версиями заключается в том, что в простой версии все \(a_i\) различны. Вы можете делать взломы, только если обе версии задачи сданы.

Сегодня у Сажи день рождения, и она пойдёт в магазин покупать ледяные сферы. Все \(n\) ледяных сфер стоят в магазине в ряд на одной полке и пронумерованы целыми числами от \(1\) до \(n\) слева направо. У каждой ледяной сферы есть цена — положительное целое число. В этой версии задачи цены всех сфер различны.

Ледяная сфера считается дешёвой, если она стоит строго меньше, чем две соседние: ближайшая справа и ближайшая слева. Крайняя слева и крайняя справа ледяные сферы не считаются дешёвыми. Сажа сначала выберет все дешёвые ледяные сферы, а потом купит только их.

Вы можете прийти в магазин до Сажи и переставить ледяные сферы так, как хотите. Узнайте, какое максимальное количество ледяных сфер Сажа может купить, и покажите, как для этого нужно переставить сферы.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^5)\) — количество ледяных сфер в магазине.

Во второй строке находится \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — цены ледяных сфер.

Выходные данные

В первой строке выведите максимальное количество ледяных сфер, которое может купить Сажа.

Во второй строке выведите цены ледяных сфер в том порядке, в котором их нужно поставить на полку. Если возможных ответов несколько, выведите любой из них.

Примечание

Если расставить сферы, как \((3, 1, 4, 2, 5)\), то Сажа купит сферы за \(1\) и за \(2\), так как они будут дешёвыми. При этом расставить ледяные сферы так, чтобы Сажа купила \(3\) сферы, невозможно.

D2. День рождения Сажи (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1500

Это сложная версия задачи. Различие между версиями заключается в том, что в простой версии все \(a_i\) различны. Вы можете делать взломы, только если обе версии задачи сданы.

Сегодня у Сажи день рождения, и она пойдёт в магазин покупать ледяные сферы. Все \(n\) ледяных сфер стоят в магазине в ряд на одной полке и пронумерованы целыми числами от \(1\) до \(n\) слева направо. У каждой ледяной сферы есть цена — положительное целое число. Некоторые сферы могут иметь одинаковую цену.

Ледяная сфера считается дешёвой, если она стоит строго меньше, чем две соседние: ближайшая справа и ближайшая слева. Крайняя слева и крайняя справа ледяные сферы не считаются дешёвыми. Сажа сначала выберет все дешёвые ледяные сферы, а потом купит только их.

Вы можете прийти в магазин до Сажи и переставить ледяные сферы так, как хотите. Узнайте, какое максимальное количество ледяных сфер Сажа может купить, и покажите, как для этого переставить сферы.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^5)\) — количество ледяных сфер в магазине.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — цены ледяных сфер.

Выходные данные

В первой строке выведите максимальное количество ледяных сфер, которое может купить Сажа.

Во второй строке выведите цены ледяных сфер в том порядке, в котором их нужно поставить на полку. Если возможных ответов несколько, выведите любой из них.

Примечание

В тесте из условия невозможно расставить ледяные сферы так, чтобы Сажа купила \(4\) из них. Если расставить сферы в порядке \((3, 1, 4, 2, 4, 2, 5)\), то Сажа купит одну сферу за \(1\) и две сферы по \(2\).

B. Помогите воеводе

жадные алгоритмы Конструктив реализация *1800

Жил да был в Тридевятом царстве Никита Добрынич — главный царский воевода. Он всегда гордился своими воинами и любил приглашать Царя на строевые учения, на которых демонстрировались боевые приемы и тактики возглавляемого им отряда дружины. Долго ли — коротко ли, но однажды поссорился Никита Добрынич с Бабой Ягой (ходили слухи, что ссора произошла после того, как воевода невысоко отозвался о боевых навыках избушки на курьих ножках, чем очень расстроил Бабу Ягу).

Результатом ссоры стало довольно странное проклятье, наложенное Бабой Ягой на воеводу. Звучало оно очень умно и довольно безобидно: «Да будут все солдаты, квадрат расстояния между которыми на учениях окажется равным 5, враждовать друг с другом!»

Строевые учения проходят на прямоугольной площадке n × m, разбитой на nm квадратных участков размерами 1 × 1 для каждого солдата. Таким образом, квадрат расстояния между солдатами на участках (x1, y1) и (x2, y2) в точности равен (x1 - x2)2 + (y1 - y2)2, и теперь в учениях не всегда могут принимать участие сразу nm солдат, как это было до проклятия Бабы Яги. Если, конечно, воевода не хочет, чтобы солдаты побили друг друга, или того хуже... Например, если поставить дружинника в квадрат (2, 2), то дружинников в квадраты (1, 4), (3, 4), (4, 1) и (4, 3) поставить уже нельзя — между любым из них и дружинником в квадрате (2, 2) начнет действовать проклятье Бабы Яги.

Ваша задача — помочь воеводе, и по заданным размерам площадки для строевых учений сообщить, какое максимальное количество воинов можно одновременно собрать на этой площадке, чтобы ни на каких двух из них не начало действовать проклятье Бабы Яги.

Входные данные

В единственной строке через пробел записаны целые числа n и m (1 ≤ n, m ≤ 1000) — размеры площадки для строевых учений.

Выходные данные

Выведите искомое максимальное количество дружинников.

Примечание

В первом тесте из примера расположить 4-х дружинников на площадке размером 2 × 4 можно следующим образом (места расположения дружинников на схеме обозначены серыми кругами):

Во втором тесте из примера расположить 6-х дружинников на площадке размером 3 × 4 можно следующим образом:

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)\).

Можно убедиться, что защищенности лучше, чем три, добиться никак нельзя.

A. Ксорим

битмаски жадные алгоритмы математика *800

Чтобы отпраздновать 5-ю годовщину Twice, Тзуйю и Сана решили поиграть в игру.

Тзуйю подарила Сане два целых числа \(a\) и \(b\) и очень важный квест.

Чтобы завершить квест, Сана должна вывести наименьшее возможное значение (\(a \oplus x\)) + (\(b \oplus x\)) по всем \(x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^{4}\)). Описание наборов входных данных приведено ниже.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите наименьшее возможное значение данного выражения.

Примечание

Для первого набора входных данных Сана может выбрать \(x=4\), и значение будет (\(6 \oplus 4\)) + (\(12 \oplus 4\)) = \(2 + 8\) = \(10\). Можно показать, что это значение минимально возможное.

D. Шестиугольники

жадные алгоритмы Конструктив кратчайшие пути математика Перебор реализация *1900

Линдси Букингем сказала Стиви Никс «идти своим путем». Никс сейчас грустит и хочет уйти как можно быстрее, но она живет в двухмерном шестиугольном мире.

Рассмотрим шестиугольное покрытие плоскости, как на картинке ниже.

Ники хочет добраться от ячейки с координатами \((0, 0)\) к определенной ячейке, заданной координатами. Она может перейти от шестиугольника к любому из шести своих соседей, но у каждого из переходов есть своя стоимость. Стоимость зависит от направления, в котором вы путешествуете. Таким образом, переход от \((0, 0)\) до \((1, 1)\) будет стоить ровно столько же, как и переход от \((-2, -1)\) до \((-1, 0)\). Стоимости приведены во входных данных в порядке \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\), как на рисунке ниже.

Выведите наименьшую стоимость пути от начала координат, который имеет координаты \((0, 0)\), к данной ячейке.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^{4}\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(-10^{9} \le x, y \le 10^{9}\)) — координаты конечного шестиугольника.

Вторая строка каждого набора входных данных содержит шесть целых чисел \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\) (\(1 \le c_1, c_2, c_3, c_4, c_5, c_6 \le 10^{9}\)) — стоимости совершения одного шага в определенном направлении (см. рисунок выше).

Выходные данные

Для каждого набора входных данных выведите наименьшую стоимость пути от начала координат до данной клетки.

Примечание

На рисунке ниже показано решение для первого примера. Стоимость \(18\) достигается путем трехкратного взятия \(c_3\) и \(c_2\) один раз, что составляет \(5+5+5+3=18\).

B. Красивая матрица

жадные алгоритмы математика реализация *1300

Матрица размером \(n \times m\) называется красивой, если все строки и столбцы данной матрицы являются палиндромами. Последовательность чисел \((a_1, a_2, \dots , a_k)\) называется палиндромом, если выполняются для любого натурального \(i\) (\(1 \le i \le k\)) выполняется равенство \(a_i = a_{k - i + 1}\).

У Саши есть матрица \(a\) размером \(n \times m\). За одну операцию он может увеличить либо уменьшить любое число в матрице на единицу. Саша обязательно хочет сделать свою матрицу красивой. Теперь ему стало интересно, за какое минимальное количество операций он сможет добиться нужного ему результата.

Помогите ему!

Входные данные

В первой строке задается целое число \(t\) — количество тестов (\(1 \le t \le 10\)).

Далее задаются \(t\) тестов. Первая строка каждого теста содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — размер исходной матрицы. Следующие \(n\) строк содержат по \(m\) целых чисел \(a_{i, j}\) (\(0 \le a_{i, j} \le 10^9\)) — описание очередного элемента матрицы.

Выходные данные

Для каждого теста в отдельной строке выведите целое число — минимальное число операций, необходимое, чтобы сделать матрицу красивой.

Примечание

В первом примере можно, например, получить следующую красивую матрицу за \(8\) операций:


2 2
4 4
4 4
2 2

Во втором примере можно, например, получить следующую красивую матрицу за \(42\) операции:


5 6 6 5
6 6 6 6
5 6 6 5

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»

A. Arena of Greed

жадные алгоритмы игры *1400

Lately, Mr. Chanek frequently plays the game Arena of Greed. As the name implies, the game's goal is to find the greediest of them all, who will then be crowned king of Compfestnesia.

The game is played by two people taking turns, where Mr. Chanek takes the first turn. Initially, there is a treasure chest containing \(N\) gold coins. The game ends if there are no more gold coins in the chest. In each turn, the players can make one of the following moves:

  • Take one gold coin from the chest.
  • Take half of the gold coins on the chest. This move is only available if the number of coins in the chest is even.

Both players will try to maximize the number of coins they have. Mr. Chanek asks your help to find the maximum number of coins he can get at the end of the game if both he and the opponent plays optimally.

Input

The first line contains a single integer \(T\) \((1 \le T \le 10^5)\) denotes the number of test cases.

The next \(T\) lines each contain a single integer \(N\) \((1 \le N \le 10^{18})\).

Output

\(T\) lines, each line is the answer requested by Mr. Chanek.

Note

For the first case, the game is as follows:

  1. Mr. Chanek takes one coin.
  2. The opponent takes two coins.
  3. Mr. Chanek takes one coin.
  4. The opponent takes one coin.

For the second case, the game is as follows:

  1. Mr. Chanek takes three coins.
  2. The opponent takes one coin.
  3. Mr. Chanek takes one coin.
  4. The opponent takes one coin.

E. Excitation of Atoms

жадные алгоритмы реализация *2200

Mr. Chanek is currently participating in a science fair that is popular in town. He finds an exciting puzzle in the fair and wants to solve it.

There are \(N\) atoms numbered from \(1\) to \(N\). These atoms are especially quirky. Initially, each atom is in normal state. Each atom can be in an excited. Exciting atom \(i\) requires \(D_i\) energy. When atom \(i\) is excited, it will give \(A_i\) energy. You can excite any number of atoms (including zero).

These atoms also form a peculiar one-way bond. For each \(i\), \((1 \le i < N)\), if atom \(i\) is excited, atom \(E_i\) will also be excited at no cost. Initially, \(E_i\) = \(i+1\). Note that atom \(N\) cannot form a bond to any atom.

Mr. Chanek must change exactly \(K\) bonds. Exactly \(K\) times, Mr. Chanek chooses an atom \(i\), \((1 \le i < N)\) and changes \(E_i\) to a different value other than \(i\) and the current \(E_i\). Note that an atom's bond can remain unchanged or changed more than once. Help Mr. Chanek determine the maximum energy that he can achieve!

note: You must first change exactly \(K\) bonds before you can start exciting atoms.

Input

The first line contains two integers \(N\) \(K\) \((4 \le N \le 10^5, 0 \le K < N)\), the number of atoms, and the number of bonds that must be changed.

The second line contains \(N\) integers \(A_i\) \((1 \le A_i \le 10^6)\), which denotes the energy given by atom \(i\) when on excited state.

The third line contains \(N\) integers \(D_i\) \((1 \le D_i \le 10^6)\), which denotes the energy needed to excite atom \(i\).

Output

A line with an integer that denotes the maximum number of energy that Mr. Chanek can get.

Note

An optimal solution to change \(E_5\) to 1 and then excite atom 5 with energy 1. It will cause atoms 1, 2, 3, 4, 5 be excited. The total energy gained by Mr. Chanek is (5 + 6 + 7 + 8 + 10) - 1 = 35.

Another possible way is to change \(E_3\) to 1 and then exciting atom 3 (which will excite atom 1, 2, 3) and exciting atom 4 (which will excite atom 4, 5, 6). The total energy gained by Mr. Chanek is (5 + 6 + 7 + 8 + 10 + 2) - (6 + 7) = 25 which is not optimal.

D. Ненулевые отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *1500

У Коли есть массив целых чисел \(a_1, a_2, \dots, a_n\). Числа в массиве могут быть и положительными, и отрицательными, но так как Коля не любит число \(0\), то таких чисел в его массиве нет.

Коле не нравится, что сумма элементов на некоторых подотрезках его массива может быть равна \(0\). Под подотрезком массива следует понимать некоторую непустую последовательность подряд идущих элементов массива.

Вы должны помочь Коле и сделать так, чтобы в его массиве не было подотрезков с суммой элементов равной \(0\). Для этого вы можете вставлять в его массив произвольные целые числа между любыми соседними элементами массива (числа могут быть любые: положительные, отрицательные, \(0\), любые по абсолютной величине, даже не представимые в стандартных типах данных во многих языках программирования).

Определите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\,000\)) — количество элементов в массиве Коли.

Во второй строке следует \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^{9} \le a_i \le 10^{9}, a_i \neq 0\)) — описание массива Коли.

Выходные данные

Выведите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Примечание

В первом примере есть один подотрезок, сумма элементов которого равна \(0\). Он начинается со второго элемента и заканчивается в четвертом элементе. Достаточно добавить один элемент, чтобы в массиве не было подотрезков с суммой элементов равной нулю. Например, можно добавить число \(1\) между вторым и третьим элементами массива.

Во втором примере изначально нет подотрезков с суммой элементов равной \(0\), поэтому никаких чисел в массив добавлять не нужно.

E. Камень, ножницы, бумага

жадные алгоритмы Конструктив математика Перебор Потоки *1800

Аня и Боря решили сыграть в игру «Камень, ножницы, бумага».

Игра состоит из раундов, каждый из раундов проводится независимо от остальных. В каждом раунде оба игрока одновременно показывают один из трех предметов: камень, ножницы или бумагу. При этом, если оба игрока показали одинаковые предметы, то в раунде объявляется ничья. В противном случае, действуют следующие правила:

  • если один игрок показал камень, а другой ножницы, то игрок, показавший камень, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал ножницы, а другой бумагу, то игрок, показавший ножницы, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал бумагу, а другой камень, то игрок, показавший бумагу, объявляется победителем раунда, а другой игрок — проигравшим.

Аня и Боря решили, что они сыграют ровно \(n\) раундов описанной игры. Аня решила, что она \(a_1\) раз покажет камень, \(a_2\) раз покажет ножницы и \(a_3\) раз покажет бумагу. Боря решил, что он \(b_1\) раз покажет камень, \(b_2\) раз покажет ножницы и \(b_3\) раз покажет бумагу. При этом ни Аня, ни Боря еще не выбрали последовательность, в которой будут показывать предметы. Гарантируется, что \(a_1 + a_2 + a_3 = n\) и \(b_1 + b_2 + b_3 = n\).

Перед вами стоит задача определить два числа:

  1. минимальное количество раундов, которое может выиграть Аня;
  2. максимальное количество раундов, которое может выиграть Аня.
Входные данные

В первой строке следует целое число \(n\) (\(1 \le n \le 10^{9}\)) — количество раундов.

Во второй строке следуют три целых числа \(a_1, a_2, a_3\) (\(0 \le a_i \le n\)) — количество раз, которое Аня покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(a_1 + a_2 + a_3 = n\).

В третьей строке следуют три целых числа \(b_1, b_2, b_3\) (\(0 \le b_j \le n\)) — количество раз, которое Боря покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(b_1 + b_2 + b_3 = n\).

Выходные данные

Выведите два целых числа — минимальное и максимальное количество раундов, которое может выиграть Аня.

Примечание

В первом примере Аня может не выиграть ни одного раунда, если покажет, например, сначала ножницы, а потом бумагу, а Боря покажет камень, а потом ножницы. В лучшем случае Аня выиграет один раунд, если, например, сначала покажет бумагу, а потом ножницы, а Боря покажет камень, а потом ножницы.

Во втором примере Аня может не выиграть ни одного раунда, если, например, Боря в каждом раунде будет показывать те же предметы, что и Аня.

В третьем примере Аня всегда показывает бумагу, а Боря всегда показывает камень, поэтому Аня в любом случае выиграет все три раунда.

B. Шахматный мошенник

жадные алгоритмы реализация сортировки *1400

Вам нравится играть в шахматные турниры онлайн.

В своем последнем турнире вы сыграли \(n\) игр. В этой задаче, каждая шахматная партия заканчивается либо победой, либо поражением (ничьих не бывает). Когда вы проигрываете партию, вы получаете \(0\) очков. Когда вы выигрываете, вы получаете \(1\) или \(2\) очка: если вы выиграли и предыдущую партию, вы получаете \(2\) очка, в противном случае вы получаете \(1\) очко. Если вы выиграли самую первую игру турнира, вы получаете \(1\) очко (так как не существует "предыдущей игры").

Итоги \(n\) игр записываются в строку \(s\) длиной \(n\): \(i\)-й символ \(s\)  — W, если вы выиграли \(i\)-ю игру, и L, если вы проиграли \(i\)-ю игру.

После окончания турнира вы замечаете баг на сайте, который позволяет вам изменить результат не более \(k\) игр (то есть, не более \(k\) раз вы можете изменить один символ L на W, или W на L). Так как ваша единственная цель  — улучшение вашего шахматного рейтинга, вы решили сжульничать и использовать данный баг.

Вычислите максимальное количество очков, которое вы можете получить с помощью жульничества оптимальным способом.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке содержится целое число \(t\) (\(1\le t \le 20,000\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n, k\) (\(1\le n\le 100,000\), \(0\le k\le n\)) — количество сыгранных партий и количество исходов, которые можно изменить.

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(n\), содержащую только символы W и L. Если вы выиграли \(i\)-ю игру, то \(s_i=\,\)W, если вы проиграли \(i\)-ю игру, то \(s_i=\,\)L.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(200,000\).

Выходные данные

Для каждого теста выведите одно целое число  — максимальное количество очков, который вы можете получить, обманув оптимальным способом.

Примечание

Пояснение первого набора входных данных. Изначально ваш счет равен \(2\). Действительно, вы выиграли первую игру, за что вы получили \(1\) очко, а также выиграли третью, за что вы получили еще \(1\) очко (а не \(2\), потому что вы проиграли вторую игру).

Лучшим способом сжульничать является изменение исхода второй и четвертой игры. При этом вы выигрываете первые четыре партии (строка исходов становится WWWWL). Следовательно, ваш новый счет будет равен \(7=1+2+2+2\): \(1\) очко за первую партию и по \(2\) очка за вторую, третью и четвертую партию.

Пояснение второго набора входных данных.. Изначально ваш счет равен \(3\). Действительно, вы выиграли четвертую игру, за что вы получили \(1\) очко, а также выиграли пятую игру, так что вы получили \(2\) очка (так как вы выиграли и предыдущую игру).

Лучшим способом сжульничать является изменение исхода первой, второй, третьей и шестой игры. При этом Вы выигрываете все игры (строка исходов становится WWWWWW). Следовательно, новый счет будет равен \(11 = 1+2+2+2+2+2\): \(1\) очко за первую партию и \(2\) очка за все остальные партии.

F. Скучная карточная игра

Деревья жадные алгоритмы Структуры данных *3200

Когда им скучно, Federico и Giada часто играют в следующую карточную игру с колодой, содержащей \(6n\) карт.

Каждая карта содержит одно число от \(1\) до \(6n\), и каждое число встречается ровно на одной карте. Первоначально колода отсортирована, поэтому первая карта содержит число \(1\), вторая карта содержит число \(2\), \(\dots\), а последняя  — число \(6n\).

Federico и Giada ходят по очереди, Federico начинает.

В свой ход игрок берет из колоды по \(3\) последовательные карты и кладет их в карман. Порядок оставшихся в колоде карт не меняется. Они играют до тех пор, пока колода не опустеет (после ровно \(2n\) ходов). В конце игры и Federico, и Giada имеют в карманах по \(3n\) карт.

Вы знаете карты в кармане Federico по окончанию игры. Опишите последовательность ходов, в результате которой в кармане Federico получается этот набор карт.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1\le n \le 200\)).

Вторая строка входа содержит \(3n\) чисел \(x_1, x_2,\ldots, x_{3n}\) (\(1 \le x_1 < x_2 <\ldots < x_{3n} \le 6n\))  — карты в кармане Federico в конце игры.

Гарантируется, что для каждого теста есть хотя бы одна последовательность ходов, в результате которой получается такой набор карт в кармане Federico.

Выходные данные

Выведите \(2n\) строк, каждая из которых содержит \(3\) целых числа.

В \(i\)-й строке в порядке возрастания должны быть выведены целые \(a_i<b_i<c_i\), записанные на трех картах, взятых игроком во время \(i\)-го хода (таким образом, взяты Federico, если \(i\) нечетное, и Giada, если \(i\) четное).

Если существует несколько возможных последовательностей ходов, то можно вывести любую.

Примечание

Пояснение первого примера: Первоначально колода имеет \(12 = 2\cdot 6\) отсортированных карт, поэтому колода имеет \([1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ 10\ 11\ 12]\).

  • Во время хода \(1\) Federico берет три карты \([9\ 10\ 11]\). После его хода колода имеет вид \([1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 12]\).
  • Во время хода \(2\) Giada берет три карты \([6\ 7\ 8]\). После ее хода колода имеет вид \([1\ 2\ 3\ 4\ 5\ 12]\).
  • Во время хода \(3\) Federico берет три карты \([2\ 3\ 4]\). После его хода колода имеет вид \([1\ 5\ 12]\).
  • Во время хода \(4\) Giada берет три карты \([1\ 5\ 12]\). После ее хода колода пуста.
В конце игры карты в кармане Federico  — \([2\ 3\ 4\ 9\ 10\ 11]\), а карты в кармане Giada  – \([1\ 5\ 6\ 7\ 8\ 12]\).

C. ABBB

жадные алгоритмы Перебор Строки Структуры данных *1100

Смотритель зоопарка играет в игру. В этой игре он должен использовать бомбы, чтобы взрывать строку, состоящую из символов «A» и «B». Он может использовать бомбы, чтобы взорвать подстроку, которая равна либо «AB», либо «BB». Когда он взрывает такую подстроку, она удаляется из строки, а оставшиеся части строки объединяются вместе в новую строку.

Например, смотритель зоопарка может сделать следующие две операции: AABABBA \(\to\) AABBA \(\to\) AAA.

Смотритель зоопарка интересуется, какую наименьшую длину строки он может получить после нескольких взрывов. Можете ли вы ему помочь найти эту наименьшую длину строки?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 20000)\)  — количество наборов входных данных. Описание наборов входных данных следует.

Каждая из следующих \(t\) строк содержит описание одного набора входных данных — непустую строку \(s\), которую смотритель зоопарка будет взрывать. Гарантируется, что все символы \(s\) это либо «A», либо «B».

Гарантируется, что сумма \(|s|\) (длин строки \(s\)) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: наименьшую длину строки, которую смотритель зоопарка может получить.

Примечание

В первом наборе входных данных вы не можете сделать ни одну операцию, поэтому ответ \(3\).

Во втором наборе входных данных одна из оптимальных последовательностей операций BABA \(\to\) BA. Поэтому ответ \(2\).

В третьем наборе входных данных одна из оптимальных последовательностей операций AABBBABBBB \(\to\) AABBBABB \(\to\) AABBBB \(\to\) ABBB \(\to\) AB \(\to\) (пустая строка). Поэтому ответ \(0\).

D. Бросание бумерангов

жадные алгоритмы Конструктив реализация *1900

Для улучшения умения животных кидать бумеранги, смотритель зоопарка сделал таблицу размером \(n \times n\), поставив мишени в некоторые ее клетки. В каждой строке и в каждом столбце находится не больше \(2\) мишеней. Строки таблицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы таблицы пронумерованы от \(1\) до \(n\) слева направо.

Для каждого столбца, смотритель зоопарка бросит бумеранг снизу вверх (из под низа таблицы) вдоль этого столбца. Когда бумеранг попадет в любую мишень он оскочит, сделает поворот на \(90\) градусов вправо и продолжит полет вдоль прямой в новом направлении. Бумеранг может попасть в несколько мишеней и не остановится, пока не покинет таблицу.

В этом примере, \(n=6\) и черные крестики обозначают мишени. Бумеранг в столбце \(1\) (синие стрелки) попадет в мишени \(2\) раза, а бумеранг в столбце \(3\) (красные стрелки) попадет в мишени \(3\) раза.

Бумеранг в столбце \(i\) попал в ровно \(a_i\) мишеней перед тем, как улетел за границы таблицы. Известно, что \(a_i \leq 3\).

К сожалению, смотритель зоопарка потерял изначальные позиции мишеней. Поэтому он просит вас найти любое возможное расположение мишеней, которое удовлетворяет условиям на количества попаданий бумерангов для каждого столбца. Если такого расположения не существует, сообщите об этом.

Если существует несколько возможных расположений мишеней, вы можете найти любое.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\).

В следующей строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) \((0 \leq a_i \leq 3)\).

Выходные данные

Если ни одного возможного расположения мишеней не существует, выведите \(-1\).

Иначе в первой строке выведите единственное целое число \(t\) \((0 \leq t \leq 2n)\): количество мишеней в вашем расположении.

Затем выведите \(t\) строк. Каждая строка должна содержать два целых числа \(r\) и \(c\) \((1 \leq r,c \leq n)\), где \(r\) это строка, в которой находится мишень, а \(c\) это столбец, в котором находится мишень. Все мишени должны иметь различные позиции.

В каждой строке и в каждом столбце должно находиться не более двух мишеней.

Примечание

В первом тесте можно использовать такое же расположение мишеней, как на картинке из условия.

Во втором тесте бумеранг не должен попасть ни в одну мишень, поэтому мы можем расположить \(0\) мишеней.

В третьем тесте следующая конфигурация мишеней удовлетворяет условиям на количества попаданий бумерангов, но не разрешена, потому что строка \(3\) содержит \(4\) мишени.

Можно показать, что для этого теста ни одна из конфигураций не будет удовлетворять условиям на количества попаданий бумерангов.

E. Морковка для кроликов

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *2200

В зоопарке Сингапура есть несколько кроликов. Чтобы накормить их, смотритель зоопарка купил \(n\) морковок, имеющих длины \(a_1, a_2, a_3, \ldots, a_n\). Кролики очень быстро размножаются. У смотрителя зоопарка сейчас есть \(k\) кроликов и недостаточно морковок, чтобы прокормить их всех. Чтобы решить эту проблему, он решил разрезать морковки так, чтобы суммарно получилось \(k\) кусков. По некоторой причине длины всех получившихся морковок должны быть положительными целыми числами.

Кролику очень сложно кушать длинную морковку, поэтому время, которое требуется, чтобы съесть морковку длины \(x\), равно \(x^2\).

Помогите смотрителю зоопарка разделить его морковки и найдите минимальное суммарное время, которое потребуется кроликам, чтобы их съесть.

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) \((1 \leq n \leq k \leq 10^5)\): изначальное количество морковок и количество кроликов.

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 10^6)\): длины морковок.

Гарантируется, что сумма \(a_i\) не меньше \(k\).

Выходные данные

Выведите одно целое число: минимальное суммарное время, которое потребуется кроликам, чтобы съесть морковки при каком-то их разделении.

Примечание

Для первого теста оптимальные размеры морковок это \(\{1,1,1,2,2,2\}\). Время, которое потребуется, чтобы съесть эти морковки, равно \(1^2+1^2+1^2+2^2+2^2+2^2=15\).

Для второго теста оптимальные размеры морковок это \(\{4,5,5,5\}\). Время, которое потребуется, чтобы съесть эти морковки, равно \(4^2+5^2+5^2+5^2=91\).

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\).

B. Бочки

жадные алгоритмы реализация сортировки *800

Перед вами в ряд выстроены \(n\) бочек, пронумерованные слева направо, начиная с единицы. В \(i\)-й бочке налито \(a_i\) литров воды.

Вы можете переливать воду из одной бочки в другую. В ходе одного переливания вы можете выбрать две разные бочки с номерами \(x\) и \(y\) (бочка \(x\) должна быть непустой) и перелить любое возможное количество воды из бочки \(x\) в бочку \(y\) (возможно, всю воду). Считайте, что каждая бочка имеет бесконечную емкость, то есть в бочку можно налить сколько угодно воды.

Определите максимальную разность между бочкой с наибольшим количество воды и бочкой с наименьшим количеством воды, если вы можете сделать не более \(k\) переливаний.

Несколько примеров:

  • если у вас есть четыре бочки, в каждой из которых по \(5\) литров воды, и \(k = 1\), вы можете вылить \(5\) литров из второй бочки в четвертую, тогда количества литров воды в бочках будут равны \([5, 0, 5, 10]\), и разность между максимальным и минимальным равна \(10\);
  • если все бочки — пустые, вы не сможете сделать ни одного переливания, и разность между максимальным и минимальным количеством будет равна \(0\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le k < n \le 2 \cdot 10^5\)) — количество бочек и максимальное количество переливаний, которые вы можете произвести.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{9}\)), где \(a_i\) равно изначальному количеству литров воды, которое находится в бочке номер \(i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите максимальную разность между бочкой с наибольшим количество воды и бочкой с наименьшим количеством воды, если вы можете сделать не более \(k\) переливаний.

C. Числа на доске

жадные алгоритмы Конструктив математика реализация Структуры данных *1000

На доске записаны целые числа \(1, 2, 3, \dots n\) (то есть все целые числа от \(1\) до \(n\) по одному разу). Вы можете за одну операцию стереть с доски два любых числа \(a\) и \(b\) и вместо них записать новое число, равное \(\frac{a + b}{2}\) округленному вверх.

Вы должны выполнить ровно \(n - 1\) описанную операцию, при этом число, которое будет записано на доске в ходе последней операции, должно быть минимально возможным.

Например, если \(n = 4\), то следующая последовательность действий является оптимальной:

  1. выбрать \(a = 4\) и \(b = 2\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3, 3]\);
  2. выбрать \(a = 3\) и \(b = 3\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3]\);
  3. выбрать \(a = 1\) и \(b = 3\), тогда вы запишете \(2\), и на доске останется \([2]\).

Легко показать, что после \(n - 1\) операции на доске будет записано всего одно число, его и нужно минимизировать.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество целых чисел, изначально записанных на доске.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

В первую строку каждого набора входных данных выведите минимальное число, которое может остаться на доске после \(n - 1\) операции. В каждой из следующих \(n - 1\) строк выведите по два целых числа — числа \(a\) и \(b\), которые должны быть стерты с доски во время очередной операции.

D. Удаление строки

Бинарный поиск жадные алгоритмы Структуры данных *1700

Вам дана строка \(s\), состоящая из \(n\) символов. Каждый символ — либо 0, либо 1.

Вы можете проводить операции со строкой. Каждая операция состоит из двух шагов:

  1. выбрать целое число \(i\) от \(1\) до длины строки \(s\), после чего удалить символ \(s_i\) (длина строки уменьшается на \(1\), номера символов правее удаленного тоже уменьшаются на \(1\));
  2. если строка \(s\) не является пустой, удалить максимальный по длине префикс, состоящий из одинаковых символов (номера остальных символов и длина строки уменьшаются на длину удаленного префикса).

Обратите внимание, что в каждой операции оба шага обязательны, и их порядок нельзя менять.

Например, если у вас есть строка \(s =\) 111010, первая операция может быть одной из следующих:

  1. выбрать \(i = 1\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  2. выбрать \(i = 2\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  3. выбрать \(i = 3\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  4. выбрать \(i = 4\): тогда мы получим 111010 \(\rightarrow\) 11110 \(\rightarrow\) 0;
  5. выбрать \(i = 5\): тогда мы получим 111010 \(\rightarrow\) 11100 \(\rightarrow\) 00;
  6. выбрать \(i = 6\): тогда мы получим 111010 \(\rightarrow\) 11101 \(\rightarrow\) 01.

Вы заканчиваете проводить операции, когда строка \(s\) становится пустой. Какое максимальное количество операций вы можете провести?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строки \(s\).

Во второй строке задана \(s\) — строка из \(n\) символов. Каждый символ — либо 0, либо 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимальное количество операций, которые вы можете провести.

Примечание

В первом наборе входных данных, мы можем, например, выбрать \(i = 2\) и получить строку 010 после первой операции. После этого, выбрать \(i = 3\) и получить строку 1. Наконец, мы можем выбрать только \(i = 1\) и получить пустую строку.

E. Переворот строки

жадные алгоритмы Строки Структуры данных *1900

Вам задана строка \(s\). Вам необходимо перевернуть эту строку. То есть последняя буква строки должна стать первой, предпоследняя буква строки должна стать второй, и так далее. Например, перевернутая строка «abddea» равна «aeddba». Для достижения цели (то есть для переворота заданной строки) вы можете менять местами соседние элементы строки.

Перед вами стоит задача определить минимальное количество обменов соседних элементов строки, необходимых для того, чтобы перевернуть строку.

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\,000\)) — длина строки \(s\).

Во второй строке следует строка \(s\) длины \(n\), состоящая из строчных букв латинского алфавита.

Выходные данные

Выведите минимальное количество обменов соседних элементов строки, необходимых для того, чтобы перевернуть строку.

Примечание

В первом примере нужно сначала поменять местами третью и четвертую буквы, тогда строка станет равна «aazaa». Затем нужно поменять вторую и третью буквы, тогда строка станет равна «azaaa». Таким образом, за два обмена соседних букв мы сможем перевернуть заданную строку.

Во втором примере заданная строка является палиндромом, то есть перевернутая строка равна исходной строке, поэтому никаких обменов делать не нужно.

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\) патронов.

D. Использованные маркеры

*особая задача жадные алгоритмы *1500

Сегодня в самой большой аудитории в вашем университете пройдет \(n\) лекций — все от разных лекторов, а ваша задача — выбрать, в каком порядке \(ord\) они будут проходить.

Каждый лектор на протяжении всей лекции будет использовать один маркер, чтобы записывать что-либо на доске. К сожалению, маркеры пишут все хуже и хуже по мере их использования, так что некоторые лекторы могут отказаться использовать маркеры, которые пишут слишком плохо по их мнению.

Формально, у \(i\)-го лектора есть значение приемлемости \(a_i\), которое означает, что он не будет использовать маркер, который был использован на \(a_i\) или более лекций до него, и попросит заменить маркер. Более точно:

  • перед первой лекцией вы кладете новый маркер в аудиторию;
  • до того, как начать лекцию, \(ord_j\)-й лектор (в выбранном вами порядке) проверяет качество маркера, и если он был использован на \(a_{ord_j}\) или более лекциях до него, то он попросит новый маркер;
  • если у вас просят новый маркер, то вы выбрасываете старый маркер, кладете новый в аудиторию, и лектор читает свою лекцию.

Как вы знаете, чем лучше маркер, тем легче слушателям понять, что же лектор пишет, поэтому вы хотите максимизировать количество использованных маркеров. К сожалению, начальство пристально следит за тем, сколько маркеров вы использовали, поэтому вы не можете заменять маркеры просто так перед каждой лекцией. То есть вы можете заменять маркеры только тогда, когда лектор вас попросит. Маркер считается использованным, если хотя бы один лектор использовал его для своей лекции.

Вы можете выбирать порядок \(ord\), в котором лекторы читают свои лекции. Найдите такой порядок, в котором количество использованных маркеров будет максимально.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(1 \le n \le 500\)) — количество лекций и лекторов.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — значение приемлемости каждого лектора.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — порядок лекторов \(ord\), который максимизирует количество использованных маркеров. Лекторы пронумерованы от \(1\) до \(n\) в порядке входных данных. Если существует несколько ответов, то выведите любой из них.

Примечание

В первом наборе наборе входных данных, один из оптимальных порядков следующий:

  1. \(4\)-й лектор читает первым. Маркер новый, поэтому лектор его не меняет;
  2. \(1\)-й лектор читает следующим. Маркер использовался на одной лекции и, так как \(a_1 = 1\), лектор просит его поменять;
  3. \(3\)-й лектор читает следующим. Второй маркер использовался на одной лекции и, так как \(a_3 = 1\), лектор просит его поменять;
  4. \(2\)-й лектор читает последний. Третий маркер использовался на одной лекции, но так как \(a_2 = 2\), то лектор его использует.
В результате, использовано \(3\) маркера.

Во втором наборе входных данных, использовано \(2\) маркера.

В третьем наборе входных данных, использовано \(3\) маркера.

В четвертом наборе, использовано \(3\) маркера.

F. Задача про нейронную сеть

*особая задача Бинарный поиск жадные алгоритмы *2100

Вы хотите натренировать модель нейронной сети для вашей выпускной работы. В датасете находятся \(n\) изображений, размер \(i\)-го изображения равен \(a_i\) байт.

В вашем распоряжении нет мощных удаленных серверов для того, чтобы натренировать модель, поэтому вам необходимо сделать это на вашем собственном компьютере. Но есть небольшая проблема: общий размер датасета слишком большой для вашего компьютера, поэтому вы решили удалить некоторые изображения... С другой стороны, вы не хотите делать датасет слишком некачественным, поэтому вы можете удалить из него не более чем \(k\) изображений. Заметьте, что вы можете только удалять изображения, вы не можете менять их порядок.

Вы хотите удалить эти изображения оптимальным образом, поэтому вы придумали метрику (вы же все-таки data scientist), которая позволяет оценить результат удалений. Рассмотрим массив \(b_1, b_2, \ldots, b_m\) после удаления не более \(k\) изображений (\(n - k \le m \le n\)). Данные из этого массива будут загружены в компьютер блоками по \(x\) последовательных элементов каждый. Более точно:

  • элементы с индексами от \(1\) до \(x\) (\(b_1, b_2, \ldots, b_x\)) принадлежат первому блоку;
  • элементы с индексами от \(x + 1\) до \(2x\) (\(b_{x + 1}, b_{x + 2}, \ldots, b_{2x}\)) принадлежат второму блоку;
  • элементы с индексами от \(2x + 1\) до \(3x\) (\(b_{2x + 1}, b_{2x + 2}, \ldots, b_{3x}\)) принадлежат третьему блоку;
  • и так далее.

Всего блоков будет \(cnt = \left\lceil\frac{m}{x}\right\rceil\). Заметьте, что если \(m\) не делится на \(x\), то последний блок содержит меньше \(x\) элементов, и это нормально.

Пусть \(w(i)\) равно общему размеру \(i\)-го блока, то есть сумме размеров изображений внутри этого блока. Например, размер первого блока \(w(1)\) равен \(b_1 + b_2 + \ldots + b_x\), размер второго блока \(w(2)\) равен \(b_{x + 1} + b_{x + 2} + \ldots + b_{2x}\).

Значением метрики, которую вы придумали, является максимальный размер блока по всем блокам результирующего датасета. Другими словами, значение метрики равно \(\max\limits_{i=1}^{cnt} w(i)\).

Вы не хотите слишком перегружать ваш компьютер, поэтому вы хотите удалить не более \(k\) изображений таким образом, чтобы минимизировать значение метрики, описанной выше.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 10^5\); \(1 \le k, x \le n\)) — количество изображений в датасете, максимальное количество изображений, которые вы можете удалить и длину каждого блока (может быть, за исключением последнего), соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)), где \(a_i\) равно размеру \(i\)-го изображения.

Выходные данные

Выведите одно число: минимальное значение метрики, описанной в условии задачи, которое возможно получить после удаления не более \(k\) изображений из датасета.

Примечание

В первом тестовом примере вы можете удалить весь массив, поэтому ответ равен \(0\).

Во втором тестовом примере вы можете удалить первый и последний элементы \(a\) и получить \(b = [1, 5, 5]\). Размер первого (и единственного) блока равен \(11\). Таким образом, ответ равен \(11\).

В третьем тестовом примере вы можете удалить второй элемент \(a\) и получить \(b = [3, 1, 3, 1, 2]\). Размер первого блока равен \(8\), а размер второго блока равен \(2\). Таким образом, ответ равен \(8\).

В четвертом тестовом примере вы можете оставить массив \(a\) без изменений и получить \(b = [2, 2, 1, 2, 2, 1]\). Размер первого блока равен \(5\), как и размер второго. Таким образом, ответ равен \(5\).

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\)) — стартовое содержимое множества. Это попарно различные целые числа.

Выходные данные

Выведите одно целое число — итоговый счет игры (при условии, что и Алиса, и Боб играют оптимально).

H. Rogue-like игра

*особая задача жадные алгоритмы Перебор *2600

Марина играет в новую rogue-like игру. В этой игре есть \(n\) различных рас персонажей и \(m\) различных классов. Игра состоит из вылазок; для каждой вылазки Марина должна выбрать расу и класс для своего персонажа. Если она выберет \(i\)-ю расу и \(j\)-й класс, она получит \(c_{i, j}\) очков за эту сессию.

Изначально некоторые расы и классы разблокированы, все остальные заблокированы. Чтобы разблокировать \(i\)-ю расу, Марина должна получить в общей сложности не менее \(a_i\) очков за предыдущие вылазки, то есть, как только ее общее количество очков за сыгранные вылазки составит не менее \(a_i\), эта раса будет разблокирована. Аналогично, чтобы разблокировать \(j\)-й класс, она должна получить не менее \(b_j\) очков в общей сложности за предыдущие вылазки. Если \(a_i = 0\) для некоторого \(i\), то эта раса разблокирована изначально (то же самое относится и к классам с \(b_j = 0\)).

Марина хочет разблокировать все расы и классы за минимальное количество вылазок. Прежде чем начать играть, она может прочитать ровно одно руководство по некоторой комбинации расы и класса, и чтение руководства увеличит количество очков, которое она получает за каждую вылазку с этой комбинацией на \(k\) (формально, прежде чем начать играть, она может увеличить ровно одно значение \(c_{i, j}\) на \(k\)).

Каково минимальное количество вылазок, которые она должна сделать, чтобы разблокировать все расы и классы, если она оптимальным образом выберет комбинацию для которой прочитает руководство?

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 1500\); \(0 \le k \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 = a_1 \le a_2 \le \dots \le a_n \le 10^{12}\)), где \(a_i\) — количество очков, необходимое для разблокировки \(i\)-й расы (или \(0\), если она разблокирована изначально). Обратите внимание, что \(a_1 = 0\), и эти значения неубывающие.

Третья строка содержит \(m\) целых чисел \(b_1\), \(b_2\), ..., \(b_m\) (\(0 = b_1 \le b_2 \le \dots \le b_m \le 10^{12}\)), где \(b_i\) — количество очков, необходимое для разблокировки \(i\)-го класса (или \(0\), если он разблокирован изначально). Обратите внимание, что \(b_1 = 0\), и эти значения неубывающие.

Далее следуют \(n\) строк, каждая из которых содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке равно \(c_{i, j}\) (\(1 \le c_{i, j} \le 10^9\)) — количество очков, которое Марина получает за вылазку с \(i\)-й расой и \(j\)-м классом.

Выходные данные

Выведите одно целое число — минимальное количество вылазок, которые Марина должна сделать, чтобы разблокировать все расы и все классы, если она может прочитать ровно одно руководство перед игрой.

Примечание

В первом примере из условия Марина может действовать следующим образом:

  1. Марина читает руководство по комбинации \(1\)-й расы и \(2\)-го класса. Таким образом, \(c_{1, 2}\) становится равно \(7\). Первоначально разблокированы только \(1\)-я раса и \(1\)-й класс.
  2. Марина делает вылазку с \(1\)-й расой и \(1\)-м классом. Количество очков становится \(2\), и она открывает \(2\)-й класс.
  3. Марина делает вылазку с \(1\)-й расой и \(2\)-м классом. Количество очков становится \(9\), и она открывает все, кроме \(4\)-го класса.
  4. Марина делает вылазку с \(3\)-й расой и \(3\)-м классом. Количество очков становится \(11\), и она открывает \(4\)-й класс. Она разблокировала все расы и классы за \(3\) вылазки.

Обратите внимание, что этот способ разблокировать все расы и классы не является единственным.

Во втором примере из условия Марина может действовать следующим образом:

  1. Марина читает руководство по комбинации \(2\)-й расы и \(1\)-го класса. Таким образом, \(c_{2, 1}\) становится равно \(6\). Первоначально разблокированы только \(1\)-я раса и \(1\)-й класс.
  2. Марина делает вылазку с \(1\)-й расой и \(1\)-м классом. Количество очков становится \(3\), и она открывает \(2\)-ю расу и \(2\)-й класс.
  3. Марина делает вылазку со \(2\)-й расой и \(1\)-м классом. Количество очков становится \(9\), и она открывает \(3\)-ю и \(4\)-ю расу. Она разблокировала все за \(2\) вылазки.

Как и в \(1\)-м примере, это не единственный способ разблокировать все за \(2\) вылазки.

B. Еще одна задача про книжную полку

жадные алгоритмы реализация *800

Есть книжная полка, на которой может уместиться \(n\) книг. \(i\)-я позиция на книжной полке \(a_i = 1\), если на этой позиции находится книга, и \(a_i = 0\) иначе. Гарантируется, что есть как минимум одна книга на книжной полке.

За один ход вы можете выбрать какой-то непрерывный отрезок \([l; r]\), состоящий из книг (то есть для каждого \(i\) от \(l\) до \(r\) должно выполняться условие \(a_i = 1\)), и:

  • Сдвинуть его вправо на \(1\): переместить книгу с индекса \(i\) в \(i + 1\) для всех \(l \le i \le r\). Этот ход можно свершить только тогда, когда \(r+1 \le n\) и на позиции \(r+1\) нет книги.
  • Сдвинуть его влево на \(1\): переместить книгу с индекса \(i\) в \(i-1\) для всех \(l \le i \le r\). Этот ход можно свершить только тогда, когда \(l-1 \ge 1\) и на позиции \(l-1\) нет книги.

Ваша задача — найти минимальное количество ходов, необходимое, чтобы собрать все книги на полке в непрерывный (последовательный) отрезок (т.е. отрезок без промежутков).

Например, в \(a = [0, 0, 1, 0, 1]\) есть промежуток между книгами (\(a_4 = 0\) при \(a_3 = 1\) и \(a_5 = 1\)), в \(a = [1, 1, 0]\) нет промежутков между книгами и в \(a = [0, 0,0]\) тоже нет промежутков между книгами.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество позиций на книжной полке. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)), где \(a_i\) равно \(1\), если на этой позиции есть книга, и \(0\) в противном случае. Гарантируется, что на полке есть как минимум одна книга.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число: минимальное количество ходов, необходимое, чтобы собрать все книги на полке в непрерывный (последовательный) отрезок (т.е. отрезок без промежутков).

Примечание

В первом наборе тестовых данных примера вы можете сдвинуть отрезок \([3; 3]\) вправо, а затем отрезок \([4; 5]\) вправо. После всех ходов книги будут образовывать непрерывный отрезок \([5; 7]\). Таким образом, ответ равен \(2\).

Во втором наборе тестовых данных примера вам ничего не нужно делать, так как все книги на книжной полке уже образуют непрерывный отрезок.

В третьем наборе тестовых данных примера вы можете сдвинуть отрезок \([5; 5]\) влево, затем отрезок \([4; 4]\) опять влево. После всех ходов книги будут образовывать непрерывный отрезок \([1; 3]\). Таким образом, ответ равен \(2\).

В четвертом наборе тестовых данных примера вы можете сдвинуть отрезок \([1; 1]\) вправо, отрезок \([2; 2]\) вправо, отрезок \([6; 6]\) влево и, наконец, отрезок \([5; 5]\) влево. После всех ходов книги будут образовывать непрерывный отрезок \([3; 4]\). Таким образом, ответ равен \(4\).

В пятом наборе тестовых данных примера вы можете сдвинуть отрезок \([1; 2]\) вправо. После всех ходов книги будут образовывать непрерывный отрезок \([2; 5]\). Таким образом, ответ равен \(1\).

C. Доминирующая пиранья

жадные алгоритмы Конструктив *900

В аквариуме есть \(n\) пираний с размерами \(a_1, a_2, \ldots, a_n\). Пираньи пронумерованы слева направо в том порядке, в котором они живут в аквариуме.

Ученые из Берляндского государственного университета хотят узнать, есть ли в аквариуме доминирующая пиранья. Пиранья называется доминирующей, если она может съесть всех пираний в аквариуме (за исключением самой себя, конечно же). Другие пираньи не будут делать ничего, пока доминирующая пиранья будет есть их.

Поскольку аквариум довольно узкий и длинный, пиранья может есть только одну из соседних пираний за один ход. Пиранья может делать сколько угодно ходов (конечно же, до тех пор, пока она может). Более детально:

  • Пиранья \(i\) может съесть пиранью \(i-1\), если пиранья \(i-1\) существует и \(a_{i - 1} < a_i\).
  • Пиранья \(i\) может съесть пиранью \(i+1\), если пиранья \(i+1\) существует и \(a_{i + 1} < a_i\).

Когда пиранья \(i\) съедает какую-либо пиранью, ее размер увеличивается на единицу (\(a_i\) становится равным \(a_i + 1\)).

Ваша задача — найти любую доминирующую пиранью в аквариуме или определить, что таких пираний нет.

Обратите внимание, что вам нужно найти любую (ровно одну) доминирующую пиранью, вам не нужно находить всех подходящих пираний.

Например, если \(a = [5, 3, 4, 4, 5]\), то третья пиранья может быть доминирующей. Рассмотрим последовательность ее передвижений:

  • Пиранья съедает вторую пиранью, и \(a\) становится равным \([5, \underline{5}, 4, 5]\) (подчеркнутая пиранья — наш кандидат).
  • Пиранья съедает третью пиранью, и \(a\) становится равным \([5, \underline{6}, 5]\).
  • Пиранья съедает первую пиранью, и \(a\) становится равным \([\underline{7}, 5]\).
  • Пиранья съедает вторую пиранью, и \(a\) становится равным \([\underline{8}]\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \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\)-й пираньи.

Гарантируется, что сумма всех \(n\) не превосходит \(3 \cdot 10^5\) (\(\sum n \le 3 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: -1, если в аквариуме нет доминирующих пираний, или индекс любой доминирующей пираньи иначе. Если существует несколько корректных ответов, вы можете вывести любой.

Примечание

Первый тестовый набор примера описан в условии задачи.

Во втором тестовом наборе примера нет доминирующей пираньи.

В третьем тестовом наборе примера четвертая пиранья может сначала съесть пиранью слева, и аквариум будет выглядеть как \([4, 4, 5, 4]\), после этого она сможет съесть любую другую пиранью в аквариуме.

D. Бандиты в городе

Бинарный поиск графы Деревья жадные алгоритмы поиск в глубину и подобное *1900

Все в том же городе, где люди гуляли по улице, завелись бандиты! Один из таких, одетый в черную маску, задался целью поймать как можно больше мирных граждан.

Город состоит из \(n\) площадей, которые соединяют \(n-1\) дорог так, что от каждой площади обычно можно добраться до другой ровно одним способом. Площадь под номером \(1\) является главной площадью города.

Во время воскресной прогулки дороги между площадями в городе были изменены на односторонние таким образом, что теперь можно добраться от главной площади до любой другой.

Бандит высадился из автомобиля на главной площади города в тот момент, когда на \(i\)-й площади было \(a_i\) горожан. Далее происходит следующий процесс. Сначала каждый мирный горожанин, находящийся на площади, из которой выходит хотя бы одна односторонняя дорога, выбирает одну из таких дорог и перемещается по ней. Затем бандит выбирает одну из дорог, выходящих из площади, на которой он сейчас находится, и перемещается по ней. После этого процесс повторяется до тех пор, пока бандит не окажется на площади, из которой не выходит ни одной дороги. Бандит ловит всех граждан, оказавшихся на этой площади.

Бандит хочет задержать как можно больше горожан, а горожане не хотят быть пойманными, то есть хотят минимизировать количество задержанных. При этом бандит и горожане знают о расположении горожан на всех площадях в любой момент времени, а все горожане действуют сообща. Если каждая из сторон действует оптимально, то сколько горожан задержит бандит?

Входные данные

В первой строке входного файла содержится одно целое число \(n\) — количество площадей в городе (\(2 \le n \le 2\cdot10^5\)).

Во второй строке входного файла содержатся \(n-1\) целых чисел \(p_2, p_3 \dots p_n\) — означающие, что существует дорога из площади \(p_i\) в \(i\) (\(1 \le p_i < i\)).

В третьей строке содержатся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) — количество горожан на каждой площади изначально (\(0 \le a_i \le 10^9\)).

Выходные данные

Выведите одно целое число — количество горожан, которые задержит бандит при оптимальных действиях обеих сторон.

Примечание

В первом примере горожане на площади \(1\) могут разделиться на две группы \(2 + 1\), тогда на второй и третьей площади окажется по \(3\) человека.

Во втором примере независимо от действий граждан бандит сможет поймать хотя бы \(4\) человека.

A. Маркетинговая схема

жадные алгоритмы Конструктив математика Перебор *800

Вы устроились на работу в качестве маркетолога в зоомагазин и ваша текущая задача — увеличить продажи кошачьего корма. Одна из стратегий — это продавать банки с кормом упаковками со скидкой.

Предположим, вы решили продавать упаковки с \(a\) банками со скидкой и, предположим, покупатель хочет купить \(x\) банок корма. Тогда он воспользуется следующей жадной стратегией:

  • он купит \(\left\lfloor \frac{x}{a} \right\rfloor\) упаковок со скидкой;
  • а также докупит оставшиеся \((x \bmod a)\) банок поштучно.

\(\left\lfloor \frac{x}{a} \right\rfloor\) — это \(x\), деленное на \(a\) и округленное вниз, \(x \bmod a\) — это остаток от деления \(x\) на \(a\).

Однако покупатели в общем случае жадные, а потому, если покупатель хочет купить \((x \bmod a)\) банок поштучно и так случилось, что \((x \bmod a) \ge \frac{a}{2}\), то он решит купить всю упаковку из \(a\) банок (вместо того, чтобы купить \((x \bmod a)\) банок). Своими действиями он обрадует вас как маркетолога, потому что в итоге купит больше, чем хотел изначально.

Вы знаете, что каждый покупатель, который приходит к вам в магазин, может купить любое количество банок от \(l\) по \(r\) включительно. Можете ли вы выбрать такой размер упаковки \(a\), что любой покупатель купит больше банок, чем он планировал изначально?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^9\)) — отрезок возможного количества банок, которое захочет приобрести покупатель.

Выходные данные

Для каждого набора входных данных, выведите YES, если вы можете выбрать такой размер упаковки \(a\), что любой покупатель приобретет больше банок корма, что он расcчитывал. В противном случае выведите NO.

Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных вы можете взять, например, \(a = 5\) как размер упаковки. Тогда, если покупатель хочет купить \(3\) банки, то он купит вместо этого \(5\) банок (\(3 \bmod 5 = 3\), \(\frac{5}{2} = 2.5\)). Тот, кто захочет купить \(4\) банки, также купит \(5\).

Во втором наборе невозможно выбрать такое \(a\).

В третьем наборе вы можете, например, выбрать \(a = 80\).

B. Развороты бинарных строк

жадные алгоритмы Конструктив *1200

Вам задана строка \(s\) четной длины \(n\). Строка \(s\) — бинарная, другими словами, состоит только из 0 (нулей) и 1 (единиц).

Строка \(s\) состоит ровно из \(\frac{n}{2}\) нулей и \(\frac{n}{2}\) единиц (\(n\) — четное).

За одну операцию вы можете развернуть любую подстроку \(s\). Подстрока строки — это непрерывная подпоследовательность символов данной строки.

Какое минимальное количество операций вам понадобится, чтобы сделать \(s\) чередующейся? Строка чередующаяся, если \(s_i \neq s_{i + 1}\) для всех \(i\). В общем, существует два типа чередующихся строк: 01010101... или 10101010...

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \le n \le 10^5\); \(n\) — четное) — длина строки \(s\).

Во второй строке каждого набора задана бинарная строка \(s\) длины \(n\) (\(s_i \in\) {0, 1}). В строке \(s\) ровно \(\frac{n}{2}\) нулей и \(\frac{n}{2}\) единиц.

Гарантируется, что сумма \(n\) по наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите минимальное количество операций, чтобы сделать \(s\) чередующейся.

Примечание

В первом наборе входных данных, строка 10 уже чередующаяся.

Во втором наборе, мы можем, например, развернуть два последних символа \(s\) и получить: 0110 \(\rightarrow\) 0101.

В третьем наборе, мы можем, например, сделать следующие две операции:

  1. 11101000 \(\rightarrow\) 10101100;
  2. 10101100 \(\rightarrow\) 10101010.

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\).

D. Дерево минимальной высоты

графы Деревья жадные алгоритмы кратчайшие пути *1600

У Монокарпа было дерево из \(n\) вершин с корнем в вершине \(1\). Он решил изучить алгоритм BFS (Поиск в ширину), и поэтому запустил BFS на своем дереве, стартуя с корня. Упрощенно, BFS можно описать следующим псевдокодом:

a = [] # порядок, в котором вершины обработались
q = Queue()
q.put(1) # кладем корень в конец очереди
while not q.empty():
k = q.pop() # достаем вершину из начала очереди
a.append(k) # кладем k в конец последовательности, описывающей порядок посещения вершин
for y in g[k]: # g[k] — это список всех детей вершины k, отсортированный в порядке возрастания
q.put(y)

Монокарп был так восхищен алгоритмом BFS, что в результате потерял свое дерево. К счастью, у него осталась последовательность вершин в порядке их посещения алгоритмом BFS (массив a из псевдокода). Монокарп знает, что каждая вершина была посещена ровно один раз (так как они кладутся и забираются из очереди ровно один раз). Также он знает, что все дети каждой вершины были просмотрены в порядке возрастания.

Монокарп понимает, что есть много деревьев (в общем случае) с одинаковым порядком посещения \(a\), поэтому даже не надеется восстановить свое дерево. Монокарпа устроит любое дерево минимально возможной высоты.

Высота дерева — это максимум среди глубин вершин дерева, и глубина вершины — это количество дуг на пути от корня до этой вершины. Например, глубина вершины \(1\) равна \(0\), так как она является корнем, а глубина любого из детей корня равна \(1\).

Помогите Монокарпу найти любое дерево с заданным порядком посещения \(a\) и минимальной высотой.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\); \(a_i \neq a_j\); \(a_1 = 1\)) — порядок посещения вершин алгоритмом BFS.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите минимально возможную высоту дерева с заданным порядком обхода \(a\).

Примечание

В первом наборе входных данных, есть только одно дерево с заданным порядком посещения:

Во втором наборе, также есть только одно дерево с заданным порядком посещения:

В третьем наборе, оптимальное дерево с заданным порядком посещения изображено ниже:

B. Валерий против всех

жадные алгоритмы Конструктив сортировки Структуры данных *1000

Вам дан массив \(b\) длиной \(n\). Определим другой массив \(a\), также длиной \(n\), в котором \(a_i = 2^{b_i}\) (\(1 \leq i \leq n\)).

Валерий утверждает, что любые два непересекающихся подмассива \(a\) имеют разную сумму элементов. Вы хотите определить, ошибается ли он. Более формально, необходимо определить, существуют ли четыре целых числа \(l_1,r_1,l_2,r_2\), которые удовлетворяют следующим условиям:

  • \(1 \leq l_1 \leq r_1 \lt l_2 \leq r_2 \leq n\);
  • \(a_{l_1}+a_{l_1+1}+\ldots+a_{r_1-1}+a_{r_1} = a_{l_2}+a_{l_2+1}+\ldots+a_{r_2-1}+a_{r_2}\).

Если такие четыре целых числа существуют, вы докажете, что Валерий ошибается. Существуют ли они?

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(2 \le n \le 1000\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(0 \le b_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных, если в \(a\) есть два непересекающихся подмассива, которые имеют одинаковую сумму, выведите YES в отдельной строке. В противном случае выведите NO в отдельной строке.

Также обратите внимание, что каждая буква может быть в любом регистре.

Примечание

В первом случае \(a = [16,8,1,2,4,1]\). Значения \(l_1 = 1\), \(r_1 = 1\), \(l_2 = 2\) и \(r_2 = 6\) подходят, потому что \(16 = (8+1+2+4+1)\).

Во втором случае можно проверить, что такие подмассивы выбрать невозможно.

A2. Бинарная таблица (сложная версия)

графы жадные алгоритмы Конструктив реализация *1900

Это сложная версия задачи. Различие между версиями заключается ограничениях на количество операций. Вы можете делать взломы, если обе версии задачи сданы.

Вам дана бинарная таблица размера \(n \times m\). Эта таблица состоит из символов \(0\) и \(1\).

Вы можете делать следующую операцию: выбрать \(3\) различные клетки, которые принадлежат одному квадрату \(2 \times 2\), и изменить символы в этих клетках (поменять \(0\) на \(1\) и \(1\) на \(0\)).

Ваша задача сделать все символы таблицы равными \(0\) за не больше чем \(nm\) операций. Вам не нужно минимизировать количество операций.

Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. В следующих строках находится описание наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(2 \leq n, m \leq 100\)).

Каждая из следующих \(n\) строк содержит бинарную строку длины \(m\), равную очередной строке таблицы.

Гарантируется, что сумма \(nm\) по всем наборам входных данных не превосходит \(20000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0 \leq k \leq nm\)) — количество операций.

В каждой из следующих \(k\) строк выведите \(6\) целых чисел \(x_1, y_1, x_2, y_2, x_3, y_3\) (\(1 \leq x_1, x_2, x_3 \leq n, 1 \leq y_1, y_2, y_3 \leq m\)), описывающих следующую операцию. Эта операция будет сделана с тремя клетками \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\). Все три клетки должны быть различны. Эти три клетки должны лежать в каком-то квадрате \(2 \times 2\).

Примечание

В первом наборе входных данных можно сделать одну операцию с клетками \((1, 1)\), \((2, 1)\), \((2, 2)\). После этого, все символы будут равны \(0\).

Во втором наборе входных данных:

  • операция с клетками \((2, 1)\), \((3, 1)\), \((3, 2)\). После этой операции таблица будет:

    011
    001
    000
  • операция с клетками \((1, 2)\), \((1, 3)\), \((2, 3)\). После этой операции таблица будет:

    000
    000
    000

В пятом наборе входных данных:

  • операция с клетками \((1, 3)\), \((2, 2)\), \((2, 3)\). После этой операции таблица будет:

    010
    110
  • операция с клетками \((1, 2)\), \((2, 1)\), \((2, 2)\). После этой операции таблица будет:

    000
    000

C. Жадный шоппинг

Бинарный поиск жадные алгоритмы разделяй и властвуй реализация Структуры данных *2600

Вам дан массив \(a_1, a_2, \ldots, a_n\) из целых чисел. Этот массив невозрастающий.

Рассмотрим \(n\) магазинов, расположенных в ряд. Магазины пронумерованы целыми числами от \(1\) до \(n\) слева направо. Цена еды в \(i\)-м магазине равна \(a_i\) монет.

Вы должны обработать \(q\) запросов двух видов:

  • 1 x y: для всех магазинов \(1 \leq i \leq x\) присвоить \(a_{i} = max(a_{i}, y)\).
  • 2 x y: рассмотрим голодного мужчину с \(y\) монетами. Он посещает все магазины с \(x\)-го магазина по \(n\)-й, и если он может купить еду в текущем магазине, он покупает одну порцию этой еды. Найдите, какое количество порций еды он купит. Мужчина может покупать еду в магазине \(i\), если у него есть хотя бы \(a_i\) монет. После покупки количество его монет уменьшается на \(a_i\).
Входные данные

В первой строке находится два целых числа \(n\), \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_{1},a_{2}, \ldots, a_{n}\) \((1 \leq a_{i} \leq 10^9)\) — цены в магазинах. Гарантируется, что \(a_1 \geq a_2 \geq \ldots \geq a_n\).

Каждая из следующих \(q\) строк содержит три целых числа \(t\), \(x\), \(y\) (\(1 \leq t \leq 2\), \(1\leq x \leq n\), \(1 \leq y \leq 10^9\)), описывающие очередной запрос.

Гарантируется, что существует хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса типа \(2\) выведите ответ в новой строке.

Примечание

В первом запросе голодный мужчина купит еду во всех магазинах с \(3\)-го по \(10\)-й.

Во втором запросе голодный мужчина купит еду в магазинах \(4\), \(9\) и \(10\).

После третьего запроса массив \(a_1, a_2, \ldots, a_n\) цен не поменяется и останется \(\{10, 10, 10, 6, 6, 5, 5, 5, 3, 1\}\).

В четвертом запросе голодный мужчина купит еду в магазинах \(2\), \(3\), \(4\), \(5\), \(9\) и \(10\).

После пятого запроса массив \(a\) цен станет \(\{10, 10, 10, 7, 6, 5, 5, 5, 3, 1\}\).

В шестом запросе голодный мужчина купит еду в магазинах \(2\) и \(4\).

E. Соревнование

жадные алгоритмы Структуры данных *2200

Побочной диагональю квадратной матрицы называется диагональ, проходящая из правого верхнего угла матрицы в левый нижний угол. Назовем лесенкой порядка n квадратную матрицу n × n без клеток выше побочной диагонали (ниже на рисунке изображена лесенка пятого порядка).

В клетках лесенки порядка n стоят m спортсменов.

За секунду спортсмен может перейти на соседнюю по стороне клетку лесенки. Перед началом соревнования каждый спортсмен должен выбрать один из кратчайших путей до побочной диагонали.

После стартового свистка соревнование начинается, и все спортсмены начинают двигаться по выбранным путям. Когда спортсмен достигает клетки побочной диагонали, он останавливается и больше не двигается. Соревнование заканчивается, когда все спортсмены доходят до побочной диагонали. Соревнование считается успешным, если в процессе соревнования никакие два спортсмена не оказались одновременно в одной клетке (в том числе в одной клетке побочной диагонали не может остановиться более одного спортсмена). Если один спортсмен в данный момент времени уходит из клетки, а другой приходит в нее, то считается, что они не оказались в одной клетке одновременно. Заметим, что другие крайние случаи (например, если спортсмены идут навстречу друг другу) исключаются, так как выбранные пути кратчайшие.

Даны позиции m спортсменов на лесенке. Требуется выбрать из них наибольшее количество спортсменов (все невыбранные спортсмены удаляются из клеток лесенки до начала движения), так чтобы для них соревнование могло бы быть успешным (то есть существовал такой выбор кратчайших путей для спортсменов, при котором в процессе соревнования никакие два спортсмена не оказались бы одновременно в одной клетке).

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 105). Далее в m строках заданы координаты спортсменов на лесенке парами чисел ri, ci (1 ≤ ri, ci ≤ n, n - ci < ri), где ri — номер строки лесенки, ci — номер столбца лесенки (для понимания того как нумеруются строки и столбцы смотрите поясняющие рисунки). Никакие два спортсмена не стоят в одной клетке лесенки.

Выходные данные

В первую строку выведите количество выбранных спортсменов. Во вторую строку выведите номера выбранных спортсменов в любом порядке, разделяя числа пробелами. Если ответов несколько разрешается вывести любой. Спортсмены нумеруются начиная с единицы в том порядке, в котором они заданы во входных данных.

Примечание

Пояснение к первому примеру.

На рисунке изображена лесенка порядка три. Стрелочками показано какие кратчайшие пути выбирают спортсмены.

B. Сумма медиан

жадные алгоритмы математика *900

Медиана массива целых чисел длины \(n\) это число, стоящее на позиции \(\lceil {\frac{n}{2}} \rceil\) (округление вверх) среди его элементов, упорядоченных по неубыванию. Нумерация позиций начинается с \(1\). Например, медиана массива \([2, 6, 4, 1, 3, 5]\) равна \(3\). Существуют другие определения медианы, но в этой задаче мы будем использовать именно это определение.

Даны два целых числа \(n\) и \(k\) и неубывающий массив целых чисел длины \(nk\). Разделите его элементы на \(k\) массивов размера \(n\), так что каждый элемент попадет в ровно один массив.

Вы хотите, чтобы сумма медиан всех \(k\) массивов была максимально возможной. Найдите эту максимально возможную сумму.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(1 \leq n, k \leq 1000\)).

Во второй строке описания каждого набора входных данных содержится \(nk\) целых чисел \(a_1, a_2, \ldots, a_{nk}\) (\(0 \leq a_i \leq 10^9\)) — данный массив. Гарантируется, что массив неубывающий: \(a_1 \leq a_2 \leq \ldots \leq a_{nk}\).

Гарантируется, что сумма \(nk\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимально возможную сумму медиан всех \(k\) массивов.

Примечание

Примеры возможных разделений на массивы для всех наборов входных данных первого теста:

Набор входных данных \(1\): \([0, 24], [34, 58], [62, 64], [69, 78]\). Медианы массивов \(0, 34, 62, 69\). Их сумма равна \(165\).

Набор входных данных \(2\): \([27, 61], [81, 91]\). Медианы массивов \(27, 81\). Их сумма равна \(108\).

Набор входных данных \(3\): \([2, 91, 92, 95], [4, 36, 53, 82], [16, 18, 21, 27]\). Медианы массивов \(91, 36, 18\). Их сумма равна \(145\).

Набор входных данных \(4\): \([3, 33, 35], [11, 94, 99], [12, 38, 67], [22, 69, 71]\). Медианы массивов \(33, 94, 38, 69\). Их сумма равна \(234\).

Набор входных данных \(5\): \([11, 41]\). Медиана единственного массива \(11\). Сумма единственной медианы равна \(11\).

Набор входных данных \(6\): \([1, 1, 1], [1, 1, 1], [1, 1, 1]\). Медианы массивов \(1, 1, 1\). Их сумма равна \(3\).

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\) монет за активацию.

C. Дилемма о доставке

Бинарный поиск жадные алгоритмы сортировки *1400

Петя готовится к своему дню рождения. Он решил, что на праздничном столе будут \(n\) разных блюд, пронумерованных от \(1\) до \(n\). Так как Петя не любит готовить, он хочет заказать эти блюда в ресторанах.

К сожалению, все блюда готовятся в разных ресторанах и поэтому Пете нужно забрать свои заказы из \(n\) разных мест. Чтобы ускорить этот процесс, он хочет заказать доставку курьером в некоторых ресторанах. Таким образом, для каждого блюда есть два варианта как Петя сможет его получить:

  • блюдо привезет курьер из ресторана \(i\), в этом случае курьер прибудет через \(a_i\) минут,
  • Петя самостоятельно сходит в ресторан \(i\) и заберет блюдо, на это он потратит \(b_i\) минут.

У каждого ресторана есть свои курьеры и они начинают доставку заказа в тот же момент, как Петя выходит из дома. Иными словами все курьеры работают параллельно. Петя должен посетить все рестораны в которых он не выбрал доставку, делает он это последовательно.

Например, если Петя хочет заказать \(n = 4\) блюд и \(a = [3, 7, 4, 5]\), а \(b = [2, 1, 2, 4]\), то он может заказать доставку из первого и четвертого ресторана, а во второй и третий сходить самостоятельно. Тогда курьер первого ресторана привезет заказ через \(3\) минуты, курьер четвертого ресторана привезет заказ через \(5\) минут, а Петя заберет оставшиеся блюда за \(1 + 2 = 3\) минуты. Таким образом, через \(5\) минут все блюда окажутся у Пети дома.

Найдите минимальное время, через которое все блюда могут оказаться у Пети дома.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество блюд, которые хочет заказать Петя.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^9\)) — время курьерской доставки блюда с номером \(i\).

В третьей строке каждого набора тестовых данных записаны \(n\) целых чисел \(b_1 \ldots b_n\) (\(1 \le b_i \le 10^9\)) — время, за которое Петя заберет блюдо с номером \(i\).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное время, через которое все блюда могут оказаться у Пети дома.

A. Переупорядочивание массива

жадные алгоритмы сортировки *800

Даны массивы \(a\) и \(b\) длины \(n\), состоящие из целых чисел, и целое число \(x\). Определите, можно ли переупорядочить элементы массива \(b\) так, чтобы \(a_i + b_i \leq x\) было выполнено для всех \(i\) (\(1 \le i \le n\)).

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(n\) и \(x\) (\(1 \leq n \leq 50\); \(1 \leq x \leq 1000\)) — длина массивов \(a\) и \(b\) и параметр \(x\), описанный в условии задачи.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_1 \le a_2 \le \dots \le a_n \leq x\)) — элементы массива \(a\) в порядке неубывания.

В третьей строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_1 \le b_2 \le \dots \le b_n \leq x\)) — элементы массива \(b\) в порядке неубывания.

Описания наборов входных данных отделены пустой строкой.

Выходные данные

Для каждого набора входных данных выведите Yes, если можно переупорядочить элементы массива \(b\) так, чтобы неравенство \(a_i + b_i \leq x\) было выполнено для всех \(i\) (\(1 \le i \le n\)), или No в противном случае.

Каждый символ можно выводить в любом регистре.

Примечание

В первом наборе входных данных можно сделать массив \(b\) равным \([1, 2, 1]\). Тогда \(1 + 1 \leq 4\); \(2 + 2 \leq 4\); \(3 + 1 \leq 4\).

Во втором наборе можно сделать массив \(b\) равным \([5, 2]\). Тогда \(1 + 5 \leq 6\); \(4 + 2 \leq 6\).

В третьем наборе, как не переставляй элементы массива \(b\), в любом случае \(a_4 + b_4 = 4 + b_4 > 4\).

В четвёртом наборе существует лишь одна перестановка массива \(b\), но она не подходит, поскольку \(5 + 5 > 5\).

B. Отборочный этап

жадные алгоритмы математика *900

В одной очень известной олимпиаде участвуют более ста человек. Олимпиада состоит из двух этапов: отборочного и заключительного. В заключительный этап проходят хотя бы сто участников. Отборочный же этап состоит из двух туров.

Результатом отборочного этапа является сумма баллов за два тура. Но, к сожалению, жюри потеряли финальную таблицу результатов, и у них остались только отдельные результаты по первому и второму туру.

В каждом туре участников упорядочивают по невозрастанию баллов. В случае, если два участника набрали одинаковый балл, они упорядочиваются по номеру паспорта. В соответствии с законодательством номера паспортов всех участников различны.

В первом туре участник на сотом месте набрал \(a\) баллов. Дополнительно, жюри выяснили, что все участники первого тура, занявшие места от первого до сотого включительно, набрали не менее \(b\) баллов во втором туре.

Во втором туре участник на сотом месте набрал \(c\) баллов. Жюри также выяснили, что все участники второго тура, занявшие места от первого до сотого включительно, набрали не менее \(d\) баллов в первом туре.

Упорядочим всех участников по невозрастанию суммы их баллов за два тура. При равенстве результатов упорядочим участников по номеру паспорта. Тогда проходной балл для попадания в заключительный этап — это сумма баллов за оба тура у участника на сотом месте.

По данным \(a\), \(b\), \(c\), \(d\) помогите жюри узнать, каким может быть минимальный проходной балл на заключительный этап.

Входные данные

Вам нужно получить ответ для \(t\) наборов входных данных.

В первой строке задано целое число \(t\) (\(1 \leq t \leq 3025\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных задано четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(0 \le a,\,b,\,c,\,d \le 9\); \(d \leq a\); \(b \leq c\)).

Можно показать, что для любых входных данных, удовлетворяющих ограничениям из условия, существует хотя бы один корректный вариант проведения олимпиады.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальный возможный проходной балл на заключительный этап.

Примечание

В первом наборе входных данных на олимпиаду могут отбираться \(101\) человек с баллами \(1\) и \(2\) за первый и второй тур, соответственно. Сумма баллов у участника на 100-м место будет равна \(3\).

Во втором наборе на олимпиаду могло происходить следующее:

  • \(50\) человек набрали \(5\) и \(9\) баллов за первый и второй тур, соответственно;
  • \(50\) человек набрали \(4\) и \(8\) баллов за первый и второй тур, соответственно;
  • \(50\) человек набрали \(2\) и \(9\) баллов за первый и второй тур, соответственно;
Сумма баллов у участника на 100-м месте в таком случае будет равна \(12\).

A. Рюкзак

жадные алгоритмы Конструктив сортировки *1300

У вас есть рюкзак вместимостью \(W\). У вас также есть \(n\) предметов, вес \(i\)-го из них равен \(w_i\).

Вы хотите поместить некоторые из этих предметов в рюкзак таким образом, чтобы их общий вес \(C\) составлял как минимум половину его вместимости, но (очевидно) не превышал ее. Формально, \(C\) должно удовлетворять: \(\lceil \frac{W}{2}\rceil \le C \le W\).

Выведите список предметов, которые вы поместите в рюкзак, или определите, что удовлетворить условиям невозможно.

Если есть несколько возможных списков предметов, удовлетворяющих условиям, то можно вывести любой. Обратите внимание, что вы не должны максимизировать сумму весов элементов в рюкзаке.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(W\) (\(1 \le n \le 200\,000\), \(1\le W \le 10^{18}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^9\)) — веса элементов.

Сумма \(n\) по всем наборам входных данных не превышает \(200\,000\).

Выходные данные

Для каждого набора входных данных, если нет решения, выведите одно целое число \(-1\).

Если есть решение, состоящее из \(m\) предметов, выведите \(m\) в первой строке и \(m\) целых чисел \(j_1\), \(j_2\), ..., \(j_m\) (\(1 \le j_i \le n\), где все \(j_i\) попарно различны) во второй строке  — индексы предметов, которые вы хотели бы упаковать в рюкзак.

Если есть несколько возможных списков предметов, удовлетворяющих условиям, то можно вывести любой. Обратите внимание, что вы не должны максимизировать сумму весов элементов в рюкзаке.

Примечание

В первом наборе входных данных, вы можете взять предмет весом \(3\) и полностью заполнить рюкзак.

Во втором наборе входных данных, все предметы больше, чем рюкзак. Следовательно, ответ \(-1\).

В третьем наборе входных данных вы заполните рюкзак ровно наполовину.

D1. Задача о частотах (простая версия)

жадные алгоритмы Структуры данных *2600

Это простая версия задачи. Разница между версиями заключается в ограничениях на элементы массива. Вы можете делать взломы, только если обе версии задачи сданы.

Вам дан массив \([a_1, a_2, \dots, a_n]\).

Ваша цель — найти длину самого длинного подмассива этого массива такого, в котором наиболее часто встречающееся значение не единственно. Другими словами, вы ищете подмассив такой, что если в этом подмассиве наиболее часто встречающееся значение встречается \(f\) раз, то как минимум \(2\) разных значения должны встречаться в нем ровно \(f\) раз.

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le min(n, 100)\)) — элементы массива.

Выходные данные

Необходимо вывести ровно одно целое число — длину самого длинного подмассива массива, наиболее частое значение которого не является единственным. Если такого подмассива нет, выведите \(0\).

Примечание

В первом примере подмассив \([1, 1, 2, 2, 3, 3]\) хороший, но \([1, 1, 2, 2, 3, 3, 3]\) нет: во втором число \(3\) встречается \(3\) раза, и ни один другой элемент не встречается \(3\) раза.

D2. Задача о частотах (сложная версия)

жадные алгоритмы Структуры данных *3000

Это сложная версия задачи. Разница между версиями заключается в ограничениях на элементы массива. Вы можете делать взломы, только если обе версии задачи сданы.

Вам дан массив \([a_1, a_2, \dots, a_n]\).

Ваша цель — найти длину самого длинного подмассива этого массива такого, в котором наиболее часто встречающееся значение не единственно. Другими словами, вы ищете подмассив такой, что если в этом подмассиве наиболее часто встречающееся значение встречается \(f\) раз, то как минимум \(2\) разные значения должны встречаться в нем ровно \(f\) раз.

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Выходные данные

Необходимо вывести ровно одно целое число — длину самого длинного подмассива массива, наиболее частое значение которого не является единственным. Если такого подмассива нет, выведите \(0\).

Примечание

В первом примере подмассив \([1, 1, 2, 2, 3, 3]\) хороший, но \([1, 1, 2, 2, 3, 3, 3]\) нет: во втором число \(3\) встречается \(3\) раза, и ни один другой элемент не встречается \(3\) раза.

B. Коробка с числами

жадные алгоритмы математика *1000

Вам дана прямоугольная сетка с \(n\) строками и \(m\) столбцами. В ячейке, расположенной на \(i\)-й строке сверху и \(j\)-м столбце слева, записано значение \(a_{ij}\).

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите любые две соседние ячейки и умножьте значения в них на \(-1\). Две ячейки называются соседними, если они имеют общую сторону.

Обратите внимание, что одну и ту же ячейку можно использовать несколько раз при различных операциях.

Вас интересует \(X\), сумма всех чисел в сетке.

Какое максимально возможное \(X\) вы можете получить с помощью данных операций?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\),\(m\) (\(2 \le n\), \(m \le 10\)).

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент в \(i\)-й строке  — \(a_{ij}\) (\(-100\leq a_{ij}\le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое \(X\)  — максимально возможную сумму всех значений в сетке после применения операции столько раз, сколько вам нужно.

Примечание

В первом наборе входных данных всегда будет как минимум одна \(-1\), так что ответ равен \(2\).

Во втором наборе входных данных можно шесть раз использовать операцию для элементов, соседних по горизонтали, и сделать все числа неотрицательными. Так что ответ: \(2\times 1 + 3\times2 + 3\times 3 + 2\times 4 + 1\times 5 = 30\).

A. Счастливое преобразование

жадные алгоритмы реализация *1200

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У Пети есть две строки a и b одинаковой длины n, состоящие только из счастливых цифр. Он может делать операции двух типов:

  • поменять одну любую цифру строки a на противоположную (то есть 4 на 7, а 7 на 4);
  • поменять местами любую пару цифр строки a.

Петю интересует минимальное количество операций, необходимое для того, чтобы строка a стала равна строке b. Помогите ему с этой задачей.

Входные данные

В первой и второй строках заданы строки a и b, соответственно. Строки a и b равны по длине и содержат только счастливые цифры. Строки не пусты, их длина не превышает 105.

Выходные данные

В единственной строке выведите одно число — минимальное количество операций, необходимых для преобразования строки a в строку b.

Примечание

В первом примере достаточно просто поменять первую и вторую цифры.

Во втором примере нужно поменять вторую цифру на противоположную.

В третьем примере нужно все три цифры поменять на противоположные.

B. Стальные шарики

геометрия жадные алгоритмы Перебор *1000

У вас есть \(n\) различных точек \((x_1, y_1),\ldots,(x_n,y_n)\) на плоскости и неотрицательное целое число \(k\). Каждая точка представляет собой микроскопический стальной шарик, а \(k\)  — это его сила притяжения, когда он заряжен. Сила притяжения одинакова для всех шариков.

За одну операцию вы можете выбрать шарик \(i\) и зарядить его. После этого все шарики на манхеттенском расстоянии не более \(k\) от шарика \(i\) перемещаются в позицию шарика \(i\). После этой операции несколько различных шариков могут оказаться в одной точке.

Более формально, для всех шариков \(j\) таких, что \(|x_i - x_j| + |y_i - y_j| \le k\), мы присваиваем \(x_j:=x_i\) и \(y_j:=y_i\).

Пример операции. После зарядки шарика в центре два других шарика перемещаются в его позицию. На правой картинке красная точка в центре  — это общее положение этих шариков после операции.

Ваша задача  — найти минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или сообщить, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(2 \le n \le 100\), \(0 \le k \le 10^6\))  — количество шариков и сила притяжения каждого шарика, соответственно.

Следующие \(n\) строк описывают координаты шариков. В \(i\)-й из этих строк находится два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^5\)) — координаты \(i\)-о шарика.

Гарантируется, что все точки различны.

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или \(-1\), если это сделать невозможно.

Примечание

В первом наборе входных данных три шарика находятся в \((0, 0)\), \((3, 3)\), и \((1, 1)\) и сила притяжения равна \(2\). Можно переместить два шарика в одну точку за одну операцию, но невозможно переместить все три шарика в одну точку за любое количество операций.

Во втором наборе входных данных три шарика находятся шарика в \((6, 7)\), \((8, 8)\), и \((6, 9)\) и сила притяжения равна \(3\). Если мы зарядим любой шарик, другие два переместятся в его позицию, поэтому нам достаточно одной операции.

В третьем наборе входных данных четыре шарика находятся в \((0, 0)\), \((0, 1)\), \((0, 2)\) и \((0, 3)\) и сила притяжения равна \(1\). Можно показать, что невозможно переместить все шарики в одну и ту же точку какой-то последовательностью операций.

D. Сжатие рейтинга

Бинарный поиск жадные алгоритмы реализация Структуры данных *1800

На платформе CodeCook для соревнований по спортивному программированию у каждого человека есть график его рейтинга, описываемый массивом целых чисел \(a\) длины \(n\). Вы обновляете инфраструктуру, поэтому вы создали программу, сжимающую эти графики.

Программа работает следующим образом. Задается целое число \(k\). Программа берет минимум на каждом последовательном подмассиве длины \(k\) в массиве \(a\).

Более формально, для массива \(a\) длины \(n\) и целого числа \(k\), определим \(k\)-сжатие массива \(a\) как массив \(b\) длины \(n-k+1\), такой что \(\)b_j =\min_{j\le i\le j+k-1}a_i\(\)

Например, \(3\)-сжатие массива \([1, 3, 4, 5, 2]\) это \([\min\{1, 3, 4\}, \min\{3, 4, 5\}, \min\{4, 5, 2\}]=[1, 3, 2].\)

Перестановка длины \(m\) это массив, состоящий из \(m\) различных целых чисел от \(1\) до \(m\) в некотором порядке. Например, \([2,3,1,5,4]\) это перестановка, но \([1,2,2]\) это не перестановка (\(2\) встречается дважды в массиве) и \([1,3,4]\) это тоже не перестановка (\(m=3\), но в массиве есть число \(4\)).

\(k\)-сжатие массива рейтинга сделает пользователей CodeCook счастливыми, если оно будет перестановкой. Вам дан массив \(a\), определите для всех \(1\leq k\leq n\) будут ли счастливы пользователи CodeCook после \(k\)-сжатия этого массива или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\leq n\leq 3\cdot 10^5\)) — длина массива.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\leq a_i\leq n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку длины \(n\).

\(k\)-й символ строки должен быть \(1\), если пользователи CodeCook будут счастливы после \(k\)-сжатия массива \(a\) и \(0\), иначе.

Примечание

В первом наборе входных данных \(a=[1, 5, 3, 4, 2]\).

  • \(1\)-сжатие массива \(a\) будет \([1, 5, 3, 4, 2]\) и это перестановка.
  • \(2\)-сжатие массива \(a\) будет \([1, 3, 3, 2]\) и это не перестановка, потому что \(3\) встречается дважды.
  • \(3\)-сжатие массива \(a\) будет \([1, 3, 2]\) и это перестановка.
  • \(4\)-сжатие массива \(a\) будет \([1, 2]\) и это перестановка.
  • \(5\)-сжатие массива \(a\) будет \([1]\) и это перестановка.

F. Борющийся участник

жадные алгоритмы Конструктив *2400

Чтобы помочь тем участникам, которые испытывают трудности в большинстве контестов, основатели Codeforces решили ввести Дивизион 5. В этом новом дивизионе теги всех задач будут анонсированы перед началом раунда, чтобы помочь его участникам.

Контест состоит из \(n\) задач, где тег \(i\)-й задачи определяется целым числом \(a_i\).

Вы хотите совершить AK (All Kill, решить все задачи). Чтобы это сделать, вы должны решить все задачи в некотором порядке. Чтобы было веселее писать контест, вы задали себе дополнительные ограничения. Вы не хотите подряд решать две задачи с одинаковым тегом, потому что это скучно. Также, вы боитесь больших прыжков в сложности во время решения задач, поэтому вы хотите минимизировать количество раз, когда вы подряд решаете две задачи, не соседние в порядке задач контеста.

Более формально, ваш порядок решения задач может быть задан перестановкой \(p\) длины \(n\). Цена перестановки определяется как количество индексов \(i\) (\(1\le i<n\)), таких что \(|p_{i+1}-p_i|>1\). У вас есть требование, что \(a_{p_i}\ne a_{p_{i+1}}\) для всех \(1\le i< n\).

Вы хотите найти минимальную возможную цену перестановки, которая удовлетворяет этому требованию. Если не существует перестановок, которые ему удовлетворяют, сообщите об этом.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество задач в контесте.

В следующей строке находится \(n\) целых чисел \(a_1,a_2,\ldots a_n\) (\(1 \le a_i \le n\)) — теги задач.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если не существует перестановок, удовлетворяющих необходимому требованию, выведите \(-1\). Иначе выведите минимальную возможную цену переставновки, удовлетворяющей требованию.

Примечание

В первом наборе входных данных рассмотрим \(p=[5, 4, 3, 2, 1, 6]\). Цена этой перестановки будет \(1\), потому что мы прыгаем с \(p_5=1\) на \(p_6=6\) и \(|6-1|>1\). Эта перестановка удовлетворяет требованию, потому что мы не решаем подряд две задачи с одинаковым тегом. Невозможно получить цену, меньшую чем \(1\).

Во втором наборе входных данных рассмотрим \(p=[1,5,2,4,3]\). Цена этой перестановки будет \(3\), потому что \(|p_2-p_1|>1\), \(|p_3-p_2|>1\) и \(|p_4-p_3|>1\). Эта перестановка удовлетворяет требованию, потому что мы не решаем подряд две задачи с одинаковым тегом. Невозможно получить цену, меньшую чем \(3\).

В третьем наборе входных данных для любого порядка решения задач мы будем подряд решать хотя бы одну пару задач с одинаковым тегом, поэтому ответ \(-1\).

A. Вычитать или делить

жадные алгоритмы математика *800

Ridbit начинает с целого числа \(n\).

За одну операцию он может выполнить одну из следующих операций:

  • разделить \(n\) на один из его собственных делителей, или
  • вычесть \(1\) из \(n\), если \(n\) больше \(1\).

Собственным делителем числа называется любой делитель числа, кроме самого числа. Например, \(1\), \(2\), \(4\), \(5\) и \(10\) — это собственные делители \(20\), но само число \(20\) им не является.

Какое минимальное количество операций понадобится Ridbit, чтобы превратить \(n\) в \(1\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(1 \leq n \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите минимальное необходимое число операций для превращения \(n\) в \(1\).

Примечание

Для наборов входных данных тестового примера \(n\) может быть превращено в \(1\), используя следующие операции:

\(1\)

\(2 \xrightarrow{} 1\)

\(3 \xrightarrow{} 2 \xrightarrow{} 1\)

\(4 \xrightarrow{} 2 \xrightarrow{} 1\)

\(6 \xrightarrow{} 2 \xrightarrow{} 1\)

\(9 \xrightarrow{} 3 \xrightarrow{} 2\xrightarrow{} 1\)

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».

B. Кубики

Бинарный поиск жадные алгоритмы математика сортировки *1400

Вас попросили присмотреть за вашим племянником, который любит играть с кубиками необычным способом.

У него есть \(n\) коробок и в \(i\)-й коробке лежит \(a_i\) кубиков. Его игра состоит из двух ходов:

  1. он выбирает произвольную коробку \(i\);
  2. он пытается переложить все кубики из \(i\)-й коробки в другие коробки.
Если у него получится сделать равное количество кубиков в каждой из оставшихся \(n - 1\) коробок, то он обрадуется, а если не получится — расстроится. Заметьте, что ваш племянник может перекладывать кубики только из выбранной коробки; он не может перекладывать кубики из других коробок.

Вы не хотите, чтобы ваш племянник расстраивался, поэтому вы решили доложить несколько дополнительных кубиков в некоторые коробки так, что независимо от того, какую коробку \(i\) он выберет, он не расстроится. Какое минимальное количество кубиков вам нужно доложить?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество коробок.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — количество кубиков в каждой коробке.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — минимальное количество кубиков, которое вам нужно доложить. Можно доказать, что ответ всегда существует, то есть количество кубиков конечное.

Примечание

В первом наборе входных данных, вы можете, например, положить один дополнительный блок в первую коробку и сделать \(a = [4, 2, 2]\). Если ваш племянник выберет коробку с \(4\) кубиками, то он переложит два кубика во вторую коробку и два кубика в третью. Если же он выберет коробку с \(2\) кубиками, то оно переложит эти два кубика в другую коробку с \(2\) кубиками.

Во втором наборе, вам не нужно докладывать кубики, потому что независимо от того, какую коробку он выберет, он всегда сможет выровнять количество кубиков в других коробках.

В третьем наборе, вам нужно доложить хотя бы \(3\) кубика. Например, вы можете положить \(2\) кубика в первую коробку и \(1\) кубик в третью. Вы получите \(a = [2, 3, 1]\).

C. Две скобки

жадные алгоритмы *800

Дана последовательность \(s\), состоящая из скобок двух типов: '(', ')', '[' и ']'.

Строка называется правильной скобочной последовательностью (ПСП), если она одного из следующих типов:

  • пустая строка;
  • '(' + ПСП + ')';
  • '[' + ПСП + ']';
  • ПСП + ПСП.

где плюс — это операция склеивания двух строк.

За один ход можно выбрать непустую подпоследовательность символов строки \(s\) (не обязательно подряд идущих), которые являются ПСП, удалить их из строки и склеить оставшиеся части, не изменяя порядка.

Какое наибольшее количество ходов можно совершить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк содержится одна непустая строка, состоящая только из символов '(', ')', '[' и ']'. Суммарная длина строк по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшее количество ходов, которые можно совершить с данной строкой \(s\).

Примечание

В первом примере можно просто удалить всю строку.

Во втором примере можно сначала удалить скобки на позициях \(1\) и \(2\): «[]()», затем останется «()». Потом можно удалить строку целиком. Можно было и сразу удалить всю строку, но тогда была бы одна операция вместо двух.

В третьем примере можно сначала удалить скобки на позициях \(1\) и \(3\): «([)]». Они образуют ПСП «()». Затем останется «[]», поэтому можно удалить ее целиком.

В четвертом примере нет ни одной подпоследовательности, которая является ПСП, поэтому нельзя совершить ни один ход.

В пятом примере можно удалить скобки на позициях \(2\) и \(4\): «)[(]» и получить «)(» в результате. Из нее ничего нельзя удалить.

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\).

F. Разделяем степени

жадные алгоритмы Конструктив *2900

Вам задано мультимножество степеней двоек. Точнее, для каждого \(i\) от \(0\) до \(n\) невключительно у вас есть \(cnt_i\) элементов равных \(2^i\).

За одну операцию, вы можете выбрать один любой элемент \(2^l > 1\) и разделить его на два элемента \(2^{l - 1}\).

Вам нужно обработать \(q\) запросов. Каждый запрос имеет один из двух типов:

  • «\(1\) \(pos\) \(val\)» — присвоить \(cnt_{pos} := val\);
  • «\(2\) \(x\) \(k\)» — посчитать минимальное количество операций необходимых для того, чтобы сделать не менее \(k\) элементов со значениями не более \(2^x\).

Заметим, что запросы второго типа не влияют на мультимножество; таким образом, вы только считаете количество операций, но не применяете их.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 30\); \(1 \le q \le 2 \cdot 10^5\)) — размер массива \(cnt\) и количество операций.

Во второй строке заданы \(n\) целых чисел \(cnt_0, cnt_1, \dots, cnt_{n - 1}\) (\(0 \le cnt_i \le 10^6\)).

В следующих \(q\) строках заданы запросы: по одному в строке. Каждый запрос имеет один из двух типов:

  • «\(1\) \(pos\) \(val\)» (\(0 \le pos < n\); \(0 \le val \le 10^6\));
  • «\(2\) \(x\) \(k\)» (\(0 \le x < n\); \(1 \le k \le 10^{15}\)).

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа, выведите минимальное количество операций, необходимых для того, чтобы получить хотя бы \(k\) элементов со значением не более \(2^x\), либо \(-1\), если невозможно так сделать.

G. Игра на дереве

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2700

Алиса и Боб играют в игру. У них есть дерево, состоящее из \(n\) вершин. Изначально у Боба есть \(k\) фишек, \(i\)-я фишка расположена в вершине \(a_i\) (все эти вершины уникальны). Перед началом игры Алиса поместит фишку в одну из вершин дерева.

Игра состоит из ходов. На каждом ходу происходят следующие события (последовательно, точно в следующем порядке):

  1. Алиса либо перемещает свою фишку в соседнюю вершину, либо не перемещает ее;
  2. для каждой фишки Боба он либо перемещает ее в соседнюю вершину, либо не перемещает. Обратите внимание, что этот выбор делается независимо для каждой фишки.

Игра заканчивается, когда фишка Алисы находится в одной вершине с одной (или несколькими) фишками Боба. Обратите внимание, что фишки Боба могут находиться в одной и той же вершине, даже если они находились в разных вершинах в начале игры.

Алиса хочет максимизировать количество ходов, а Боб хочет минимизировать его. Если игра заканчивается в середине некоторого хода (Алиса перемещает свою фишку в вершину, содержащую одну или несколько фишек Боба), этот ход засчитывается.

Для каждой вершины подсчитайте, сколько ходов продлится игра, если Алиса поместит свою фишку в эту вершину.

Входные данные

Первая строка содержит одно целое число \(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 \ne v_i\)) — ребра дерева. Гарантируется, что эти ребра образуют дерево.

Следующая строка содержит одно целое число \(k\) (\(1 \le k \le n - 1\)) — количество фишек Боба.

Последняя строка содержит \(k\) целых чисел \(a_1\), \(a_2\), ..., \(a_k\) (\(1 \le a_i \le n\); \(a_i \ne a_j\), если \(i \ne j\)) — вершины, в которых изначально размещены фишки Боба.

Выходные данные

Выведите \(n\) целых чисел. \(i\)-е из них должно быть равно числу ходов, которое продлится игра, если Алиса изначально поместит свою фишку в вершину \(i\). Если одна из фишек Боба уже помещена в вершину \(i\), то ответ для вершины \(i\) равен \(0\).

C. Треугольники

жадные алгоритмы реализация *1700

У Gildong есть квадратная доска из \(n\) строк и \(n\) столбцов квадратных клеток, каждая клетка содержит одну цифру (от \(0\) до \(9\)). Клетка на пересечении \(j\)-го столбца и \(i\)-й строки может быть описана как \((i, j)\), длины сторон каждой клетки равны \(1\). Gildong любит большие вещи, так что для каждой цифры \(d\) он хочет найти треугольник такой, что:

  • Каждая вершина треугольника находится в центре клетки.
  • Цифра на каждой вершине треугольнике равна \(d\).
  • Хотя бы одна сторона треугольника параллельна одной из сторон доски. Вы можете считать, что сторона длины \(0\) параллельна обоим сторонам доски.
  • Площадь треугольника максимальна.

Конечно, его не успокоят только эти треугольники. Для каждой цифры \(d\) он хочет изменить цифру у ровно одной клетки доски на \(d\), и затем найти искомый треугольник. Он меняет цифру этой клетки обратно после того, как он нашел треугольник. Найдите максимальную площадь треугольника, которую он может получить, для каждой цифры.

Обратите внимание, что он может ставить несколько вершин треугольника на одну и ту же клетку, и что треугольник может быть вырожденным; иначе говоря, площадь треугольника может быть равна \(0\). Также обратите внимание, что разрешается менять цифру \(d\) на \(d\).

Входные данные

Ввод состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 1000\)).

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество строк и столбцов в таблице.

Следующие \(n\) строк каждого набора входных данных содержат строку из \(n\) цифр без пробелов. В \(j\)-й цифре \(i\)-й строки записана цифра клетки \((i, j)\). Каждая цифра представлена символом от \(0\) до \(9\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных, выведите строку из \(10\) целых чисел. \(i\)-е из них должно быть равно максимальной площади, которую может получить Gildong, для \(d = i-1\), умноженной на \(2\).

Примечание

В первом наборе входных данных для \(d=0\) вне зависимости от выбранной клетки треугольник с вершинами \((1, 1)\), \((1, 3)\) и \((3, 1)\) — это самый большой треугольник площади \(\cfrac{2 \cdot 2}{2} = 2\). Так как мы должны вывести ответ, умноженный на \(2\), ответ для \(d=0\) это \(4\).

Для \(d=1\) Gildong может поменять цифру у клетки \((1, 3)\) на \(1\), получив треугольник с вершинами в клетках с цифрой \(1\) с площадью \(2\).

Для \(d=2\) Gildong может поменять цифру ровно одной из следующих клеток на \(2\), чтобы получить треугольник с площадью \(\cfrac{1}{2}\): \((1, 1)\), \((1, 2)\), \((1, 3)\), \((3, 1)\), \((3, 2)\) и \((3, 3)\).

Для остальных цифр (от \(3\) до \(9\)) клетка, которую поменяет Gildong, будет единственной клеткой, содержащей эту цифру. Таким образом, треугольник всегда будет вырожденным и площади \(0\).

В третьем наборе входных данных для \(d=4\) обратите внимание, что треугольник будет больше чем ответ, если Gildong поменяет цифру у клетки \((1, 4)\), а затем выберет дополнительно клетки \((2, 1)\) и \((4, 3)\), но это некорректно, потому что это не удовлетворяет условию, что хотя бы одна сторона треугольника должна быть параллельна стороне доски.

D. Контрольные точки

жадные алгоритмы Конструктив математика Перебор Теория вероятностей *1900

Gildong разрабатывает игру, состоящую из \(n\) уровней, пронумерованных от \(1\) до \(n\). Игрок начинает игру на \(1\)-м уровне и должен проходить их в порядке возрастания номера. Игрок выигрывает, когда он проходит \(n\)-й уровень.

На каждом уровне есть не более одной контрольной точки, но она всегда есть на \(1\)-м уровне. В начале игры, только контрольная точка на \(1\)-м уровне активирована, а все остальные деактивированы. Когда игрок доходит до \(i\)-го уровня, на котором есть контрольная точка, эта контрольная точка активируется.

Для каждой попытки прохождения уровня, игрок может либо пройти уровень, либо проиграть. Если он проходит \(i\)-й уровень, игрок следует на \(i+1\)-й уровень. Если он проигрывает на \(i\)-м уровне, игрок отправляется на самую последнюю активированную контрольную точку, и ему требуется снова проходить уровни начиная с этой контрольной точки.

Например, если \(n = 4\) и контрольные точки расположены на \(1\)-м и \(3\)-м уровнях. Игрок начинает на \(1\)-м уровне. Если он проигрывает на \(1\)-м уровне, ему требуется снова проходить \(1\)-й уровень, потому что контрольная точка на \(1\)-м уровне это последняя активированная контрольная точка. Если игрок проходит \(1\)-й уровень, он двигается на \(2\)-й уровень. Если он проигрывает на нем, он отправляется обратно на \(1\)-й уровень. Если он проходит \(1\)-й уровень и \(2\)-й уровень, он отправляется на \(3\)-й уровень и активирует контрольную точку на \(3\)-м уровне. Теперь если он проиграет на \(3\)-м уровне, или на \(4\)-м уровне после прохождения \(3\)-го, он отправится обратно на \(3\)-й уровень. Если он пройдет и \(3\)-й уровень, и \(4\)-й, он выиграет игру.

Gildong хочет, чтобы сложности уровней были одинаковы. Он просит вас найти любую систему уровней и контрольных точек используя не больше чем \(2000\) уровней, чтобы математическое ожидание количества попыток на всех уровней (до прохождения игры) было равно \(k\), для игрока, который проходит каждой уровень с вероятностью \(\cfrac{1}{2}\).

Входные данные

Каждый тест состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 50\)).

Каждый набор входных данных состоит из ровно одной строки. В строке записано одно целое число \(k\) (\(1 \le k \le 10^{18}\)) — математическое ожидание суммарного числа попыток по всем уровням, которое Gildong хочет получить для игрока, который проходит каждый уровень с вероятностью \(\cfrac{1}{2}\).

Выходные данные

Для каждого набора входных данных, выведите \(-1\), если невозможно построить такую систему уровней и контрольных точек с не более чем \(2000\) уровней.

Иначе, выведите две строки. В первой строке должно быть записано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество уровней. Во второй строке должны быть записаны \(n\) целых чисел, \(i\)-е из них описывает, установлена ли контрольная точка в \(i\)-м уровне. \(i\)-е число должно быть \(0\), если \(i\)-й уровень не содержит контрольную точку, и \(1\), если содержит. Обратите внимание, что первое число должно быть равно \(1\), согласно условию.

Примечание

В первом и втором наборе входных данных, можно видеть, что самая простая конструкция имеет только \(1\) уровень с контрольной точкой. Это требует \(2\) попытки прохождения, поэтому невозможно построить конструкцию с \(1\) попыткой.

В третьем наборе входных данных, это занимает \(2\) попытки в среднем чтобы пройти каждый уровень, и игрок всегда может повторить уровень без откатывания не прошлые уровни. Таким образом, математическое ожидание равно \(8\). Обратите внимание, что есть решения с меньшим количеством уровней, но вам не требуется минимизировать их количество.

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\).

C. Изменение последовательности

жадные алгоритмы реализация *1200

Вам задана последовательность \(a\), изначально состоящая из \(n\) целых чисел.

Вы хотите изменить эту последовательность таким образом, чтобы все элементы в ней были равны между собой (то есть чтобы она состояла из какого-то количества вхождений одного элемента).

Чтобы это сделать, вы выбираете какое-то целое число \(x\), которое встречается в \(a\) хотя бы раз, и затем совершаете следующую операцию любое количество раз (возможно, нулевое): выбираете какой-то отрезок последовательности \([l, r]\) и удаляете его. Но есть одно исключение: вы не можете выбирать отрезки, которые содержат \(x\). Более формально, вы выбираете какую-то такую последовательную подпоследовательность \([a_l, a_{l + 1}, \dots, a_r]\), что \(a_i \ne x\) для \(l \le i \le r\), и удаляете ее. После удаления индексация элементов справа от удаленного отрезка меняется: элемент, который был \((r+1)\)-м, становится \(l\)-м, элемент, который был \((r+2)\)-м, становится \((l+1)\)-м, и так далее (то есть последовательность просто схлопывается).

Заметьте, что вы не можете изменять \(x\) после того, выбрали его.

Например, пусть \(n = 6\), \(a = [1, 3, 2, 4, 1, 2]\). Тогда одним из способов изменить ее за две операции является выбрать \(x = 1\), а затем:

  1. выбрать \(l = 2\), \(r = 4\), после чего получится последовательность \(a = [1, 1, 2]\);
  2. выбрать \(l = 3\), \(r = 3\), после чего получится последовательность \(a = [1, 1]\).

Заметьте, что выбор \(x\) не является операцией. Также заметьте, что вы не можете удалять никакое вхождение \(x\).

Ваша задача — найти минимальное количество операций, необходимое для того, чтобы изменить последовательность так, как описано выше.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 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 n\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — минимальное количество операций, необходимое для того, чтобы изменить заданную последовательность так, как описано в условии задачи. Можно доказать, что всегда возможно совершить конечную последовательность операций таким образом, чтобы последовательность изменилась необходимым образом.

F. Разделение массива

Бинарный поиск жадные алгоритмы Структуры данных *2100

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Пусть \(min(l, r)\) равно минимальному значению среди \(a_l, a_{l + 1}, \ldots, a_r\), а \(max(l, r)\) равно максимальному значению среди \(a_l, a_{l + 1}, \ldots, a_r\).

Ваша задача — выбрать три таких положительных (больших \(0\)) целых числа \(x\), \(y\) и \(z\), что:

  • \(x + y + z = n\);
  • \(max(1, x) = min(x + 1, x + y) = max(x + y + 1, n)\).

Другими словами, вам необходимо разделить массив \(a\) на три последовательные непустые части, которые покрывают весь массив, и максимум в первой части равен минимуму во второй части, а также равен максимуму в третьей части (или же определить, что такое разбиение невозможно найти).

Среди всех возможных троек (разделений) можно выбрать любое.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длину \(a\).

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: NO в единственной строке, если не существует такого разбиения \(a\), которе удовлетворяет ограничениям из условия задачи. Иначе выведите YES в первой строке и три целых числа \(x\), \(y\) и \(z\) (\(x + y + z = n\)) во второй строке.

Если существует несколько возможных ответов, вы можете вывести любой.

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\), если это невозможно.

E. Четыре точки

геометрия жадные алгоритмы Конструктив математика Перебор Потоки реализация Тернарный поиск *2400

Вам заданы четыре различные целые точки \(p_1\), \(p_2\), \(p_3\) и \(p_4\) на коодинатной плоскости \(\mathit{XY}\).

За один шаг вы можете выбрать одну из точек \(p_i\) и сдвинуть ее в одном из четырех направлений на единицу. Другими словами, если вы выбрали точку \(p_i = (x, y)\), вы можете передвинуть ее в \((x, y + 1)\), \((x, y - 1)\), \((x + 1, y)\) или \((x - 1, y)\).

Ваша задача — сдвинуть точки таким образом, чтобы они образовали квадрат со сторонами параллельными осям \(\mathit{OX}\) и \(\mathit{OY}\) (квадрат со стороной \(0\) разрешен).

Какое минимальное количество шагов вам нужно, чтобы получить такой квадрат?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из четырех строк. В каждой строке заданы два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^9\)) — координаты одной из точек \(p_i = (x, y)\).

Все точки в одном наборе различные.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество шагов, необходимых для получения квадрата.

Примечание

В первом наборе входных данных, один из оптимальных ответов изображен ниже:

Каждая точка будет сдвинута два раза, поэтому ответ \(2 + 2 + 2 + 2 = 8\).

Во втором наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(3 + 1 + 0 + 3 = 7\).

В третьем наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(1 + 1 + 2 + 1 = 5\).

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\) с помощью одной последовательности операций.

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]\).

D. Флипы и развороты

графы жадные алгоритмы Структуры данных *3100

Вам дана строка \(s\) из символов 0 и 1. Вы можете делать преобразование следующего вида:

  • выбрать непустую сплошную подстроку \(s\), содержащую одинаковое количество символов 0 и 1;
  • заменить все символы 0 в подстроке на 1, и наоборот;
  • развернуть подстроку.

Например, рассмотрим \(s\) = 00111011, и следующее преобразование:

  • Выберем в качестве подстроки первые шесть символов: 00111011. Эту подстроку можно выбрать, поскольку в ней количество 0 и 1 совпадает. Выбирать подстроки 0, 110, или всю строку целиком нельзя.
  • Заменим все символы в подстроке на противоположные: 11000111.
  • Развернём подстроку: 10001111.

Найдите лексикографически минимальную строку, которую можно получить из \(s\) после нуля или более преобразований.

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 5 \cdot 10^5\)) — количество тестовых примеров. Каждая из следующих \(T\) строк содержит одну непустую последовательность символов — строку \(s\) в соответствующем примере.

Все строки состоят из символов 0 и 1, и их суммарная длина не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого примера на отдельной строке выведите лексикографически минимальную строку, которую можно получить из \(s\) после нуля или более преобразований.

Примечание

В первом примере достаточно применить одно преобразование ко всей строке целиком.

Во втором примере необходимо два преобразования: 0111001, 0110110.

В третьем примере строка в результате любого преобразования не меняется.

A. Генерация строки

жадные алгоритмы Конструктив *800

Одним осенним днём Джо заскучал от того, что не может найти себе интересное занятие. Чтобы как-то развлечь Джо, его друг Марти предложил ему сгенерировать строку длины \(n\). Казалось бы, в этом нет ничего сложного, однако Джо должен был сгенерировать свою строку по следующим правилам:

  • строка может содержать только символы 'a', 'b' или 'c';
  • максимальная длина подстроки данной строки, которая является палиндромом, не превосходит \(k\).

Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца. Например, строки «a», «bc», «abc» являются подстроками строки «abc», а строки «ac», «ba», «cba» — нет.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки «abccba», «abbba», «aba», «abacaba», «a» и «bacab» — палиндромы, а строки «abcbba», «abb» и «ab» — нет.

Теперь Джо интересует, как может выглядеть любая подходящая строка. Помогите ему! Можно доказать, что при заданных ограничениях ответ всегда существует.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1\,000\)) — требуемый размер строки и максимальную длину палиндромной подстроки соответственно.

Выходные данные

Для каждого набора входных данных выведите любую строку, удовлетворяющую ограничениям из условия задачи. Если существует несколько подходящих строк, то разрешается вывести любую из них. Можно доказать, что при заданных ограничениях ответ всегда существует.

Примечание

В первом наборе входных данных палиндромной подстрокой с максимальной длиной является подстрока «aa». Её длина не превосходит \(2\), а значит она является подходящей.

Во втором наборе входных данных все палиндромные подстроки имеют единичную длину.

A. Генерация строки

жадные алгоритмы Конструктив *800

Одним осенним днём Джо заскучал от того, что не может найти себе интересное занятие. Чтобы как-то развлечь Джо, его друг Марти предложил ему сгенерировать строку длины \(n\). Казалось бы, в этом нет ничего сложного, однако Джо должен был сгенерировать свою строку по следующим правилам:

  • строка может содержать только символы 'a', 'b' или 'c';
  • максимальная длина подстроки данной строки, которая является палиндромом, не превосходит \(k\).

Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца. Например, строки «a», «bc», «abc» являются подстроками строки «abc», а строки «ac», «ba», «cba» — нет.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки «abccba», «abbba», «aba», «abacaba», «a» и «bacab» — палиндромы, а строки «abcbba», «abb» и «ab» — нет.

Теперь Джо интересует, как может выглядеть любая подходящая строка. Помогите ему! Можно доказать, что при заданных ограничениях ответ всегда существует.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1\,000\)) — требуемый размер строки и максимальную длину палиндромной подстроки соответственно.

Выходные данные

Для каждого набора входных данных выведите любую строку, удовлетворяющую ограничениям из условия задачи. Если существует несколько подходящих строк, то разрешается вывести любую из них. Можно доказать, что при заданных ограничениях ответ всегда существует.

Примечание

В первом наборе входных данных палиндромной подстрокой с максимальной длиной является подстрока «aa». Её длина не превосходит \(2\), а значит она является подходящей.

Во втором наборе входных данных все палиндромные подстроки имеют единичную длину.

E. Уровень воды

графы жадные алгоритмы математика Перебор реализация *2200

Джон очень успешно обосновался на своей новой работе в офисе. Но Джон не любит сидеть без дела, пока его код компилируется, поэтому он сразу же нашел себе достаточно интересное занятие, которое заключается в поддержании уровня воды в кулере, который используют другие зебры.

Изначально в кулере находится ровно \(k\) литров воды. Джон решил, что уровень воды всегда должен быть не менее \(l\) литров и не более \(r\) литров. Джон будет находиться в офисе ровно \(t\) дней. Он знает, что каждый день из кулера будут выпивать ровно \(x\) литров воды. Джон перед началом каждого дня может налить в кулер ровно \(y\) литров воды. При этом в любой момент времени количество воды в кулере должно находиться в диапазоне \([l, r]\).

Теперь Джону стало интересно, сможет ли он в течение \(t\) дней поддерживать количество воды в кулере. Помогите ему ответить на этот вопрос!

Входные данные

Первая строка ввода содержит шесть целых чисел \(k\), \(l\), \(r\), \(t\), \(x\) и \(y\) (\(1 \le l \le k \le r \le 10^{18}; 1 \le t \le 10^{18}; 1 \le x \le 10^6; 1 \le y \le 10^{18}\)) — изначальное количество воды, требуемый диапазон, количество дней, ежедневные потери воды и допустимое добавляемое количество воды соответственно.

Выходные данные

Выведите «Yes», если Джон сможет поддерживать уровень воды в течение \(t\) дней, и «No» в противном случае.

Примечание

В первом тестовом примере Джон не может увеличить запас воды в начале первого дня, так как он превысит лимит \(r\). Поэтому после первого дня в кулере будет \(2\) литра. Далее Джон увеличивает запас на \(4\) литра, однако теряет \(6\) литров. В итоге у Джона останется \(0\) литров воды, то есть объём не будет в диапазоне \([1, 10]\).

Во втором тестовом примере после первого дня у Джона останется \(2\) литра воды. Далее, в начале второго дня он добавит \(5\) литров, а потом объём воды уменьшится на \(6\) литров. В итоге у Джона останется \(1\) литр воды, что входит в диапазон \([1, 10]\).

В третьем тестовом примере после первого дня у Джона останется \(7\) литров воды, после второго — \(5\) литров, после четвёртого — \(1\) литр. Далее, в начале пятого дня Джон добавит \(9\) литров, а после потеряет \(2\) литра. Значит, после пятого дня у него останется \(8\) литров. Далее, каждый день уровень воды будет понижаться на \(2\) литра, в итоге после восьмого дня у Джона останется \(2\) литра воды, а после девятого — \(0\) литров. \(0\) не входит в диапазон \([1, 10]\), поэтому ответ «No».

В четвёртом тестовом примере после первого дня у Джона останется \(15\) литров воды. В начале второго дня он добавит \(7\) литров, а после потеряет \(5\), а значит после второго дня у него останется \(17\) литров воды. В начале третьего дня он добавит \(7\) литров воды, а после потеряет \(5\), значит после третьего дня у него останется \(19\) литров воды. \(19\) входит в диапазон \([15, 25]\), поэтому ответ «Yes».

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».

C. Уникальное число

жадные алгоритмы математика Перебор *900

Вам задано натуральное число \(x\). Найдите наименьшее натуральное число, у которого сумма цифр равна \(x\) и все цифры различны.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного натурального числа \(x\) (\(1 \le x \le 50\)).

Выходные данные

Выведите \(t\) ответов на наборы входных данных:

  • если натуральное число, у которого сумма цифр равна \(x\) и все цифры различны существует, то выведите наименьшее такое число;
  • В противном случае выведите -1.

D. Прибавления в соседей

жадные алгоритмы математика теория чисел *1400

Поликарпу подарили массив \(a[1 \dots n]\) из \(n\) целых чисел. Он может производить с массивом \(a\) следующую операцию не более \(n\) раз:

  • Поликарп выбирает индекс \(i\) и прибавляет в одного на свой выбор из его соседей значение \(a_i\). Более формально, Поликарп прибавляет значение \(a_i\) либо к \(a_{i-1}\), либо к \(a_{i+1}\) (если такого соседа не существует, то и прибавить в него нельзя);
  • После прибавления Поликарп удаляет \(i\)-й элемент из массива \(a\) (заметим, что в процессе удаления длина массива \(a\) уменьшается на \(1\)).

Два пункта выше совместно обозначают одну операцию.

Например, если у Поликарпа есть массив \(a = [3, 1, 6, 6, 2]\), то он может произвести с ним следующую последовательность операций:

  • Поликарп выбирает \(i = 2\) и прибавляет значение \(a_i\) к \((i-1)\)-у элементу: \(a = [4, 6, 6, 2]\);
  • Поликарп выбирает \(i = 1\) и прибавляет значение \(a_i\) к \((i+1)\)-у элементу: \(a = [10, 6, 2]\);
  • Поликарп выбирает \(i = 3\) и прибавляет значение \(a_i\) к \((i-1)\)-у элементу: \(a = [10, 8]\);
  • Поликарп выбирает \(i = 2\) и прибавляет значение \(a_i\) к \((i-1)\)-у элементу: \(a = [18]\);

Заметьте, что Поликарп мог прекратить производить операции в любой из моментов.

Поликарпу стало интересно, сколько минимум операций ему надо произвести, чтобы все элементы массива \(a\) стали одинаковыми (то есть, он хочет, чтобы все \(a_i\) были равны между собой).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора содержится одно целое число \(n\) (\(1 \leq n \leq 3000\)) — длина массива. В следующей строке содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, которые нужно сделать Поликарпу, чтобы все элементы массива \(a\) оказались одинаковыми.

Примечание

В первом наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов):

\([3, 1, 6, 6, 2]\) \(\xrightarrow[]{i=4,~прибавляет~влево}\) \([3, 1, 12, 2]\) \(\xrightarrow[]{i=2,~прибавляет~вправо}\) \([3, 13, 2]\) \(\xrightarrow[]{i=1,~прибавляет~вправо}\) \([16, 2]\) \(\xrightarrow[]{i=2,~прибавляет~влево}\) \([18]\). Все элементы в массиве \([18]\) одинаковые.

Во втором наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов):

\([1, 2, 2, 1]\) \(\xrightarrow[]{i=1,~прибавляет~вправо}\) \([3, 2, 1]\) \(\xrightarrow[]{i=3,~прибавляет~влево}\) \([3, 3]\). Все элементы в массиве \([3, 3]\) одинаковые.

В третьем наборе входных данных Поликарпу не надо производить ни одну операцию, так как массив \([2, 2, 2]\) уже содержит одинаковые элементы.

В четвертом наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов):

\([6, 3, 2, 1]\) \(\xrightarrow[]{i=3,~прибавляет~вправо}\) \([6, 3, 3]\) \(\xrightarrow[]{i=3,~прибавляет~влево}\) \([6, 6]\). Все элементы в массиве \([6, 6]\) одинаковые.

F. Клад из отрезков

Бинарный поиск жадные алгоритмы Структуры данных *1800

Поликарп нашёл на улице \(n\) отрезков. Отрезок с номером \(i\) характеризуется двумя целыми числами \(l_i\) и \(r_i\) — координаты начала и конца отрезка, соответственно. Поликарп понял, что ему нужны не все отрезки, поэтому он хочет удалить некоторые из них.

Поликарп считает, что набор из \(k\) отрезков хороший, если существует отрезок \([l_i, r_i]\) (\(1 \leq i \leq k\)) из набора, такой что он пересекает каждый отрезок из набора (пересечение должно быть точкой или отрезком). Например, набор из \(3\) отрезков \([[1, 4], [2, 3], [3, 6]]\) является хорошим, так как отрезок \([2, 3]\) пересекает каждый отрезок из набора. Набор из \(4\) отрезков \([[1, 2], [2, 3], [3, 5], [4, 5]]\) хорошим не является.

Поликарпу интересно, какое минимальное количество отрезков ему надо удалить, чтобы набор из оставшихся отрезков стал хорошим?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных даннных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество отрезков в наборе. Далее следуют \(n\) строк с описанием отрезков.

Каждый отрезок описывается двумя целыми числами \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^9\)) — координаты начала и конца отрезка, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество отрезков, которые необходимо удалить, чтобы набор оставшихся отрезков стал хорошим.

B. Найти массив

битмаски жадные алгоритмы Конструктив *1400

Вам дан массив \([a_1, a_2, \dots, a_n]\) такой, что \(1 \le a_i \le 10^9\). Пусть \(S\) – сумма всех элементов массива \(a\).

Назовем массив \(b\), состоящий из \(n\) целых чисел красивым, если:

  • \(1 \le b_i \le 10^9\) для всех \(i\) от \(1\) до \(n\);
  • для каждой пары соседних целых чисел из массива \((b_i, b_{i + 1})\), либо \(b_i\) делит \(b_{i + 1}\), либо \(b_{i + 1}\) делит \(b_i\) (или оба числа делятся друг на друга);
  • \(2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S\).

Ваша задача — найти красивый массив. Можно показать, что по крайней мере один красивый массив всегда существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите красивый массив \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) на отдельной строке. Можно показать, что существует по крайней мере один красивый массив. Если ответов несколько, выведите любой из них.

D. Пары

Бинарный поиск жадные алгоритмы Конструктив *1900

У вас есть \(2n\) целых чисел \(1, 2, \dots, 2n\). Вы распределяете все \(2n\) чисел на \(n\) пар. После этого вы выбираете \(x\) пар и из каждой из них берете минимум, а из каждой из оставшихся \(n - x\) пар — максимум.

Ваша цель — получить в результате выбора элементов множество \(\{b_1, b_2, \dots, b_n\}\).

Сколько существует различных \(x\)-в (\(0 \le x \le n\)) таких, что возможно получить множество \(b\), если для каждого \(x\) вы можете выбирать, как распределять числа и из каких \(x\) пар выбирать минимумы?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_1 < b_2 < \dots < b_n \le 2n\)) — множество, которое вы хотите получить.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите единственное число — количество различных \(x\)-в, таких, что возможно получить множество \(b\).

Примечание

В первом наборе входных данных, \(x = 1\) является единственным вариантом: у вас есть одна пара \((1, 2)\) и вы выбираете минимум в ней.

Во втором наборе, есть три возможных \(x\)-а. Если \(x = 1\), то вы можете сформировать следующие пары: \((1, 6)\), \((2, 4)\), \((3, 5)\), \((7, 9)\), \((8, 10)\). Вы можете взять минимум из \((1, 6)\) (равный \(1\)) и максимумы из остальных пар, чтобы получить множество \(b\).

Если \(x = 2\), вы можете сформировать пары \((1, 2)\), \((3, 4)\), \((5, 6)\), \((7, 9)\), \((8, 10)\) и взять минимумы из \((1, 2)\), \((5, 6)\) и максимумы из остальных пар.

Если \(x = 3\), вы можете сформировать пары \((1, 3)\), \((4, 6)\), \((5, 7)\), \((2, 9)\), \((8, 10)\) и взять минимумы из \((1, 3)\), \((4, 6)\), \((5, 7)\).

В третьем наборе, \(x = 0\) является единственным вариантом: вы можете сформировать пары \((1, 3)\), \((2, 4)\) и взять максимумы из обеих пар.

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, не содержащую палиндромных подстрок.

В третьем наборе входных данных исходная поэма уже не содержит палиндромных подстрок, поэтому Орфею не нужно больше ничего делать.

D. Тринадцатый подвиг Геракла

Деревья жадные алгоритмы сортировки Структуры данных *1500

Вы вероятно слышали про двенадцать подвигов Геракла, однако знаете ли вы про тринадцатый? Принято считать, что ему потребовалась дюжина лет, чтобы выполнить двенадцать подвигов, то есть в среднем год, чтобы выполнить каждый из них. Поскольку в наши дни время течет быстрее, у вас есть минуты, а не месяцы, чтобы решить эту задачу. Справитесь ли вы?

В этой задаче вам дано дерево с \(n\) вершинами, каждая из которых имеет вес. Дерево — это связный граф с \(n - 1\) ребром.

Определим \(k\)-раскраску дерева как назначение одного из \(k\) цветов каждому из его ребер. Обратите внимание, что вы не обязаны использовать все \(k\) цветов.

Подграф цвета \(x\) состоит из тех ребер исходного графа, которым был назначен цвет \(x\), и только тех вершин, которые смежны с хотя бы одним из таких ребер. Поэтому в таком подграфе нет вершин степени \(0\).

Весом компоненты связности назовем сумму весов её вершин. Весом подграфа назовем максимальный из весов компонент связности этого подграфа. Вес пустого подграфа будем считать равным \(0\).

Определим вес \(k\)-раскраски как сумму весов подграфов всех \(k\) цветов. Дано дерево, для каждого \(k\) от \(1\) до \(n - 1\) вычислите максимальный возможный вес \(k\)-раскраски.

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 10^5\)), обозначающее количество наборов входных данных. Затем даны \(t\) наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(2 \leq n \leq 10^5\)). Во второй строке дано \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(0 \leq w_i \leq 10^9\)), \(w_i\) равно весу \(i\)-й вершины. В следующих \(n - 1\) строках, дано по два целых числа \(u\), \(v\) (\(1 \leq u,v \leq n\)), обозначающих ребро между вершинами \(u\) и \(v\). Гарантируется, что эти ребра описывают дерево.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n - 1\) целое число, где \(i\)-е число должно равняться максимальному весу \(i\)-раскраски дерева.

Примечание

Оптимальные \(k\)-раскраски дерева из первого набора входных данных следующие:

В \(1\)-раскраске все ребра имеют одинаковый цвет. Подграф цвета \(1\) содержит все ребра и вершины исходного графа. Поэтому его вес равен \(3 + 5 + 4 + 6 = 18\).

В оптимальной \(2\)-раскраске ребрам \((2, 1)\) и \((3,1)\) назначен цвет \(1\). Ребру \((4, 3)\) — цвет \(2\). Подграф цвета \(1\) состоит из одной компоненты связности (вершины \(1, 2, 3\)) и его вес равен \(3 + 5 + 4 = 12\). Подграф цвета \(2\) состоит из двух вершин и одного ребра. Его вес равен \(4 + 6 = 10\).

В оптимальной \(3\)-раскраске всем ребрам назначены разные цвета. Поэтому подграф каждого цвета содержит одно ребро. Их веса следующие: \(3 + 4 = 7\), \(4 + 6 = 10\), \(3 + 5 = 8\).

F. Кошмар Евклида

битмаски графы жадные алгоритмы математика поиск в глубину и подобное снм сортировки *2100

Вы должно быть знаете, что Евклид был математиком. Ну, как оказалось, Морфей об этом тоже знал. Поэтому, когда он захотел разыграть Евклида, он послал ему соответствующий кошмар.

В своем плохом сне, у Евклида был набор \(S\) из \(n\) \(m\)-мерных векторов над полем \(\mathbb{Z}_2\), и он мог их складывать. Другими словами, у него были вектора с \(m\) координатами, каждая координата равнялась либо \(0\), либо \(1\). Сложение векторов определяется следующим образом: пусть \(u+v = w\), тогда \(w_i = (u_i + v_i) \bmod 2\).

Евклид может сложить любое подмножество векторов из \(S\) и сохранить получившийся \(m\)-мерный вектор над \(\mathbb{Z}_2\). В частности, он может сложить пустое подмножество векторов. В таком случае, все координаты получившегося вектора будут равны \(0\).

Пусть \(T\) будет множеством всех векторов, которые могут быть получены как сумма некоторого подмножества векторов из \(S\). Теперь Евклид интересуется, каков размер \(T\), и может ли он использовать только какое-то подмножество \(S'\) множества \(S\), чтобы получить все вектора из \(T\). Как всегда и бывает в таких ситуациях, он не проснется до тех пор, пока не выяснит это. Пока что дела для философа обстоят довольно мрачно. Однако, появилась надежда, когда он заметил, что все вектора из \(S\) содержат максимум \(2\) координаты, равные \(1\).

Помогите Евклиду вычислить \(|T|\), количество \(m\)-мерных векторов над \(\mathbb{Z}_2\), которые могут быть получены как сумма какого-то подмножества векторов из \(S\). Так как оно может быть довольно велико, выведите его по модулю \(10^9+7\). Также, вы должны найти \(S'\), минимальное такое подмножество \(S\), что все вектора из \(T\) могут быть получены как как сумма какого-то подмножества векторов из \(S'\). В случае, если существует несколько таких подмножеств с минимальным количеством элементов, выведите лексикографически минимальный по индексам взятых элементов.

Рассмотрим два множества \(A\) и \(B\), такие что \(|A| = |B|\). Пусть \(a_1, a_2, \dots a_{|A|}\) и \(b_1, b_2, \dots b_{|B|}\) будут возрастающие массивы индексов элементов, взятых в \(A\) и в \(B\), соответственно. \(A\) лексикографически меньше, чем \(B\), если существует такое \(i\), что \(a_j = b_j\) для всех \(j < i\) и \(a_i < b_i\).

Входные данные

В первой строке даны два целых числа \(n\), \(m\) (\(1 \leq n, m \leq 5 \cdot 10^5\)), обозначающие количество векторов в \(S\) и количество измерений.

В следующих \(n\) строках дано описание векторов из \(S\). В каждой из них дано целое число \(k\) (\(1 \leq k \leq 2\)), а затем \(k\) различных целых чисел \(x_1, \dots x_k\) (\(1 \leq x_i \leq m\)). Это обозначает \(m\)-мерный вектор, у которого координаты номер \(x_1, \dots x_k\) равны \(1\), а все остальные координаты равны \(0\).

Среди этих \(n\) векторов нет одинаковых.

Выходные данные

В первой строке выведите два целых числа: остаток от деления \(|T|\) на \(10^9+7\), и \(|S'|\). Во второй строке выведите \(|S'|\) целых чисел — индексы элементов, входящих в \(S'\), в возрастающем порядке. Элементы \(S\) нумеруются с \(1\) в порядке, в котором они даны во входных данных.

Примечание

В первом примере нам даны три вектора:

  • \(10\)
  • \(01\)
  • \(11\)

Оказывается, что мы может представить все вектора из \(2\)-мерного пространства используя эти вектора:

  • \(00\), сумма пустого подмножества векторов;
  • \(01 = 11 + 10\), сумма первого и третьего векторов;
  • \(10 = 10\), просто первый вектор;
  • \(11 = 10 + 01\), сумма первого и второго векторов.

Поэтому, \(T = \{00, 01, 10, 11\}\). Мы можем выбрать любые два из трех векторов \(S\), и все еще будем способны получить все вектора из \(T\). В таком случае, мы выберем два первых вектора. Так как мы не можем получить все вектора из \(T\), используя только один вектор из \(S\), \(|S'| = 2\) и \(S' = \{10, 01\}\) (индексы \(1\) и \(2\)), как множество \(\{1, 2 \}\) — лексикографически минимально. Мы можем получить все вектора из \(T\), используя только вектора из \(S'\), как показано ниже:

  • \(00\), сумма пустого подмножества;
  • \(01 = 01\), просто второй вектор;
  • \(10 = 10\), просто первый вектор;
  • \(11 = 10 + 01\), сумма первого и второго вектора.

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\)

Если бы какой-то агент больше всего хотел получить не тот предмет, который ему дали, он мог бы сам по себе сформировать недовольное подмножество. Поэтому, для любого другого профиля предпочтений это назначение было бы не оптимально.

A. Волшебник страны Orz

жадные алгоритмы Конструктив математика *900

Даны \(n\) панелей, расположенных в ряд, которые могут показывать любую цифру от \(0\) до \(9\). Изначально все панели показывают \(0\).

Каждую секунду цифры на всех панелях увеличиваются на \(1\). Другими словами, по прошествии каждой секунды панель, которая показывала \(9\), станет показывать \(0\); панель, которая показывала \(0\), станет показывать \(1\); панель, которая показывала \(1\), станет показывать \(2\) и так далее.

Если панель остановить, то цифра, отображаемая на этой панели, не будет меняться в последующие секунды.

Необходимо остановить ровно одну панель в любую секунду. После этого панели, примыкающие к ней, будут остановлены через одну секунду; панели, примыкающие к этим, будут остановлены через \(2\) секунды и так далее. Иными словами, если остановить панель \(x\), то панель \(y\) (для любых возможных \(y\)) будет остановлена ровно через \(|x−y|\) секунд.

Например, если есть \(4\) панели, и мы останавливаем \(3\)-ю панель, когда на ней отображается цифра \(9\), происходит следующее:

  • панель \(1\) останавливается через \(2\) секунды, когда на ней отображается цифра \(1\);
  • панель \(2\) останавливается через \(1\) секунду, когда на ней отображается цифра \(0\);
  • панель \(4\) останавливается через \(1\) секунду, когда на ней отображается цифра \(0\).

Получается число из \(4\) цифр: \(1090\). Обратите внимание: этот пример не является оптимальным ответом для \(n = 4\).

Как только все панели остановлены, все отображенные на них цифры выписываются слева направо, составляя число из \(n\) разрядов (в нем могут встречаться ведущие нули). Какое самое большое число при этом может быть получено? Изначально все панели показывают \(0\).

Входные данные

Первая строка входных данных состоит из единственного целого числа \(t\) (\(1 \le t \le 100\)) — количества наборов входных данных. Каждый такой набор состоит из одной строки, содержащей единственное целое число \(n\) (\(1 \le n \le 2\cdot10^5\)).

Гарантируется, что сумма \(n\) во всех наборах входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшее возможное число, которое можно получить, остановив одну из панелей оптимальным образом.

Примечание

Для первого набора входных данных оптимальным будет остановить первую панель, когда на ней отображается цифра \(9\).

Для второго набора входных данных оптимальным будет остановить вторую панель, когда на ней отображается цифра \(8\).

C. Три сумки

жадные алгоритмы Конструктив *1900

Даны три сумки. Каждая содержит непустое мультимножество чисел. Над сумками можно производить ряд операций. В ходе каждой операции разрешается выбрать любые две непустые сумки и по одному числу из каждой из этих сумок. Допустим, из первой сумки было выбрано число \(a\), а из второй — число \(b\). После этого число \(b\) убирается из второй сумки, а число \(a\) в первой сумке заменяется на \(a-b\). Обратите внимание, что если эти числа встречаются несколько раз, то убирается/заменяется лишь одно вхождение.

Все операции должны производиться таким образом, чтобы в итоге осталось лишь одно число в одной из сумок (две другие должны быть пустыми). Можно показать, что всегда существует такая комбинация операций, которая приведет к необходимой конечной конфигурации. Среди всех этих конфигураций требуется найти ту, при которой в конце останется наибольшее число.

Входные данные

Первая строка входных данных содержит три целых числа \(n_1\), \(n_2\) и \(n_3\) (\(1 \le n_1, n_2, n_3 \le 3\cdot10^5\), \(1 \le n_1+n_2+n_3 \le 3\cdot10^5\)), разделенных пробелами — количество чисел в трех сумках.

Каждая \(i\)-я из трех последующих строк содержит \(n_i\) целых чисел \(a_{{i,1}}\), \(a_{{i,2}}\), ..., \(a_{{i,{{n_i}}}}\) (\(1 \le a_{{i,j}} \le 10^9\)), разделенных пробелами — числа в мультимножестве \(i\)-й сумки.

Выходные данные

Выведите единственное целое число — максимальное из тех, что могут быть получены в конечной конфигурации.

Примечание

Для первого примера из условия произведем следующие операции:

\([1, 2], [6, 3, 4, 5], [5]\)

\([-5, 2], [3, 4, 5], [5]\) (Применяем операцию к \((1, 6)\))

\([-10, 2], [3, 4], [5]\) (Применяем операцию к \((-5, 5)\))

\([2], [3, 4], [15]\) (Применяем операцию к \((5, -10)\))

\([-1], [4], [15]\) (Применяем операцию к \((2, 3)\))

\([-5], [], [15]\) (Применяем операцию к \((-1, 4)\))

\([], [], [20]\) (Применяем операцию к \((15, -5)\))

Легко удостовериться в том, что большее число получить нельзя. Таким образом, ответом будет \(20\).

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.

E. Four Segments

жадные алгоритмы *800

Monocarp wants to draw four line segments on a sheet of paper. He wants the \(i\)-th segment to have its length equal to \(a_i\) (\(1 \le i \le 4\)). These segments can intersect with each other, and each segment should be either horizontal or vertical.

Monocarp wants to draw the segments in such a way that they enclose a rectangular space, and the area of that rectangular space should be maximum possible.

For example, if Monocarp wants to draw four segments with lengths \(1\), \(2\), \(3\) and \(4\), he can do it the following way:

Here, Monocarp has drawn segments \(AB\) (with length \(1\)), \(CD\) (with length \(2\)), \(BC\) (with length \(3\)) and \(EF\) (with length \(4\)). He got a rectangle \(ABCF\) with area equal to \(3\) that is enclosed by the segments.

Calculate the maximum area of a rectangle Monocarp can enclose with four segments.

Input

The first line contains one integer \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — the number of test cases.

Each test case consists of a single line containing four integers \(a_1\), \(a_2\), \(a_3\), \(a_4\) (\(1 \le a_i \le 10^4\)) — the lengths of the segments Monocarp wants to draw.

Output

For each test case, print one integer — the maximum area of a rectangle Monocarp can enclose with four segments (it can be shown that the answer is always an integer).

Note

The first test case of the example is described in the statement.

For the second test case, Monocarp can draw the segments \(AB\), \(BC\), \(CD\) and \(DA\) as follows:

Here, Monocarp has drawn segments \(AB\) (with length \(5\)), \(BC\) (with length \(5\)), \(CD\) (with length \(5\)) and \(DA\) (with length \(5\)). He got a rectangle \(ABCD\) with area equal to \(25\) that is enclosed by the segments.

H. K and Medians

жадные алгоритмы Конструктив математика *2200

Let's denote the median of a sequence \(s\) with odd length as the value in the middle of \(s\) if we sort \(s\) in non-decreasing order. For example, let \(s = [1, 2, 5, 7, 2, 3, 12]\). After sorting, we get sequence \([1, 2, 2, \underline{3}, 5, 7, 12]\), and the median is equal to \(3\).

You have a sequence of \(n\) integers \([1, 2, \dots, n]\) and an odd integer \(k\).

In one step, you choose any \(k\) elements from the sequence and erase all chosen elements except their median. These elements do not have to go continuously (gaps are allowed between them).

For example, if you have a sequence \([1, 2, 3, 4, 5, 6, 7]\) (i.e. \(n=7\)) and \(k = 3\), then the following options for the first step are possible:

  • choose \([1, \underline{2}, 3]\); \(2\) is their median, so it is not erased, and the resulting sequence is \([2, 4, 5, 6, 7]\);
  • choose \([2, \underline{4}, 6]\); \(4\) is their median, so it is not erased, and the resulting sequence is \([1, 3, 4, 5, 7]\);
  • choose \([1, \underline{6}, 7]\); \(6\) is their median, so it is not erased, and the resulting sequence is \([2, 3, 4, 5, 6]\);
  • and several others.

You can do zero or more steps. Can you get a sequence \(b_1\), \(b_2\), ..., \(b_m\) after several steps?

You'll be given \(t\) test cases. Solve each test case independently.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases.

The first line of each test case contains three integers \(n\), \(k\), and \(m\) (\(3 \le n \le 2 \cdot 10^5\); \(3 \le k \le n\); \(k\) is odd; \(1 \le m < n\)) — the length of the sequence you have, the number of elements you choose in each step and the length of the sequence you'd like to get.

The second line of each test case contains \(m\) integers \(b_1, b_2, \dots, b_m\) (\(1 \le b_1 < b_2 < \dots < b_m \le n\)) — the sequence you'd like to get, given in the ascending order.

It's guaranteed that the total sum of \(n\) over all test cases doesn't exceed \(2 \cdot 10^5\).

Output

For each test case, print YES if you can obtain the sequence \(b\) or NO otherwise. You may print each letter in any case (for example, YES, Yes, yes, yEs will all be recognized as positive answer).

Note

In the first test case, you have sequence \([1, 2, 3]\). Since \(k = 3\) you have only one way to choose \(k\) elements — it's to choose all elements \([1, \underline{2}, 3]\) with median \(2\). That's why after erasing all chosen elements except its median you'll get sequence \([2]\). In other words, there is no way to get sequence \(b = [1]\) as the result.

In the second test case, you have sequence \([1, 2, 3, 4, 5, 6, 7]\) and one of the optimal strategies is following:

  1. choose \(k = 3\) elements \([2, \underline{3}, 4]\) and erase them except its median; you'll get sequence \([1, 3, 5, 6, 7]\);
  2. choose \(3\) elements \([3, \underline{5}, 6]\) and erase them except its median; you'll get desired sequence \([1, 5, 7]\);

In the fourth test case, you have sequence \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]\). You can choose \(k=7\) elements \([2, 4, 6, \underline{7}, 8, 10, 13]\) and erase them except its median to get sequence \(b\).

J. Road Reform

графы жадные алгоритмы снм *1800

There are \(n\) cities and \(m\) bidirectional roads in Berland. The \(i\)-th road connects the cities \(x_i\) and \(y_i\), and has the speed limit \(s_i\). The road network allows everyone to get from any city to any other city.

The Berland Transport Ministry is planning a road reform.

First of all, maintaining all \(m\) roads is too costly, so \(m - (n - 1)\) roads will be demolished in such a way that the remaining \((n - 1)\) roads still allow to get to any city from any other city. Formally, the remaining roads should represent an undirected tree.

Secondly, the speed limits on the remaining roads might be changed. The changes will be done sequentially, each change is either increasing the speed limit on some road by \(1\), or decreasing it by \(1\). Since changing the speed limit requires a lot of work, the Ministry wants to minimize the number of changes.

The goal of the Ministry is to have a road network of \((n - 1)\) roads with the maximum speed limit over all roads equal to exactly \(k\). They assigned you the task of calculating the minimum number of speed limit changes they have to perform so the road network meets their requirements.

For example, suppose the initial map of Berland looks like that, and \(k = 7\):

Then one of the optimal courses of action is to demolish the roads \(1\)\(4\) and \(3\)\(4\), and then decrease the speed limit on the road \(2\)\(3\) by \(1\), so the resulting road network looks like that:

Input

The first line contains one integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases.

The first line of each test case contains three integers \(n\), \(m\) and \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(n - 1 \le m \le \min(2 \cdot 10^5, \frac{n(n-1)}{2})\); \(1 \le k \le 10^9\)) — the number of cities, the number of roads and the required maximum speed limit, respectively.

Then \(m\) lines follow. The \(i\)-th line contains three integers \(x_i\), \(y_i\) and \(s_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\); \(1 \le s_i \le 10^9\)) — the cities connected by the \(i\)-th road and the speed limit on it, respectively. All roads are bidirectional.

The road network in each test case is connected (that is, it is possible to reach any city from any other city by traveling along the road), and each pair of cities is connected by at most one road.

The sum of \(n\) over all test cases does not exceed \(2 \cdot 10^5\). Similarly, the sum of \(m\) over all test cases does not exceed \(2 \cdot 10^5\).

Output

For each test case, print one integer — the minimum number of changes the Ministry has to perform so that the maximum speed limit among the remaining \((n - 1)\) roads is exactly \(k\).

Note

The explanation for the example test:

The first test case is described in the problem statement.

In the second test case, the road network initially looks like that:

The Ministry can demolish the roads \(1\)\(2\), \(3\)\(2\) and \(3\)\(4\), and then increase the speed limit on the road \(1\)\(4\) three times.

In the third test case, the road network already meets all the requirements.

In the fourth test case, it is enough to demolish the road \(1\)\(2\) so the resulting road network meets the requirements.

L. Prime Divisors Selection

Бинарный поиск жадные алгоритмы математика теория чисел *2700

Suppose you have a sequence of \(k\) integers \(A = [a_1, a_2, \dots , a_k]\) where each \(a_i \geq 2\). A sequence of prime integers \(P = [p_1, p_2, \dots, p_k]\) is called suitable for the sequence \(A\) if \(a_1\) is divisible by \(p_1\), \(a_2\) is divisible by \(p_2\) and so on.

A sequence of prime integers \(P\) is called friendly if there are no unique integers in this sequence.

A sequence \(A\) is called ideal, if each sequence \(P\) that is suitable for \(A\) is friendly as well (i. e. there is no sequence \(P\) that is suitable for \(A\), but not friendly). For example, the sequence \([2, 4, 16]\) is ideal, while the sequence \([2, 4, 6]\) is not ideal (there exists a sequence \(P = [2, 2, 3]\) which is suitable for \(A\), but not friendly).

You are given \(n\) different integers \(x_1\), \(x_2\), ..., \(x_n\). You have to choose exactly \(k\) of them in such a way that they form an ideal sequence, or report that it is impossible. Note that no integer can be chosen more than once.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \leq k \leq n \leq 1000\)).

The second line contains \(n\) pairwise distinct integers \(x_1\), \(x_2\), ..., \(x_n\) (\(2 \leq x_i \leq 10^{18}\)).

Output

If it is impossible to choose exactly \(k\) integers from \(x_1\), \(x_2\), ..., \(x_n\) in such a way that the chosen integers form an ideal sequence, print \(0\).

Otherwise, print \(k\) pairwise distinct integers — the elements of the chosen ideal sequence. If there are multiple answers, print any of them.

N. Waste Sorting

жадные алгоритмы реализация *900

The progress is not standing still in Berland. Recently all garbage containers in Bertown, the capital of Berland, were replaced by differentiated recycling bins, each accepting some category of waste. While this will definitely improve the ecological situation, for some citizens it's difficult to get used to the habit of sorting waste.

Monocarp is one of those citizens who tries to get used to waste sorting. Today he has to take out the trash from his house. There are three containers near the Monocarp's house, the first one accepts paper waste, the second one accepts plastic waste, and the third one — all other types of waste. It is possible to fit \(c_1\) items into the first container, \(c_2\) items into the second container and \(c_3\) items into the third container.

Monocarp has a lot of items to throw into containers. Some are made of paper, so Monocarp has to put them into the first container (he has \(a_1\) such items), some are made of plastic, so he has to put them into the second container (he has \(a_2\) such items), and some are neither paper nor plastic — so Monocarp has to put them into the third container (he has \(a_3\) such items).

Unfortunately, there are also two categories of items that Monocarp is unsure of: he has \(a_4\) items which are partially made of paper, so he will put each of these items either into the first container or into the third container. Similarly, he has \(a_5\) items partially made of plastic, so he has to put each of them either into the second container or into the third container. Obviously, this choice is made separately for each item — for example, Monocarp can throw several partially-plastic items into the second container, and all other partially-plastic items — into the third one.

Now Monocarp wonders: is it possible to put each item into some container so that the first container will hold no more than \(c_1\) items, the second one — no more than \(c_2\) items, and the third one — no more than \(c_3\) items?

Input

The first line contains one integer \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — the number of test cases.

Each test case consists of two lines. The first line of each test case contains three integers \(c_1\), \(c_2\), \(c_3\) (\(0 \le c_1, c_2, c_3 \le 10^8\)) — the capacities of the containers.

The second line of each test case contains five integers \(a_1\), \(a_2\), \(a_3\), \(a_4\), \(a_5\) (\(0 \le a_i \le 10^8\)), where \(a_i\) is the number of items of the \(i\)-th category Monocarp has to throw out (\(i = 1\) is paper waste, \(i = 2\) is plastic waste, \(i = 3\) is general waste, \(i = 4\) is partially-paper waste, \(i = 5\) is partially-plastic waste).

Output

For each test case, print either YES if it is possible to fit all items into containers, or NO otherwise. You may print each letter in any case (for example, YES, Yes, yes, yEs will all be recognized as positive answer).

Note

Explanations for the example test cases:

  1. Monocarp can put \(1\) item of paper waste into the first container, \(2\) items of plastic waste into the second container, and \(3\) items of general waste into the third container;
  2. Monocarp can put \(1\) item of paper waste and \(1\) item of partially-paper waste into the first container, \(2\) items of plastic waste into the second container, and \(3\) items of general waste into the third container;
  3. there is no answer since either the second container should contain \(3\) items, or the third container should contain \(4\) items;
  4. Monocarp can put \(1\) item of paper waste into the first container, \(2\) items of plastic waste into the second container, and \(3\) items of general waste, \(1\) item of partially-paper waste and \(1\) item of partially-plastic waste into the third container;
  5. there is no waste at all, so all containers can be left empty;
  6. there's no answer since it's impossible to put a paper item into the third container;
  7. Monocarp can put \(10\) items of partially-paper waste into the first container, \(37\) items of partially-plastic waste into the second container, and \(30\) items of partially-paper waste and \(10\) items of partially-plastic waste into the third container.

A. Правильная скобочная последовательность

жадные алгоритмы Конструктив *1000

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов + и 1 можно получить из нее корректное математическое выражение. Например, последовательности (())(), () и (()(())) — правильные, в то время как )(, (() и (()))( — нет. Назовем правильную скобочную последовательность — «ПСП».

Вам задана последовательность \(s\) из \(n\) символов (, ) и/или ?. В этой последовательности есть ровно один символ ( и ровно один символ ).

Вам необходимо заменить каждый символ ? либо на ), либо на ( (разные символы ? могут быть заменены разными скобками). Вы не можете изменять порядок символов, удалять их, вставить другие символы, и каждый ? должен быть заменен.

Определите, возможно ли получить ПСП после этих замен.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей \(s\) (\(2 \le |s| \le 100\)) — последовательность символов (, ) и/или ?. В этой последовательности есть ровно один символ ( и ровно один символ ).

Выходные данные

Для каждого набора входных выведите YES, если можно получить правильную скобочную последовательность, или NO в противном случае}.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере последовательность уже является ПСП.

В третьем примере вы можете получить ПСП следующим образом: ()() или (()).

В четвертом примере вы можете получить ПСП следующим образом: ()().

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\).

F. Розетки

Бинарный поиск жадные алгоритмы Структуры данных *2600

// Мы решили не давать легенду про розетки, но вы все еще можете придумать ее сами :^)

Определим цепь:

  • цепь длины \(1\) — это одна вершина;
  • цепь длины \(x\) — это цепь длины \(x-1\) с одной вершиной, присоединенной к ее концу одним ребром.

Даны \(n\) цепей длин \(l_1, l_2, \dots, l_n\). Вы хотите построить дерево, используя некоторые из них.

  • Каждая вершина дерево либо белая, либо черная.
  • Изначально дерево содержит только одну вершину, которая является корневой и белой.
  • Изначально все цепи содержат только белые вершины.
  • Вы можете взять одну из цепей и соединить любую ее вершину с любой белой вершиной дерева ребром. Цепь становится частью дерева. Оба конца ребра становятся черными.
  • Каждая цепь может быть использована не более одного раза.
  • Некоторые цепи можно оставить неиспользованными.

Расстояние между двумя вершинами в дереве равно количеству ребер на кратчайшем пути между ними.

Если в полученном дереве есть хотя бы \(k\) белых вершин, то его значение равно расстоянию от корня до \(k\)-й ближайшей белой вершины.

Какое минимальное значение может иметь полученное дерево? Если не существует способа построить дерева с хотя бы \(k\) белыми вершинами, то выведите -1.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(2 \le k \le 10^9\)) — количество цепей и минимальное количество белых вершин, которые должно иметь дерево.

Во второй строке записаны \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(3 \le l_i \le 2 \cdot 10^5\)) — длины цепей.

Выходные данные

Выведите одно целое число. Если не существует способа построить дерева с хотя бы \(k\) белыми вершинами, то выведите -1. В противном случае выведите минимальное значение, которое может иметь дерево.

Примечание

Разрешается использовать не все цепи, поэтому оптимальное использовать только цепь длины \(4\) во втором примере.

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\) рублей пятому другу.

D. Странное расселение

графы жадные алгоритмы Конструктив Паросочетания поиск в глубину и подобное *2200

В ЛКШ на территории Летово школьники будь жить в домиках. Некоторые пары домиков соединены крытыми переходами, по которым можно перемещаться в обоих направлениях. В некоторых из этих домиках будут жить преподаватели, но из соображений безопасности они не могут быть размещены произвольным образом. А именно, должны выполняться следующие условия:

  • Каждый переход между домами, ни в одном из которых не живут преподаватели, будет закрыт. Все остальные переходы будут открыты.
  • От любого дома до другого должен существовать способ добраться по открытым переходам.
  • Преподаватели не могут жить в домах, соединённых переходом.

Помогите организаторам выбрать домики, в которых будут жить преподаватели, так, чтобы выполнялись все требования безопасности, или определите, что это невозможно.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^5\)), обозначающее количество наборов входных данных.

Описание каждого набора входных данных начинается с двух чисел \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\), \(0 \le m \le 3 \cdot 10^5\)) — количества домиков и переходов.

Далее следуют \(m\) строк, в каждой из которых даны числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), описывающие переход между домами \(u\) и \(v\). Гарантируется, что между любыми двумя домами существует не более одного перехода, и никакой переход не соединяет домик сам с собой.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), и сумма \(m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES», если организаторы могут поселить преподавателей так, чтобы выполнялись требования безопасности, и «NO» в противном случае. Если ответ «YES», то во второй строке выведите количество домов, в которые нужно поселить преподавателей, а в третьей строке — номера выбранных домов.

Примечание

Следующая картинка соответствует второму примеру из условия:

A. Странный массив

жадные алгоритмы математика теория чисел *900

Дан массив \(a\) длины \(n\) и число \(x\). Вы можете проделать следующую операцию произвольное (возможно нулевое) число раз: выбрать любые два соседних элемента и заменить их на их сумму. При этом длина массива уменьшается на один. Например, если исходный массив был равен \([3, 6, 9]\), то за одну операцию его можно превратить в массив \([9, 9]\) или в массив \([3, 15]\).

Красотой массива \(b=[b_1, \ldots, b_k]\) назовём \(\sum_{i=1}^k \left\lceil \frac{b_i}{x} \right\rceil\). Иначе говоря, каждый элемент массива делят на \(x\), округляя результат вверх, и полученные числа суммируются. Например, для \(x = 3\) красота массива \([4, 11, 6]\) равна \(\left\lceil \frac{4}{3} \right\rceil + \left\lceil \frac{11}{3} \right\rceil + \left\lceil \frac{6}{3} \right\rceil = 2 + 4 + 2 = 8\). Определите, какое наименьшее и наибольшее значение красоты можно получить, преобразовав данный массив с помощью операций выше.

Входные данные

В первой строке ввода находится целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого из наборов входных данных находятся целые числа \(n\) и \(x\) (\(1 \leq n \leq 10^5\), \(1 \leq x \leq 10^9\)).

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Сумма \(n\) по всем наборам входных данных в одном тесте не превосходит \(10^5\).

Выходные данные

Для каждого из наборов входных данных выведите два числа — минимальное и максимальное значение красоты, которые можно получить.

Примечание

В первом наборе входных данных красота массива не меняется при выполнении операций замены.

Во втором наборе входных данных для достижения максимальной красоты можно оставить массив без изменений, а для достижения минимальной — объединить элементы \(4\) и \(11\), получив массив \([6, 15]\), красота которого равна \(7\).

B. Странный список

жадные алгоритмы математика Перебор реализация *1100

На Новый Год Дима получил целых два подарка: массив \(a\) длины \(n\) и число \(x\). Оба подарка ему очень понравились, и он сразу же начал экспериментировать с ними. Для этого он отдал их своему новому роботу.

Робот обрабатывает элементы массива по очереди. Пусть текущий рассматриваемый элемент равен \(q\). Если \(q\) кратно \(x\), то робот дописывает в конец массива \(x\) копий числа \(\frac{q}{x}\), а после этого переходит к следующему элементу массива. Обратите внимание, что добавленные элементы могут быть рассмотрены роботом в будущем. Если же \(q\) не делится на \(x\), то робот немедленно прекращает работу.

Определите, чему будет равна сумма элементов массива после того, как робот закончит работу.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 10^5\), \(2 \leq x \leq 10^9\)) — количество элементов массива и число, на которое робот делит элементы массива.

Следующая строка содержит целые числа \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq 10^9\)) — изначальные элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму элементов после окончания процесса.

Примечание

В первом наборе входных данных массив изначально состоит лишь из одного числа: \([12]\), а \(x = 2\). После рассмотрения первого элемента массив превратится в \([12, 6, 6]\). После обработки второго элемента массив будет содержать элементы \([12, 6, 6, 3, 3]\). После обработки третьего элемента массив будет состоять из чисел \([12, 6, 6, 3, 3, 3, 3]\), а после этого робот рассмотрим следующий элемент, который не делится на \(x=2\), и завершит работу. Сумма чисел в итоговом массиве равна \(36\).

Во втором наборе входных данных массив изначально состоит из чисел \([4, 6, 8, 2]\), а \(x=2\). Итоговый массив выглядит как \( [4, 6, 8, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1]\).

A. Открытки для друзей

жадные алгоритмы математика *800

На Новый год Поликарп решил отправить открытки всем своим \(n\) друзьям. Он хочет сделать открытки своими руками и для этих целей у него есть лист бумаги размерами \(w \times h\), который можно разрезать на части.

Поликарп может разрезать любой имеющийся у него лист бумаги \(w \times h\) только в двух случаях:

  • Если \(w\) четно, тогда можно разрезать лист пополам и получить два листа размерами \(\frac{w}{2} \times h\);
  • Если \(h\) четно, тогда можно разрезать лист пополам и получить два листа размерами \(w \times \frac{h}{2}\);

Если \(w\) и \(h\) четны одновременно, тогда Поликарп может разрезать лист по любому из правил выше.

После разрезания листа бумаги количество листов бумаги у Поликарпа увеличивается на \(1\).

Помогите Поликарпу понять, пользуясь только описанными выше правилами, может ли он нарезать свой лист размерами \(w \times h\) хотя бы на \(n\) частей?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки в которой находится три целых числа \(w\), \(h\), \(n\) (\(1 \le w, h \le 10^4, 1 \le n \le 10^9\)) — ширина и высота листа, имеющегося у Поликарпа и количество друзей, которым нужно отправить открытку.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если можно нарезать лист размерами \(w \times h\) хотя бы на \(n\) частей;
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных, можно сначала разрезать лист \(2 \times 2\) на два листа \(2 \times 1\), а после этого каждый из них разрезать еще на два листа. В итоге мы получим четыре листа \(1 \times 1\). Из них мы можем выбрать три любых и отправить друзьям.

Во втором наборе входных данных лист размера \(3 \times 3\) нельзя разрезать ни разу, так что невозможно получить два листа.

В третьем наборе входных данных можно разрезать лист \(5 \times 10\) на два листа размером \(5 \times 5\).

В четвертом наборе входных данных резать лист не нужно, так как нам нужен всего один лист.

В пятом наборе входных данных можно разрезать лист \(1 \times 4\) сначала на два листа \(1 \times 2\), а потом каждый из них еще на два листа. В итоге мы получим четыре листа \(1 \times 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\).

В четвертом наборе входных данных невозможно поделить три одинаковых конфеты между двумя людьми.

В пятом наборе входных данных любое разделение также будет нечестным.

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», если при оптимальной игре будет объявлена ничья.

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 будут распознаны как положительный ответ).

Примечание

Первые два набора входных данных разобраны в условии.

В третьем наборе входных данных полоска выглядит следующим образом

Несложно убедиться, что свободные клетки на ней нельзя замостить

A. Замена элементов

жадные алгоритмы математика реализация сортировки *800

У вас есть массив \(a_1, a_2, \dots, a_n\). Все \(a_i\) являются целыми положительными числами.

За один шаг вы можете выбрать три различных индекса \(i\), \(j\) и \(k\) (\(i \neq j\); \(i \neq k\); \(j \neq k\)) и присвоить \(a_i\) сумму \(a_j\) и \(a_k\), т. е. сделать \(a_i = a_j + a_k\).

Можете ли вы сделать все \(a_i\) меньше или равными \(d\), используя вышеописанную операцию произвольное количество раз (возможно, ноль)?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(d\) (\(3 \le n \le 100\); \(1 \le d \le 100\)) — длину массива \(a\) и значение \(d\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)) — массив \(a\).

Выходные данные

Для каждого набора входных выведите YES, если можно сделать все элементы \(a_i\) меньше или равными \(d\), используя описанную выше операцию, или NO в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере можно доказать, что мы не можем сделать все \(a_i \le 3\).

Во втором примере все \(a_i\) уже меньше или равны \(d = 4\).

В третьем примере мы можем, например, выбрать \(i = 5\), \(j = 1\), \(k = 2\) и сделать \(a_5 = a_1 + a_2 = 2 + 1 = 3\). Массив \(a\) станет \([2, 1, 5, 3, 3]\).

После этого мы можем сделать \(a_3 = a_5 + a_2 = 3 + 1 = 4\). Массив станет \([2, 1, 4, 3, 3]\) и все элементы меньше или равны \(d = 4\).

A. Загадка из будущего

жадные алгоритмы *800

В \(2022\) году Миша нашёл два числа \(a\) и \(b\) длины \(n\), записанных в двоичной системе счисления (то есть для их записи были использованы только цифры \(0\) и \(1\)), оба из которых могут содержать ведущие нули. Чтобы их не забыть, он решил создать число \(d\) следующим образом:

  • сначала он получит число \(c\) в результате поразрядного сложения чисел \(a\) и \(b\) без переносов, из-за чего \(c\) может содержать одну или более цифр \(2\). Например, в результате поразрядного сложения чисел \(0110\) и \(1101\) получится число \(1211\), a в результате поразрядного сложения чисел \(011000\) и \(011000\) получится \(022000\).
  • после этого (чтобы запоминать меньше цифр) Миша заменит последовательные вхождения одной и той же цифры в \(c\) на одну цифру, тем самым получив число \(d\). В вышеописанном примере число \(1211\) Миша заменит на \(121\), а число \(022000\) — на \(020\) (таким образом, в числе \(d\) не может быть двух одинаковых цифр подряд).
К сожалению, Миша потерял число \(a\) до того, как вычислил \(d\). Чтобы обрадовать его, Вы решили найти любое число \(a\) длины \(n\) такое, что \(d\) будет максимально возможным как число.

Максимально возможным как число означает, что \(102 > 21\), \(012 < 101\), \(021 = 21\) и тому подобное.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длина чисел \(a\) и \(b\).

В следующей строке дано число \(b\) длины \(n\). Число \(b\) состоит только из цифр \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем \(t\) наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно двоичное число \(a\) длины \(n\). Обратите внимание, что числа \(a\) и \(b\) могут содержать ведущие нули, но их длина должна быть равна \(n\).

Примечание

В первом наборе входных данных, \(b = 0\) и при выборе \(a = 1\) получится \(d = 1\).

Во втором наборе, \(b = 011\).

  • Если выбрать \(a = 000\), \(c\) будет равно \(011\), и \(d = 01\).
  • Если выбрать \(a = 111\), \(c\) будет равно \(122\), и \(d = 12\).
  • Если выбрать \(a = 010\), получится \(d = 021\).
  • Если выбрать \(a = 110\), получится \(d = 121\).
Можно показать, что ответ \(a = 110\) является верным, и \(d = 121\) является максимальным.

В третьем наборе, \(b = 110\). При выборе \(a = 100\) получится \(d = 210\). Это максимальное возможное \(d\) в данном случае.

В четвертом наборе, \(b = 111000\). При выборе \(a = 101101\) получится \(d = 212101\). Это максимальное возможное \(d\) в данном случае.

В пятом наборе, \(b = 001011\). При выборе \(a = 101110\) получится \(d = 102121\). Это максимальное возможное \(d\) в данном случае.

B. Различные делители

Бинарный поиск жадные алгоритмы Конструктив математика теория чисел *1000

Число \(x\) называется делителем числа \(y\), если \(y\) делится на \(x\) без остатка. Например, \(1\) является делителем \(7\), а \(3\) не является делителем \(8\).

Мы дали Вам число \(d\) и попросили найти наименьшее положительное целое \(a\), обладающее следующими свойствами:

  • у числа \(a\) есть хотя бы \(4\) делителя;
  • разность между любыми двумя различными делителями \(a\) не меньше \(d\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 3000\)) — количество наборов входных данных.

Описание каждого набора состоит из одной строки, в которой задано целое число \(d\) (\(1 \leq d \leq 10000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(a\) — наименьшее число, удовлетворяющее условиям выше.

Примечание

В первом наборе входных данных, число \(6\) имеет делители \([1, 2, 3, 6]\). Их всего \(4\) и разница между любыми двумя их них не менее \(1\). Любое меньшее число имеет меньше \(4\) делителей.

Во втором наборе, число \(15\) имеет делители \([1, 3, 5, 15]\). Их всего \(4\) и разница между любыми двумя из них не менее \(2\).

Ответ \(12\) неверный, потому его делители: \([1, 2, 3, 4, 6, 12]\). И разность между, например, делителями \(2\) и \(3\) меньше \(d=2\).

C. Уничтожение массива

жадные алгоритмы Конструктив Перебор реализация сортировки Структуры данных *1700

Вы нашли бесполезный массив целых чисел \(a\) длины \(2n\). Так как он оказался Вам не нужен, Вы решили выкинуть все элементы \(a\).

Это было бы просто, но оказалось, что выкидывать числа надо, соблюдая следующие правила:

  1. Сначала Вы выбираете натуральное число \(x\).
  2. Затем Вы \(n\) раз повторите следующую операцию:
    • выбрать два числа с суммой \(x\)
    • выкинуть их из \(a\) и заменить \(x\) на максимальное из этих двух чисел.

Например, если изначально \(a = [3, 5, 1, 2]\), то Вы можете выбрать \(x = 6\) и выкинуть второе и третье число в \(a\), сумма которых равна \(5 + 1 = 6\). После этого \(x\) станет равно \(5\), а в массиве останутся числа \(3\) и \(2\), которые Вы можете выкинуть на следующей операции.

Обратите внимание, что Вы выбираете \(x\) только в начале и не можете изменить его между операциями.

Напишите программу, чтобы определить, как выбросить все элементы \(a\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 1000\)).

Во второй строке каждого набора задано \(2n\) натуральных чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \leq a_i \leq 10^6\)) — изначальный массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES если возможно выкинуть все элементы массива. Иначе выведите NO.

Если Вы вывели YES в следующей строке выведите значение \(x\), которое Вы выбираете в начале. В следующих \(n\) строках выведите по два числа — числа, которые Вы выбираете на очередной операции.

Примечание

Первый набор входных данных был описан в условии.

Во втором и третьем наборах входных данных можно показать, что нельзя выкинуть все элементы массива \(a\).

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]\)

E. Что это?

жадные алгоритмы Конструктив *2500

Луноход наконец-то достиг поверхности планеты X. Приземлившись, он встретился с препятствием, на котором записана перестановка \(p\) длины \(n\). Учёным удалось выяснить, что для того, чтобы преодолеть препятствие, необходимо добиться того, чтобы \(p\) стала тождественной (должно выполняться \(p_i = i\) для всех \(i\)).

К сожалению, учёные не могут управлять роботом на расстоянии. Из-за этого единственный способ сделать \(p\) тождественной — применить к \(p\) следующую операцию несколько раз:

  • Выбрать две позиции \(i\) и \(j\) (\(i \neq j\)), такие, что \(p_j = i\) и поменять местами значения \(p_i\) и \(p_j\). Операция занимает \((j - i)^2\) секунд из-за выполнения её роботом.

Позиции \(i\) и \(j\) выбирает робот (учёные не могут влиять на его выбор). Он будет применять эту операцию до тех пор, пока \(p\) не станет тождественной. Можно показать, что не более чем через \(n\) операций (вне зависимости от выбора \(i\) и \(j\)) перестановка станет тождественной.

Учёные попросили Вас найти максимальное время, за которое робот сделает \(p\) тождественной (т.е. худший возможный вариант развития событий), чтобы они могли отдохнуть или же отправить более продвинутый луноход на планету X. Также учёные попросили Вас предоставить пример перестановки \(p\) и последовательности операций робота, которые максимизируют ответ.

Для лучшего понимания условия обратитесь к примечаниям к примеру.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк задано одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — длина перестановки \(p\).

Обратите внимание, что перестановка \(p\) Вам не дана, и Вам нужно найти максимальное время работы робота по всем перестановкам длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, в первой строке выведите максимальное время работы робота (в секундах).

Во второй строке выведите исходную перестановку \(p\), на которой достигается Ваш ответ.

В третьей строке выведите количество операций \(m \leq n\), которое робот сделает в Вашем примере.

В следующих \(m\) строках выведите по два числа \(i\) и \(j\) — индексы позиций, которые робот выбирает на этой операции. Обратите внимание, что \(p_j = i\) должно выполняться (в момент операции).

Примечание

Для \(n = 2\), \(p\) может быть равна \([1, 2]\) или \([2, 1]\). В первом случае \(p\) уже является тождественной, а во втором случае робот сделает её тождественной за \(1\) секунду вне зависимости от выбора \(i\) и \(j\) на первой операции.

Для \(n = 3\), \(p\) может оказаться равна \([2, 3, 1]\).

  • Если робот выберет \(i = 3, j = 2\) на первой операции, то через одну секунду \(p\) станет равна \([2, 1, 3]\). Теперь робот может выбрать только \(i = 1, j = 2\) или \(i = 2, j = 1\). В любом из этих случаев, \(p\) станет тождественной через ещё одну секунду (всего — \(2\) секунды).
  • Если робот выберет \(i = 1, j = 3\) на первой операции, то через четыре секунды \(p\) станет равна \([1, 3, 2]\). Вне зависимости от выбора \(i\) и \(j\) на второй операции, \(p\) станет тождественной через пять секунд работы робота.

Можно показать, что робот всегда сможет завершить работу с перестановкой длины \(3\) за \(5\) или меньше секунд.

A. Сумма, кратная K

Бинарный поиск жадные алгоритмы Конструктив математика *1000

Вам задано два целых числа \(n\) и \(k\).

Вам нужно создать массив длины \(n\) из целых положительных чисел \(a_1, a_2, \dots, a_n\) такой, что сумма \((a_1 + a_2 + \dots + a_n)\) делится на \(k\) и максимум в массиве \(a\) наименьший возможный.

Чему равен наименьший возможный максимальный элемент массива \(a\)?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\); \(1 \le k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наименьший возможный максимальный элемент массива \(a\) такого, что сумма \((a_1 + \dots + a_n)\) делится на \(k\).

Примечание

В первом наборе входных данных \(n = 1\), поэтому массив состоит из одного элемента \(a_1\) и, если мы сделаем \(a_1 = 5\), он будет делиться на \(k = 5\) и будет наименьшим.

Во втором наборе, мы можем создать массив \(a = [1, 2, 1, 2]\). Сумма делится на \(k = 3\) и максимум равен \(2\).

Во третьем наборе, мы можем создать массив \(a = [1, 1, 1, 1, 1, 1, 1, 1]\). Сумма делится на \(k = 8\) и максимум равен \(1\).

B. Инфляция

Бинарный поиск жадные алгоритмы математика Перебор *1300

У вас есть статистика роста цен некоторого товара в виде массива из \(n\) положительных целых чисел \(p_0, p_1, \dots, p_{n - 1}\), где \(p_0\) — это начальная цена товара, а \(p_i\) — это насколько подорожал товар за \(i\)-й месяц.

Используя эти данные вам нужно посчитать коэффициенты инфляции для каждого месяца как отношение текущего подорожания \(p_i\) к цене товара на начало месяца \((p_0 + p_1 + \dots + p_{i - 1})\).

Ваш босс вам ясно дал понять, что коэффициенты инфляции не должны превышать \(k\) %, поэтому вы решили увеличить некоторые значения \(p_i\) таким образом, что все \(p_i\) — все еще целые числа, а коэффициенты инфляции за каждый месяц не будут превосходить \(k\) %.

Вы знаете, что чем сильнее изменения — тем очевиднее обман. А потому вам нужно минимизировать сумму изменений.

Какую наименьшую сумму изменений вам нужно сделать, чтобы все коэффициенты инфляции не превосходили \(k\) %?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 100\); \(1 \le k \le 100\)) — длина массива \(p\) и коэффициент \(k\).

Во второй строке каждого набора заданы \(n\) целых чисел \(p_0, p_1, \dots, p_{n - 1}\) (\(1 \le p_i \le 10^9\)) — массив \(p\).

Выходные данные

Для каждого набора входных данных выведите наименьшую сумму изменений, которые сделают все коэффициенты инфляции не превосходящими \(k\) %.

Примечание

В первом наборе входных данных, вы можете, например, увеличить \(p_0\) на \(50\) и \(p_1\) на \(49\) и получить массив \([20150, 50, 202, 202]\). Тогда у вас получатся следующие коэффициенты инфляции:

  1. \(\frac{50}{20150} \le \frac{1}{100}\);
  2. \(\frac{202}{20150 + 50} \le \frac{1}{100}\);
  3. \(\frac{202}{20200 + 202} \le \frac{1}{100}\);

Во втором наборе, вам не нужно модифицировать массив \(p\), так как все коэффициенты инфляции уже подходят:

  1. \(\frac{1}{1} \le \frac{100}{100}\);
  2. \(\frac{1}{1 + 1} \le \frac{100}{100}\);

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\) на второй цепи нарушит простоту цикла.

B. Nezzar и бинарная строка

жадные алгоритмы Структуры данных *1900

У Nezzar есть бинарная строка \(s\) длины \(n\), которой он хочет поделиться со своим лучшим другом, Nanako. Он будет в течение \(q\) дней проверять эту бинарную строку. В то же время Nezzar хочет изменить свою строку \(s\) так, чтобы она через \(q\) дней стала равна более красивой строке \(f\).

Известно, что Nanako очень любит однообразие. В \(i\)-й день Nanako будет проверять отрезок строки \(s\) с позиции \(l_i\) по позицию \(r_i\) включительно. Если на этом отрезке есть символы и «0», и «1», Nanako очень расстроится и выкинет строку.

После каждой проверки, в \(i\)-ю ночь Nezzar может тайно поменять строго меньше, чем половину символов на отрезке с \(l_i\) по \(r_i\) включительно (потому что иначе изменение будет слишком очевидным).

Сейчас Nezzar интересуется, можно ли избежать того, что Nanako расстроится, и вместе с этим получить строку \(f\) в конце этих \(q\) дней и ночей.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n,q\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le q \le 2 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находится бинарная строка \(s\) длины \(n\).

В третьей строке описания каждого набора входных данных находится бинарная строка \(f\) длины \(n\).

Затем следуют \(q\) строк, в \(i\)-й из них находятся два целых числа \(l_i,r_i\) (\(1 \le l_i \le r_i \le n\))  — границы отрезка, который Nanako будет проверять в \(i\)-й день.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в собственной строке выведите «YES», если можно избежать того, что Nanako расстроится, и получить строку \(f\) в конце \(q\) дней и ночей. Иначе выведите «NO».

Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(\underline{00000} \rightarrow \underline{000}11 \rightarrow 00111\) — одна из возможных последовательностей изменений строки.

Во втором наборе входных данных можно показать, что невозможно получить строку \(f\) в конце.

C. Nezzar и красивая карта

геометрия жадные алгоритмы Конструктив математика сортировки *2200

Nezzar любит игру osu!.

osu! играется на карте, которая может быть представлена как массив различных точек на плоскости. Карта называется красивой, если для любых трех последовательных точек \(A,B,C\), записанных в порядке следования в массиве, угол между этими тремя точками с центром в \(B\) будет строго меньше, чем \(90\) градусов.

Точки \(A,B,C\) слева образуют угол меньший, чем \(90\) градусов, поэтому они могут быть тремя последовательными точками в красивой карте; точки \(A',B',C'\) справа образуют угол, больший либо равный \(90\) градусам, поэтому они не могут быть тремя последовательными точками в красивой карте.

Сейчас у Nezzar есть карта, состоящая из \(n\) различных точек \(A_1,A_2,\ldots,A_n\). Nezzar хочет переупорядочить эти \(n\) точек так, чтобы получившаяся карта стала красивой.

Более формально, вы должны найти перестановку \(p_1,p_2,\ldots,p_n\) целых чисел от \(1\) до \(n\) такую, что карта \(A_{p_1},A_{p_2},\ldots,A_{p_n}\) будет красивой. Если это невозможно, вы должны определить это.

Входные данные

В первой строке находится единственное целое число \(n\) (\(3 \le n \le 5000\)).

Затем следуют \(n\) строк, в \(i\)-й из них находятся два целых числа \(x_i\), \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(A_i\).

Гарантируется, что все точки различны.

Выходные данные

Если решения нет, выведите \(-1\).

Иначе выведите \(n\) чисел, образующих допустимую перестановку \(p\).

Если существует несколько возможных решений, вы можете вывести любое.

Примечание

Это иллюстрация к первому примеру:

Обратите внимание, что угол между \(A_1\), \(A_2\) и \(A_5\) с центром в \(A_2\) равен \(0\) градусов. Однако угол между \(A_1\), \(A_5\) и \(A_2\) с центром в \(A_5\) равен \(180\) градусам.

E. Nezzar и турнир

жадные алгоритмы Структуры данных *3300

В знаменитом турнире Oh-Suit-United две команды играют друг против друга, борясь за главный приз.

Первая команда состоит из \(n\) игроков, а вторая команда состоит из \(m\) игроков. Каждый игрок имеет потенциал: потенциал \(i\)-го игрока первой команды равен \(a_i\), потенциал \(i\)-го игрока второй команды равен \(b_i\).

В турнире все игроки будут выступать на сцене в некотором порядке. Для подсчета очков будет использоваться специальное устройство, изначально отображающее целое число \(k\).

Очки всем игрокам будут назначаться в порядке, в котором они будут выступать. Пусть потенциал текущего игрока равен \(x\), а потенциал предыдущего игрока равен \(y\) (пусть \(y\) равно \(x\) для первого игрока). Тогда к значению на устройстве подсчета очков добавляется \(x-y\), и это значение становится равным \(0\), если оно стало отрицательным. Текущий игрок набирает столько очков, какое число отображается на устройстве подсчета. Количество очков всей команды равно сумме очков всех ее членов.

Как большой фанат первой команды, Nezzar очень хочет большей победы первой команды. Ему интересно, чему может быть равна максимальная разница между очками первой и второй команды.

Формально, пусть количество очков первой команды это \(score_f\), а количество очков второй команды это \(score_s\). Nezzar хочет найти максимальное значение \(score_f - score_s\) по всем возможным порядкам игроков на сцене.

Ситуация часто меняется и произойдет \(q\) событий. Есть три типа событий:

  • \(1\) \(pos\) \(x\) — изменить \(a_{pos}\) на \(x\);
  • \(2\) \(pos\) \(x\) — изменить \(b_{pos}\) на \(x\);
  • \(3\) \(x\) — предположим, произойдет турнир с условием \(k = x\). Nezzar хочет узнать максимальное возможное значение \(score_f - score_s\).

Можете ли вы помочь Nezzar ответить на запросы третьего типа?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(q\) (\(1 \le n,m \le 2 \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^6\)).

В третьей строке находится \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \le b_i \le 10^6\)).

Следующие \(q\) строк содержат описания событий, заданных в условии:

  • \(1\) \(pos\) \(x\) (\(1 \le pos \le n\), \(0 \le x \le 10^6\));
  • \(2\) \(pos\) \(x\) (\(1 \le pos \le m\), \(0 \le x \le 10^6\));
  • \(3\) \(x\) (\(0 \le x \le 10^6\)).
Выходные данные

Для каждого запроса третьего типа выведите ответ на этот запрос.

Примечание

В первом запросе первого примера турнир будет проводиться с \(k = 5\). Будет оптимально расположить игроков в следующем порядке (здесь будут записаны их потенциалы):

\(\underline{7}\), \(3\), \(5\), \(4\), \(6\), \(\underline{1}\), \(\underline{2}\) (подчеркнутые числа это потенциалы игроков из первой команды).

Личные очки игроков, пронумерованных в порядке, в котором они выступают:

  • \(\max(5 + (7 - 7), 0) = 5\) для \(\underline{1}\)-го игрока;
  • \(\max(5 + (3 - 7), 0) = 1\) для \(2\)-го игрока;
  • \(\max(1 + (5 - 3), 0) = 3\) для \(3\)-го игрока;
  • \(\max(3 + (4 - 5), 0) = 2\) для \(4\)-го игрока;
  • \(\max(2 + (6 - 4), 0) = 4\) для \(5\)-го игрока;
  • \(\max(4 + (1 - 6), 0) = 0\) для \(\underline{6}\)-го игрока;
  • \(\max(0 + (2 - 1), 0) = 1\) для \(\underline{7}\)-го игрока.

Поэтому \(score_f = 5 + 0 + 1 = 6\) и \(score_s = 1 + 3 + 2 + 4 = 10\). Разница между количествами очков команд равна \(6 - 10 = -4\). Можно доказать, что это максимально возможная разница между количествами очков команд.

A. Nezzar и разноцветные шары

жадные алгоритмы Перебор *800

У Nezzar есть \(n\) шаров, пронумерованных числами \(1, 2, \ldots, n\). На них написаны числа \(a_1, a_2, \ldots, a_n\), соответственно. Числа на этих шарах образуют неубывающую последовательность, то есть \(a_i \leq a_{i+1}\) для всех \(1 \leq i < n\).

Nezzar хочет покрасить эти шары в минимальное количество цветов так, чтобы следующее условие было выполнено.

  • Для любого цвета числа будут образовывать строго возрастающую последовательность, если он оставит только шары этого цвета и уберет все остальные шары.

Обратите внимание, что последовательность длины не больше \(1\) считается строго возрастающей последовательностью.

Помогите Nezzar определить минимальное количество цветов.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 100\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)). Гарантируется, что \(a_1 \leq a_2 \leq \ldots \leq a_n\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество цветов, которое Nezzar может использовать.

Примечание

Будем каждому цвету сопоставлять свое число. Тогда:

В первом наборе входных данных одна из оптимальных раскрасок это \([1,2,3,3,2,1]\).

Во втором наборе входных данных одна из оптимальных раскрасок это \([1,2,1,2,1]\).

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\).

C. Немногословная принцесса

жадные алгоритмы Конструктив *1700

«Следующий», — сказала принцесса и оценивающе посмотрела на очередного жениха.

Принцессе очень хочется выбрать самого достойного жениха, и чем больше у него денег, тем он достойнее. Каждый раз, когда она видит жениха более богатого, чем любой из предыдущих, она произносит сдержанное «Ах...». Когда же перед ней появляется жених более богатый, чем все предыдущие вместе взятые, у нее вырывается несдержанное «Ого!» («Ах...» в этом случае она не произносит). Когда принцесса видит самого первого жениха, она сохраняет невозмутимость и не произносит ни слова.

Богатство любого жениха определяется целым числом от 1 до 50000. Известно, что принцесса за день увидела n женихов, ровно a раз произнесла «Ах...» и ровно b раз у нее вырвалось «Ого!». Напишите программу, которая выведет последовательность n целых чисел t1, t2, ..., tn, где ti — богатство i-го жениха. Если существует несколько последовательностей, выведите любую. Если последовательности, удовлетворяющей всем заданным условиям, не существует, выведите единственное число -1.

Входные данные

В единственной строке входных данных записаны три целых числа n, a и b (1 ≤ n ≤ 100, 0 ≤ a, b ≤ 15, n > a + b), разделенных пробелами.

Выходные данные

Выведите любую последовательность целых чисел t1, t2, ..., tn, где ti (1 ≤ ti ≤ 50000) — богатство i-го жениха, удовлетворяющую заданным условиям. Если последовательности, удовлетворяющей всем заданным условиям, не существует, выведите единственное число -1.

Примечание

Рассмотрим ответ для первого примера.

  • Принцесса произнесла «Ах...» (выделены жирным): 5 1 3 6 16 35 46 4 200 99.
  • Принцесса не смогла сдержать «Ого!» (выделены жирным): 5 1 3 6 16 35 46 4 200 99.

A. Еще одна игра со строкой

жадные алгоритмы игры Строки *800

У Гомера есть два друга — Алиса и Боб. Оба они фанаты строк.

Однажды Алиса и Боб решили сыграть в игру на строке \(s = s_1 s_2 \dots s_n\) длиной \(n\), состоящей из строчных английских букв. Они ходят по очереди, Алиса начинает.

В свой ход игрок должен выбрать индекс \(i\) (\(1 \leq i \leq n\)), который не был выбран ранее, и поменять \(s_i\) на любую другую строчную английскую букву \(c\), удовлетворяющую \(c \neq s_i\).

Когда все индексы уже были выбраны по одному разу, игра заканчивается.

Цель Алисы — сделать финальную строку лексикографически как можно меньше, в то время как цель Боба — сделать финальную строку лексикографически как можно больше. Оба они являются профессиональными игроками, поэтому всегда играют оптимально. Гомер не является профессиональным игроком, поэтому ему интересно, какой будет финальная строка.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\)  — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Единственная строка каждого набора входных данных содержит одну строку \(s\) (\(1 \leq |s| \leq 50\)), состоящую из строчных английских букв.

Выходные данные

Для каждого набора входных данных выведите финальную строку в отдельной строке.

Примечание

В первом наборе входных данных: Алиса делает первый ход и должна поменять единственную букву на другую, поэтому она меняет ее на «b».

Во втором наборе входных данных: Алиса меняет первую букву на «a», затем Боб меняет вторую букву на «z», Алиса меняет третью букву на «a», а затем Боб меняет четвертую букву на «z».

В третьем наборе входных данных: Алиса меняет первую букву на «b», а затем Боб меняет вторую букву на «y».

B. Великий герой

жадные алгоритмы реализация сортировки *900

Великий герой охраняет страну, где живет Гомер. У героя есть сила атаки \(A\) и начальное количество здоровья \(B\). Перед героем стоят \(n\) монстров. \(i\)-й монстр имеет силу атаки \(a_i\) и начальное количество здоровья \(b_i\).

Герой или монстр жив, если его здоровье положительно (больше или равно \(1\)); и мертв, если его здоровье не положительно (меньше или равно \(0\)).

Чтобы защитить людей в стране, герой будет сражаться с монстрами до тех пор, пока либо герой не умрет, либо все монстры не умрут.

  • В каждой схватке герой может выбрать произвольного живого монстра и сразиться с ним. Предположим, что выбран \(i\)-й монстр, а количества здоровья героя и \(i\)-го монстра перед боем равны \(x\) и \(y\) соответственно. После боя количества здоровья героя и \(i\)-го монстра становятся соответственно \(x-a_i\) и \(y-A\).

Заметьте, что герой может сражаться с одним и тем же монстром несколько раз.

Для безопасности людей в стране, пожалуйста, скажите им, может ли великий герой убить всех монстров (даже если великий герой сам умрет после убийства последнего монстра).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит три целых числа \(A\) (\(1 \leq A \leq 10^6\)), \(B\) (\(1 \leq B \leq 10^6\)) и \(n\) (\(1 \leq n \leq 10^5\)) — силу атаки великого героя, начальное количество здоровья великого героя и количество монстров соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)), где \(a_i\) обозначает силу атаки \(i\)-го монстра.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq 10^6\)), где \(b_i\) обозначает начальное значение здоровья \(i\)-го монстра.

Гарантируется, что сумма \(n\) по всех наборах входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ «YES» (без кавычек), если великий герой может убить всех монстров, в противном случае выведите «NO» (без кавычек).

Примечание

В первом наборе входных данных будет \(6\) боев между героем и единственным монстром. После этого монстр умирает, а количество здоровья героя становится \(17 - 6 \times 2 = 5 > 0\). Поэтому ответ: «YES», а кроме того, герой все еще жив.

Во втором наборе входных данных после того, как все монстры мертвы, значение здоровья героя станет \(709\) независимо от порядка всех боев. Таким образом, ответ «YES».

В третьем наборе входных данных возможный порядок — сражаться с \(1\)-м, \(2\)-м, \(3\)-м и \(4\)-м монстрами в этом порядке. После всех поединков количество здоровья героя становится \(-400\). К сожалению, герой мертв, но все монстры тоже мертвы. Так что ответ: «YES».

В четвертом наборе входных данных герой умирает, но монстр остается живым с количеством здоровья, равным \(1000 - 999 = 1\). Таким образом, ответ «NO».

A. Космическая навигация

жадные алгоритмы Строки *800

Однажды вам приснилось, будто вы отправились на планету Planetforces на своем собственном космическом корабле. Однако его система пилотирования была повреждена, а потому, чтобы отправиться на Planetforces, вам нужно ее починить.

Представим космическое пространство как плоскость \(XY\). Вы начинаете в точке \((0, 0)\), а Planetforces расположена в точке \((p_x, p_y)\).

Система пилотирования вашего корабля следует списку команд, который можно представить как строку \(s\). Система считывает \(s\) слева направо. Предположим, в данный момент вы находитесь в позиции \((x, y)\) и текущая команда — \(s_i\):

  • если \(s_i = \text{U}\), вы перемещаетесь в \((x, y + 1)\);
  • если \(s_i = \text{D}\), вы перемещаетесь в \((x, y - 1)\);
  • если \(s_i = \text{R}\), вы перемещаетесь в \((x + 1, y)\);
  • если \(s_i = \text{L}\), вы перемещаетесь в \((x - 1, y)\).

Так как строка \(s\) могла быть повреждена, то существует вероятность, что в результате вы так и не достигнете Planetforces. К счастью, вы можете удалить некоторые команды из \(s\), но вы не можете менять их порядок.

Можете ли вы удалить несколько (возможно, ни одной) команд из \(s\) так, чтобы вы достигли Planetforces после того, как система обработает все команды?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора заданы два целых числа \(p_x\) и \(p_y\) (\(-10^5 \le p_x, p_y \le 10^5\); \((p_x, p_y) \neq (0, 0)\)) — координаты Planetforces как точки \((p_x, p_y)\).

Во второй строке задана строка \(s\) (\(1 \le |s| \le 10^5\): \(|s|\) — это длина строки \(s\)) — список команд.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вы можете удалить несколько (возможно, ни одной) команд \(s\) так, что вы достигнете Planetforces. В противном случае выведите «NO». Вы можете выводить какую букву в любом регистре.

Примечание

В первом наборе входных данных вам не нужно никак изменять \(s\), так как заданная \(s\) доставит вас на Planetforces.

Во втором наборе вы можете удалить команды \(s_2\), \(s_3\), \(s_4\), \(s_6\), \(s_7\) и \(s_8\), и \(s\) станет равна «UR».

В третьем наборе вы должны удалить команду \(s_9\), в противном случае вы не закончите полет в позиции планеты Planetforces.

B. Новая колония

жадные алгоритмы Перебор реализация *1100

Достигнув нужной планеты вы решили основать здесь колонию. Так как на планете множество гор, а для колонии нужна ровная поверхность, вы решили выровнять горы, используя валуны (во сне эта идея показалась вам вполне логичной).

Вам задан массив \(h_1, h_2, \dots, h_n\), в котором \(h_i\) — это высота \(i\)-й горы, и \(k\) — количество валунов в вашем распоряжении.

Вы начинаете сбрасывать валуны над первой горой по одному, и каждый валун будет двигаться следующим образом (предположим, высота текущей горы равна \(h_i\)):

  • если \(h_i \ge h_{i + 1}\), валун перекатится на следующую гору;
  • если \(h_i < h_{i + 1}\), валун остановится и увеличит высоту текущей горы на \(1\) (\(h_i = h_i + 1\));
  • если валун достигает последней горы, то он упадет в специальную систему сбора остатков и исчезнет.

Ваша задача — определить финальную позицию \(k\)-го валуна или сказать, что он упадет в систему сбора.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 100\); \(1 \le k \le 10^9\)) — количество гор и валунов.

Во второй строке заданы \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 100\)) — высоты гор.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если \(k\)-й валун упадет в систему сбора. В противном случае выведите позицию \(k\)-го валуна.

Примечание

Промоделируем первый набор входных данных:

  • Первый валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), он перемещается в \(i = 2\), и остается там, так как \(h_2 < h_3\).
  • Новые высоты будут равны \([4,2,2,3]\).
  • Второй валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), валун перемещается в \(i = 2\); так как \(h_2 \ge h_3\), валун перемещается в \(i = 3\), и остается там, как как \(h_3 < h_4\).
  • Новые высоты будут равны \([4,2,3,3]\).
  • Третий валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), перемещается в \(i = 2\), и остается там, так как \(h_2 < h_3\).
  • Новые высоты будут равны \([4,3,3,3]\).

Позиции, в которых каждый валун остановится, следующие: \([2,3,2]\).

Во втором наборе все \(7\) валунов останутся прямо на первой горе, увеличивая ее высоту от \(1\) до \(8\).

Третий набор входных данных похож на первый, но в данном случае вы сбросите \(5\) валунов. Первые три будут вести себя аналогично первому набору входных данных. После этого высоты гор станут равны \([4, 3, 3, 3]\), а потому оставшиеся два валуна упадут в систему сбора.

В четвертом наборе первый и единственный валун упадет прямо в систему сбора.

C. Покраска забора

жадные алгоритмы Конструктив Перебор *1600

Вы наконец проснулись после такого невероятного сна и решили немного прогуляться на свежем воздухе. Снаружи вы увидели забор вашего дома — такой скучный, что вам захотелось его перекрасить.

У вас есть забор, состоящий из \(n\) досок, и \(i\)-я доска покрашена в цвет \(a_i\). Вы хотите перекрасить забор так, чтобы \(i\)-я доска стала цвета \(b_i\).

Для этого вы пригласили \(m\) маляров: \(j\)-й маляр придет в момент времени \(j\) и перекрасит ровно одну доску в цвет \(c_j\). Вы можете сказать каждому маляру, какую именно доску перекрасить, но вы не можете отказаться от его услуг, т. е. каждый маляр обязан покрасить ровно одну доску.

Можете ли вы получить желаемую раскраску \(b\)? Если это возможно, выведите для каждого маляра номер доски, которую он должен покрасить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество досок в заборе и количество маляров.

Во второй строке каждого набора заданы \(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\)) — желаемые цвета досок забора.

В четвертой строке каждого набора заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le n\)) — цвета, в которые перекрашивают маляры.

Гарантируется, что сумма \(n\) не превосходит \(10^5\), и сумма \(m\) не превосходит \(10^5\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных, выведите «NO», если невозможно получить раскраску \(b\).

В противном случае выведите «YES» и \(m\) целых чисел \(x_1, x_2, \dots, x_m\), где \(x_j\) — это номер доски, которую должен перекрасить \(j\)-й маляр.

Ответ можете выводить в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ на запрос).

D. AB граф

графы жадные алгоритмы Конструктив Перебор реализация *2000

Ваш друг Salem — брат Warawreh, и ему нравятся только математические и геометрические задачи. Он решил уже множество таких задач, но, по словам Warawreh, чтобы успешно окончить университет, ему нужно решать больше графовых задач. Так как Salem не очень хорош в графах, он попросил вас помочь ему с такой задачей.

Вам задан полный ориентированный граф из \(n\) вершин без петель. Другими словами, у вас есть \(n\) вершин, и для каждой пары вершин \(u\) и \(v\) (\(u \neq v\)) есть две направленных дуги \((u, v)\) и \((v, u)\).

На каждой направленной дуге графа написано по одной букве: либо «a», либо «b» (дуги \((u, v)\) и \((v, u)\) могут иметь различные метки).

Вам также задано целое число \(m > 0\). Вам нужно найти путь длины \(m\) такой, что строка, полученная выписыванием букв на дугах в порядке из обхода, будет являться палиндромом. Длина пути — это количество дуг в нем.

Вы можете посещать одни и те же вершины и дуги произвольное количество раз.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \leq n \leq 1000\); \(1 \leq m \leq 10^{5}\)) — количество вершин в графе и желаемая длина палиндрома.

В следующих \(n\) строках задано по \(n\) символов. \(j\)-й символ \(i\)-й строки описывает символ, написанный на дуге из вершины \(i\) в вершину \(j\).

Каждый символ — это «a» или «b», если \(i \neq j\), либо же «*», если \(i = j\), так как граф не содержит петель.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\) и сумма \(m\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если возможно найти такой путь, выведите «YES» и сам путь как последовательность из \(m + 1\) целых чисел: номера вершин в пути в порядке обхода. Если существует несколько возможных путей, выведите любой из них.

В противном случае (если ответа нет), выведите «NO».

Примечание

Граф для первых трех наборов входных данных изображен ниже:

В первом наборе ответ — это последовательность \([1,2]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна b.

Во втором наборе ответ — это последовательность \([2,1,3,2]\), означающая следующий путь:

\(\)2 \xrightarrow{\text{b}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна bab.

В третьем наборе ответ — это последовательность \([1,3,1,3,1]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1\(\)

Таким образом, полученная строка равна aaaa.

Строка, полученная в четвертом наборе, равна abaaba.

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\).

C. Базовая дипломатия

жадные алгоритмы Конструктив Перебор реализация *1600

У Алексея есть \(n\) друзей. А ещё Алексей сейчас в отпуске, поэтому у него есть целых \(m\) дней, чтобы поиграть в эту новую популярную кооперативную игру! Поскольку эта игра кооперативная, Алексею нужен один сокомандник в каждый из \(m\) дней.

Каждый день какие-то его друзья свободны и готовы играть в эту игру, а остальные заняты и не могут. Каждый день Алексей должен выбрать одного из свободных друзей и предложить ему поиграть (а тот, разумеется, согласится). Однако если какой-то из друзей будет играть с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз (округление вверх), то все остальные обидятся. Конечно же, Алексей не хочет никого обижать.

Помогите ему выбрать сокомандников таким образом, чтобы никто не играл с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два натуральных числа \(n\) и \(m\) (\(1\leq n, m\leq 100\,000\)) — количество друзей и количество дней, соответственно.

В \(i\)-й из следующих \(m\) строк содержится натуральное число \(k_i\) (\(1\leq k_i\leq n\)), за которым следуют \(k_i\) попарно различных целых чисел \(f_{i1}\), ..., \(f_{ik_i}\) (\(1\leq f_{ij}\leq n\)), разделённых пробелами — свободные друзья в день \(i\).

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(100\,000\). Гарантируется, что сумма всех \(k_i\) по всем дням всех наборов входных данных не превосходит \(200\,000\).

Выходные данные

Выведите ответ для каждого набора входных данных. Если невозможно никого не обидеть, то выведите «NO».

В противном случае в первой строке выведите «YES», а во второй строке выведите \(m\) целых чисел \(c_1\), ..., \(c_m\), разделённых пробелами. Каждое \(c_i\) должно быть номером друга, взятого в команду в \(i\)-й день (соответственно, это должно быть одно из чисел \(f_{ij}\)).

Никакое значение не должно встречаться больше, чем \(\left\lceil\dfrac{m}{2}\right\rceil\) раз. Если есть несколько возможных ответов, выведите любой из них.

A. Прибавляй и дели

жадные алгоритмы математика Перебор теория чисел *1000

У вас есть два положительных целых числа \(a\) и \(b\).

Вы можете выполнять операции двух видов:

  • \(a = \lfloor \frac{a}{b} \rfloor\) (заменить \(a\) на целую часть от деления \(a\) на \(b\))
  • \(b=b+1\) (увеличить \(b\) на \(1\))

Найдите минимальное количество операций, которое нужно, чтобы сделать \(a=0\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится два целых числа \(a\), \(b\) (\(1 \le a,b \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: минимальное количество операций, которое нужно, чтобы сделать \(a=0\).

Примечание

В первом наборе входных данных одно из оптимальных решений — следующее.

  1. Поделить \(a\) на \(b\). После этой операции \(a = 4\) и \(b = 2\).
  2. Поделить \(a\) на \(b\). После этой операции \(a = 2\) и \(b = 2\).
  3. Увеличить \(b\). После этой операции \(a = 2\) и \(b = 3\).
  4. Поделить \(a\) на \(b\). После этой операции \(a = 0\) и \(b = 3\).

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\).

A. Сдвигая стопки

жадные алгоритмы реализация *900

У вас есть \(n\) стопок из блоков. В \(i\)-й стопке изначально \(h_i\) блоков и ее высота — это число блоков в ней. За один ход вы можете взять блок из \(i\)-й стопки (если в ней есть хотя бы один блок) и переложить его в \(i + 1\)-ю стопку. Можно ли сделать высоты блоков строго возрастающими?

Обратите внимание, что количество стопок всегда остается равно \(n\): стопки не исчезают, когда у них становится \(0\) блоков.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 10^4)\) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) \((1 \leq n \leq 100)\). Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_i\) \((0 \leq h_i \leq 10^9)\) — изначальные высоты стопок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора вxодных данных выведите YES, если вы можете сделать последовательность высот строго возрастающей и NO иначе.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере не нужно делать никаких действий, последовательность высот уже возрастающая.

Во втором примере мы должны переложить один блок с первой стопки на вторую. Тогда последовательность высот становится \(0\) \(1\).

В третьем примере мы можем подвинуть один блок с первой стопки на вторую, а потом его же со второй стопки на третью и получим последовательность высот \(3\) \(4\) \(5\).

В четвертом примере мы не можем сделать никакое действие, а последовательность высот не возрастает, откуда ответ NO.

В пятом примере мы можем сделать только одно действие (переложить блок с второй на третью стопку) и получим последовательность высот \(0\) \(0\) \(1\). Ни \(0\) \(1\) \(0\), ни \(0\) \(0\) \(1\) не являются возрастающими, откуда ответ NO.

C. Как можно меньше ничьих

графы жадные алгоритмы Конструктив математика Перебор поиск в глубину и подобное реализация *1500

Скоро состоится большой футбольный чемпионат! \(n\) команд будут участвовать в нем, и каждая пара различных команд сыграет ровно один матч друг с другом.

У матча может быть два различных исхода:

  • матч может закончиться вничью, тогда обе команды получат по \(1\) очку;
  • одна из команд может победить, тогда победившая команда получит \(3\) очка, а проигравшая — \(0\).

Счет команды — суммарное количество очков, полученное командой за все матчи, в которых она играла.

Вас интересует гипотетическая ситуация, в которой все команды будут в конце чемпионата иметь одинаковый счет. Простой пример такой ситуации — если все матчи закончатся вничью, но вас интересует подобная ситуация с минимально возможным количеством ничьих.

Ваша задача — найти ситуацию (выбрать результат каждой игры), в которой у всех команд одинаковый итоговый счет, а количество ничьих минимально возможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных. Каждый набор описывается одной строкой, содержащей целое число \(n\) (\(2 \le n \le 100\)) — количество команд.

Выходные данные

Для каждого набора входных данных выведите \(\frac{n(n - 1)}{2}\) целых чисел, описывающих результаты игр в следующем порядке: первое число соответствует результату матча между командой \(1\) и командой \(2\), второе — между командой \(1\) и командой \(3\), затем \(1\) и \(4\), ..., \(1\) и \(n\), \(2\) и \(3\), \(2\) и \(4\), ..., \(2\) и \(n\), и так далее, до результата матча между командой \(n - 1\) и командой \(n\).

Число, соответствующее результату матча между командой \(x\) и командой \(y\), должно быть равно \(1\), если побеждает команда \(x\), \(-1\), если побеждает команда \(y\), или \(0\), если матч заканчивается вничью.

Все команды должны иметь одинаковый итоговый счет, и количество ничьих должно быть минимально возможным. Если оптимальных ответов несколько — выведите любой из них. Можно показать, что всегда есть способ составить результаты игр так, что все команды имеют одинаковый итоговый счет.

Примечание

В первом наборе входных данных из примера обе команды получают по \(1\) очку, так как их матч заканчивается вничью.

Во втором наборе входных данных из примера команда \(1\) побеждает команду \(2\) (команда \(1\) получает \(3\) очка), команда \(1\) проигрывает команде \(3\) (команда \(3\) получает \(3\) очка), и команда \(2\) выигрывает у команды \(3\) (команда \(2\) получает \(3\) очка).

E. Дешевый обед

графы жадные алгоритмы Перебор реализация сортировки Структуры данных *2000

Иван хочет полноценно пообедать. Для этого он хочет заказать первое, второе, напиток и десерт.

Всего на выбор у Ивана есть \(n_1\) разных первых блюд (\(i\)-е первое стоит \(a_i\) монет), \(n_2\) разных вторых блюд (\(i\)-е второе стоит \(b_i\) монет), \(n_3\) разных напитков (\(i\)-й напиток стоит \(c_i\) монет) и \(n_4\) разных десертов (\(i\)-й десерт стоит \(d_i\) монет).

Некоторые блюда не сочетаются между собой. Всего есть \(m_1\) пар из первого и второго, которые не сочетаются, \(m_2\) несочетающихся пар из второго и напитка и \(m_3\) несочетающихся пар из напитка и десерта.

Иван хочет купить ровно одно первое, одно второе, один напиток и один десерт так, чтобы они хорошо сочетались между собой и их общая стоимость была наименьшей возможной. Помогите ему найти самый бюджетный вариант!

Входные данные

В первой строке заданы четыре целых числа \(n_1\), \(n_2\), \(n_3\) и \(n_4\) (\(1 \le n_i \le 150000\)) — количество видов первого, второго, напитков и десертов соответственно.

Далее следуют четыре строки. В первой строке заданы \(n_1\) целых чисел \(a_1, a_2, \dots, a_{n_1}\) (\(1 \le a_i \le 10^8\)), где \(a_i\) — это цена \(i\)-го вида первого блюда. Следующие три строки описывают цены вторых блюд, напитков и десертов в том же формате (\(1 \le b_i, c_i, d_i \le 10^8\)).

В следующей строке задан одно целое число \(m_1\) (\(0 \le m_1 \le 200000\)) — количество несочетающихся пар из первого и второго блюд. В каждой из следующих \(m_1\) строк заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)) означающие, что первое блюдо номер \(x_i\) не сочетается со вторым блюдом номер \(y_i\). Все пары различные.

Блок несочетающихся пар из второго блюда и напитка задан в аналогичном формате. В таком же формате заданы и несочетающиеся пары из напитка и десерта (\(0 \le m_2, m_3 \le 200000\)).

Выходные данные

Если невозможно выбрать первое, второе, напиток и десерт, сочетающиеся друг с другом, выведите \(-1\). В противном случае выведите одно число — наименьшую суммарную стоимость обеда.

Примечание

Оптимальный вариант в первом примере — это выбрать первое блюдо номер \(2\), второе номер \(1\), напиток номер \(2\) и десерт номер \(1\).

Во втором примере, единственная пара из первого и второго не сочетается, а потому невозможно выбрать обед.

F. Единицы

дп жадные алгоритмы кратчайшие пути *2900

Вам задано положительное (больше нуля) целое число \(n\).

Вам необходимо представить \(n\) как сумму целых чисел (возможно, отрицательных), состоящих только из единиц (цифр '1'). Например, \(24 = 11 + 11 + 1 + 1\) и \(102 = 111 - 11 + 1 + 1\).

Среди всех возможных представлений вы должны найти то, которое использует минимальное количество единиц в общей сложности.

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \le n < 10^{50}\)).

Выходные данные

Выведите одно целое число \(x\) — минимальное число единиц, такое, что существует представление \(n\) как суммы целых чисел (возможно, отрицательных), которое использует \(x\) единиц в общей сложности.

B. Удаление ПСП

*особая задача жадные алгоритмы *1800

Скобочная последовательность — это строка, содержащая только символы «(» и «)». Правильная скобочная последовательность (или, коротко говоря, ПСП) — это скобочная последовательность, которая может быть преобразована в правильное арифметическое выражение путем вставки символов «1» и «+» между исходными символами последовательности. Например:

  • скобочные последовательности «()()» и «(())» являются правильными (возможные выражения: «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» не являются правильными.

Вам задана строка \(s\), которая является ПСП. К этой строке можно применить любое количество операций. Каждая операция может иметь один из следующих типов:

  1. выбрать некоторый непустой префикс \(s\) и удалить его из \(s\), так что \(s\) все еще остается ПСП. Например, можно применить эту операцию следующим образом: «(())()(())()()» \(\to\) «()()» (первые \(10\) символов были удалены);
  2. выбрать некоторую непрерывную непустую подстроку \(s\) и удалить ее из \(s\), так что \(s\) все еще остается ПСП. Например, можно применить эту операцию следующим образом: «(())()(())()()» \(\to\) «(())()()()» (символы с \(7\)-го по \(10\)-й были удалены).

Операция \(2\) может быть применена не более \(k\) раз. Посчитайте максимальное количество операций, которые можно применить, пока \(s\) не станет пустой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор описывается двумя строками. Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le n\); \(n\) четно) — длина \(s\) и максимальное количество операций типа \(2\), которые можно применить.

Вторая строка содержит \(s\) состоящую из \(n\) символов «(» и «)». Эта строка является ПСП.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которые можно применить.

D. Марафон решения задач

*особая задача Бинарный поиск жадные алгоритмы *1900

Поликарп решил устроить себе марафон решения задач. Он хочет решить \(s\) задач за \(n\) дней. Пусть \(a_i\) будет количеством задач, которые он решит в \(i\)-й день. Он хочет найти такое разбиение задач на дни, что:

  • \(a_i\) — это целое число для всех \(i\) от \(1\) до \(n\);
  • \(a_i \ge 1\) для всех \(i\) от \(1\) до \(n\);
  • \(a_{i + 1} \ge a_i\) для всех \(i\) от \(1\) до \(n-1\);
  • \(a_{i + 1} \le 2 \cdot a_i\) для всех \(i\) от \(1\) до \(n-1\);
  • \(a_n\) как можно больше.

Обратите внимание, что \(a_1\) может быть произвольно большим.

Какое наибольшее значение \(a_n\) Поликарп может получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В единственной строке каждого набора входных данных записаны два целых числа \(n\) и \(s\) (\(1 \le n \le s \le 10^{18}\)) — количество дней и количество задач, которые Поликарп хочет решить.

Гарантируется, что разбиение всегда существует в данных ограничениях.

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее значение \(a_n\).

Примечание

В первом наборе входных данных есть только одно разбиение: \([15]\).

Во втором примере разбиение, которое максимизирует \(a_n\): \([2, 3, 4]\).

В третьем примере разбиение, которое максимизирует \(a_n\): \([2, 4]\). \([3, 3]\) является корректным разбиением, но \(a_n=3\), что меньше \(4\). \([1, 5]\) не является корректным разбиением, потому что \(5 > 2 \cdot 1\).

G. Раскраска чисел

*особая задача жадные алгоритмы Структуры данных теория чисел *2500

Задано \(n\) целых чисел, каждое целое число от \(1\) до \(n\), все числа попарно различны. Вы должны покрасить их в красный и синий цвета (каждое целое число должно иметь ровно один цвет).

Стоимость покраски — это количество пар \((x, y)\) таких, что \(y \bmod x = 0\), \(y\) красный и \(x\) синий.

Для каждого \(k \in [1, n]\) вычислите максимальную стоимость покраски, если ровно \(k\) целых чисел красные.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Выходные данные

Для каждого \(k \in [1,n]\) выведите одно целое число — максимальная стоимость покраски, если ровно \(k\) целых чисел красные.

A. Командировка

жадные алгоритмы реализация сортировки *900

Какая радость! Родители Пети уехали в командировку на целый год, предоставив шаловливого мальчугана самому себе. Петя обрадовался неимоверно. Он прыгал на кровати и бросался подушками целыми днями напролет, пока...

Сегодня Петя полез в буфет и обнаружил там страшную записку. Родители поручили сыну поливать их любимый цветок весь год, каждый день, утром, в обед и вечером. «Стоп!» — подумал Петя. Он точно знал, что если выполнять поручение родителей в течение i-го (1 ≤ i ≤ 12) месяца года, то цветок вырастет на ai сантиметров, а если не поливать цветок в i-ый месяц, то цветок за этот месяц не вырастет. Также Петя знает, что родители ни за что на свете не поверят, что он поливал цветок, если цветок вырастет строго меньше, чем на k сантиметров.

Помогите Пете выбрать минимальное количество месяцев, в которые он будет поливать цветок, так чтобы цветок вырос не менее чем на k сантиметров.

Входные данные

Первая строка содержит ровно одно целое число k (0 ≤ k ≤ 100). В следующей строке записаны двенадцать целых чисел, разделенных пробелами: i-ое (1 ≤ i ≤ 12) число в строке обозначает ai (0 ≤ ai ≤ 100).

Выходные данные

Выведите единственное целое число — минимальное количество месяцев, в которые Петя будет поливать цветок, так чтобы цветок вырос не менее чем на k сантиметров. Если цветок не сможет вырасти на k сантиметров за год, выведите -1.

Примечание

Рассмотрим первый тестовый пример. В нем достаточно поливать цветок в течение седьмого и девятого месяца, тогда цветок вырастет ровно на пять сантиметров.

Во втором тестовом примере родители поверят Пете, даже если цветок совсем не вырастет (k = 0). Значит, Петя может не поливать цветок вовсе.

A. Командировка

жадные алгоритмы реализация сортировки *900

Какая радость! Родители Пети уехали в командировку на целый год, предоставив шаловливого мальчугана самому себе. Петя обрадовался неимоверно. Он прыгал на кровати и бросался подушками целыми днями напролет, пока...

Сегодня Петя полез в буфет и обнаружил там страшную записку. Родители поручили сыну поливать их любимый цветок весь год, каждый день, утром, в обед и вечером. «Стоп!» — подумал Петя. Он точно знал, что если выполнять поручение родителей в течение i-го (1 ≤ i ≤ 12) месяца года, то цветок вырастет на ai сантиметров, а если не поливать цветок в i-ый месяц, то цветок за этот месяц не вырастет. Также Петя знает, что родители ни за что на свете не поверят, что он поливал цветок, если цветок вырастет строго меньше, чем на k сантиметров.

Помогите Пете выбрать минимальное количество месяцев, в которые он будет поливать цветок, так чтобы цветок вырос не менее чем на k сантиметров.

Входные данные

Первая строка содержит ровно одно целое число k (0 ≤ k ≤ 100). В следующей строке записаны двенадцать целых чисел, разделенных пробелами: i-ое (1 ≤ i ≤ 12) число в строке обозначает ai (0 ≤ ai ≤ 100).

Выходные данные

Выведите единственное целое число — минимальное количество месяцев, в которые Петя будет поливать цветок, так чтобы цветок вырос не менее чем на k сантиметров. Если цветок не сможет вырасти на k сантиметров за год, выведите -1.

Примечание

Рассмотрим первый тестовый пример. В нем достаточно поливать цветок в течение седьмого и девятого месяца, тогда цветок вырастет ровно на пять сантиметров.

Во втором тестовом примере родители поверят Пете, даже если цветок совсем не вырастет (k = 0). Значит, Петя может не поливать цветок вовсе.

C. Разделение на команды

жадные алгоритмы математика сортировки *1500

Петя очень любит футбол, особенно когда родителей нет дома. Каждое утро он выходит во двор, собирает своих друзей, и они играют вместе весь день, изредка прерываясь на еду или какие-нибудь важные дела (например, поливание цветов).

Самое главное в футболе — перед началом игры честно поделиться на команды. Во дворе в футбол играют n ребят (считая самого Петю), умение каждого мальчика играть в футбол выражается неотрицательной характеристикой ai (чем она больше, тем лучше мальчик играет).

Обозначим за x количество игроков в первой команде, y — количество игроков во второй команде, pi — номера ребят, вошедших в первую команду, qi — номера ребят, вошедших во вторую команду. Разделение n ребят на две команды считается честным, если выполнены три условия:

  • Каждый мальчик играет ровно в одной команде (x + y = n).
  • Размеры команд отличаются не более, чем на единицу (|x - y| ≤ 1).
  • Суммарные умения играть в футбол у двух команд отличаются не более, чем на величину умения самого лучшего игрока во дворе. Более формально:

Ваша задача — помочь ребятам честно разделиться на две команды. Гарантируется, что честное разделение на две команды всегда существует.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 105) — количество ребят во дворе. В следующей строке записаны n целых положительных чисел, разделенных пробелами, ai (1 ≤ ai ≤ 104), i-е число обозначает умение играть i-го мальчика.

Выходные данные

В первой строке выведите целое число x — количество мальчиков в первой команде, во второй строке выведите x целых чисел — номера мальчиков, попавших в первую команду. В третьей строке выведите целое число y — количество мальчиков во второй команде, в четвертой строке выведите y целых чисел — номера мальчиков, попавших во вторую команду. Не забудьте, что должны выполняться все три условия: x + y = n, |x - y| ≤ 1, а также условие на разницу суммарных умений.

Если решений несколько, выведите любое.

Мальчики нумеруются начиная с единицы в том порядке, в котором заданы их умения во входных данных. Номера мальчиков из одной команды разрешается выводить в любом порядке.

Примечание

Рассмотрим первый тестовый пример. В нем мы берем первого и второго мальчика в первую команду, а третьего мальчика во вторую команду. Проверим все три условия честного разделения. Первое ограничение выполнено (все мальчики участвуют в игре), второе ограничение на размеры групп (|2 - 1| = 1 ≤ 1) выполнено, третье ограничение на разность умений ((2 + 1) - (1) = 2 ≤ 2) выполнено.

A. Плотный массив

жадные алгоритмы математика *800

Поликарп называет массив плотным, если в любой паре двух соседних элементов больший элемент не более чем в два раза превышает меньший. Более формально, для любого \(i\) (\(1 \le i \le n-1\)) должно быть выполнено условие: \(\)\frac{\max(a[i], a[i+1])}{\min(a[i], a[i+1])} \le 2\(\)

Например, массивы \([1, 2, 3, 4, 3]\), \([1, 1, 1]\) и \([5, 10]\) — плотные. А массивы \([5, 11]\), \([1, 4, 2]\), \([6, 6, 1]\) — нет.

Вам дан массив \(a\), состоящий из \(n\) целых чисел. Какое минимальное количество чисел необходимо добавить в массив, чтобы он стал плотным? Вставлять числа можно в любое место массива. Если массив уже является плотным, то числа добавлять не надо.

Например, если \(a=[4,2,10,1]\), то ответ равен \(5\), а сам массив после вставки в него элементов может выглядеть так: \(a=[4,2,\underline{\textbf{3}},\underline{\textbf{5}},10,\underline{\textbf{6}},\underline{\textbf{4}},\underline{\textbf{2}},1]\) (есть и другие оптимальные способы построить плотный массив \(a\)).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 1000\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(2 \le n \le 50\)) — длина массива \(a\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 50\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество чисел, которое необходимо добавить в массив, чтобы он стал плотным.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных можно вставить один элемент, \(a=[1,\underline{\textbf{2}},3]\).

В третьем наборе входных данных можно вставить два элемента, \(a=[6,\underline{\textbf{4}},\underline{\textbf{2}},1]\).

В четвертом наборе входных данных можно вставить один элемент, \(a=[1,\underline{\textbf{2}},4,2]\).

В пятом наборе входных данных массив \(a\) уже плотный.

E. Случайная победа

Бинарный поиск жадные алгоритмы Структуры данных *1400

В Берляндии проводится чемпионат, в котором участвует \(n\) игроков. У игрока с номером \(i\) есть \(a_i\) (\(a_i \ge 1\)) фишек.

Чемпионат состоит из \(n-1\) игры, которые проводятся по следующим правилам:

  • в каждой игре выбирается два случайных игрока с ненулевым количеством фишек;
  • победителем игры считается игрок, у которого больше фишек (при равенстве победитель выбирается случайно);
  • победивший игрок забирает себе все фишки проигравшего.

Последний игрок с ненулевым количеством фишек считается победителем чемпионата.

Все случайные решения, которые принимаются во время чемпионата, принимаются равновероятно и независимо.

Например если \(n=4\), \(a = [1, 2, 4, 3]\), то один из вариантов развития игры следующий (могли быть и другие варианты):

  • во время первой игры были выбраны первый и четвертый игроки. Количество фишек у четвертого игрока больше, поэтому он забирает фишки первого игрока. Теперь \(a = [0, 2, 4, 4]\);
  • во время второй игры были выбраны четвертый и третий игроки. Количество фишек у них однаково, но случайным образом третий игрок стал победителем. Теперь \(a = [0, 2, 8, 0]\);
  • во время третьей игры были выбраны второй и третий игроки. Количество фишек у третьего игрока больше, поэтому он забирает фишки второго игрока. Теперь \(a = [0, 0, 10, 0]\);
  • третий игрок объявляется победителем чемпионата.

Победители чемпионата получат именные призы. Поэтому судьи хотят заранее узнать, какие игроки имеют шанс на победу, то есть, имеют ненулевую вероятность выиграть чемпионат. Вам было поручено найти всех таких игроков.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных состоит из одного целого положительного числа \(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\).

Выходные данные

Для каждого набора входных данных выведите количество игроков, которые имеют ненулевую вероятность выиграть чемпионат. На следующей строке выведите номера этих игроков в возрастающем порядке. Игроки пронумерованы начиная с единицы в порядке следования во входных данных.

F. Уравняй массив

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1500

Поликарпу подарили массив \(a\) длины \(n\). Поликарп считает массив красивым, если существует такое число \(C\), что каждое число встречается в массиве либо ноль, либо \(C\) раз. Поликарп хочет удалить из массива \(a\) некоторые элементы, чтобы сделать массив красивым.

Например, если \(n=6\) и \(a = [1, 3, 2, 1, 4, 2]\), то возможны следующие варианты сделать массив \(a\) красивым:

  • Поликарп удаляет элементы на позициях \(2\) и \(5\), массив \(a\) становится равным \([1, 2, 1, 2]\);
  • Поликарп удаляет элементы на позициях \(1\) и \(6\), массив \(a\) становится равным \([3, 2, 1, 4]\);
  • Поликарп удаляет элементы на позициях \(1, 2\) и \(6\), массив \(a\) становится равным \([2, 1, 4]\);

Помогите Поликарпу определить: какое минимальное количество элементов необходимо удалить из массива \(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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которые необходимо удалить, что сделать массив \(a\) красивым.

A. K-е наибольшее

жадные алгоритмы Перебор реализация *800

Вам дан массив \(a\), состоящий из \(n\) целых чисел. Изначально все элементы \(a\) равны \(0\) либо \(1\). Вы должны обработать \(q\) запросов двух типов:

  • 1 x : Присвоить \(a_x\) значение \(1 - a_x\).
  • 2 k : Вывести \(k\)-й наибольший элемент массива.

Напомним, что \(k\)-й наибольший элемент массива \(b\) определяется следующим образом:

  • Сортируем массив в невозрастающем порядке, возвращаем из него \(k\)-й элемент.

Например, второй наибольший элемент массива \([0, 1, 0, 1]\) равен \(1\), так как после сортировки в невозрастающем порядке он становится равен \([1, 1, 0, 0]\), а второй элемент в этом массиве равен \(1\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — длину заданного массива и количество запросов.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(0 \le a_i \le 1\)) — элементы исходного массива.

Каждая из следующих строк \(q\) содержит два целых числа. Первое из них — \(t\) (\(1 \le t \le 2\)) — тип запроса.

  • Если \(t = 1\), то второе число это \(x\) (\(1 \le x \le n\)) — позиция измененного числа. Вы должны присвоить \(a_x\) значение \(1 - a_x\).
  • Если \(t = 2\), то второе число это \(k\) (\(1 \le k \le n\)) — вы должны вывести \(k\)-й наибольший элемент массива.

Гарантируется, что будет по крайней мере один запрос второго типа (удовлетворяющий \(t = 2\)).

Выходные данные

Для каждого запроса второго типа выведите единственное целое число — ответ на запрос.

Примечание

Изначально \(a = [1, 1, 0, 1, 0]\).

В первой операции нужно вывести третье наибольшее значение, которое равно \(1\).

Вторая операция присваивает \(a_2\) значение \(0\), \(a\) становится \([1, 0, 0, 1, 0]\).

В третьей операции нужно вывести третье наибольшее значение, которое равно \(0\).

В четвертой операции нужно вывести первое наибольшее значение, которое равно \(1\).

В пятой операции нужно вывести пятое наибольшее значение, которое равно \(0\).

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\).

B. Колода карт

жадные алгоритмы математика Структуры данных *1100

У вас есть колода из \(n\) карт, и вы хотите переупорядочить ее по-новому.

У каждой карты есть целое значение от \(1\) по \(n\) равное \(p_i\). Все \(p_i\) попарно различны. Карты в колоде пронумерованы снизу вверх, таким образом \(p_1\) лежит внизу колоды, а \(p_n\) — на самом верху.

Вы перекладываете колоду шаг за шагом. На каждом шаге вы выбираете некоторое целое \(k > 0\), берете \(k\) верхних карт из вашей колоды и кладете их, не меняя порядка, на верх новой колоды. Вы применяете данную операцию, пока ваша первоначальная колода не опустеет. (Для лучшего понимания изучите примечания к тестовым примерам.)

Назовем упорядоченностью колоды сумму \(\sum\limits_{i = 1}^{n}{n^{n - i} \cdot p_i}\).

Для заданной колоды, определите колоду с максимально возможной упорядоченностью, которую вы можете получить, используя алгоритм, описанный выше.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество карт в колоде.

Во второй строке заданы \(n\) целых чисел \(p_1, p_2,\dots, p_n\) (\(1 \le p_i \le n\); \(p_i \neq p_j\) если \(i \neq j\)) — значения карт в колоде в порядке снизу вверх.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите колоду с максимально возможной упорядоченностью. Выводите значения карт начиная с нижних в колоде.

Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных одна из оптимальных стратегий — следующая:

  1. возьмем \(1\) карту сверху \(p\) и перенесем ее в \(p'\): \(p\) станет \([1, 2, 3]\), \(p'\) станет \([4]\);
  2. возьмем \(1\) карту сверху \(p\): \(p\) станет \([1, 2]\), \(p'\) станет \([4, 3]\);
  3. возьмем \(1\) карту сверху \(p\): \(p\) станет \([1]\), \(p'\) станет \([4, 3, 2]\);
  4. возьмем \(1\) карту сверху \(p\): \(p\) опустеет, а \(p'\) станет \([4, 3, 2, 1]\).
В результате упорядоченность \(p'\) равна \(4^3 \cdot 4 + 4^2 \cdot 3 + 4^1 \cdot 2 + 4^0 \cdot 1\) \(=\) \(256 + 48 + 8 + 1 = 313\).

Во втором наборе одна из оптимальных стратегий такая:

  1. возьмем \(4\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([1]\), \(p'\) станет \([5, 2, 4, 3]\);
  2. возьмем \(1\) карту сверху \(p\) и перенесем ее в \(p'\): \(p\) опустеет, а \(p'\) станет \([5, 2, 4, 3, 1]\);
В результате упорядоченность \(p'\) равна \(5^4 \cdot 5 + 5^3 \cdot 2 + 5^2 \cdot 4 + 5^1 \cdot 3 + 5^0 \cdot 1\) \(=\) \(3125 + 250 + 100 + 15 + 1 = 3491\).

Во третьем наборе одна из оптимальных стратегий такая:

  1. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([4, 2, 5, 3]\), \(p'\) станет \([6, 1]\);
  2. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([4, 2]\), \(p'\) станет \([6, 1, 5, 3]\);
  3. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) опустеет, а \(p'\) станет \([6, 1, 5, 3, 4, 2]\).
В результате упорядоченность \(p'\) равна \(6^5 \cdot 6 + 6^4 \cdot 1 + 6^3 \cdot 5 + 6^2 \cdot 3 + 6^1 \cdot 4 + 6^0 \cdot 2\) \(=\) \(46656 + 1296 + 1080 + 108 + 24 + 2 = 49166\).

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\}\).

D. Ход гения

битмаски жадные алгоритмы Конструктив математика *1900

Вам заданы три целых числа \(a\), \(b\) и \(k\).

Найдите два двоичных числа \(x\) и \(y\) (\(x \ge y\)) такие, что:

  1. и \(x\), и \(y\) состоят из \(a\) нулей и \(b\) единиц (в двоичной системе счисления);
  2. \(x - y\) в двоичной системе содержит ровно \(k\) единиц.
В \(x\) и \(y\) ведущие нули запрещены.
Входные данные

В единственной строке заданы три целых числа \(a\), \(b\) и \(k\) (\(0 \leq a\); \(1 \leq b\); \(0 \leq k \leq a + b \leq 2 \cdot 10^5\)) — количество нулей, единиц и единиц в результирующем числе.

Выходные данные

В первой строке выведите «Yes», если можно найти два подходящих числа или «No» в противном случае.

В случае, если ответ существует, во второй строке выведите число \(x\) в двоичной системе счисления, а в третьей строке выведите число \(y\) также в двоичной системе счисления.

Если возможных ответов несколько, то выведите любой.

Примечание

В первом примере \(x = 101000_2 = 2^5 + 2^3 = 40_{10}\), \(y = 100001_2 = 2^5 + 2^0 = 33_{10}\), \(40_{10} - 33_{10} = 7_{10} = 2^2 + 2^1 + 2^0 = 111_{2}\). Отсюда видно, что в \(x-y\) содержатся ровно \(3\) единицы.

Во втором примере \(x = 10100_2 = 2^4 + 2^2 = 20_{10}\), \(y = 10010_2 = 2^4 + 2^1 = 18\), \(x - y = 20 - 18 = 2_{10} = 10_{2}\). Ровно одна единица.

В третьем примере из условия можно показать, что ответа нет.

E. Почти отказоустойчивая база данных

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2500

Вы храните в базе данных массив длины \(m\). Чтобы обезопасить данные от случайного повреждения, база данных хранит не одну, а \(n\) физических копий хранимой информации.

К сожалению, недавно в базе данных произошла масштабная авария, которая потенциально изменила информацию в каждой копии.

Предполагается, что инцидент поменял не более двух элементов в каждой копии. Вам нужно восстановить исходный массив из текущего состояния базы данных.

Если существует несколько способов восстановления, найдите любой. Если нет ни одного массива, отличающегося от каждой копии не более чем в двух позициях, определите это тоже.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(2 \le n\); \(1 \le m\); \(n \cdot m \le 250\,000\)) — количество физических копий исходной информации и размер массива исходной информации, соответственно.

В каждой из следующих \(n\) строк задан массив из \(m\) чисел \(s_{i, 1}, s_{i, 2}, \dots, s_{i, m}\) (\(1 \le s_{i, j} \le 10^9\)) — очередная физическая копия в базе данных после аварии.

Выходные данные

Если можно восстановить массив, который мог бы представлять исходную информацию, то выведите в первой строке слово «Yes», и во второй строке сам массив из ровно \(m\) чисел от \(1\) до \(10^9\).

Если возможных ответов несколько, то выведите любой.

Если ни одного ответа нет, то выведите в единственной строке слово «No».

Примечание

В первом примере массив \([1, 10, 1, 100]\) отличается от первой и второй физических копий ровно в одной позиции, от третьей физической копии ровно в двух позициях.

Во втором примере массив \([1, 1, 1, 1, 1, 1, 1]\) равен первой физической копии и отличается от каждой из остальных девяти физических копий не более чем в двух позициях.

В третьем примере невозможно найти какой-нибудь массив, который отличается не более чем в двух позициях от обеих физических копий после аварии.

A. Антирюкзак

жадные алгоритмы Конструктив *800

Дано два целых числа \(n\) и \(k\). Нужно выбрать максимальное количество различных натуральных чисел от \(1\) до \(n\) так, чтобы среди них нельзя было выбрать подмножество чисел с суммой \(k\).

Подмножеством множества чисел называется множество, которое может быть получено из исходного удалением некоторых (возможно, всех или никаких) элементов множества.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

Каждая из следующих \(T\) строк содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1000\)) — описания наборов входных данных.

Выходные данные

Для каждого набора входных данных выведите две строки. В первой строке выведите количество выбранных чисел \(m\).

Во второй строке выведите \(m\) различных натуральных чисел от \(1\) до \(n\) — выбранные числа.

Если существует несколько решений, выведите любое из них. Вы можете выводить числа в любом порядке.

C. K-красивые строки

Бинарный поиск жадные алгоритмы Конструктив Перебор Строки *2000

Дана строка \(s\) из строчных букв английского алфавита и число \(k\). Назовем строку из строчных букв английского алфавита красивой, если количество вхождений каждой буквы в эту строку кратно числу \(k\). Требуется найти лексикографически минимальную красивую строку длины \(n\), которая лексикографически больше или равна строке \(s\). Если такой строки не существует, выведите \(-1\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 10\,000\)) — количество наборов входных данных.

Следующие \(2 \cdot T\) строк содержат описание наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)) — длину строки \(s\) и число \(k\) соответственно.

Вторая строка содержит строку \(s\) из строчных букв английского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите лексикографически минимальную красивую строку длины \(n\), которая больше или равна строке \(s\), или \(-1\), если такой строки не существует.

Примечание

В первом наборе входных данных «acac» лексикографически больше или равна \(s\), а каждая буква в ней встречается \(2\) или \(0\) раз, поэтому она красивая.

Во втором наборе входных данных каждая буква в \(s\) встречается \(0\) или \(1\) раз, поэтому сама \(s\) является ответом.

Можно показать, что в третьем наборе подходящей строки нет.

В четвертом примере каждая буква встречается \(0\), \(3\) или \(6\) раз в «abaabaaab». Все эти числа делятся на \(3\).

E. Огромный XOR

битмаски жадные алгоритмы Конструктив математика Строки *2600

Даны два целых числа \(l\) и \(r\) в двоичном представлении. Пусть \(g(x, y)\) равняется побитовому исключающему ИЛИ всех целых чисел от \(x\) до \(y\) включительно (т. е. \(x \oplus (x+1) \oplus \dots \oplus (y-1) \oplus y\)). Определим \(f(l, r)\) как максимум по всем значениям \(g(x, y)\) при \(l \le x \le y \le r\).

Выведите \(f(l, r)\).

Входные данные

Первая строка входных данных содержит одна целое число \(n\) (\(1 \le n \le 10^6\)) — длину двоичного представления числа \(r\).

Вторая строка содержит двоичное представление числа \(l\) — строку из цифр \(0\) и \(1\) длины \(n\) (\(0 \le l < 2^n\)).

Третья строка содержит двоичное представление числа \(r\) — строку из цифр \(0\) и \(1\) длины \(n\) (\(0 \le r < 2^n\)).

Гарантируется, что \(l \le r\). Двоичное представление числа \(r\) не содержит лишних ведущих нулей (если \(r=0\), то его битовое представление состоит из одного нуля). Двоичное представление числа \(l\) дополнено ведущими нулями так, чтобы его длина была равна \(n\).

Выходные данные

В единственной строке выведите значение \(f(l, r)\) в двоичном представлении без лишних ведущих нулей для данных \(l\) и \(r\).

Примечание

В примере из условия \(l=19\), \(r=122\). \(f(x,y)\) максимально и равно \(127\), например, при \(x=27\), \(y=100\).

B. Берляндский кроссворд

битмаски жадные алгоритмы Перебор реализация *1400

Берляндский кроссворд — это головоломка, которая решается на квадратном поле, состоящим из \(n\) строк и \(n\) столбцов. Изначально все ячейки белые.

Чтобы решить головоломку, нужно раскрасить некоторые ячейки на границах поля в черный цвет так, чтобы:

  • ровно \(U\) ячеек в верхнем ряду были черными;
  • ровно \(R\) ячеек в правом столбце были черными;
  • ровно \(D\) ячеек в нижнем ряду были черными;
  • ровно \(L\) ячеек в левом столбце были черными.

Обратите внимание, что можно ничего не красить в черный и оставить все клетки белыми.

Ваша задача — проверить, существует ли решение у заданной головоломки.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В единственной строке каждого набора входных данных записаны \(5\) целых чисел \(n, U, R, D, L\) (\(2 \le n \le 100\); \(0 \le U, R, D, L \le n\)).

Выходные данные

На каждый набор входных данных выведите «YES», если решение существует, и «NO» в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

Возможные решения на наборы входных данных \(1\), \(2\) и \(4\):

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\).

D. Dogeforces

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное разделяй и властвуй снм сортировки Структуры данных *2300

В компании Dogeforces работают \(k\) сотрудников. У каждого сотрудника, кроме сотрудников нижнего звена, есть не менее \(2\) подчиненных. У сотрудников нижнего звена нет подчиненных. У каждого сотрудника (кроме руководителя компании) есть ровно один непосредственный начальник. Руководитель компании является непосредственным или косвенным начальником всех сотрудников. Известно, что в Dogeforces любой начальник получает зарплату строго больше, чем все его подчиненные.

Полная структура компании является секретом, но вам известно количество сотрудников нижнего звена и для каждой пары сотрудников нижнего звена известна зарплата их общего начальника (если таких начальников несколько, то начальника с минимальной зарплатой). Вам предстоит восстановить структуру компании.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 500\)) — количество сотрудников нижнего звена.

Далее следует \(n\) строк, где \(i\)-я строка содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,n}\) (\(1 \le a_{i,j} \le 5000\)) — зарплата общего начальника сотрудников с номерами \(i\) и \(j\). Гарантируется, что \(a_{i,j} = a_{j,i}\). Обратите внимание, что \(a_{i,i}\) равно зарплате \(i\)-го сотрудника.

Выходные данные

В первую строку выведите одно целое число \(k\) — количество сотрудников в компании.

Во второй строке выведите \(k\) целых чисел \(c_1, c_2, \dots, c_k\), где \(c_i\) — зарплата сотрудника с номером \(i\).

В третьей строке выведите одно целое число \(r\) — номер сотрудника, который является руководителем компании.

В последующих \(k-1\) строках выведите по два целых числа \(v\) и \(u\) (\(1 \le v, u \le k\)) — номер сотрудника и его непосредственного начальника.

Обратите внимание, что сотрудники нижнего звена имею номера с \(1\) по \(n\), а для остальных сотрудников вам предстоит назначить номера от \(n+1\) до \(k\). Если корректных структур компании несколько, вы можете вывести любую из них.

Примечание

Одна из возможных структур в первом примере:

A. Добытчик алмазов

геометрия жадные алгоритмы математика сортировки *1200

«Добытчик алмазов» — игра, похожая на «Добытчик золота», но в этой игре \(n\) шахтеров, а не \(1\).

Шахта может быть представлена как плоскость. Будем рассматривать \(n\) шахтеров как \(n\) точек, расположенных на оси y. В шахте расположены \(n\) алмазов, будем рассматривать их как \(n\) точек на оси x. По каким-то причинам ни шахтеры, ни алмазы не могут быть расположены в начале координат (точке \((0, 0)\)).

Каждый шахтер должен добыть ровно один алмаз. У каждого шахтера есть крюк, с помощью которого он может достать алмаз. Если шахтер, находящийся в точке \((a,b)\) использует свой крюк для добычи алмаза, расположенного в точке \((c,d)\), он потратит \(\sqrt{(a-c)^2+(b-d)^2}\) (расстояние между точками) единиц энергии. Шахтеры не могут перемещаться и помогать друг другу.

Цель игры — распределить алмазы по шахтерам так, чтобы минимизировать сумму затраченной энергии. Сможете ли вы найти этот возможный минимум?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество шахтеров и алмазов.

Каждая из следующих \(2n\) строк содержит два целых числа \(x\) (\(-10^8 \le x \le 10^8\)) и \(y\) (\(-10^8 \le y \le 10^8\)), описывающие некоторую точку \((x,y)\), в которой находится шахтер или алмаз. Гарантируется, что либо \(x = 0\), что значит, что в точке \((0, y)\) находится шахтер, либо \(y = 0\), что значит, что в точке \((x, 0)\) находится алмаз. В одной точке могут находится несколько шахтеров или алмазов.

Гарантируется, что никакая точка не находится в начале координат. Также гарантируется, что на оси x ровно \(n\) точек, и на оси y тоже ровно \(n\) точек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно вещественное число — минимально возможную сумму затраченных энергий.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-9}\).

Примечание

В первом примере есть два шахтера в точках \((0,1)\) и \((0,-1)\), а алмазы расположены в точках \((1,0)\) и \((-2,0)\). Если распределить алмазы по шахтерам, как показано на рисунке, то потратится \(\sqrt2 + \sqrt5\) единиц энергии.

B. Идем в поход!

жадные алгоритмы игры *1900

На выходных Циншань хотела бы пойти со своим другом Даниэлем в поход, но, к сожалению, они — очень занятые школьники, поэтому они могут пойти в поход только на бумаге.

На листочке записана перестановка \(p\). Сначала Циншань выбирает индекс \(x\) (\(1\le x\le n\)) и сообщает его Даниэлю. После этого Даниэль выбирает другой индекс \(y\) (\(1\le y\le n\), \(y \ne x\)).

Далее начинается игра, в которой они ходят по-очереди, Циншань ходит первой. Правила следующие:

  • В свой ход Циншань должна изменить значение \(x\) на \(x'\) так, что одновременно выполняются условия \(1\le x'\le n\), \(|x'-x|=1\), \(x'\ne y\) и \(p_{x'}<p_x\).
  • В свой ход Даниэль должен изменить значение \(y\) на \(y'\) так, что одновременно выполняются условия \(1\le y'\le n\), \(|y'-y|=1\), \(y'\ne x\) и \(p_{y'}>p_y\).

Игрок, который не может сделать ход, проигрывает, а другой игрок выигрывает. Вы болеете за Циншань и должны определить, сколько существует различных способов выбрать в начале \(x\) так, чтобы Циншань выигрывала при условии, что оба игрока играют оптимально.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2\le n\le 10^5\)) — длину перестановки.

Вторая строка содержит \(n\) различных целых чисел \(p_1,p_2,\dots,p_n\) (\(1\le p_i\le n\)) — числа перестановки.

Выходные данные

Выведите количество способов выбрать \(x\) в начале игры так, чтобы выигрывала Циншань.

Примечание

В первом тесте Циншань для выигрыша обязана выбрать \(x=3\), поэтому ответ равен \(1\).

Во втором тесте если Циншань выберет \(x=4\), Даниэль может выбрать \(y=1\). На первом ходу (ходит Циншань) Циншань выберет \(x'=3\) и поменяет \(x\) на \(3\). На втором ходу (ходит Даниэль) Даниэль выберет \(y'=2\) и поменяет \(y\) на \(2\). Далее Циншань не сможет выбрать \(x'=2\), потому что \(y=2\) в текущий момент. Поэтому Циншань проиграет.

E. Циншань и Даниэль

жадные алгоритмы Перебор реализация Структуры данных *3200

Циншань и Даниэль собираются сыграть в карточную игру. Но играть в нее только вдвоем будет очень скучно. Поэтому они решили сделать \(n\) роботов, чтобы они сыграли в игру автоматически. Роботы, сделанные Циншань, относятся к команде \(1\), а роботы, сделанные Даниэлем, относятся к команде \(2\). Робот \(i\) находится в команде \(t_i\). Перед началом игры роботу \(i\) выдается \(a_i\) карт.

Правила карточной игры просты:

  • Роботы выстраиваются по кругу в порядке номеров и будут в некотором порядке выбрасывать по одной карте. Сначала робот \(1\) выбрасывает одну из своих карт из игры. После этого роботы будут действовать по следующим правилам:
  • Если последнюю карту выбросил робот \(i\), то следующим карту выбрасывает ближайший робот, чья команда противоположна команде \(i\)-го робота. Другими словами, робот \(j\) должен выбросить одну свою карту сразу после робота \(i\), если и только если среди всех возможных \(j\) таких, что \(t_i\ne t_j\), расстояние \(dist(i,j)\) (определение будет дано ниже) минимально.
  • Робот, у которого больше не осталось карт, должен завершить игру немедленно. Этот робот не будет рассматриваться в следующих шагах.
  • Когда нет подходящего робота, который должен выбросить следующую карту, игра заканчивается.

Мы определяем расстояние от робота \(x\) до робота \(y\) как \(dist(x,y)=(y-x+n)\bmod n\). Это соответствует ориентированному расстоянию по кругу.

Например, если \(n=5\), то расстояние от \(1\) до \(3\) это \(dist(1,3)=(3-1+5)\bmod 5=2\), а расстояние от \(3\) до \(1\) это \(dist(3,1)=(1-3+5)\bmod 5 =3\).

Циншань заметила, что наблюдение за игрой роботов занимает очень большое время. Она хочет узнать результаты как можно быстрее. Вы, как фанат Циншань, должны помочь ей посчитать массив \([ans_1,ans_2,\ldots,ans_n]\): \(ans_i\) равно количеству карт, которое выбросит \(i\)-й робот в течение всей игры. Нужно спешить!

Чтобы избежать большого размера входных данных, команды и количества карт каждого робота должны быть сгенерированы в вашей программе с использованием некоторых вспомогательных массивов.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 5\cdot 10^6\)) — количество роботов, играющих в игру.

Во второй строке находится единственное целое число \(m\) (\(1 \le m \le \min(n,200\,000)\)).

Каждая из следующих \(m\) строк содержит четыре целых числа \(p_i\), \(k_i\), \(b_i\), \(w_i\) (\(1 \le p_i \le n\), \(1 \le k_i \le 10^9+7\), \(0 \le b_i ,w_i< k_i\)). Гарантируется, что \(p_m=n\) и \(p_{j-1}<p_{j}\) (\(2 \le j \le m\)).

Массивы \(a_j\) и \(t_j\) должны быть сгенерированы следующим псевдокодом:


seed = 0
base = 0

function rnd():
ret = seed
seed = (seed * base + 233) mod 1000000007
return ret

p[0] = 0
for i = 1 to m:
seed = b[i]
base = w[i]
for j = p[i - 1] + 1 to p[i]:
t[j] = (rnd() mod 2) + 1
a[j] = (rnd() mod k[i]) + 1
Выходные данные

Выведите единственное целое число \(\left( \prod_{i=1}^{n} ((ans_i \oplus i^2)+1)\right) \bmod 10^9+7\), где \(\oplus\) обозначает операцию исключающего ИЛИ.

Примечание

В первом тесте \(a=[5,5,1]\) и \(t=[1,2,2]\).

Робот \(1\) выбрасывает первую карту.

Затем робот \(2\) выбрасывает карту. Это делает не робот \(3\), потому что \(dist(1,2)<dist(1,3)\).

Затем робот \(1\) выбрасывает карту. Это делает не робот \(3\), потому что \(t_2=t_3\).

Если мы выпишем индексы роботов, которые будут выбрасывать карты по очереди, то мы получим последовательность \([1,2,1,2,1,2,1,2]\). Поэтому роботы \(1\), \(2\) и \(3\) уберут \(5\), \(5\) и \(0\) карт, соответственно. Ответ будет равен \((((5 \oplus 1^2)+1)\times((5 \oplus 2^2)+1)\times((0 \oplus 3^2)+1)) \bmod 10^9+7=(5\times 2 \times 10)\bmod 10^9+7=100\).

A. Раздели!

жадные алгоритмы Конструктив Перебор Строки *900

Каваширо Нитори — девочка, любящая спортивное программирование.

Однажды она нашла строку и целое число. Будучи опытным составителем задач, она сразу подумала о следующей задаче.

Дана строка \(s\) и параметр \(k\), проверьте, существует ли последовательность из \(k+1\) непустой строки \(a_1,a_2...,a_{k+1}\) такая, что \(\)s=a_1+a_2+\ldots +a_k+a_{k+1}+R(a_k)+R(a_{k-1})+\ldots+R(a_{1}).\(\)

Здесь \(+\) обозначает конкатенацию (соединение) строк. \(R(x)\) — разворот строки \(x\), например, \(R(abcd) = dcba\). Обратите внимание, что в выражении выше специально пропущено слагаемое вида \(R(a_{k+1})\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n\le 100\), \(0\le k\le \lfloor \frac{n}{2} \rfloor\)) — длину строки \(s\) и параметр \(k\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно найти \(a_1,a_2,\ldots,a_{k+1}\), и «NO» (без кавычек) иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе входных данных одно из решений \(a_1=qw\) и \(a_2=q\).

Во втором наборе входных данных одно из решений \(a_1=i\) и \(a_2=o\).

В пятом наборе входных данных одно из решений — это \(a_1=dokidokiliteratureclub\).

A. Мексимизация

жадные алгоритмы Перебор сортировки Структуры данных *800

Дано число \(n\) и массив \(a_1, a_2, \ldots, a_n\). Необходимо переставить числа в массиве \(a\) так, чтобы сумма \(\textbf{MEX}\) на всех префиксах массива (\(i\)-й префикс  — это \(a_1, a_2, \ldots, a_i\)) была максимальна.

Формально, вам нужно найти массив \(b_1, b_2, \ldots, b_n\), такой что наборы чисел массивов \(a\) и \(b\) совпадают (то есть массив \(b\) получается некоторой перестановкой чисел в массиве \(a\)) и \(\sum\limits_{i=1}^{n} \textbf{MEX}(b_1, b_2, \ldots, b_i)\) максимальна.

Напомним, что \(\textbf{MEX}\) множества целых неотрицательных чисел  — такое минимальное целое неотрицательное число, которое не входит в это множество.

Например, \(\textbf{MEX}(\{1, 2, 3\}) = 0\), \(\textbf{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) \((1 \le n \le 100)\).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \le a_i \le 100)\).

Выходные данные

Для каждого набора входных данных выведите массив \(b_1, b_2, \ldots, b_n\), являющийся оптимальной перестановкой чисел \(a_1, a_2, \ldots, a_n\), то есть сумма \(\textbf{MEX}\) на всех его префиксах максимальна.

Если существует несколько оптимальных ответов, вы можете найти любой.

Примечание

В первом наборе входных данных в ответе \(\textbf{MEX}\) на префиксах будет таким:

  1. \(\textbf{MEX}(\{0\}) = 1\)
  2. \(\textbf{MEX}(\{0, 1\}) = 2\)
  3. \(\textbf{MEX}(\{0, 1, 2\}) = 3\)
  4. \(\textbf{MEX}(\{0, 1, 2, 3\}) = 4\)
  5. \(\textbf{MEX}(\{0, 1, 2, 3, 4\}) = 5\)
  6. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7\}) = 5\)
  7. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7, 3\}) = 5\)
Сумма \(\textbf{MEX} = 1 + 2 + 3 + 4 + 5 + 5 + 5 = 25\). Можно показать, что это максимальная возможная сумма \(\textbf{MEX}\) на префиксах.

B. M-массивы

жадные алгоритмы Конструктив математика *1200

Дан массив \(a_1, a_2, \ldots, a_n\), состоящий из \(n\) положительных целых чисел, и положительное целое число \(m\).

Вы должны разделить элементы этого массива на несколько массивов. Внутри каждого из массивов вы можете переставить числа как угодно.

Назовём массив \(m\)-делимым, если сумма любых двух соседних чисел массива делится на \(m\) (соседними называются числа, стоящие на позициях \(i\) и \(i+1\) для некоторого \(i\)). Массив из одного элемента является \(m\)-делимым.

Найдите наименьшее количество \(m\)-делимых массивов, на которые можно разделить \(a_1, a_2, \ldots, a_n\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) \((1 \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)\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на задачу.

Примечание

В первом наборе входных данных можно разделить массив следующим образом:

  • \([4, 8]\). Этот массив является \(4\)-делимым, потому что \(4+8\) делится на \(4\).
  • \([2, 6, 2]\). Этот массив является \(4\)-делимым, потому что \(2+6\) и \(6+2\) делятся на \(4\).
  • \([9]\). Этот массив является \(4\)-делимым, потому что он состоит из одного элемента.

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]\)

B. Коробка

Бинарный поиск битмаски жадные алгоритмы Структуры данных *1300

У вас есть \(n\) прямоугольников, каждый имеет высоту \(1\). Ширина каждого прямоугольника — степень числа \(2\) (т. е. ее можно представить как \(2^x\) для некоторого неотрицательного целого \(x\)).

У вас также есть двумерная коробка ширины \(W\). Обратите внимание, что \(W\) может быть степенью числа \(2\), а может и не быть. Точно известно, что \(W\) не меньше ширины наибольшего прямоугольника.

Вы должны выбрать высоту этой коробки так, чтобы в нее можно было поместить все прямоугольники (при этом высоту необходимо минимизировать). Разрешается укладывать прямоугольники так, чтобы они не занимали все пространство коробки.

Прямоугольники нельзя вращать, кроме того, они не должны пересекаться после укладки (то есть для каждой пары прямоугольников, уложенных в коробку, их площадь пересечения должна быть нулевой).

Посмотрите пояснение для того, чтобы увидеть визуализацию условия задачи.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^3\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

Для каждого набора:

  • первая строка содержит два целых числа \(n\) (\(1 \le n \le 10^5\)) и \(W\) (\(1 \le W \le 10^9\));
  • вторая строка содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^6\)), где \(w_i\) — ширина \(i\)-го прямоугольника. Каждое число \(w_i\) является степенью числа \(2\);
  • дополнительное ограничение: \(\max\limits_{i=1}^{n} w_i \le W\).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е число должно быть равно ответу на \(i\)-й набор входных — минимальной высоте коробки.

Примечание

Первый набор входных данных в примере разобран на следующей картинке:

На этой картинке число внутри каждого прямоугольника — это его ширина. Ширина коробки равна \(16\) (см. обозначения в нижней части картинки). Минимальная высота коробки равна \(2\) (см. обозначения в левой части картинки).

Во втором наборе входных данных можно расположить на каждом уровне по одному прямоугольнику ширины 8 и ширины 2, так потребуется всего три уровня (и высота коробки будет равна 3).

E. Два дома

графы жадные алгоритмы интерактив Перебор сортировки *2200

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Диксит живет в городе, в котором \(n\) домов. Между каждой парой домов есть ровно одна направленная дорога. То есть для любой пары домов A и B есть либо дорога от дома A к дому B, либо дорога от B к A (но только одна из них). К \(i\)-му дому ведут \(k_i\) дорог.

Два дома A и B являются взаимно достижимыми, если дом A достижим из дома B (существует путь от дома A к дому B по дорогам), и дом B достижим из дома A.

Диксит хочет купить в этом городе два дома, один для того, чтобы жить в нем, другой — для учебы. Естественно, он бы хотел, чтобы от каждого из этих домов можно было добраться до другого дома, то есть ему нужно найти пару взаимно достижимых домов. Если таких пар несколько, Диксит хочет максимизировать величину \(|k_A - k_B|\), где \(k_i\) — количество дорог, ведущих к дому \(i\). Если существует более одной оптимальной пары, подойдет любая из них.

Так как Диксит занят подготовкой CodeCraft, он просит вас помочь ему найти два таких дома, или сообщить, что таких домов нет.

Во входных данных задачи вам не задаются направления дорог. Вы знаете только количество дорог, идущих к каждому дому (\(k_i\)).

Вы можете задавать запросы следующих типов: вы выводите пару домов A и B, и жюри ответит, есть ли путь от дома A к дому B. В этой задаче нет никакого явного ограничения на количество запросов, которые вы можете задать. Но нельзя задавать запросы после того, как жюри ответит «Yes» на один из ваших запросов. Кроме того, нельзя задавать один и тот же запрос дважды.

Как только вы зададите все необходимые запросы (или жюри ответит «Yes» на один из них), ваша программа должна вывести ответ и завершиться.

Прочтите раздел «Протокол взаимодействия» для того, чтобы получить более подробную информацию о взаимодействии.

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 500\)) — количество домов в городе. Во второй строке заданы \(n\) целых чисел \(k_1, k_2, \dots, k_n\) (\(0 \le k_i \le n - 1\)), \(i\)-е из которых равно кол-ву дорог, идущих к \(i\)-му дому.

Протокол взаимодействия

Чтобы задать запрос, выведите «? A B» \((1 \leq A,B \leq N, A\neq B)\). Программа жюри ответит «Yes», если есть путь от дома A к дому B, или «No», если пути нет.

Чтобы дать ответ на задачу, выведите «! A B», где A и B — номера двух различных домов, достижимых друг из друга, с максимально возможной величиной \(|k_A - k_B|\). Если такой пары домов не существует, выведите «! 0 0».

После вывода ответа ваша программа должна завершиться, иначе вы получите вердикт «Неправильный ответ».

Вы не можете задавать один и тот же запрос дважды. Нет никакого ограничения на количество запросов, но вы не можете задавать запросы после получения ответа «Yes». После этого ваша программа сразу должна вывести ответ на задачу («! A B» или «! 0 0») и завершиться.

Если вы зададите запрос в неправильном формате или зададите один и тот же запрос дважды, вы получите вердикт «Неправильный ответ».

После вывода запроса не забудьте вывести символ конца строки и сбросить буфер вывода (иначе вы можете получить вердикт «Решение зависло»). В различных языках программирования сброс буфера вывода реализован следующим образом:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • для других языков посмотрите их документацию.
Примечание

В первом примере нам задан город с тремя домами, в каждый из которых ведет по одной дороге. Решение участника задает запрос «? 1 2», чтобы узнать, можно ли от дома \(1\) добраться до дома \(2\). Программа жюри отвечает «Yes». После этого решение участника выводит ответ «! 1 2» и завершается.

Во втором примере решение участника делает шесть различных запросов, убеждается в том, что пары домов, достижимых друг из друга, нет, и выводит «! 0 0» в качестве ответа.

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'\) была отсортирована.

C. Минимальный путь на поле

жадные алгоритмы математика Перебор Структуры данных *1500

Предположим, вы стоите на плоскости \(XY\) в точке \((0, 0)\) и хотите попасть в точку \((n, n)\).

Вы можете двигать только в двух направлениях:

  • вправо, т. е. горизонтально и в направлении увеличения \(x\) коодинаты,
  • или вверх, т. е. вертикально и в направлении увеличения \(y\) координаты.

Другими словами, ваш путь имеет следующую структуру:

  • первоначально, вы выбираете: пойти вправо или вверх;
  • далее вы проходите некоторое положительное целое расстояние в выбранном направлении (расстояния можно выбирать независимо);
  • далее вы меняете направление движения (от «вправо» к «вверх», либо от «вверх» к «вправо») и повторяете процесс.

Вам не нравится менять свое направление слишком много раз, а потому вы сделаете не более \(n - 1\) изменений направления.

В результате ваш путь будет представлять ломаную от \((0, 0)\) к \((n, n)\), состоящую из не более чем \(n\) отрезков, каждый из которых имеет положительную целую длину, а также вертикальные и горизонтальные отрезки идут по очереди.

Не все пути равны. У вас есть \(n\) целых чисел \(c_1, c_2, \dots, c_n\), где \(c_i\) — это цена \(i\)-го отрезка.

Используя эти цены, можно определить цену пути как сумму длин отрезков этого пути умноженных на их стоимости, т. е. если путь состоит из \(k\) отрезков (\(k \le n\)), то цена пути равна \(\sum\limits_{i=1}^{k}{c_i \cdot length_i}\) (отрезки нумеруются от \(1\) по \(k\) в порядке их обхода).

Определите путь минимальной стоимости и выведите его цену.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)) — цены каждого отрезка.

Гарантируется, что сумма \(n\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных вы должны вывести минимальную цену пути из \((0, 0)\) в \((n, n)\), состоящего из не более \(n\) чередующихся отрезков.

Примечание

В первом примере из условия, чтобы достигнуть \((2, 2)\), нужно сделать хотя бы один поворот, и путь может состоять из \(2\) отрезков: горизонтального длины \(2\) и вертикального длины \(2\). Стоимость равна \(2 \cdot c_1 + 2 \cdot c_2 = 26 + 176 = 202\).

Во втором примере можно построить путь из \(3\) отрезков: длины \(1\), длины \(3\) и длины \(2\). Стоимость равна \(1 \cdot 2 + 3 \cdot 3 + 2 \cdot 1 = 13\).

В третьем примере можно построить путь из \(4\) отрезков: длины \(1\), длины \(1\), длины \(4\) и длины \(4\). Стоимость равна \(1 \cdot 4 + 1 \cdot 3 + 4 \cdot 2 + 4 \cdot 1 = 19\).

C. Сортировка матрицы

битмаски жадные алгоритмы Конструктив Перебор *2600

Даны две таблицы \(A\) и \(B\) размера \(n \times m\).

Назовём сортировкой по столбцу следующее действие: выбирается столбец, и все строки упорядочиваются по значению в этом столбце, от строк, содержащих меньшие значения, к строкам с большими. В случае, если две строки имеют одинаковое значение в этом столбце, их порядок не меняется (такие сортировки называются стабильными).

Подобное поведение сортировки по столбцу можно найти практически в любом офисном приложении для работы с таблицами. Петя работает в одном из таких приложений, и у него открыта таблица \(A\). Он хочет проделать ноль или более операций сортировки по столбцу, чтобы получить таблицу \(B\).

Определите, может ли он это сделать, и если может, предложите ему алгоритм действий — последовательность столбцов, по которым нужно применить сортировку по столбцу. Обратите внимание, что не требуется минимизировать число действий.

Входные данные

В первой строке даны два числа \(n\) и \(m\) (\(1 \le n, m \le 1500\)) — размеры таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,j}\) (\(1 \le a_{i, j} \le n\)) — элементы таблицы \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, j}\) (\(1 \le b_{i, j} \le n\)) — элементы таблицы \(B\).

Выходные данные

Если превратить таблицу \(A\) в таблицу \(B\) невозможно, выведите \(-1\).

В противном случае выведите \(k\) (\(0 \le k \le 5000\)) — количество сортировок, которые нужно сделать.

Затем выведите \(k\) целых чисел \(c_1, \ldots, c_k\) (\(1 \le c_i \le m\)) — номера столбцов, по которым нужно сделать сортировку.

Можно доказать, что если Петя может осуществить желаемое, то \(5000\) действий ему хватит.

Примечание

Рассмотрим второй пример. После сортировки по первому столбцу таблица имеет вид

\(\)\begin{matrix} 1&3&3\\ 1&1&2\\ 2&3&2. \end{matrix}\(\)

После того, как мы отсортируем таблицу по второму столбцу, она станет

\(\)\begin{matrix} 1&1&2\\ 1&3&3\\ 2&3&2, \end{matrix}\(\)

что нам и нужно.

В третьем тесте любая сортировка не меняет таблицу, так как все столбцы уже отсортированы.

A. Сбалансируйте биты

жадные алгоритмы Конструктив *1600

Скобочная последовательность называется сбалансированной, если ее можно превратить в корректное математическое выражение путем добавления символов '+' и '1'. Например, последовательности «(())()», «()» и «(()(()))» являются сбалансированными, а «)(», «(()» и «(()))(» — нет.

Вам дана бинарная строка \(s\) длины \(n\). Постройте две сбалансированные скобочные последовательности \(a\) и \(b\) длины \(n\) такие, что для всех \(1\le i\le n\) выполняется:

  • если \(s_i=1\), то \(a_i=b_i\)
  • если \(s_i=0\), то \(a_i\ne b_i\)

Если это невозможно, вы должны это определить.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\), \(n\) — четное).

Следующая строка содержит строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Сумма \(n\) во всех тестовых случаях не превышает \(2\cdot 10^5\).

Выходные данные

Если такие две сбалансированные скобочные последовательности существуют, выведите «YES» в первой строке, иначе выведите «NO». Вы можете выводить каждый символ в любом регистре.

Если ответ «YES», в двух следующих строках выведите сбалансированные скобочные последовательности \(a\) и \(b\), удовлетворяющие условиям.

Если есть несколько решений, то можно вывести любое.

Примечание

В первом наборе входных данных \(a=\)«()()()» и \(b=\)«((()))». Символы равны в позициях \(1\), \(3\), \(4\) и \(6\), ровно в тех позициях, где \(s_i=1\).

Во втором наборе входных данных \(a=\)«()()((()))» и \(b=\)«(())()()()». Символы равны в позициях \(1\), \(4\), \(5\), \(7\), \(8\), \(10\), ровно в тех позициях, где \(s_i=1\).

В третьем наборе входных данных решения нет.

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\), и мы не можем обойтись меньшим числом долларов.

D. Переверните карты

2-sat жадные алгоритмы Конструктив сортировки Структуры данных *2600

Есть колода из \(n\) карт. На карте \(i\) на лицевой стороне написано число \(a_i\), а на оборотной — \(b_i\). Каждое целое число от \(1\) до \(2n\) встречается на картах ровно один раз.

Колода называется отсортированной, если лицевые значения находятся в порядке возрастания, а оборотные — в порядке убывания. То есть, если \(a_i< a_{i+1}\) и \(b_i> b_{i+1}\) для всех \(1\le i<n\).

Перевернуть карту \(i\) означает поменять местами значения \(a_i\) и \(b_i\). Вы должны перевернуть некоторое подмножество карт (возможно, ни одной), а затем разместить эти карты в каком-то порядке. Какое минимальное количество карт вы должны перевернуть, чтобы отсортировать колоду?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество карт.

Следующие \(n\) строк описывают карты. \(i\)-я из этих строк содержит два целых числа \(a_i, b_i\) (\(1\le a_i, b_i\le 2n\)). Каждое целое число от \(1\) до \(2n\) встречается ровно один раз.

Выходные данные

Если отсортировать колоду невозможно, выведите «-1». В противном случае выведите минимальное количество карт, которые необходимо перевернуть, чтобы отсортировать колоду.

Примечание

В первом примере мы переворачиваем карты \((1, 9)\) и \((2, 7)\). Затем карты располагают в порядке \((3,10), (5,8), (6,4), (7,2), (9,1)\). Колода отсортирована потому, что \(3<5<6<7<9\) и \(10>8>4>2>1\).

Во втором примере отсортировать колоду невозможно.

B. Меняем биты

жадные алгоритмы Конструктив математика реализация *1200

Дана бинарная строка \(a\) длины \(n\). За одну операцию можно выбрать любой префикс \(a\) с равным числом символов \(0\) и \(1\). Затем все символы в префиксе меняются: каждый \(0\) становится \(1\), а каждый \(1\)\(0\).

Например, предположим, что \(a=0111010000\).

  • В первой операции можно выбрать префикс длины \(8\), так как он имеет четыре \(0\) и четыре \(1\): \([01110100]00\to [10001011]00\).
  • Во второй операции можно выбрать префикс длины \(2\), так как он имеет один \(0\) и одну \(1\): \([10]00101100\to [01]00101100\).
  • Для третьей операции запрещено выбирать префикс длины \(4\), так как он имеет три \(0\) и одну \(1\).

Можете ли вы преобразовать строку \(a\) в строку \(b\), сделав некоторое конечное количество операций (возможно, ни одной)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое \(n\) (\(1\le n\le 3\cdot 10^5\)) — длина строк \(a\) и \(b\).

Следующие две строки содержат строки \(a\) и \(b\) длиной \(n\), состоящие из символов \(0\) и \(1\).

Сумма \(n\) во всех наборах входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно преобразовать \(a\) в \(b\), или «NO», если это невозможно. Вы можете выводить каждый символ в любом регистре.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных мы преобразуем \(a\) в \(b\), используя ноль операций.

В третьем наборе входных данных нельзя сделать ни одну операцию, поэтому преобразовать \(a\) в \(b\) невозможно.

В четвертом наборе входных данных, вот одно из таких преобразований:

  • Выберите префикс длины \(2\), чтобы получить \(100101010101\).
  • Выберите префикс длины \(12\), чтобы получить \(011010101010\).
  • Выберите префикс длины \(8\), чтобы получить \(100101011010\).
  • Выберите префикс длины \(4\), чтобы получить \(011001011010\).
  • Выберите префикс длины \(6\), чтобы получить \(100110011010\).

В пятом наборе входных данных единственной разрешенной операцией является преобразование \(a\) в \(111000\). Но для получившейся строки единственная разрешенная операция — это вернуться к строке, с которой мы начали, поэтому мы не можем преобразовать \(a\) в \(b\).

E. Прогулка по торту

*особая задача жадные алгоритмы кратчайшие пути реализация *1800

Мышь нашла большой красивый торт и решила прогуляться по нему, попутно объедая ягоды на верхушке торта. Торт прямоугольный и разделен на аккуратные квадраты; в некоторых квадратах есть ягода, а в некоторых нет.

Мышь спешит, поэтому когда она взберется на торт в его северо-западном углу (вернняя левая клетка входных данных), она будет двигаться только на восток (направо) или на юг (вниз), пока не достигнет юго-восточного угла (нижняя правая клетка). Она съест все ягоды на клетках, через которые она пройдет, и оставит остальные ягоды нетронутыми.

Мышь хочет выбрать свой путь так, чтобы съесть наибольшее возможное количество ягод. Но, возможно, ее спешка и голод затмевают ее разум и вынуждают ее принимать неоптимальные решения...

Входные данные

Первая строка входных данных состоит из двух чисел \(H\) и \(W\) (\(1 \le H, W \le 5\)), разделенных пробелом - высоты и ширины торта.

Следующие \(H\) строк содержат строки из ровно \(W\) символов, описывающих квадраты торта: «.» представляет пустой квадрат, а «*» - квадрат с ягодой.

Выходные данные

Выведите одно число - количество ягод, которые съест мышь, следуя своей стратегии.

B. Частичная замена

жадные алгоритмы реализация *1100

Вам заданы число \(k\) и строка \(s\) длины \(n\), состоящая из символов '.' и '*'. Вы хотите заменить некоторые из символов '*' на символы 'x', чтобы были выполнены следующее условия:

  • Самый первый символ '*' в исходной строке должен быть заменен на 'x';
  • Самый последний символ '*' в исходной строке должен быть заменен на 'x';
  • Расстояние между двумя соседними замененными символами 'x' не должно превосходить \(k\) (более формально, если вы заменили символы на позициях \(i\) и \(j\) (\(i < j\)) и на позициях \([i+1, j-1]\) нет символа 'x', то \(j-i\) должно быть не больше \(k\)).

Например, если \(n=7\), \(s=\).**.*** и \(k=3\), то вы следующие строки будут удовлетворять условиям выше:

  • .xx.*xx;
  • .x*.x*x;
  • .xx.xxx.
Но, например, следующие строки удовлетворять условиям не будут:
  • .**.*xx (самый первый символ '*' должен быть заменен на 'x');
  • .x*.xx* (самый последний символ '*' должен быть заменен на 'x');
  • .x*.*xx (расстояние между символами на позициях \(2\) и \(6\) больше \(k=3\)).

Для заданных \(n\), \(k\) и \(s\) найдите минимальное количество символов '*', которые необходимо заменить на символы 'x', чтобы были выполнены условия выше.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 50\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов '.' и '*'.

Гарантируется, что в строке \(s\) есть хотя бы один символ '*'.

Гарантируется, что расстояние между любыми двумя соседними символами '*' не превосходит \(k\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов '*', которые необходимо заменить на символы 'x', чтобы были выполнены условия выше.

D. Эпическая трансформация

жадные алгоритмы Конструктив Структуры данных *1400

Вам задан массив \(a\) длины \(n\), состоящий из целых чисел. Вы можете применять следующую операцию, состоящую из нескольких шагов, над массивом \(a\) ноль или более раз:

  • вы выбираете два различных числа в массиве \(a_i\) и \(a_j\);
  • вы удаляете \(i\)-й и \(j\)-й элементы из массива.

Например, если \(n=6\) и \(a=[1, 6, 1, 1, 4, 4]\), то вы можете произвести следующую последовательность операций:

  • выбираем \(i=1, j=5\). Массив \(a\) становится равным \([6, 1, 1, 4]\);
  • выбираем \(i=1, j=2\). Массив \(a\) становится равным \([1, 4]\).

Каким может быть минимальный размер массива после применения к нему некоторой последовательности операций?

Входные данные

Первая строка содержит одно целое число \(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\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальный возможный размер массива после применения к нему некоторой последовательности операций.

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\).

Выходные данные

Для каждого набора входных данных выведите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

A. Бинарная литература

жадные алгоритмы Конструктив реализация Строки *1900

Бинарная строка — это строка, содержащая только символы 0 и 1.

Koyomi Kanou усердно работает над своей мечтой стать писательницей. Чтобы попрактиковаться, она решила принять участие в Конкурсе по Написанию Бинарных Романов. Указание к конкурсу состоит из трёх бинарных строк длины \(2n\). Корректным романом для конкурса является бинарная строка длины не более \(3n\), содержащая в качестве подпоследовательностей не менее двух из трёх данных строк.

Koyomi только что получила три строки — указание от организаторов конкурса. Помогите ей написать корректный роман для конкурса.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль) символов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(1 \le n \le 10^5\)).

Каждая из следующих трех строк содержит бинарную строку длины \(2n\). Гарантируется, что эти три строки попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую бинарную строку длины не более \(3n\), которая в качестве подпоследовательностей содержит как минимум две из заданных бинарных строк.

Можно доказать, что при данных ограничениях такая бинарная строка существует всегда.

Если есть несколько возможных ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных бинарные строки 00 и 01 являются подпоследовательностями выходной строки: 010 и 010. Обратите внимание, что 11 не является подпоследовательностью выходной строки, но это не требуется.

Во втором наборе входных данных все три входных строки являются подпоследовательностями выходной строки: 011001010, 011001010 и 011001010.

C. Завершите MST

битмаски графы Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2500

Как преподаватель, Riko Hakozaki часто помогает ученикам в решении задач по различным предметам. Сегодня ее попросили помочь с задачей по программированию, которая заключается в следующем.

Вам выдается неориентированный полный граф с \(n\) вершинами, где для некоторых ребер заданы положительные веса, а для остальных нет. Вам нужно назначить всем еще не назначенным рёбрам неотрицательные веса так, чтобы у получившегося графа XOR (побитовое исключающее ИЛИ) всех весов был равен \(0\).

Определим уродство полного графа как вес его минимального остовного дерева, где вес остовного дерева равен сумме весов его рёбер. Нужно назначить веса так, чтобы уродство получившегося графа было как можно меньше.

Напомним, что неориентированный полный граф с \(n\) вершинами содержит все рёбра \((u, v)\) с \(1 \le u < v \le n\); такой граф имеет \(\frac{n(n-1)}{2}\) рёбер.

Она не знает, как решить эту задачу, поэтому просит вас решить ее за нее.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \le m \le \min(2 \cdot 10^5, \frac{n(n-1)}{2} - 1)\))  — количество вершин и количество предварительно назначенных рёбер. Гарантируется, что есть по крайней мере одно неназначенное ребро.

\(i\)-я из следующих строк \(m\) содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(u \ne v\), \(1 \le w_i < 2^{30}\)), обознаающие ребро от \(u_i\) до \(v_i\), которому был назначен вес \(w_i\). Ни одно ребро не появляется во вводе более одного раза.

Выходные данные

Выведите в одной строке одно целое число  — минимальное уродство среди всех возможных назначений весов с XOR суммой равной \(0\).

Примечание

На изображении ниже показан первый пример. Черные веса назначены предварительно, красные веса назначены нами, а минимальное остовное дерево состоит из синих ребер.

B. ТМТ документ

жадные алгоритмы *1100

У студенческого совета есть общий файл — документ. Каждый день некоторые члены студенческого совета пишут в нем последовательность TMT. (сокращение от Towa Maji Tenshi).

Однако, однажды, члены каким-то образом ввели последовательность в документ одновременно, создав путаницу. Поэтому задача Suguru Doujima — выяснить, не случилось ли сбоя. Ему дается строка длины \(n\), все символы которой — либо T, либо M, и он хочет выяснить, можно ли разделить ее на некоторое количество подпоследовательностей, каждая из которых равна TMT. Каждый символ строки должен принадлежать ровно одной из подпоследовательностей.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль) символов.

Входные данные

В первой строке содержится целое число \(t\) (\(1 \le t \le 5000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \le n < 10^5\)) — количество символов в строке, введенной в документ. Гарантируется, что \(n\) делится на \(3\).

Во второй строке каждого набора входных данных находится строка длиной \(n\), состоящая только из символов T и M.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую YES, если описанное разбиение существует, и строку, содержащую NO, в противном случае.

Примечание

В первом наборе входных данных сама строка уже является последовательностью, равной TMT.

В третьем наборе входных данных можно разделить строку на подпоследовательности TMTMTT. Подпоследовательности, выделенные жирным шрифтом и нежирным шрифтом, равны TMT.

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\).

A. Сайт отзывов

жадные алгоритмы *800

Вы — начинающий режиссер, и вы только выпустили свой первый фильм. Вы также запустили простой сайт, на котором есть две кнопки — лайк и дизлайк.

Однако сайт не так прост внутри. Есть два сервера, на каждом из них лайки и дизлайки считаются независимо.

\(n\) пользователей заходят на сайт один за другим. Каждый пользователь одного из следующих типов:

  • тип \(1\): пользователь смотрел фильм, и он им понравился — они нажимают лайк;
  • тип \(2\): пользователь смотрел фильм, и он им не понравился — они нажимают дизлайк;
  • тип \(3\): пользователь не смотрел фильм — они смотрят на текущее количество лайков и дизлайков и решают на какую кнопку нажимать. Если больше дизлайков, чем лайков, то пользователь ставит дизлайк. Иначе, они ставят лайк.

Каждый пользователь оценивает фильм ровно один раз.

Так как у вас есть два сервера, можно манипулировать оценками, чтобы фильм получил как можно больше лайков. Когда пользователь заходит на сайт, вы знаете его тип, и можете решить, на какой из двух серверов его послать.

Какое наибольшее количество лайков можно собрать в сумме по двум серверам, если распределить пользователей по двум серверам?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 50\)) — количество пользователей.

Во второй строке каждого набора входных данных записано \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 3\)) — типы пользователей в том же порядке, в котором они заходят на сайт.

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее количество лайков можно собрать в сумме по двум серверам, если распределить пользователей по двум серверам.

Примечание

В первом наборе входных данных в примере можно послать единственного пользователя на любой сервер — они все равно поставят дизлайк. Фильм не получит лайков.

Во втором наборе входных данных в примере можно послать всех пользователей на первый сервер:

  • первый пользователь ставит лайк;
  • второй пользователь ставит дизлайк;
  • последний пользователь видит, что количество дизлайков не превышает количество лайков — ставит лайк сам.

Всего в сумме два лайка. Вместо этого можно послать первого и второго пользователя на первый сервер, а последнего — на второй.

  • первый пользователь ставит лайк на первом сервере;
  • второй пользователь ставит дизлайк на первом сервере;
  • последний пользователь не видит лайков или дизлайков на втором сервере — ставит лайк сам.

D. Строка минимальной стоимости

графы жадные алгоритмы Конструктив Перебор Строки *1600

Определим стоимость строки \(s\) как количество пар индексов \(i\) и \(j\) (\(1 \le i < j < |s|\)) таких, что \(s_i = s_j\) и \(s_{i+1} = s_{j+1}\).

Заданы два положительных целых числа \(n\) и \(k\). Среди всех строк длины \(n\), содержащих только первые \(k\) букв латинского алфавита, найдите строку с минимально возможной стоимостью. Если таких строк несколько — найдите любую из них.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5; 1 \le k \le 26\)).

Выходные данные

Выведите строку \(s\) такую, что она состоит из \(n\) символов, каждый из которых является одной из первых \(k\) латинских букв, и она имеет минимально возможную стоимость среди всех таких строк. Если таких строк несколько — выведите любую из них.

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\).

D. Испорченный массив

жадные алгоритмы Конструктив Структуры данных *1200

Вам дано число \(n\) и массив \(b_1, b_2, \ldots, b_{n+2}\), полученный согласно следующему алгоритму:

  • был загадан некоторый массив \(a_1, a_2, \ldots, a_n\);
  • массив \(a\) записали в массив \(b\), т.е. \(b_i = a_i\) (\(1 \le i \le n\));
  • \((n+1)\)-м элементом массива \(b\) записали сумму чисел в массиве \(a\), т.е. \(b_{n+1} = a_1+a_2+\ldots+a_n\);
  • \((n+2)\)-м элементом массива \(b\) записали некоторое число \(x\) (\(1 \le x \le 10^9\)), т.е. \(b_{n+2} = x\);
  • массив \(b\) был перемешан.

Например, массив \(b=[2, 3, 7, 12 ,2]\) мог быть получен следующими способами:

  • \(a=[2, 2, 3]\) и \(x=12\);
  • \(a=[3, 2, 7]\) и \(x=2\).

Для заданного массива \(b\) найдите любой массив \(a\), который мог быть загадан изначально.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n+2\) целых числа \(b_1, b_2, \ldots, b_{n+2}\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если массив \(b\) не мог быть получен ни по какому массиву \(a\);
  • \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), иначе.

Если существует несколько массивов \(a\), то можете выводить любой.

E. Перестановка по сумме

жадные алгоритмы математика Перебор *1600

Перестановка — это последовательность длины \(n\) целых чисел от \(1\) до \(n\), в которой все числа встречаются ровно по одному разу. Например, \([1]\), \([3, 5, 2, 1, 4]\), \([1, 3, 2]\) — перестановки, а \([2, 3, 2]\), \([4, 3, 1]\), \([0]\) — нет.

Поликарпу дали четыре целых числа \(n\), \(l\), \(r\) (\(1 \le l \le r \le n)\) и \(s\) (\(1 \le s \le \frac{n (n+1)}{2}\)) и попросили найти перестановку \(p\) чисел от \(1\) до \(n\), обладающую следующим свойством:

  • \(s = p_l + p_{l+1} + \ldots + p_r\).

Например, для \(n=5\), \(l=3\), \(r=5\) и \(s=8\) подходят следующие перестановки (перечислены не все варианты):

  • \(p = [3, 4, 5, 2, 1]\);
  • \(p = [5, 2, 4, 3, 1]\);
  • \(p = [5, 2, 1, 3, 4]\).
Но, например, не существует ни одной перестановки, подходящей под условие выше для \(n=4\), \(l=1\), \(r=1\) и \(s=5\).

Помогите Поликарпу для заданных \(n\), \(l\), \(r\) и \(s\) найти перестановку чисел от \(1\) до \(n\), подходящую под условие выше. Если существует несколько подходящих перестановок, выведите любую из них.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных характеризуется четырьмя целыми числами \(n\) (\(1 \le n \le 500\)), \(l\) (\(1 \le l \le n\)), \(r\) (\(l \le r \le n\)), \(s\) (\(1 \le s \le \frac{n (n+1)}{2}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • \(n\) целых чисел — перестановку длины \(n\), обладающую свойством из условия, если такая перестановка существует;
  • -1, иначе.

Если существует несколько подходящих перестановок, выведите любую из них.

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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество дней, через которое Поликарп сможет купить себе новый компьютер.

D. НОД и МОД

графы жадные алгоритмы Конструктив снм сортировки теория чисел *2000

Вам дан массив \(a\) из \(n\) (\(n \geq 2\)) положительных целых чисел, а также целое число \(p\). Рассмотрим неориентированный взвешенный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором между вершинами \(i\) и \(j\) (\(i<j\)) добавлены следующие ребра:

  • Если \(gcd(a_i, a_{i+1}, a_{i+2}, \dots, a_{j}) = min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\), то между вершинами \(i\) и \(j\) существует ребро веса \(min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\).
  • Если \(i+1=j\), то между вершинами \(i\) и \(j\) существует ребро веса \(p\).

Здесь \(gcd(x, y, \ldots)\) обозначает наибольший общий делитель (НОД) чисел \(x\), \(y\), ....

Обратите внимание, между вершинами \(i\) и \(j\) появляются кратные ребра, если оба условия выполнены. Если же ни одно условие не выполнено для \(i\) и \(j\), то между ними нет ребер.

Ваша цель — найти вес минимального остовного дерева данного графа.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(p\) (\(2 \leq n \leq 2 \cdot 10^5\), \(1 \leq p \leq 10^9\)) — количество вершин и параметр \(p\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных выведите вес соответствующего минимального остовного дерева.

Примечание

Ниже изображены графы для четырех наборов входных данных примера (ребра одного из минимальных остовных деревьев показаны розовым):

Набор 1

Набор 2

Набор 3

Набор 4

C. Произведение 1 по модулю N

жадные алгоритмы теория чисел *1600

А вот первые слова маленького Эхаба: «Дано целое число \(n\), найдите самую длинную подпоследовательность массива \([1,2, \ldots, n-1]\), произведение элементов которой равно \(1\) по модулю \(n\)». Решите эту задачу.

Последовательность \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, всех) элементов. Произведение элементов пустой подпоследовательности равно \(1\).

Входные данные

В единственной строке дано целое число \(n\) (\(2 \le n \le 10^5\)).

Выходные данные

В первой строке выведите длину найденной подпоследовательности.

Во второй строке выведите элементы подпоследовательности в возрастающем порядке.

Если существует несколько ответов, выведите любой.

Примечание

В первом примере произведение элементов равно \(6\), что равно \(1\) по модулю \(5\). Единственная более длинная последовательность это \([1,2,3,4]\). Произведение ее элементов равно \(24\), что равно \(4\) по модулю \(5\). Поэтому, ответ это \([1,2,3]\).

D. Вырежи и склей

Бинарный поиск жадные алгоритмы реализация сортировки Структуры данных *2000

У маленького Эхаба есть набор для аппликации, содержащий массив \(a\) длины \(n\). Он планирует взять ножницы и сделать следующее:

  • выбрать отрезок \((l, r)\), и вырезать каждый элемент \(a_l\), \(a_{l + 1}\), ..., \(a_r\) на этом отрезке;
  • склеить некоторые из элементов вместе в том же порядке, в котором они шли в массиве;
  • в итоге, получится несколько кусочков, каждый кусочек содержит некоторые элементы, и каждый элемент принадлежит какому-то кусочку.

Более формально, он разделит последовательность \(a_l\), \(a_{l + 1}\), ..., \(a_r\) на подпоследовательности. Он считает, что разделение красивое, если для каждого кусочка (подпоследовательности) верно, что если его длина равна \(x\), то никакое значение не встречается строго больше \(\lceil \frac{x}{2} \rceil\) раз в этом кусочке.

Эхаб еще не определился с отрезком, поэтому он интересуется для \(q\) отрезков \((l, r)\), чему равно минимальное количество кусочков, на которые нужно разделить \(a_l\), \(a_{l + 1}\), ..., \(a_r\), чтобы разделение было красивым.

Последовательность \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного) элементов. Обратите внимание, что она не обязательно должна быть непрерывной.

Входные данные

В первой строке даны два целых числа \(n\) и \(q\) (\(1 \le n,q \le 3 \cdot 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке даны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_{n}\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — отрезок этого запроса.

Выходные данные

Для каждого запроса выведите минимальное количество подпоследовательностей, на которые нужно разбить отрезок, чтобы разбиение было красивым. Можно доказать, что такое разбиение всегда существует.

Примечание

В первом запросе можно взять весь массив в одну подпоследовательность, так как его длина равна \(6\), и ни одно значение не встречается в нем больше \(3\) раз.

Во втором запросе элементы отрезка равны \([3,2,3,3]\). Вы не можете взять их всех в одну подпоследовательность, потому что ее длина будет равна \(4\), и \(3\) встречается в ней больше \(2\) раз. Однако, вы можете разделить отрезок на две подпоследовательности: \([3]\) и \([2,3,3]\).

A. Феникс и золото

жадные алгоритмы Конструктив математика *800

Феникс собрал \(n\) кусков золота и теперь хочет взвесить их вместе, чтобы почувствовать себя богатым. Все веса различны и \(i\)-й кусок золота весит \(w_i\). Феникс будет класть свои \(n\) кусков на весы по одному.

У весов есть необычный дефект: если суммарный вес на них равен \(x\), они взорвутся. Может ли Феникс положить все его \(n\) кусков золота на весы в каком-то порядке, чтобы весы не взорвались в процессе? Если да, помогите ему определить какой-нибудь порядок.

Говоря формально, переставьте элементы массива \(w\) так, чтобы для каждого \(i\) \((1 \le i \le n)\), \(\sum\limits_{j = 1}^{i}w_j \ne x\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(x\) (\(1 \le n \le 100\); \(1 \le x \le 10^4\)) — количество кусков золота у Феникса и вес, который нужно избежать, соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \((1 \le w_i \le 100)\) — веса кусков золота. Гарантируется, что все веса попарно различны.

Выходные данные

Для каждого набора входных данных, если Феникс не может положить все \(n\) кусков избежав взрыва, выведите NO. В противном случае выведите YES и массив \(w\) в соответствующем порядке. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, Феникс кладет на весы сначала кусок золота веса \(3\), потом кусок веса \(2\), и наконец кусок веса \(1\). На весах сначала будет суммарный вес \(3\), потом — \(5\), затем — \(6\). Весы не взорвутся, потому что вес на них никогда не равен \(2\).

Во втором наборе, весы покажут \(8\), \(9\), \(11\), \(14\) и \(18\) — ничего равного \(3\).

В третьем наборе, Феникс должен положить кусок весом \(5\) на весы, и весы в любом случае взорвутся.

C. Феникс и башни

жадные алгоритмы Конструктив Структуры данных *1400

У Феникса есть \(n\) блоков высотой \(h_1, h_2, \dots, h_n\), где все \(h_i\) не превосходят некоторого значения \(x\). Он планирует расставить все \(n\) блоков в виде \(m\) башен. Высота башни — это просто сумма высот блоков, из которой она состоит. Для того чтобы башни выглядели красиво, высота никаких двух башен не должна отличаться более, чем на \(x\).

Помогите Фениксу построить \(m\) башен красиво. В каждой башне должно быть хотя бы по одному блоку и все блоки должны быть использованы.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(m\) и \(x\) (\(1 \le m \le n \le 10^5\); \(1 \le x \le 10^4\)) — количество блоков, количество выстраиваемых башен и максимально разрешенная разность высот между любой парой башен, соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел (\(1 \le h_i \le x\)) — высоты блоков.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если Феникс не сможет построить \(m\) башен красиво, выведите NO. В противном случае выведите YES и \(n\) целых чисел \(y_1, y_2, \dots, y_n\), где \(y_i\) (\(1 \le y_i \le m\)) — это номер башни, в которую попадет \(i\)-й блок.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе, первая башня будет высоты \(1+2+3=6\), а вторая — высоты \(1+2=3\). Их разность \(6-3=3\) и не превосходит \(x=3\), поэтому башни красивые.

Во втором наборе, первая башня будет высоты \(1\), вторая — \(1+2=3\) и третья — \(3\). Максимальная разность между любой парой башен равна \(3-1=2\), что не превосходит \(x=3\), поэтому башни красивые.

D. Феникс и носки

жадные алгоритмы сортировки *1500

Чтобы удовлетворить свою любовь к собиранию носков в пары, Феникс принес свои \(n\) носков (\(n\) — четное) в магазин по продаже носков. Каждый его носок определенного цвета \(c_i\) и либо левый, либо правый.

Феникс может заплатить один доллар магазину, чтобы:

  • либо перекрасить какой-то носок в любой цвет \(c'\) \((1 \le c' \le n)\),
  • либо превратить левый носок в правый,
  • либо превратить правый носок в левый.

Магазин может производить любое из изменений любое количество раз. Заметим, что цвет левого носка не меняется, когда он превращается в правый, и наоборот.

Два носка образуют пару, если это левый и правый носок одинакового цвета. Какую минимальное количество денег нужно заплатить Фениксу, чтобы собрать \(n/2\) пар? Каждый носок должен попасть ровно в одну пару.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(l\) и \(r\) (\(2 \le n \le 2 \cdot 10^5\); \(n\) — четное; \(0 \le l, r \le n\); \(l+r=n\)) — общее количество носков и количество левых и правых носков соответственно.

В следующей строке заданы \(n\) целых чисел \(c_i\) (\(1 \le c_i \le n\)) — цвета носков. Первые \(l\) носков — левые, остальные \(r\) носков — правые.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно число — минимальное количество денег, которое нужно заплатить Фениксу, чтобы собрать \(n/2\) пар носков. Каждый носок должен попасть ровно в одну пару.

Примечание

В первом наборе, Феникс может заплатить \(2\) доллара для того, чтобы:

  • перекрасить носок \(1\) в цвет \(2\),
  • перекрасить носок \(3\) в цвет \(2\).
В результате он получит \(3\) пары. Например, пары \((1, 4)\), \((2, 5)\) и \((3, 6)\).

Во втором наборе, Феникс может заплатить \(3\) доллара, чтобы:

  • превратить носок \(6\) из правого в левый,
  • перекрасить носок \(3\) в цвет \(1\),
  • перекрасить носок \(4\) в цвет \(1\).
В результате он получит \(3\) пары. Например, пары \((1, 3)\), \((2, 4)\) и \((5, 6)\).

F. Феникс и землетрясение

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное снм *2600

Родина Феникса, Страна Огня, состоит из \(n\) городов, которые были соединены \(m\) дорогами, но из-за землетрясения они все были разрушены. Теперь Страна Огня хочет восстановить \(n-1\) из этих дорог так, чтобы все города стали снова связаны.

Первоначально, в \(i\)-м городе есть \(a_i\) тонн асфальта. Чтобы восстановить дорогу, необходимо \(x\) тонн асфальта. При этом, чтобы восстановить дорогу между городами \(i\) и \(j\), в городах \(i\) и \(j\) должно быть суммарно хотя бы \(x\) тонн асфальта. Другими словами, в городе \(i\) есть \(a_i\) тонн асфальта, а городе \(j\) — \(a_j\) тонн, то после восстановления дороги между ними останется \(a_i+a_j-x\) тонн. Асфальт можно перевозить между городами, если дорога между ними уже восстановлена.

Определите, возможно ли связать все города, и если да, то выведите последовательность дорог, которые нужно восстановить, в соответствующем порядке.

Входные данные

В первой строке заданы целые числа \(n\), \(m\) и \(x\) (\(2 \le n \le 3 \cdot 10^5\); \(n-1 \le m \le 3 \cdot 10^5\); \(1 \le x \le 10^9\)) — количество городов, количество дорог и количество асфальта, необходимого для восстановления одной дороги.

В следующей строке заданы \(n\) целых чисел через пробел \(a_i\) (\(0 \le a_i \le 10^9\)) — первоначальное количество асфальта в городе \(i\).

В следующих \(m\) строках задано по два целых числа \(x_i\) и \(y_i\) (\(x_i\ne y_i\); \(1 \le x_i, y_i \le n\)) — города соединенные \(i\)-й дорогой. Гарантируется, что между каждой парой городов есть не более одной дороги, и что перед землетрясением города были связаны.

Выходные данные

Если невозможно связать все города, выведите NO. В противном случае выведите YES и далее \(n-1\) целое число \(e_1, e_2, \dots, e_{n-1}\) — порядок, в котором нужно восстанавливать дороги. \(e_i\) — это номер \(i\)-й в порядке восстановления дороги. Если существует несколько ответов, выведите любой.

Примечание

В первом примере, дороги восстанавливаются в следующем порядке:

  • Дорога \(3\) восстановлена (соединяет города \(3\) и \(4\)). В городе \(4\) первоначально было \(4\) тонны асфальта. После восстановления, осталось \(3\) тонны.
  • Дорога \(2\) восстановлена (соединяет города \(2\) и \(3\)). Асфальт из города \(4\) можно перевезти в город \(3\) и использовать на дорогу. Осталось \(2\) тонны.
  • Дорога \(1\) восстановлена (соединяет города \(1\) и \(2\)). Асфальт перевезен в город \(2\) и потрачен на дорогу. Осталась \(1\) тонна.
  • Дорога \(4\) восстановлена (соединяет города \(4\) и \(5\)). Асфальт перевезен в город \(4\) и потрачен на дорогу. Больше асфальта не осталось.
Все города теперь связаны.

Во втором примере, города \(1\) и \(2\) используют свой асфальт вместе для постройки дороги. В каждом городе по \(1\) тонне, то есть вместе \(2\) тонны, чего достаточно.

В третьем примере, для восстановления дороги между городами \(1\) и \(2\) асфальта недостаточно.

A. Око за око

жадные алгоритмы *800

Дан массив \(a\) длины \(n\), вы можете сделать не более \(k\) операций следующего типа:

  • выбрать \(2\) различных элемента в массиве, прибавить \(1\) к первому и вычесть \(1\) из второго. После применения операции все элемента \(a\) должны остаться неотрицательными.

Какой лексикографически минимальный массив можно получить?

Массив \(x\) лексикографически меньше чем массив \(y\), если есть индекс \(i\) такой, что \(x_i<y_i\), и \(x_j=y_j\) для всех \(1 \le j < i\). Проще говоря, для первого такого \(i\), где массивы различны, \(x_i<y_i\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 20\)) – количество наборов входных данных.

В первой строке каждого набора входных данных записаны \(2\) целых числа \(n\) и \(k\) (\(2 \le n \le 100\), \(1 \le k \le 10000\)) — размер массива и максимальное количество операций.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(0 \le a_i \le 100\)) — элементы массива \(a\).

Выходные данные

На каждый набор входных данных выведите лексикографически минимальный массив, который может получиться из исходного за не более чем \(k\) операций.

Примечание

Во втором примере мы начинаем с вычитания \(1\) из первого элемента и добавления \(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]\), в котором все элементы равны.

Во втором примере ответа не существует.

A. Сумма 2050

жадные алгоритмы математика *800

Назовем число 2050-числом, если оно равно \(2050\), \(20500\), ..., (\(2050 \cdot 10^k\) для целых \(k \ge 0\)).

Дано число \(n\), вас просят представить \(n\) как сумму нескольких (не обязательно различных) 2050-чисел. Найдите минимальное необходимое для этого количество 2050-чисел.

Входные данные

В первой строке находится одно целое число \(T\) (\(1\le T\leq 1\,000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{18}\)), обозначающее число, которое нужно представить.

Выходные данные

Для каждого набора входных данных выведите минимальное необходимое количество 2050-чисел.

Если \(n\) не может быть представленно как сумма 2050-чисел, выведите \(-1\).

Примечание

В третьем наборе входных данных \(4100 = 2050 + 2050\).

В пятом наборе входных данных \(22550 = 20500 + 2050\).

B. Утренняя пробежка

жадные алгоритмы Конструктив сортировки *1200

Волонтеры 2050 организуют мероприятие «Беги! Догони восходящее солнце». Начав 25 апреля в 7:30, участники пробегут по 6-километровому маршруту вокруг города Юньци.

На маршруте будет \(n+1\) контрольный пункт. Они пронумерованы \(0\), \(1\), ..., \(n\). Участники начнут в контрольном пункте \(0\) и закончат в пункте \(n\). Ни один контрольный пункт нельзя пропустить — они должны будут пробежать от пункта \(0\) до пункта \(1\), потом от пункта \(1\) до пункта \(2\), и так далее. Изучите картинку из секции примечание для разъяснения.

Между каждой парой соседних контрольных пунктов есть \(m\) различных путей на выбор. Для всех \(1\le i\le n\), чтобы пробежать от пункта \(i-1\) до пункта \(i\), участник должен выбрать ровно один путь из \(m\) возможных. Длина \(j\)-го пути между пунктами \(i-1\) и \(i\) равняется \(b_{i,j}\) для всех \(1\le j\le m\) и \(1\le i\le n\).

Чтобы протестировать маршрут, у нас есть \(m\) бегунов. Каждый бегун должен пробежать от пункта \(0\) до пункта \(n\) один раз, посетив все промежуточные пункты. Каждый путь между каждой парой соседних контрольных пунктов должен быть использован ровно одним бегуном. Если бегун выберет путь длины \(l_i\) между пунктами \(i-1\) и \(i\) (\(1\le i\le n\)), его усталость будет равна \(\)\min_{i=1}^n l_i,\(\) то есть минимальной длине из путей, по которым он пробежал.

Выберите пути для \(m\) бегунов так, чтобы их суммарная усталость была минимальна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n,m \leq 100\)).

В \(i\)-й из следующих \(n\) строк даны \(m\) целых чисел \(b_{i,1}\), \(b_{i,2}\), ..., \(b_{i,m}\) (\(1 \le b_{i,j} \le 10^9\)).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. \(j\)-е число в \(i\)-й строке должно равняться длине пути, который \(j\)-й бегун выберет между контрольными пунктами \(i-1\) и \(i\). В \(i\)-й строке должно быть ровно \(m\) целых чисел и эти числа должны образовывать перестановку чисел \(b_{i, 1}\), ..., \(b_{i, m}\) для всех \(1\le i\le n\).

Если существует несколько решений, выведите любое.

Примечание

В первом наборе входных данных сумма усталостей равна \(\min(2,5) + \min(3,3) + \min(4,1) = 6\).

Во втором наборе входных данных сумма усталостей равна \(\min(2,4,3) + \min(3,1,5) = 3\).

C. Филломино 2

жадные алгоритмы Конструктив поиск в глубину и подобное реализация *1400

Филломино это классическая головоломка. (Вам не нужно знать Филломино, чтобы решить эту задачу.) В одной из аудиторий в городе Юньци несколько человек играют в настольную игру, вдохновленную этой головоломкой:

Рассмотрим шахматную доску \(n\) на \(n\). Ее строки пронумерованы от \(1\) до \(n\) сверху вниз. А столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца обозначается \((x, y)\). Главная диагональ доски это клетки \((x, x)\) для всех \(1 \le x \le n\).

На главной диагонали доски написана перестановка чисел \(\{1, 2, 3, \dots, n\}\). В каждой из клеток написано ровно одно число. Цель игры — разделить клетки ниже и на главной диагонали (таких клеток ровно \(1+2+ \ldots +n\) штук) на \(n\) связных областей, которые удовлетворяют следующим условиям:

  1. Каждая область должна быть связной. Это означает, что мы можем добраться от любой клетки области до любой другой клетки той же области, посещая только клетки из этой области и перемещаясь из клетки в соседнюю по стороне.
  2. \(x\)-я область должна содержать клетку главной диагонали, в которой написано \(x\), для всех \(1\le x\le n\).
  3. Количество клеток, принадлежащих \(x\)-й области, должно равняться \(x\) для всех \(1\le x\le n\).
  4. Каждая клетка ниже и на главной диагонали должна принадлежать ровно одной области.
Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n \le 500\)), обозначающее размер доски.

Вторая строка содержит \(n\) целых чисел \(p_1\), \(p_2\), ..., \(p_n\). \(p_i\) это число, написанное в клетке \((i, i)\). Гарантируется, что каждое из чисел \(\{1, \ldots, n\}\) встречаются ровно один раз среди \(p_1\), ..., \(p_n\).

Выходные данные

Если решения не существует, выведите \(-1\).

Иначе, выведите \(n\) строк. \(i\)-я строка должна содержать \(i\) чисел. \(j\)-е число в \(i\)-й строке должно равняться \(x\), если клетка \((i, j)\) принадлежит области размера \(x\).

Примечание

Решения для примеров изображены на иллюстрациях:

C. Берляндский отбор

жадные алгоритмы Перебор сортировки Структуры данных теория чисел *1400

Поликарп организует региональные ICPC соревнования в Берляндии. Всего в Берляндии \(n\) университетов, пронумерованных от \(1\) до \(n\). Поликарп знает всех спортивных программистов в регионе. Всего \(n\) студентов: \(i\)-й студент учится в университете \(u_i\), а его навык программирования оценивается величиной \(s_i\).

Поликарп сейчас думает над правилами регионального соревнования. В частности, над количеством участников в командах.

Поликарп знает, что если он выберет размер команды, как некоторое целое число \(k\), то каждый университет отправит \(k\) своих самых сильных (с наибольшей величиной навыка \(s\)) студентов в первой команде, следующие \(k\) — во второй команде и так далее. Если остается меньше \(k\) студентов, то команду нельзя собрать. Обратите внимание, что некоторые университеты могут отправить ноль команд.

Сила региона определяется, как суммарная величина навыков участников всех команд. Если ни одной команды нет, то сила равна \(0\).

Помогите Поликарпу найти силу региона для каждого \(k\) от \(1\) до \(n\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество университетов и количество студентов.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(u_1, u_2, \dots, u_n\) (\(1 \le u_i \le n\)) — университет, в котором учится \(i\)-й студент.

В третьей строке каждого набора входных данных записаны \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 10^9\)) — величина навыка программирования \(i\)-го студента.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел: силу региона — суммарную величину навыка программирования участников команд — для каждого выбора размера команды \(k\).

Примечание

В первом наборе входных данных команды университетов для каждого \(k\):

  • \(k=1\):
    • университет \(1\): \([6], [5], [5], [3]\);
    • университет \(2\): \([8], [1], [1]\);
  • \(k=2\):
    • университет \(1\): \([6, 5], [5, 3]\);
    • университет \(2\): \([8, 1]\);
  • \(k=3\):
    • университет \(1\): \([6, 5, 5]\);
    • университет \(2\): \([8, 1, 1]\);
  • \(k=4\):
    • университет \(1\): \([6, 5, 5, 3]\);

E. Упорядочивание овец

жадные алгоритмы математика *1400

Вы играете в игру «Упорядочивание овец». Цель этой игры — сделать так, чтобы овцы выстроились в ряд. Уровень в игре описывается строкой длины \(n\), состоящей из символов '.' (пустое пространство) и '*' (овечка). За один ход вы можете передвинуть любую овечку на одну клетку влево или на одну клетку вправо, если соответствующая клетка существует и пуста. Игра заканчивается, как только овцы выстроились в ряд, то есть между любыми овечками не должно быть пустых клеток.

Например, если \(n=6\) и уровень описывается строкой «**.*..», тогда возможен следующий сценарий игры:

  • овечка на позиции \(4\) двигается вправо, состояние уровня: «**..*.»;
  • овечка на позиции \(2\) двигается вправо, состояние уровня: «*.*.*.»;
  • овечка на позиции \(1\) двигается вправо, состояние уровня: «.**.*.»;
  • овечка на позиции \(3\) двигается вправо, состояние уровня: «.*.**.»;
  • овечка на позиции \(2\) двигается вправо, состояние уровня: «..***.»;
  • овцы выстроились в ряд, игра завершается.

Для заданного уровня определите минимальное количество ходов, которое нужно сделать, чтобы пройти уровень.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следую \(t\) наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 10^6\)).

Во второй строке каждого набора входных данных содержится строка длины \(n\), состоящая из символов '.' (пустое пространство) и '*' (овечка) — описание уровня.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество ходов, которое нужно сделать, чтобы пройти уровень.

G. Идти или не идти?

графы жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное реализация *2200

Дима проспал будильник, который должен был поднять его в школу.

Диме интересно, успеет ли он прийти на первый урок. Для этого ему необходимо узнать минимальное время, которое потребуется ему, чтобы дойти от дома до школы.

Город, в котором живет Дима, представляет собой прямоугольное поле размером \(n \times m\). Каждая клетка \((i, j)\) на этом поле обозначается одним числом \(a_{ij}\):

  • Число \(-1\) означает, что проход по клетке запрещен;
  • Число \(0\) означает, что клетка свободна, и Дима может по ней пройти.
  • Число \(x\) (\(1 \le x \le 10^9\)) означает, что в клетке расположен портал со стоимостью \(x\). Клетка с порталом также считается свободной.

Из любого портала Дима может отправиться в любой другой портал, при этом время перемещения из портала \((i, j)\) в портал \((x, y)\) соответствует сумме их стоимостей \(a_{ij} + a_{xy}\).

Помимо перемещения между порталами, Дима также может перемещаться между соседними по стороне не занятыми клетками за время \(w\). В частности, он может заходить на клетку с порталом и не пользоваться им.

Изначально Дима находится в левой верхней клетке \((1, 1)\), а школа в правой нижней клетке \((n, m)\).

Входные данные

В первой строке содержатся три целых числа \(n\), \(m\) и \(w\) (\(2 \le n, m \le 2 \cdot 10^3\), \(1 \le w \le 10^9\)), где \(n\) и \(m\) — размеры города, \(w\) — время, за которое Дима перемещается между не занятыми клетками.

Следующие \(n\) строк содержат по \(m\) чисел (\(-1 \le a_{ij} \le 10^9\)) — описания клеток.

Гарантируется, что клетки \((1, 1)\) и \((n, m)\) свободны.

Выходные данные

Выведите одно число — минимальное время, которое потребуется Диме, чтобы добраться до школы. Если он не сможет добраться до школы вообще — выведите «-1».

Примечание

Пояснение к первому примеру:

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\) числа.

C. Вложить и выложить

Деревья жадные алгоритмы Перебор реализация Структуры данных *1600

Василий — большой любитель планирования дел наперед. Поэтому каждое утро он занимается формированием вложенного списка предстоящих дел.

Корректным вложенным списком является любой список, который можно получить из списка с одним пунктом «1» путем применения операций. Каждая операция вставляет в список новый пункт на следующей строке после одного из уже существующих пунктов \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \,\cdots\, \,.\,a_k\), и бывает двух видов:

  1. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, a_k \,.\, 1\) (начав более вложенный список), или
  2. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, (a_k + 1)\) (продолжив текущий уровень).
Операцию можно производить только при условии, что в списке не появится двух одинаковых пунктов. А также, если рассматривать каждый пункт как последовательность чисел, последовательность пунктов должна всегда оставаться возрастающей в лексикографическом порядке. Примеры корректных и некорректных списков приведены на рисунке. Пример того, как можно получить корректный список, изображенный на картинке, приведен в секции «Примечание».

Когда Василий захотел сохранить Word-документ со списком своих дел, он промахнулся и вместо «Ctrl+S» нажал совсем другую комбинацию клавиш. Достоверно неизвестно, что это была за комбинация клавиш, но после ее нажатия каждый пункт списка заменился одним числом: числом, изначально написанным последним в номере пункта.

Василий хочет, чтобы вы помогли ему восстановить подходящий изначальный вложенный список.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^3\)) — количество строк в списке.

Следующие \(n\) строк набора входных данных содержат по одному числу \(a_i\) (\(1 \le a_i \le n\)) — описание того, что осталось от вложенного списка Василия.

Гарантируется, что в каждом наборе входных данных существует хотя бы один подходящий список.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, которые являются корректным вложенным списком, из которого мог получиться список, который вам предоставил Василий.

Если ответов несколько, то вы можете вывести любой подходящий.

Примечание

Во втором наборе входных данных одним из корректных подходящих списков является:

1

1.1

1.1.1

1.1.2

1.2

1.2.1

2

2.1

2.2

Такой список можно получить при помощи последовательности операций, показанной ниже:

  1. Изначальный список с одним пунктом \(1\).
  2. Вставляем пункт \(2\) при помощи операции вставки второго типа после пункта \(1\).
  3. Вставляем пункт \(1.1\) при помощи операции вставки первого типа после пункта \(1\).
  4. Вставляем пункт \(1.2\) при помощи операции вставки второго типа после пункта \(1.1\).
  5. Вставляем пункт \(1.1.1\) при помощи операции вставки первого типа после пункта \(1.1\).
  6. Вставляем пункт \(1.1.2\) при помощи операции вставки второго типа после пункта \(1.1.1\).
  7. Вставляем пункт \(1.2.1\) при помощи операции вставки первого типа после пункта \(1.2\).
  8. Вставляем пункт \(2.1\) при помощи операции вставки первого типа после пункта \(2\).
  9. Вставляем пункт \(2.2\) при помощи операции вставки второго типа после пункта \(2.1\).

B. Сортировка перестановки

жадные алгоритмы Конструктив *900

Вам дана перестановка \(a\) состоящая из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Вы можете выполнять операцию следующего вида — выбрать подмассив (непрерывный подотрезок) \(a\) и переставить в нем элементы произвольным образом. Но такую операцию нельзя применить ко всему массиву целиком.

Например, \(a = [2, 1, 4, 5, 3]\) и мы хотим применить операцию к подмассиву \(a[2, 4]\) (подмассиву, содержащему все элементы от \(2\)-го до \(4\)-го), тогда после операции массив может иметь вид \(a = [2, 5, 1, 4, 3]\), или, например, \(a = [2, 1, 5, 4, 3]\).

Ваша задача — определить минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(a\) в возрастающем порядке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 50\)) — количество элементов в перестановке.

Вторая строка набора входных данных содержит \(n\) различных целых чисел от \(1\) до \(n\) — заданную перестановку \(a\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(a\) по возрастанию.

Примечание

В объяснениях \(a[i, j]\) означает подмассив \(a\), который начинается с \(i\)-го элемента и заканчивается \(j\)-м элементом.

В первом наборе входных данных из условия можно выбрать подмассив \(a[2, 3]\) и поменять в нем элементы местами.

Во втором наборе входных данных перестановка уже отсортирована, поэтому операции применять не нужно.

В третьем наборе входных данных можно выбрать подмассив \(a[3, 5]\) и превратить \(a\) в \([2, 1, 3, 4, 5]\), а затем выбрать подмассив \(a[1, 2]\) и превратить \(a\) в \([1, 2, 3, 4, 5]\).

C. Столкновения роботов

жадные алгоритмы реализация сортировки Структуры данных *2000

\(n\) роботов ездят по координатной оси OX. На этой оси также есть две стены: одна в координате \(0\), другая в координате \(m\).

\(i\)-й робот начинает в целой координате \(x_i~(0 < x_i < m)\) и движется либо влево (в сторону \(0\)), либо вправо со скоростью \(1\) в секунду. Никакие два робота не начинают в одной координате.

Когда робот достигает стены, он мгновенно разворачивается и продолжает свою поездку в противоположном направлении с той же скоростью.

Когда несколько роботов встречаются в одной целой координате, они сталкиваются и взрываются. Как только робот взорвался, он больше не сталкивается с другими роботами. Обратите внимание, что если роботы встретятся в нецелой координате, то ничего не случится.

Для каждого робота проверьте, взорвется ли он когда-нибудь, и выведите время взрыва, если да, и \(-1\) в противном случае.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\); \(2 \le m \le 10^8\)) — количество роботов и координата правой стены.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 < x_i < m\)) — начальные координаты каждого робота.

В третьей строке каждого набора входных данных записаны \(n\) символов 'L' или 'R' — начальные направления роботов ('L' означает влево, а 'R' означает вправо).

Все координаты \(x_i\) в наборе входных данных различны.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел — для \(i\)-го робота выведите время взрыва, если он взорвется, и \(-1\) в противном случае.

Примечание

Изображение секунд \(0, 1, 2\) и \(3\) для первого набора входных данных:

Обратите внимание, что роботы \(2\) и \(3\) не сталкиваются, потому что они встречаются в одной точке \(2.5\), которая не является целой.

После секунды \(3\) робот \(6\) просто ездит бесконечно, потому что нет робота, с которым он мог бы столкнуться.

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\) минуту.

В третьем примере ни одно место не занято, поэтому вам не надо тратить время.

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\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

C2. Настойки (сложная версия)

жадные алгоритмы Структуры данных *1600

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(n \leq 200000\). Вы можете делать взломы, только если решены обе версии задачи.

В линию выстроены \(n\) настоек, причем настойка \(1\) находится слева, а настойка \(n\) — справа. Каждая настойка увеличит ваше здоровье на \(a_i\), если ее выпить. \(a_i\) может быть отрицательным, что означает, что настойка уменьшит ваше здоровье.

Вы начинаете с \(0\) здоровья и будете идти слева направо, от первой настойки до последней. Для каждой настойки вы можете выбрать, выпить ли ее. Вы должны следить за тем, чтобы ваше здоровье всегда было неотрицательным.

Какое наибольшее количество настоек вы можете выпить?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 200000\)) — количество настоек.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... ,\(a_n\) (\(-10^9 \leq a_i \leq 10^9\)), которые обозначают изменения здоровья после употребления данных настоек.

Выходные данные

Выведите одно целое число — максимальное количество настоек, которое вы можете выпить, чтобы ваше здоровье всегда было неотрицательным.

Примечание

В примере, вы можете выпить \(5\) настоек, приняв настойки \(1\), \(3\), \(4\), \(5\) и \(6\). Невозможно выпить все \(6\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

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\).

C. Деревья примирения

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

У Soroush и Keshi есть по одному пронумерованному корневому дереву на \(n\) вершин. У обоих деревьев корнем является вершина \(1\).

Раньше Soroush и Keshi воевали. После бесконечных десятилетий борьбы они, наконец, стали союзниками, чтобы подготовить раунд Codeforces. Чтобы отметить это счастливое событие, они решили сделать памятный граф на \(n\) вершинах.

Они добавляют ребро между вершинами \(u\) и \(v\) в памятный граф, если выполняются оба из следующих условий:

  • Одна из вершин \(u\) и \(v\) является предком второй в дереве Soroush.
  • Ни одна из вершин \(u\) и \(v\) не является предком другой в дереве Keshi.

Здесь вершина \(u\) считается предком вершины \(v\), если \(u\) лежит на пути от \(1\) (корня) к \(v\).

Выскочивший из ниоткуда Mashtali попытался найти максимальную клику в памятном графе. Он потерпел неудачу, потому что граф был слишком большим.

Помогите Mashtali, найдя размер максимальной клики в памятном графе.

Напомним, что клика — это такое подмножество вершин графа, каждые две из которых соединены ребром.

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 3 \cdot 10^5)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((2\le n\le 3 \cdot 10^5)\).

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(a_2, \ldots, a_n\) \((1 \le a_i < i)\), \(a_i\) — родитель вершины \(i\) в дереве Soroush.

Третья строка каждого набора входных данных содержит \(n-1\) целых чисел \(b_2, \ldots, b_n\) \((1 \le b_i < i)\), \(b_i\) — родитель вершины \(i\) в дереве Keshi.

Гарантируется, что заданные графы являются деревьями.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — размер максимальной клики в памятном графе.

Примечание

В первом и третьем наборах входных данных можно выбрать любую вершину.

Во втором наборе входных данных одна из максимальных клик — \(\{2, 3, 4, 5\}\).

В четвертом наборе входных данных одна из максимальных клик — \(\{3, 4, 6\}\).

A. Eshag любит большие массивы

жадные алгоритмы Конструктив математика *800

У Eshag есть массив \(a\), состоящий из \(n\) целых чисел.

Eshag может выполнить следующую операцию любое количество раз: выбрать некоторую подпоследовательность \(a\) и удалить из нее каждый элемент, который строго больше чем \(AVG\), где \(AVG\) — среднее арифметическое значение чисел в выбранной подпоследовательности.

Например, если \(a = [1 , 4 , 3 , 2 , 4]\) и Eshag применит операцию к подпоследовательности, содержащей \(a_1\), \(a_2\), \(a_4\) и \(a_5\), то он удалит те из этих \(4\) элементов, которые больше чем \(\frac{a_1+a_2+a_4+a_5}{4} = \frac{11}{4}\), поэтому после операции массив \(a\) станет \(a = [1 , 3 , 2]\).

Ваша задача — найти максимальное количество элементов, которые Eshag может удалить из массива \(a\), применив описанную выше операцию несколько (возможно, ноль) раз.

Последовательность \(b\) является подпоследовательностью массива \(c\), если \(b\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит целое число \(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 100)\) — элементы массива \(a\).

Выходные данные

Для каждого наборов входных данных выведите одно целое число — максимальное количество элементов, которые Eshag может удалить из массива \(a\).

Примечание

Рассмотрим первый набор входных данных.

Первоначально \(a = [1, 1, 1, 2, 2, 3]\).

В первой операции Eshag может выбрать подпоследовательность, содержащую \(a_1\), \(a_5\) и \(a_6\), их среднее арифметическое равно \(\frac{a_1 + a_5 + a_6}{3} = \frac{6}{3} = 2\). Поэтому \(a_6\) будет удалено.

После этого \(a = [1, 1, 1, 2, 2]\).

Во второй операции Eshag может выбрать подпоследовательность, содержащую весь массив \(a\), среднее арифметическое всех его элементов равно \(\frac{7}{5}\). Поэтому \(a_4\) и \(a_5\) будут удалены.

После этого \(a = [1, 1, 1]\).

Во втором наборе входных данных Eshag не может удалить ни одного элемента.

B. Sifid и странные подпоследовательности

жадные алгоритмы математика сортировки *1100

Последовательность \((b_1, b_2, \ldots, b_k)\) называется странной, если модуль разности между любой парой ее элементов больше или равен максимальному элементу этой последовательности. Формально говоря, она странная, если для каждой пары \((i, j)\) с \(1 \le i<j \le k\) выполняется \(|a_i-a_j|\geq MAX\), где \(MAX\) — наибольший элемент последовательности. В частности, любая последовательность длины не более \(1\) является странной.

Например, последовательности \((-2021, -1, -1, -1)\) и \((-1, 0, 1)\) являются странными, а \((3, 0, 1)\) — нет, потому что \(|0 - 1| < 3\).

У Sifid есть массив \(a\) из \(n\) целых чисел. Sifid любит все большое, поэтому среди всех странных подпоследовательностей \(a\) он хочет найти длину самой длинной. Можете ли вы ему помочь?

Последовательность \(c\) является подпоследовательностью массива \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1\le n\le 10^5)\) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((-10^9\le a_i \le 10^9)\) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого наборам входных данных выведите одно целое число — длину самой длинной странной подпоследовательности \(a\).

Примечание

В первом наборе входных данных одной из самых длинных странных подпоследовательностей является \((a_1, a_2, a_3, a_4)\).

Во втором наборе входных данных одной из самых длинных странных подпоследовательностей является \((a_1, a_3, a_4, a_5, a_7)\).

В третьем наборе входных данных одной из самых длинных странных подпоследовательностей является \((a_1, a_3, a_4, a_5)\).

В четвертом наборе входных данных одной из самых длинных странных подпоследовательностей является \((a_2)\).

В пятом наборе входных данных одной из самых длинных странных подпоследовательностей является \((a_1, a_2, a_4)\).

A. Двоично-десятичные

жадные алгоритмы математика *800

Назовем число двоично-десятичным, если оно целое, положительное, и все его цифры в десятичной системе счисления равны либо \(0\), либо \(1\). Например, \(1\,010\,111\) — двоично-десятичное число, а \(10\,201\) и \(787\,788\) — нет.

Дано число \(n\), вас просят представить \(n\) как сумму нескольких (не обязательно различных) двоично-десятичных чисел. Найдите минимальное необходимое для этого количество двоично-десятичных чисел.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных задан на отдельной строке и содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — число, которое нужно представить в виде суммы.

Выходные данные

Для каждого набора входных данных выведите минимальное необходимое количество двоично-десятичных чисел для представления числа \(n\) в виде суммы.

Примечание

В первом наборе входных данных число \(121\) можно представить, например, как \(121 = 110 + 11\) или \(121 = 111 + 10\).

Во втором наборе входных данных число \(5\) можно представить как \(5 = 1 + 1 + 1 + 1 + 1\).

В третьем наборе входных данных число \(1\,000\,000\,000\) само является двоично-десятичным, поэтому ответ равен \(1\).

C. Погоня

Бинарный поиск жадные алгоритмы Перебор сортировки *1200

Вы и ваш друг Илья участвуете в личном соревновании по программированию, состоящем из множества этапов. За каждый этап участник может получить любое целое число баллов от \(0\) до \(100\) включительно, независимо от других участников.

Баллы, набранные участниками в отдельных этапах, используются для формирования суммарных результатов соревнования. Пусть к некоторому моменту времени прошло \(k\) этапов. Тогда для каждого участника выбирается \(k - \lfloor \frac{k}{4} \rfloor\) этапов, на которых он набрал наибольшее число баллов, и суммируются баллы на них. Полученное число и является суммарным результатом участника. (Здесь \(\lfloor t \rfloor\) обозначает округление вниз до наибольшего целого числа, не большего \(t\).)

Например, пусть прошло \(9\) этапов, на которых вы набрали баллы \(50, 30, 50, 50, 100, 10, 30, 100, 50\). Сначала выбираются \(7\) этапов, на которых вы набрали наибольшее число баллов: например, это могут быть все этапы, кроме \(2\)-го и \(6\)-го. Тогда ваш суммарный результат равен \(50 + 50 + 50 + 100 + 30 + 100 + 50 = 430\).

К данному моменту прошло \(n\) этапов, и вам известны ваши баллы и баллы Ильи на каждом из этих этапов. Однако сколько ещё этапов будет в соревновании, неизвестно. Вам интересно, какое наименьшее число этапов ещё должно пройти, чтобы ваш результат хотя бы теоретически смог оказаться больше или равен результату Ильи. Найдите это число!

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — число прошедших этапов соревнования.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\)) — ваши баллы на прошедших этапах.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 100\)) — баллы Ильи на прошедших этапах.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее число этапов, через которое ваш результат может оказаться больше или равен результату Ильи.

Если ваш результат уже и так не меньше результата Ильи, выведите \(0\).

Примечание

В первом наборе входных данных вы набрали \(100\) баллов на единственном прошедшем этапе, а Илья — \(0\). Значит, ваш суммарный результат (\(100\)) и так не хуже результата Ильи (\(0\)).

Во втором наборе входных данных вы набрали \(0\) баллов на первом этапе, а Илья — \(100\). Достаточно одного этапа с противоположным результатом, чтобы суммарный результат вас обоих стал равен \(100\).

В третьем наборе входных данных ваш суммарный результат равен \(30 + 40 + 50 = 120\), а Ильи — \(100 + 100 + 100 = 300\). После трёх дополнительных этапов ваш результат может стать равен \(420\), а Ильи — \(400\).

В четвёртом наборе входных данных после четырёх дополнительных этапов ваш результат может стать равен \(470\), а Ильи — \(400\). Трёх этапов недостаточно.

D. Секретный Санта

графы жадные алгоритмы Конструктив математика Потоки *1600

В компании ВКонтакте в декабре традиционно проводится мероприятие под названием «Секретный Санта». Суть его в следующем.

В мероприятии участвуют \(n\) сотрудников, пронумерованных от \(1\) до \(n\). Каждому сотруднику \(i\) назначается другой сотрудник \(b_i\), которому сотрудник \(i\) должен сделать новогодний подарок. При этом каждый сотрудник назначается ровно одному другому сотруднику, и никто не назначается сам себе (но возможно, что два сотрудника окажутся назначены друг другу). Формально, все \(b_i\) должны быть различными целыми числами от \(1\) до \(n\), и для любого \(i\) должно выполняться \(b_i \ne i\).

Как правило, назначение происходит случайным образом. Но в качестве эксперимента у участников мероприятия спросили, кому бы они хотели сделать подарок. Каждый сотрудник \(i\) сказал, что желает сделать подарок сотруднику \(a_i\).

Найдите такое корректное назначение \(b\), что как можно больше пожеланий сотрудников окажется выполнено.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных задан в двух строках. Первая строка содержит целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — число участников мероприятия.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\); \(a_i \ne i\)) — пожелания сотрудников в порядке от \(1\)-го до \(n\)-го.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(k\) (\(0 \le k \le n\)) — число выполненных пожеланий в вашем назначении.

Во второй строке выведите \(n\) различных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\); \(b_i \ne i\)) — номера сотрудников, назначенных сотрудникам \(1, 2, \ldots, n\).

Число \(k\) должно быть равно числу индексов \(i\) таких, что \(a_i = b_i\), и должно быть максимальным возможным. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных существует два корректных назначения — \([3, 1, 2]\) и \([2, 3, 1]\). В первом случае будет выполнено два пожелания, а во втором — одно. Таким образом, \(k = 2\), и верным ответом является только назначение \([3, 1, 2]\).

E. Минимакс

жадные алгоритмы Конструктив Строки *2100

Префикс-функция от строки \(t = t_1 t_2 \ldots t_n\) и позиции \(i\) в ней — это длина \(k\) наибольшего собственного (не равного всей подстроке) префикса подстроки \(t_1 t_2 \ldots t_i\), который одновременно является суффиксом этой подстроки.

Например, для строки \(t = \) abacaba значения префикс-функции от позиций \(1, 2, \ldots, 7\) равны \([0, 0, 1, 0, 1, 2, 3]\).

Введём функцию \(f(t)\), равную максимальному значению префикс-функции строки \(t\) по всем её позициям. Например, \(f(\)abacaba\() = 3\).

Вам дана строка \(s\). Переставьте её символы произвольным образом, чтобы получить строку \(t\) (количество вхождений любого символа в строки \(s\) и \(t\) должно совпадать). Значение \(f(t)\) должно быть минимальным возможным. Среди всех вариантов минимизировать \(f(t)\) выберите тот, где строка \(t\) лексикографически минимальна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных состоит из одной строки \(s\) (\(1 \le |s| \le 10^5\)), состоящей из строчных латинских букв.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку \(t\).

Мультимножество букв в строках \(s\) и \(t\) должно совпадать. Значение \(f(t)\), максимума префикс-функции в строке \(t\), должно быть минимальным возможным. Строка \(t\) должна быть лексикографически минимальной среди всех строк, удовлетворяющих предыдущим условиям.

Примечание

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

В первом наборе входных данных \(f(t) = 0\) и значения префикс-функции равны \([0, 0, 0, 0, 0]\) для любой перестановки букв. Строка ckpuv является лексикографически минимальной перестановкой букв строки vkcup.

Во втором наборе входных данных \(f(t) = 1\), значения префикс-функции равны \([0, 1, 0, 1, 0, 1, 0]\).

В третьем наборе входных данных \(f(t) = 5\), значения префикс-функции равны \([0, 1, 2, 3, 4, 5]\).

E. Укомплектование шахматной команды

*особая задача Бинарный поиск жадные алгоритмы Структуры данных

Поликарп готовит команду к предстоящей игре на шахматном турнире. Полная команда для турнира должна состоять из \(n+1\) участника.

В его команде \(n\) участников, у \(i\)-го уровень подготовки равен \(a_i\). Поликарпу предстоит выбрать последнего участника команды.

В команде соперника \(n+1\) участник, у \(j\)-го уровень подготовки равен \(b_j\).

У Поликарпа есть \(m\) вариантов выбора последнего участника. У \(k\)-го из них уровень подготовки равен \(c_k\).

До начала игры Поликарп ставит каждого игрока своей команды в пару с игроком команды соперника. Каждый игрок обеих команд состоит ровно в одной паре. Сложность игры для конкретного игрока — это разница между уровнем подготовки его соперника и его уровнем. То есть, если \(i\)-й игрок команды Поликарпа в паре с \(j\)-м игроком команды соперника, то сложность равна \(b_j - a_i\). Сложность игры для команды — это максимум по сложностям ее участников.

Поэтому перед началом игры Поликарп хочет поставить всех игроков в пары так, чтобы сложность игры для его команды была как можно меньше.

Для каждого из \(m\) вариантов последнего участника команды выведите наименьшую сложность игры, которую может получить Поликарп.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \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\)-го игрока команды Поликарпа.

В третьей строке записано \(n+1\) целое число \(b_1, b_2, \dots, b_{n+1}\) (\(1 \le b_j \le 10^9\)), где \(b_j\) — уровень подготовки \(j\)-го игрока команды соперника.

В четвертой строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество вариантов последнего игрока.

В пятой строке записаны \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_k \le 10^9\)), где \(c_k\) — уровень подготовки \(k\)-го игрока среди вариантов для последнего участника команды Поликарпа.

Выходные данные

Выведите \(m\) целых чисел — \(k\)-е должно быть равно минимальной сложности игры, которую может получить Поликарп, если он выберет \(k\)-й вариант последнего игрока.

Примечание

В первом примере лучшие пары для первых трех вариантов выглядят следующим образом. Обратите внимание, что может существовать несколько корректных пар, которые дают наименьший ответ.

Первый вариант:

Команда Поликарпа: 6 1 3 1 10 4

Команда соперника: 9 4 2 5  9 8

Соответствующие сложности игры для каждого игрока равны: 3, 3, -1, 4, -1, 4. Максимум равен 4, поэтому он является сложностью игры для команды.

Второй вариант:

Команда Поликарпа: 10 4 1 3 7 6

Команда соперника:  9 4 2 5 9 8

Третий вариант:

Команда Поликарпа: 6 3 1 4 10 6

Команда соперника: 9 4 2 5  9 8

F. Разбиение двоичной строки

*особая задача Бинарный поиск жадные алгоритмы

Назовем строку \(t\), состоящую из символов 0 и/или 1, красивой, если количество вхождений символа 0 в этой строке не превышает \(k\), либо количество вхождений символов 1 в этой строке не превышает \(k\) (либо выполняются оба условия). Например, если \(k = 3\), строки 101010, 111, 0, 00000, 1111111000 являются красивыми, а строки 1111110000, 01010101 не являются красивыми.

Вам дана строка \(s\). Вам необходимо разбить ее на минимально возможное количество красивых строк, т. е. найти последовательность строк \(t_1, t_2, \dots, t_m\) такую, что все \(t_i\) были красивыми, \(t_1 + t_2 + \dots + t_m = s\) (где \(+\) — оператор конкатенации), а \(m\) минимально возможно.

Для каждого \(k\) от \(1\) до \(|s|\) найдите минимально возможное количество строк на которое можно разбить заданную строку \(s\) (т. е. минимально возможное \(m\) в разбиении).

Входные данные

Единственная строка содержит одну строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)). Каждый символ \(s\) является либо 0, либо 1.

Выходные данные

Выведите \(|s|\) целых чисел. \(i\)-е целое число должно быть равно минимальному количеству строк в разбиении \(s\), когда \(k = i\).

B. Уродливость гистограммы

жадные алгоритмы математика реализация *1100

Маленький Дорми на Рождество получил гистограмму с \(n\) столбцами высоты \(a_1, a_2, \ldots, a_n\). Однако чем больше он играл с гистограммой, тем больше он осознавал ее неидеальность, поэтому сегодня он решил ее немного изменить.

Чтобы изменить гистограмму, маленький Дорми может выполнить следующую операцию произвольное количество раз:

  • Выбрать индекс \(i\) (\(1 \le i \le n\)) такой, что \(a_i>0\), и присвоить \(a_i := a_i-1\).

Маленький Дорми определяет уродливость гистограммы (после выполнения некоторого количества операций) как сумму длин вертикальных отрезков границы гистограммы и количества операций, которые он сделал. Чтобы получить лучшую гистограмму, он хочет минимизировать ее уродливость, применив несколько операций.

Так как гистограмма очень большая, маленькому Дорми сложно вычислить минимально возможную уродливость, поэтому, как старший брат Дорми, вы должны помочь ему найти минимально возможную уродливость.

Рассмотрим пример, в котором изначально в гистограмме \(4\) столбца, высоты которых равны \(4,8,9,6\):

Синим показана гистограмма, а красные линии показывают вертикальные отрезки границы гистограммы. В настоящий момент сумма длин вертикальных отрезков границы равна \(4+4+1+3+6 = 18\), поэтому, если Дорми не будет изменять гистограмму, ее уродливость будет равна \(18\).

Если Дорми применит операцию один раз к столбцу \(2\) и два раза к столбцу \(3\), столбцы будут иметь высоты \(4,7,7,6\):

Теперь общая длина вертикальных отрезков границы равна \(4+3+1+6=14\), а уродливость равна \(14+3=17\). Можно показать, что это — оптимальное решение.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число: минимально возможную уродливость, которую может получить Дорми.

Примечание

Пример \(1\) описан в условии задачи.

Изначальная гистограмма в примере \(2\) показана ниже:

Изначально уродливость равна \(2+1+6+3+4=16\).

Применяя операцию один раз к столбцу \(1\), шесть раз к столбцу \(3\) и три раза к столбцу \(4\), получится гистограмма с высотами \(1,1,1,1,0,0\):

Длина вертикальных отрезков границы теперь равна \(1+1=2\), а маленький Дорми сделал \(1+6+3=10\) операций, поэтому общая уродливость равна \(2+10=12\), что является оптимальным решением.

E. Потерянный массив

графы жадные алгоритмы интерактив кратчайшие пути *2300

Это интерактивная задача

XOR-суммой массива \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) называется величина \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Маленьких Дорми на Рождество получил массив из \(n\) целых \(a_1, a_2, \ldots, a_n\). Однако вскоре он уронил его в XOR-машину, и массив был утерян.

В настройках XOR-машины установлено целое число \(k\) (которое вы не можете менять), и вы можете делать запросы к XOR-машине: дав машине \(k\) различных индексов \(x_1, x_2, \ldots, x_k\), вы получите значение \(a_{x_1} \oplus a_{x_2} \oplus \ldots \oplus a_{x_k}\).

Как старший брат Дорми, вы хотите помочь ему восстановить XOR-сумму массива \(a_1, a_2, \ldots, a_n\), сделав несколько запросов к XOR-машине.

Маленький Дорми нетерпелив, поэтому вы должны сделать минимальное количество запросов к XOR-машине, чтобы найти XOR-сумму массива. Формально, пусть \(d\) равно минимальному числу запросов, необходимому, чтобы найти XOR-сумму любого массива длины \(n\), когда размер запроса равен \(k\). Ваше решение будет зачтено, если вы найдете XOR-сумму за не более чем \(d\) запросов.

Вы заметили, что для некоторых настроек машины \(k\) и некоторых значений \(n\) может быть невозможно найти XOR-сумму, в таком случае вы должны определить это.

Массив \(a_1, a_2, \ldots, a_n\) зафиксирован до того, как вы начнете делать запросы к XOR-машине, и не меняется в процессе взаимодействия.

Входные данные

Первая строка содержит целые числа \(n\) и \(k\) (\(1 \le n \le 500\), \(1 \le k \le n\)) — длину массива и размер запросов к XOR-машине.

Элементы массива удовлетворяют \(1 \le a_i \le 10^9\).

Можно показать, что если возможно найти XOR-сумму в данном тесте, то это можно сделать за не более чем \(500\) запросов. Поэтому \(d \le 500\).

После чтения \(n\) и \(k\) вы можете начать делать запросы.

Выходные данные

Если невозможно вычислить XOR-сумму массива, выведите \(-1\) сразу после чтения \(n\) и \(k\). Не начинайте взаимодействие.

Иначе, когда ваша программа определит XOR-сумму найденного массив \(a_1, a_2, \ldots, a_n\), выведите ответ в следующем формате: «! x», где \(x\) равен XOR-сумме массива \(a_1, a_2, \ldots, a_n\), и завершите программу сразу после сброса буфера вывода.

Вывод ответа не считается за запрос.

Протокол взаимодействия

Чтобы сделать запрос, выведите «? b», где \(b\) — массив из ровно \(k\) различных целых чисел от \(1\) до \(n\), обозначающий индексы элементов, XOR-сумму которых вы хотите узнать.

Затем считайте одно целое число \(x\) — XOR-сумму запрошенных элементов. Можно показать, что \(0 \le x \le 2 \cdot 10^9\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректный запрос, или сделаете больше, чем \(500\) запросов, взаимодействие немедленно прекратится и вы получите вердикт «Неправильный ответ». Обратите внимание, если вы превысите \(d\) запросов, взаимодействие продолжится до тех пор, пока вы не превысите лимит в \(500\) запросов, а потом все равно получите вердикт «Неправильный ответ».

Взломы

Чтобы взломать решение, используйте следующий формат.

Первая строка содержит целые числа \(n\) и \(k\) (\(1 \le n \le 500\), \(1 \le k \le n\)).

Вторая строка содержит массив целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Примечание

В первом примере массив \(a_1, a_2, \ldots, a_n\) равен \(2, 1, 7, 5, 6\), его XOR-сумма равна \(7\).

Первый запрос в примере включает индексы \(1,2,3\), поэтому ответ на запрос равен \(a_1 \oplus a_2 \oplus a_3 = 2 \oplus 1 \oplus 7 = 4\).

Второй запрос в примере включает индексы \(2,3,5\), поэтому ответ на запрос равен \(a_2 \oplus a_3 \oplus a_5 = 1 \oplus 7 \oplus 6 = 0\).

Первый запрос в примере включает индексы \(4,1,5\), поэтому ответ на запрос равен \(a_4 \oplus a_1 \oplus a_5 = 5 \oplus 2 \oplus 6 = 1\). Обратите внимание, что индексы можно выводить в любом порядке.

Обратите внимание, что в примере сделано три запроса для демонстрации взаимодействия, но они не обязательно следуют оптимальной стратегии.

Во втором примере невозможно вычислить XOR-сумму массива, поэтому нужно сразу вывести \(-1\).

F1. Падающий песок (простая версия)

графы жадные алгоритмы поиск в глубину и подобное *2500

Это простая версия задачи. Разница в версиях заключается в ограничениях на \(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\). Ниже приведен рисунок ко второму примеру.

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\). Ниже приведен рисунок ко второму примеру.

B. Переупорядочение массива

жадные алгоритмы математика Перебор сортировки теория чисел *900

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Назовем пару индексов \(i\), \(j\) хорошей, если \(1 \le i < j \le n\) и \(\gcd(a_i, 2a_j) > 1\) (где \(\gcd(x, y)\) — наибольший общий делитель чисел \(x\) и \(y\)).

Найдите максимальное количество хороших пар индексов, если вы можете переупорядочить элементы массива \(a\) произвольным образом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество элементов в массиве.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — максимальное количество хороших пар индексов после переупорядочивания элементов массива \(a\).

Примечание

В первом примере из условия элементы массива можно переставить следующим образом: \([6, 3, 5, 3]\).

В третьем примере из условия элементы массива можно переставить следующим образом: \([4, 4, 2, 1, 1]\).

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\).

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\) больше не осталось золота.

D. Омкар и медианы

жадные алгоритмы реализация Структуры данных *2000

О-о-о! Рэй снова потерял свой массив! Однако Омкар может помочь, потому что он думает, что нашел OmkArray массива Рэя. OmkArray массива \(a\) с элементами \(a_1, a_2, \ldots, a_{2k-1}\) — это массив \(b\) с элементами \(b_1, b_2, \ldots, b_{k}\) такой, что \(b_i\) равен медиане \(a_1, a_2, \ldots, a_{2i-1}\) для всех \(i\). Омкар нашел массив \(b\) размера \(n\) (\(1 \leq n \leq 2 \cdot 10^5\), \(-10^9 \leq b_i \leq 10^9\)). Для этого массива \(b\), Рэй хочет проверить утверждение Омкара и узнать, действительно ли \(b\) является OmkArray некоторого массива \(a\). Можете ли вы помочь Рэю?

Медиана набора чисел \(a_1, a_2, \ldots, a_{2i-1}\) — это число \(c_{i}\), где \(c_{1}, c_{2}, \ldots, c_{2i-1}\) представляют собой \(a_1, a_2, \ldots, a_{2i-1}\), отсортированные в неубывающем порядке.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(b\).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \leq b_i \leq 10^9\)) — элементы \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую YES, если существует массив \(a\) такой, что \(b_i\) является медианой \(a_1, a_2, \dots, a_{2i-1}\) для всех \(i\), и NO в противном случае. Регистр букв в YES и NO не имеет значения (поэтому yEs и No также будут приняты).

Примечание

Во втором наборе входных данных первого примера массив \([4]\) даст OmkArray \([4]\), так как медиана первого элемента равна \(4\).

В четвертом наборе входных данных первого примера массив \([3, 2, 5]\) даст OmkArray \([3, 3]\), так как медиана \(3\) равна \(3\), а медиана \(2, 3, 5\) равна \(3\).

В пятом наборе входных данных первого примера массив \([2, 1, 0, 3, 4, 4, 3]\) даст OmkArray \([2, 1, 2, 3]\), так как

  • медиана \(2\) равна \(2\)
  • медиана \(0, 1, 2\) равна \(1\)
  • медиана \(0, 1, 2, 3, 4\) равна \(2\)
  • и медиана \(0, 1, 2, 3, 3, 4, 4\) равна \(3\).

Во втором наборе входных данных второй выборки массив \([1, 0, 4, 3, 5, -2, -2, -2, -4, -3, -4, -1, 5]\) даст OmkArray \([1, 1, 3, 1, 0, -2, -1]\), как

  • медиана \(1\) равна \(1\)
  • медиана из \(0, 1, 4\) равна \(1\)
  • медиана из \(0, 1, 3, 4, 5\) равна \(3\)
  • медиана \(-2, -1, 0, 1, 3, 4, 5\) равна \(1\)
  • медиана \(-4, -2, -2, -2, 0, 1, 3, 4, 5\) равна \(0\)
  • медиана \(-4, -4, -3, -2, -2, -2, 0, 1, 3, 4, 5\) равна \(-2\)
  • и медиана \(-4, -4, -3, -2, -2, -2, -1, 0, 1, 3, 4, 5, 5\) равна \(-1\)

Для всех случаев, когда ответ NO, можно доказать, что невозможно найти массив \(a\) такой, что \(b\) является Omkarray \(a\).

A. Арифметический массив

жадные алгоритмы математика *800

Массив \(b\) длины \(k\) называется хорошим, если его среднее арифметическое равно \(1\). Более формально, если \(\)\frac{b_1 + \cdots + b_k}{k}=1.\(\)

Обратите внимание, что значение \(\frac{b_1+\cdots+b_k}{k}\) не округляется в большую или меньшую сторону. Например, массив \([1,1,1,2]\) имеет среднее арифметическое \(1.25\), а не равно \(1\).

Вам дан массив \(a\) из \(n\) целых чисел. За одну операцию вы можете добавить в конец массива любое неотрицательное целое число. Какое минимальное количество операций требуется для того, чтобы массив стал хорошим?

Можно показать, что этого всегда можно добиться за конечное число операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \leq n \leq 50\)) — длину исходного массива \(a\).

Вторая строка каждого теста содержит \(n\) целых чисел \(a_1,\ldots,a_n\) (\(-10^4\leq a_i \leq 10^4\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество неотрицательных целых чисел, которые нужно добавить к массиву, чтобы его среднее арифметическое стало равно ровно \(1\).

Примечание

В первом наборе входных данных нам не нужно добавлять ни одного элемента, потому что среднее арифметическое массива уже равно \(1\), поэтому ответ — \(0\).

Во втором наборе входных данных среднее арифметическое изначально не равно \(1\), поэтому нам нужно добавить еще хотя бы одно число. Если мы добавим \(0\), то среднее арифметическое всего массива станет \(1\), поэтому ответ — \(1\).

В третьем наборе входных данных минимальное количество элементов, которые необходимо добавить, составляет \(16\), так как добавлять можно только неотрицательные целые числа.

В четвертом наборе входных данных мы можем добавить одно целое число \(4\). Среднее арифметическое становится \(\frac{-2+4}{2}\), что равно \(1\).

B. Плохой мальчик

жадные алгоритмы Конструктив математика *900

Райли — очень плохой мальчик, но в то же время он мастер йо-йо. Поэтому он решил использовать свои навыки йо-йо, чтобы досадить своему другу Антону.

Комната Антона может быть представлена в виде сетки с \(n\) строк и \(m\) столбцов. Пусть \((i, j)\) обозначает клетку в строке \(i\) и столбце \(j\). В настоящее время Антон стоит в клетке \((i, j)\) своей комнаты. Чтобы досадить Антону, Райли решил бросить ровно два йо-йо в клетки комнаты (они могут находиться в одной клетке).

Поскольку Антону не нравятся йо-йо, брошенные на пол, он должен поднять оба йо-йо и вернуться в исходную клетку. Расстояние, пройденное Антоном — это кратчайший путь, который проходит через позиции обоих йо-йо и возвращается в \((i, j)\), если можно проходить только в соседние по стороне клетки. То есть, если он находится в клетке \((x, y)\), то за один шаг (если клетка с такими координатами существует) он может попасть в одну из клеток \((x + 1, y)\), \((x - 1, y)\), \((x, y + 1)\) и \((x, y - 1)\).

Райли размышляет, куда ему бросить эти два йо-йо, чтобы расстояние, пройденное Антоном, было максимальным. Но поскольку он очень занят, он попросил вас помочь ему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(i\), \(j\) (\(1 \leq n, m \leq 10^9\), \(1\le i\le n\), \(1\le j\le m\)) — размеры комнаты и клетки, на которой в данный момент стоит Антон.

Выходные данные

Для каждого набора входных данных выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \leq x_1, x_2 \leq n\), \(1\le y_1, y_2\le m\)) — координаты, куда должны быть брошены два йо-йо. Они будут брошены в координаты \((x_1,y_1)\) и \((x_2,y_2)\).

Если ответов несколько, вы можете вывести любой.

Примечание

Вот визуализация первого набора входных данных.

C. Сложные скалы

жадные алгоритмы Конструктив математика реализация *1200

Вы — дизайнер игр, и хотите создать полосу препятствий. Игрок будет идти слева направо. У вас уже есть \(n\) высот гор, и вы хотите расположить эти высоты так, чтобы абсолютная разность между высотами первой и последней гор была как можно меньше.

Кроме того, вы хотите сделать игру сложной, а поскольку идти в гору или по равнине сложнее, чем спускаться по склону, то сложность уровня будет равна количеству гор \(i\) (\(1 \leq i < n\)) таких, что \(h_i \leq h_{i+1}\), где \(h_i\) — высота \(i\)-й горы. Вы не хотите потратить впустую ни одну из смоделированных гор, поэтому должны использовать их все.

Из всех вариантов, минимизирующих \(|h_1-h_n|\), найдите самый сложный. Если существует несколько порядков, удовлетворяющих этим требованиям, вы можете найти любой.

Входные данные

Первая строка будет содержать одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество гор.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_1,\ldots,h_n\) (\(1 \leq h_i \leq 10^9\)), где \(h_i\) — высота \(i\)-й горы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — заданные высоты в порядке, который максимизирует сложность уровня среди всех порядков, минимизирующих \(|h_1-h_n|\).

Если существует несколько порядков, удовлетворяющих этим требованиям, вы можете вывести любой.

Примечание

В первом наборе входных данных:

Игрок начинает с высоты \(2\), затем поднимается на высоту \(4\), увеличивая сложность на \(1\). После этого он спускается на высоту \(1\), и сложность не меняется, потому что он спускается вниз. Наконец, игрок поднимется на высоту \(2\), и сложность увеличится на \(1\). Абсолютная разность между начальной и конечной высотой равна \(0\), а следовательно минимальна. Трудность максимальна при данных условиях.

Во втором наборе входных данных:

Игрок начинает с высоты \(1\), затем поднимается до высоты \(3\), увеличивая сложность на \(1\). Абсолютная разниость между начальной и конечной высотой равна \(2\) и она минимально возможная, так как это единственные высоты. Трудность максимальна.

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».

E2. Удаляй и удлиняй (сложная версия)

Бинарный поиск жадные алгоритмы Строки строковые суфф. структуры Структуры данных хэши *2200

Это сложная версия задачи. Единственное отличие — это ограничения на \(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 5\cdot 10^5\)) — длину исходной строки \(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».

F. Исправляем фигуры

графы жадные алгоритмы Конструктив математика поиск в глубину и подобное снм *2200

У вас есть связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер. У \(i\)-го узла есть начальное значение \(v_i\) и целевое значение \(t_i\).

За одну операцию можно выбрать любое ребро \((i, j)\) и добавить \(k\) к \(v_i\) и \(v_j\), где \(k\) может быть любым целым числом. В частности, \(k\) может быть отрицательным.

Ваша задача определить, можно ли, выполнив некоторое конечное число операций (возможно, ноль), добиться того, что каждого узла \(i\), \(v_i = t_i\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)), количество наборов входных данных. Затем следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n \leq 2\cdot 10^5\), \(n-1\leq m\leq \min(2\cdot 10^5, \frac{n(n-1)}{2})\)) — количество вершин и ребер соответственно.

Вторая строка содержит \(n\) целых чисел \(v_1\ldots, v_n\) (\(-10^9 \leq v_i \leq 10^9\)) — начальные значения вершин.

Третья строка содержит \(n\) целых чисел \(t_1\ldots, t_n\) (\(-10^9 \leq t_i \leq 10^9\)) — целевые значения вершин.

Каждая из следующих \(m\) строк содержит два целых числа \(i\) и \(j\), обозначающих ребро между вершинами \(i\) и \(j\) (\(1 \leq i, j \leq n\), \(i\ne j\)).

Гарантируется, что граф связный и между одной парой вершин есть не более одного ребра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого наборам входных данных, если возможно, чтобы значение в каждой вершине стало равно целевому после некоторого количества операций, выведите «YES». В противном случае выведите «NO».

Примечание

Вот визуализация первого тестового случая (оранжевые значения обозначают начальные значения, а синие — целевые):

Один из возможных порядков действий для получения нужных значений для каждого узла следующий:

  • Операция \(1\): Добавить \(2\) к вершинами \(2\) и \(3\).
  • Операция \(2\): Добавить \(-2\) к вершинам \(1\) и \(4\).
  • Операция \(3\): Добавить \(6\) к вершинам \(3\) и \(4\).

Теперь мы видим, что в общей сложности мы добавили \(-2\) к вершине \(1\), \(2\) к вершине \(2\), \(8\) к вершине \(3\) и \(4\) к вершине \(4\), что привело каждую вершину к нужному значению.

Для графа из второго набора входных данных получить нужные значения невозможно.

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\)) — силы камней.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для уничтожения камней с наибольшей и наименьшей силой.

B. Друзья и конфеты

жадные алгоритмы математика *800

У Поликарпа есть \(n\) друзей, у \(i\)-го из которых есть \(a_i\) конфет. Друзьям Поликарпа не нравится, когда у них различается количество конфет. Иными словами, они хотят, чтобы все \(a_i\) были равны. Чтобы добиться этого, Поликарп делает следующее ровно один раз:

  • Поликарп выбирает \(k\) (\(0 \le k \le n\)) произвольных друзей (пусть он выбрал друзей с номерами \(i_1, i_2, \ldots, i_k\));
  • Поликарп перераспределяет их конфеты среди всех \(n\) друзей, всего таких конфет \(a_{i_1} + a_{i_2} + \ldots + a_{i_k}\). При перераспределении для каждой конфеты из \(a_{i_1} + a_{i_2} + \ldots + a_{i_k}\) он выбирает нового владельца (любого из \(n\) друзей, конфета может вновь достаться старому владельцу).

Заметьте, что число \(k\) заранее не фиксировано и может быть произвольным. Ваша задача — найти минимальное возможное значение \(k\).

Например, если \(n=4\) и \(a=[4, 5, 2, 5]\), тогда Поликарп мог сделать следующее:

  • Поликарп выбирает \(k=2\) друзей с номерами \(i=[2, 4]\) и перераспределяет \(a_2 + a_4 = 10\) конфет так, что в итоге \(a=[4, 4, 4, 4]\) (две конфеты достаются человеку под номером \(3\)).

Заметьте, что в данном примере Поликарп не может выбрать \(k=1\) друга так, чтобы можно было перераспределить конфеты так, что в итоге все \(a_i\) равны между собой.

Для данных \(n\) и \(a\) определите минимальное значение \(k\). При этом значении \(k\) Поликарп должен иметь возможность выбрать \(k\) друзей и перераспределить их конфеты так, что у всех в итоге будет одинаковое количество конфет.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^4\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • минимальное значение \(k\) при котором Поликарп может выбрать ровно \(k\) друзей так, чтобы можно было перераспределить конфеты искомым образом;
  • «-1», если такого значения \(k\) не существует.

G. Подарочный набор

Бинарный поиск жадные алгоритмы математика Тернарный поиск *2100

У Поликарпа есть \(x\) красных и \(y\) синих конфет. Из них он хочет составить подарочные наборы. Каждый подарочный набор будет содержать либо \(a\) красных конфет и \(b\) синих конфет, либо наоборот — \(a\) синих конфет и \(b\) красных конфет.

Помогите Поликарпу понять, какое наибольшее число подарочных наборов он может составить.

Например, если \(x = 10\), \(y = 12\), \(a = 5\) и \(b = 2\), то он может составить три подарочных набора:

  • В первом наборе будет \(5\) красных конфет и \(2\) синие;
  • Во втором наборе будет \(5\) синих конфет и \(2\) красные;
  • В третьем наборе будет \(5\) синих конфет и \(2\) красные.

У Поликарпа останется одна красная конфета, используя которую, он не сможет собрать еще один подарочный набор.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки в которой находятся четыре целых числа \(x\), \(y\), \(a\) и \(b\) (\(1 \le x, y, a, b \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное количество подарочных наборов, которое может собрать Поликарп.

A. Старт олимпиады

геометрия жадные алгоритмы Комбинаторика математика *1000

В некоторой олимпиаде участвует \(n\) человек, причем они начинают олимпиаду с интервалом в \(x\) минут. Таким образом первый участник начнёт тур в момент времени \(0\), второй участник начнёт тур в момент времени \(x\), третий — в момент времени \(2 \cdot x\) и так далее.

Длительность тура для каждого участника составляет ровно \(t\) минут, то есть первый участник закончит в момент времени \(t\), второй — в момент времени \(t + x\), и так далее. Когда участник заканчивает писать тур, величина его недовольства равна числу других участников, которые в текущий момент времени еще пишут или только начинают писать тур, но еще не закончили его.

Определите, чему равно суммарное недовольство всех участников олимпиады.

Входные данные

В первой строке вводится единственное число \(k\) (\(1 \le k \le 1000\)) — количество наборов входных данных.

Каждая из следующих \(k\) строк содержит по три целых числа \(n\), \(x\), \(t\) (\(1 \le n, x, t \le 2 \cdot 10^9\)) — число участников олимпиады, интервал в минутах между временами начала тура для участников и длительность тура.

Выходные данные

Выведите \(k\) строк, в \(i\)-й из них выведите суммарное недовольство всех участников олимпиады для \(i\)-го набора входных данных.

Примечание

В первом наборе входных данных первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(5\). К этому времени второй и третий участники уже начнут писать тур, поэтому недовольство первого участника будет равно \(2\).

Второй участник начнёт писать в момент времени \(2\) и закончит в момент времени \(7\). К этому моменту третий и четвёртый участники уже начнут писать тур, поэтому недовольство второго будет равно \(2\).

Третий участник начнёт писать тур в момент времени \(4\) и закончит в момент времени \(9\). К этому времени четвёртый уже начнёт писать тур, поэтому недовольство третьего будет равно \(1\).

Четвёртый участник начнёт писать тур в момент времени \(6\) и закончит в момент времени \(11\). В момент времени \(11\) уже никто не будет писать тур, поэтому недовольство четвёртого будет равно \(0\).

Во втором наборе входных данных первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(2\). К этому моменту второй уже будет писать тур, а третий как раз начнёт в момент времени \(2\). Поэтому недовольство первого участника будет равно \(2\).

Второй начнёт в момент времени \(1\) и закончит в момент времени \(3\). К этому моменту только третий будет всё ещё писать тур.

C. Стабильные группы

жадные алгоритмы сортировки *1200

Есть \(n\) учеников, пронумерованных от \(1\) до \(n\). Уровень знаний \(i\)-го ученика равен \(a_i\). Всех учеников нужно распределить на стабильные группы. Группа называется стабильной, если после сортировки всех учеников группы в порядке возрастания их уровня знаний у любых двух подряд идущих учеников разница уровня знаний не превосходит \(x\).

Например, при \(x = 4\) группа с уровнями знаний \([1, 10, 8, 4, 4]\) является стабильной (потому что \(4 - 1 \le x\), \(4 - 4 \le x\), \(8 - 4 \le x\), \(10 - 8 \le x\)), а группа с уровнями \([2, 10, 10, 7]\) не является стабильной (\(7 - 2 = 5 > x\)).

Преподаватели — достаточно находчивые люди, поэтому в дополнение к \(n\) имеющимся ученикам они могут пригласить не более \(k\) дополнительных учеников с любым уровнем знаний на выбор преподавателей. Определите минимальное число стабильных групп, на которые можно распределить всех учеников (возможно, пригласив новых учеников).

Например, если есть два ученика с уровнями знаний \(1\) и \(5\), \(x = 2\), и \(k \ge 1\), то можно пригласить ученика с уровнем знаний \(3\) и определить всех учеников в одну стабильную группу.

Входные данные

В первой строке находятся три целых числа \(n\), \(k\), \(x\) (\(1 \le n \le 200\,000\), \(0 \le k \le 10^{18}\), \(1 \le x \le 10^{18}\)) — количество учеников, сколько учеников можно пригласить дополнительно и максимальная допустимая разница уровня знаний.

Во второй строке вводится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{18}\)) — уровни знаний учеников.

Выходные данные

В единственной строке выведите одно число — искомое минимальное число стабильных групп, на которое можно разбить учеников.

Примечание

В первом примере из условия можно пригласить учеников с уровнями знаний, равными \(2\) и \(11\). Тогда учеников можно разделить на следующие стабильные группы:

  1. \([1, 1, 2, 5, 8, 11, 12, 13]\),
  2. \([20, 22]\).

Во втором примере из условия новых учеников приглашать нельзя, поэтому потребуется \(3\) группы:

  1. \([1, 1, 5, 5, 20, 20]\)
  2. \([60, 70, 70, 70, 80, 90]\)
  3. \([420]\)

D. PriceFixed

Бинарный поиск жадные алгоритмы реализация сортировки *1600

Девочка Лена — самая экономная девочка в Москве. Поэтому когда папа поручил ей закупку продуктов для поездки на дачу, она сразу отправилась в самый лучший магазин — «PriceFixed». У этого магазина есть несколько особенностей:

  • В магазине есть бесконечный запас каждого товара.
  • Все товары в нем стоят одинаково — ровно \(2\) рубля за единицу товара.
  • Для каждого из \(i\) товаров предусмотрена скидка для опытных покупателей: если вы уже приобрели \(b_i\) единиц товаров (любого типа, не обязательно типа \(i\)), то на все последующие покупки \(i\)-го товара будет действовать скидка \(50\%\) (то есть единицу \(i\)-го товара можно будет купить за \(1\) рубль!).

Лене нужно купить \(n\) товаров: \(i\)-го товара нужно купить не менее \(a_i\) единиц. Помогите Лене понять, какую минимальную сумму денег ей нужно будет потратить, если она будет выбирать порядок покупки товаров оптимальным образом. Обратите внимание, Лена, если хочет, может купить больше единиц некоторого товара, чем необходимо.

Входные данные

В первой строке вводится число \(n\) (\(1 \leq n \leq 100\,000\)) — количество различных товаров в списке.

В следующих \(n\) строках вводятся описания товаров. Каждое описание состоит из двух чисел \(a_i\) и \(b_i\), (\(1 \leq a_i \leq 10^{14}\), \(1 \leq b_i \leq 10^{14}\)) — требуемое число единиц \(i\)-го товара и сколько единиц товаров нужно купить, чтобы получить скидку на товар \(i\).

Сумма всех \(a_i\) в тесте не превосходит \(10^{14}\).

Выходные данные

Выведите искомую минимальную сумму, которая требуется Лене для совершения всех покупок.

Примечание

В первом примере из условия Лена может купить товары в таком порядке:

  1. единицу товара \(3\) за \(2\) рубля,
  2. единицу товара \(1\) за \(2\) рубля
  3. единицу товара \(1\) за \(2\) рубля,
  4. единицу товара \(2\) за \(1\) рубль (она может купить его со скидкой, так как уже куплено \(3\) товара),
  5. единицу товара \(1\) за \(1\) рубль (она может купить его со скидкой, так как уже куплено \(4\) товара).

Суммарно она потратит \(8\) рублей. Можно показать, что меньше потратить невозможно.

Во втором примере из условия Лена может купить товары в таком порядке:

  1. единицу товара \(1\) за \(2\) рубля,
  2. две единицы товара \(2\) по \(2\) рубля за каждую,
  3. единицу товара \(5\) за \(2\) рубля,
  4. единицу товара \(3\) за \(1\) рубль,
  5. две единицы товара \(4\) по \(1\) рублю за каждую,
  6. единицу товара \(1\) за \(1\) рубль.

Суммарно при таком порядке приобретения товаров Лена потратит \(12\) рублей.

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\). Если существует несколько корректных способов ответить на запросы, то любой из них будет засчитан.

F. Необычный массив

жадные алгоритмы сортировки Структуры данных *2600

У Васи есть массив, состоящий из \(n\) чисел \(a_1, a_2, \ldots, a_n\). Каждое число в этом массиве Вася считает по-своему необычным. Чтобы вычислить необычность числа на позиции \(i\), Вася делает следующее:

Он выбирает подотрезок \(a_l, a_{l+1}, \ldots, a_r\) такой, что \(1 \le l \le i \le r \le n\) и мысленно сортирует его по возрастанию (равные элементы он может переставлять так, как ему хочется). Далее на этом подотрезке он находит центр. Центром подотрезка называется элемент на позиции \((l + r) / 2\), если длина отрезка нечётна, или элемент на позиции \((l + r + 1) / 2\), если длина отрезка чётна. Теперь Вася находит на этом подотрезеке элемент, который до сортировки стоял на позиции \(i\), и смотрит на расстояние от этого элемента до центра подотрезка (расстояние между элементами с индексами \(j\) и \(k\) равняется \(|j - k|\)).

Необычностью числа на позиции \(i\) называется максимальное такое расстояние среди всех подходящих выборов \(l\) и \(r\).

Вася хочет посчитать необычность каждого числа в своём массиве. Помогите ему это сделать.

Входные данные

В первой строке входных данных находится одно целое число \(n\) (\(1 \le n \le 200\,000\)) — размер массива.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сам массив.

Выходные данные

В единственной строке выведите \(n\) чисел, \(i\)-е из них должно быть равно необычности элемента на позиции \(i\) массива.

Примечание

В первом примере:

  1. Для первой позиции подойдёт отрезок от позиции \(1\) до позиции \(5\). Если его отсортировать, то числа упорядочатся по значению как \([1, 2, 3, 4, 5]\), центр будет равен \(3\), таким образом расстояние от центра до числа \(5\) равно \(2\).
  2. Для второй позиции подойдёт отрезок от позиции \(2\) до позиции \(4\).
  3. Для третей позиции подойдёт отрезок от позиции \(3\) до позиции \(5\).
  4. Для четвёртой позиции подойдёт отрезок от позиции \(1\) до позиции \(4\). Если его отсортировать, то числа упорядочатся по значению как \([2, 3, 4, 5]\), центр будет равен \(4\), таким образом расстояние от центра до числа \(2\) равно \(2\).
  5. Для пятой позиции подойдёт отрезок от позиции \(1\) до позиции \(5\).

A. Домашнее задание

жадные алгоритмы *1600

Сережа посещает кружок, на котором изучает N-ский язык. На каждом занятии ему дают домашнее задание. На этот раз ему задали перевести некоторое предложение на N-ский язык. Предложения в N-ском языке представляют собой строки, состоящие из строчных латинских букв без пробелов и знаков препинания.

Сережа вспомнил про задание за полчаса до следующего занятия и быстро что-то написал. Но потом он вспомнил, что на прошлом занятии ему рассказывали про грамматику N-ского языка. Согласно правилам, в N-ском языке есть некоторые «запрещенные» пары букв, которые никогда не могут стоять рядом в предложении, причем порядок букв не имеет значения (например, если запрещена пара букв «ab», то запрещены любые вхождения подстрок «ab» и «ba»). Кроме того, буквы в каждой паре различны, и каждая буква участвует не более, чем в одной запрещенной паре.

Теперь Сережа хочет исправить свое предложение, чтобы в нем не было «запрещенных» пар букв, стоящих рядом. Но времени осталось мало, и он решил просто вычеркнуть некоторые буквы из предложения. Какое минимальное количество букв ему придется вычеркнуть? При вычеркивании буквы она «удаляется», то есть буквы, находящиеся слева и справа от нее (если такие были), становятся соседними. Например, если вычеркнуть из строки «aba» первую букву получится строка «ba», а если вычеркнуть вторую получится «aa».

Входные данные

В первой строке записана непустая строка s, состоящая из строчных латинских букв — исходное предложение на N-ском языке, написанное Сережей. Длина строки s не превосходит 105.

В следующей строке записано целое число k (0 ≤ k ≤ 13) — количество запрещенных пар букв.

В следующих k строках записаны описания запрещенных пар букв. В каждой строке находится ровно по две различные строчные латинские буквы без разделителей — запрещенные пары. Гарантируется, что каждая буква входит не более, чем в одну запрещенную пару.

Выходные данные

Выведите одно число — минимальное количество букв, которые нужно удалить, чтобы в строке не осталось запрещенных пар букв, стоящих рядом. Заметьте, что ответ всегда существует, так как всегда можно удалить все буквы.

Примечание

В первом примере нужно удалить две буквы b.

Во втором примере нужно удалить вторую или третью букву. Второе ограничение никакой роли не играет.

A. Отличные графы

графы жадные алгоритмы Конструктив кратчайшие пути сортировки *1400

У Фермера Джона есть ферма, состоящая из \(n\) пастбищ, соединенных с помощью односторонних дорог. У каждой дороги есть вес, означающий время, которое необходимо потратить, чтобы пройти по ней. Дороги могут иметь отрицательный вес, иными словами, коровы по ним движутся так быстро, что способны перемещаться назад во времени! Однако, Фермер Джон гарантирует, что коровы никак не смогут попасть во временную петлю в том смысле, что не смогут, двигаясь по дорогам, уйти бесконечно далеко в прошлое. Кроме того, каждая пара пастбищ соединена не более чем одной дорогой в каждом направлении.

К сожалению, Фермер Джон потерял карту фермы. Все, что он знает — это массив \(d\), где \(d_i\) — это минимальное время, за которое коровы могут добраться до \(i\)-го пастбища из \(1\)-го, двигаясь по дорогам. Стоимость его фермы — это сумма весов всех дорог, и Фермер Джон хочет узнать минимально возможную стоимость фермы, которая не противоречит тому, что он помнит.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество пастбищ.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \(d_1, d_2, \ldots, d_n\) (\(0 \leq d_i \leq 10^9\)) — массив \(d\). Гарантируется, что \(d_1 = 0\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора, выведите минимально возможную стоимость фермы, которая не противоречит воспоминаниям Фермера Джона.

Примечание

В первом наборе вы можете добавить дороги

  • от пастбища \(1\) к пастбищу \(2\) с весом \(2\),
  • от пастбища \(2\) к пастбищу \(3\) с весом \(1\),
  • от пастбища \(3\) к пастбищу \(1\) с весом \(-3\),
  • от пастбища \(3\) к пастбищу \(2\) с весом \(-1\),
  • от пастбища \(2\) к пастбищу \(1\) с весом \(-2\).
Суммарная стоимость равна \(2 + 1 + -3 + -1 + -2 = -3\).

Во втором набор вы можете добавить дорогу от пастбища \(1\) к пастбищу \(2\) с весом \(1000000000\) и дорогу от пастбища \(2\) к пастбищу \(1\) со стоимостью \(-1000000000\). Суммарная стоимость равна \(1000000000 + -1000000000 = 0\).

В третьем наборе, вы не можете добавить ни одной дороги. Суммарная стоимость равна \(0\).

A. Симпатичные перестановки

жадные алгоритмы Конструктив реализация *800

Есть ряд из \(n\) кошек, пронумерованных с \(1\) по \(n\): \(i\)-я кошка на позиции \(i\). Кошкам надоедает вращаться на одном и том же месте целый день, поэтому они хотят поменяться местами так, чтобы никакая кошка не осталась на том же самом месте. Кошки очень ленивы, а поэтому они хотят минимизировать суммарное расстояние, на которое им нужно передвинуться. Помогите им решить, какой кошке переместиться на какое место.

Например, если кошки \(3\), то можно выбрать следующую перестановку: \([3, 1, 2]\). Никакая кошка не осталась на своем месте. Суммарное расстояние, на которое сдвинулись кошки равно \(1 + 1 + 2 = 4\), т. е. кошка \(1\) сдвинулась на один вправо, кошка \(2\) сдвинулась на один вправо, а кошка \(3\) — на два влево.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество кошек.

Можно доказать, что при текущих ограничениях ответ всегда существует.

Выходные данные

Выведите \(t\) ответов — по одному на набор входных данных. Каждый ответ должен состоять из \(n\) целых чисел — перестановки минимальной стоимости. Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных есть одна возможная перестановка, удовлетворяющая условиям: \([2, 1]\).

Второй набор описан в условии задачи. Другой возможный ответ — это \([2, 3, 1]\).

A. Азартные ставки

жадные алгоритмы математика теория чисел *900

Добро пожаловать в Рокпорт-Сити!

Пришло время для вашей первой гонки в игре против Ронни. Чтобы сделать гонку интересной, вы поставили \(a\) долларов, а Ронни — \(b\) долларов. Но, похоже, фанаты разочарованы. Азарт фанатов равен \(gcd(a,b)\), где \(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Чтобы сделать гонку более азартной, вы можете выполнять следующие операции:

  1. Увеличить и \(a\), и \(b\) на \(1\).
  2. Уменьшить и \(a\), и \(b\) на \(1\). Эту операцию разрешено выполнять лишь тогда, когда и \(a\), и \(b\) больше \(0\).

За один шаг вы можете выполнить любую из этих операций. Вы можете сделать любое (в том числе ноль) число шагов. Определите максимальный азарт, который могут испытать фанаты, и минимальное число шагов, необходимое, чтобы его достичь.

Обратите внимание, что \(gcd(x,0)=x\) для всех \(x \ge 0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 5\cdot 10^3\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(0\leq a, b\leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую два целых числа.

Если фанаты могут испытать бесконечный азарт, выведите 0 0.

В противном случае первое число должно быть равно максимальному азарту, который фанаты могут испытать, а второе — минимальному количеству шагов, необходимому, чтобы достичь этот азарт.

Примечание

В первом наборе входных данных вы можете проделать первую операцию \(1\) раз, получив \(a=9\) и \(b=6\). Можно показать, что \(3\) – максимальный возможный азарт.

Во втором наборе входных данных, независимо от операций, азарт фанатов будет равен \(1\). Поскольку изначальный азарт так же равен \(1\), вам не нужно проделывать никакие операции.

В третьем наборе входных данных фанаты могут испытать бесконечный азарт, применяя первую операцию бесконечное количество раз.

В четвертом наборе входных данных вы можете применить вторую операцию \(3\) раза, получив \(a=0\) и \(b=6\). Поскольку \(gcd(0,6)=6\), фанаты испытают азарт, равный \(6\).

B. Настройка трассы

жадные алгоритмы Комбинаторика математика *900

Шоссе 201 — самая оживлённая улица в Рокпорт-Сити. Машины, стоящие в пробках, создают помехи для гонок, особенно когда их много. Гоночная трасса, проходящая через это шоссе, разделена на \(n\) участков. Вам дан массив \(a\), в котором \(a_i\) равно количеству машин, стоящих в пробках на \(i\)-м участке. Положим неудобством гоночной трассы значение \(\sum\limits_{i=1}^{n} \sum\limits_{j=i+1}^{n} \lvert a_i-a_j\rvert\), где \(|x|\) — модуль числа \(x\).

Вам разрешено проделывать следующую операцию любое (в том числе ноль) количество раз: выбрать машину, стоящую в пробке, и переместить ее из ее текущего участка в любой другой участок.

Найдите минимальное неудобство, которого возможно достичь.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i\leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — минимальное неудобство, которого возможно достичь, применяя указанную операцию любое (в том числе ноль) количество раз.

Примечание

В первом наборе входных данных вы можете переместить машину с \(3\)-го участка на \(1\)-й участок, чтобы получить неудобство, равное \(0\).

Во втором наборе перемещение любой машины не уменьшит неудобство гоночной трассы.

E. Финальное преследование

битмаски графы жадные алгоритмы Конструктив математика разделяй и властвуй *2700

В конечном счете вы победили Рэйзора и теперь считаетесь Самым Разыскиваемым уличным гонщиком. Сержант Кросс послал в смертельную погоню за вами целый полицейский отряд. К счастью, вы нашли укромное убежище, но все еще переживаете, что Кросс и его ребята в конце концов вас отыщут. Чтобы увеличить свои шансы на выживание, вы собираетесь перенастроить и перекрасить вашу BMW M3 GTR.

Машину можно представлять как перенумерованный \(n\)-мерный гиперкуб. Простым \(n\)-мерным гиперкубом называется неориентированный невзвешенный граф, построенный рекурсивно следующим образом:

  • Возьмите два простых \((n-1)\)-мерных гиперкуба. Вершины одного из них должны быть пронумерованы числами от \(0\) до \(2^{n-1}-1\), а другого — от \(2^{n-1}\) до \(2^{n}-1\). Простой \(0\)-мерный гиперкуб — это одна вершина.
  • Добавьте ребро между вершинами \(i\) и \(i+2^{n-1}\) для каждого \(0\leq i < 2^{n-1}\).

Перенумерованный \(n\)-мерный гиперкуб получается перестановкой номеров вершин простого \(n\)-мерного гиперкуба произвольным образом.

Примеры простого и перенумерованного \(3\)-мерных гиперкубов представлены ниже:

Заметьте, что перенумерованный \(n\)-мерный гиперкуб обладает следующими свойствами:

  • Он содержит в точности \(2^n\) вершин.
  • Он содержит в точности \(n\cdot 2^{n-1}\) ребер.
  • Каждая вершина соединена ровно с \(n\) другими вершинами.
  • Он не содержит петель и кратных ребер.

Обозначим за \(P\) перестановку, использованную для получения перенумерованного \(n\)-мерного гиперкуба, описывающего вашу машину, из простого \(n\)-мерного гиперкуба. Прежде чем наводить беспорядок в функциональностях машины, вы хотите найти эту перестановку, чтобы, если что-то пойдет не так, суметь восстановить машину. Но это еще не все.

У вас с собой есть \(n\) различных цветов, пронумерованных от \(0\) до \(n-1\). Вы хотите покрасить вершины перенумерованного \(n\)-мерного гиперкуба таким образом, чтобы для каждой вершины \(u\), удовлетворяющей \(0\leq u < 2^n\), и каждого цвета \(c\), удовлетворяющего \(0\leq c < n\), существовала хотя бы одна вершина \(v\), соседняя с \(u\) и покрашенная в цвет \(c\). Иными словами, из каждой вершины должно быть возможно перейти в вершину любого цвета ровно по одному ребру.

Дан перенумерованный \(n\)-мерный гиперкуб, найдите любые допустимые перестановку \(P\) и покраску.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 4096\)) — количество наборов входных данных.

Для каждого набора входных данных первая строка содержит одно целое число \(n\) (\(1\leq n\leq 16\)).

Каждая из последующих \(n\cdot 2^{n-1}\) строк содержит два целых числа \(u\) и \(v\) (\(0\leq u, v < 2^n\)), означающее, что вершины \(u\) и \(v\) соединены ребром.

Гарантируется, что граф, описанный во входных данных, задает перенумерованный \(n\)-мерный гиперкуб.

Также гарантируется, что сумма \(2^n\) по всем наборам входных данных не превосходит \(2^{16}=65\,536\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите любую перестановку \(P\) длины \(2^n\), которая может быть использована для получения перенумерованного \(n\)-мерного гиперкуба, данного во входных данных, из простого \(n\)-мерного гиперкуба. Два перенумерованных гиперкуба считаются одинаковыми, если они имеют одинаковый набор ребер. Если возможно несколько ответов, выведите любой из них.

Во второй строке выведите покраску. Если не существует покраски, удовлетворяющей условиям, выведите \(-1\). В противном случае напечатайте одну строку, содержащую \(2^n\) целых чисел, разделенных пробелом. \(i\)-е число должно быть равно цвету вершины с номером \((i-1)\) в перенумерованном \(n\)-мерном гиперкубе. Если возможно несколько ответов, выведите любой из них.

Примечание

Покраска и перенумерованный гиперкуб для первого набора входных данных представлены ниже:

Покраска и перенумерованный гиперкуб для второго набора входных данных представлены ниже:

Перенумерованный гиперкуб для третьего набора дан в условии задачи. Однако, можно показать, что не существует покраски, удовлетворяющей всем условиям. Заметьте, что некоторые другие перестановки, например, \([0, 5, 7, 3, 1, 2, 4, 6]\) и \([0, 1, 5, 2, 7, 4, 3, 6]\) дадут этот же перенумерованный гиперкуб.

A. AquaMoon и два массива

жадные алгоритмы Перебор *800

AquaMoon и Cirno играют в интересную игру с массивами. Cirno приготовил два массива \(a\) и \(b\), оба состоящих из \(n\) неотрицательных целых чисел. AquaMoon может сделать следующую операцию произвольное количество раз (возможно, ноль):

  • Она выбирает два индекса \(i\) и \(j\) (\(1 \le i, j \le n\)), затем уменьшает \(i\)-й элемент массива \(a\) на \(1\) и увеличивает \(j\)-й элемент массива \(a\) на \(1\). В результате значения на \(i\)-м и \(j\)-м индексах массива \(a\) становятся равными \(a_i - 1\) и \(a_j + 1\), соответственно. Каждый элемент массива \(a\) должен оставаться неотрицательным после операции. Если \(i = j\), эта операция никак не поменяет массив \(a\).

AquaMoon хочет сделать несколько операций, чтобы сделать массивы \(a\) и \(b\) равными. Два массива \(a\) и \(b\) называются равными, если \(a_i = b_i\) для всех \(1 \leq i \leq n\).

Помогите AquaMoon найти последовательность операций, которая решит ее задачу или установите, что невозможно сделать массивы \(a\) и \(b\) равными.

Обратите внимание, что вы не обязаны минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное число \(n\) (\(1 \leq n \leq 100\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 100\)). Сумма всех \(a_i\) не превосходит \(100\).

В третьей строке описания каждого набора входных данных находятся \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \leq b_i \leq 100\)). Сумма всех \(b_i\) не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите «-1» в единственной строке, если невозможно сделать массивы равными после применения некоторой последовательности операций.

Иначе выведите целое число \(m\) (\(0 \leq m \leq 100\)) в первой строке — количество операций. Затем выведите \(m\) строк, в каждой по два целых числа \(i\) и \(j\) — индексы, которые вы выбрали для операции.

Можно доказать, что если можно сделать два массива равными с помощью некоторой последовательности операций, то существует такая последовательность с \(m \leq 100\).

Если существует несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных мы сделали следующие операции:

  • \(i = 2\), \(j = 1\): \([1, 2, 3, 4] \rightarrow [2, 1, 3, 4]\);
  • \(i = 3\), \(j = 1\): \([2, 1, 3, 4] \rightarrow [3, 1, 2, 4]\);

Во втором наборе входных данных невозможно сделать два массива равными.

B. Алфавитные строки

жадные алгоритмы реализация Строки *800

Строка \(s\) длины \(n\) (\(1 \le n \le 26\)) называется алфавитной, если она может быть получена с помощью следующего алгоритма:

  • вначале записываем в \(s\) пустую строку (то есть выполняем присваивание \(s\) := "");
  • далее выполним следующий шаг \(n\) раз;
  • при \(i\)-м выполнении шага берем \(i\)-ю строчную букву латинского алфавита и приписываем её либо слева к строке \(s\), либо справа к строке \(s\) (то есть осуществляем присвоение \(s\) := \(c+s\) или \(s\) := \(s+c\), где \(c\)\(i\)-я буква латинского алфавита).

Иными словами, переберем \(n\) первых букв латинского алфавита от 'a' и далее. Каждый раз к строке \(s\) будем приписывать букву либо слева, либо справа. Строки, которые можно получить таким образом — алфавитные.

Например, следующие строки являются алфавитными: «a», «ba», «ab», «bac» и «ihfcbadeg». Следующие строки не являются алфавитными: «z», «aa», «ca», «acb», «xyz» и «ddcba».

По заданной строке определите, является ли она алфавитной.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных записан в отдельной строке, которая содержит \(s\). Строка \(s\) состоит из строчных букв латинского алфавита, имеет длину от \(1\) до \(26\), включительно.

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных. Выведите YES, если заданная строка \(s\) является алфавитной и NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Пример содержит наборы входных данных из основной части условия.

C. Парное программирование

жадные алгоритмы *1100

Монокарп и Поликарп изучают новые приемы программирования. Сейчас они решили попробовать парное программирование.

Известно, что они проработали вместе \(n + m\) минут, работая над одним файлом. Каждую минуту ровно один из них делал одно изменение в файле. До начала их работы в файле было \(k\) строк.

За одну минуту любой из них может выполнить одно из двух действий: добавить новую строку в конец файла или изменить одну его строку.

Суммарно Монокарп работал \(n\) минут и выполнил последовательность действий \([a_1, a_2, \dots, a_n]\), где \(a_i = 0\), если он добавил новую строку в конец файла или \(a_i > 0\), если он изменил строку с номером \(a_i\). Действия Монокарп производил именно в таком порядке: сначала \(a_1\), затем \(a_2\) и так далее до \(a_n\).

Суммарно Поликарп работал \(m\) минут и выполнил последовательность действий \([b_1, b_2, \dots, b_m]\), где \(b_j = 0\), если он добавил новую строку в конец файла или \(b_j > 0\), если он изменил строку с номером \(b_j\). Действия Поликарп производил именно в таком порядке: сначала \(b_1\), затем \(b_2\) и так далее до \(b_m\).

Восстановите их общую последовательность действий длины \(n + m\), такую, в которой все действия были бы корректными — то есть не должно быть изменений еще не существующих строк. Имейте в виду, что в общей последовательности действия Монокарпа должны образовывать подпоследовательность \([a_1, a_2, \dots, a_n]\), а Поликарпа — подпоследовательность \([b_1, b_2, \dots, b_m]\). Монокарп и Поликарп могут сменять друг друга за компьютером произвольное количество раз.

Рассмотрим пример. Пусть изначально \(k = 3\). Монокарп сначала изменил строку с номером \(2\), а затем добавил новую строку (то есть \(n = 2, \: a = [2, 0]\)). Поликарп же сначала добавил новую строку, а затем изменил строку с номером \(5\) (то есть \(m = 2, \: b = [0, 5]\)).

Так как изначальная длина файла равна \(3\), для того, чтобы Поликарп смог изменить строку с номером \(5\), необходимо сначала добавить две новые строки. Примером правильных последовательностей изменений в таком случае будет \([0, 2, 0, 5]\) или \([2, 0, 0, 5]\). Последовательности изменений \([0, 0, 5, 2]\) (нарушен порядок действий) и \([0, 5, 2, 0]\) (нельзя отредактировать строку \(5\)) не являются корректными.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют \(t\) наборов входных данных. Перед каждым набором входных данных записана пустая строка.

Каждый набор входных данных состоит из трех строк. В первой строке задано три целых числа \(k\), \(n\), \(m\) (\(0 \le k \le 100\), \(1 \le n, m \le 100\)) — изначальное количество строк в файле и длины массивов изменений Монокарпа и Поликарпа соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 300\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(0 \le b_j \le 300\)).

Выходные данные

Для каждого набора входных данных выведите через пробел элементы любой корректной объединенной последовательности действий Монокарпа и Поликарпа длины \(n + m\) или -1, если такой последовательности не существует.

D. Взаимнорастущая последовательность

битмаски жадные алгоритмы Конструктив *1300

Последовательность неотрицательных целых чисел \(a_1, a_2, \dots, a_n\) называется растущей, если для всех \(i\) от \(1\) до \(n - 1\) в двоичной записи \(a_i\) все единичные биты стоят на местах битов, которые тоже единичные, в двоичной записи \(a_{i + 1}\) (иными словами, \(a_i \:\&\: a_{i + 1} = a_i\), где \(\&\) обозначает побитовую операцию И). Если \(n = 1\), то последовательность является растущей.

Например, следующие четыре последовательности являются растущими:

  • \([2, 3, 15, 175]\) — в двоичном виде это \([10_2, 11_2, 1111_2, 10101111_2]\);
  • \([5]\) — в двоичном виде это \([101_2]\);
  • \([1, 3, 7, 15]\) — в двоичном виде это \([1_2, 11_2, 111_2, 1111_2]\);
  • \([0, 0, 0]\) — в двоичном виде это \([0_2, 0_2, 0_2]\).

Следующие три последовательности не являются растущими:

  • \([3, 4, 5]\) — в двоичном виде это \([11_2, 100_2, 101_2]\);
  • \([5, 4, 3]\) — в двоичном виде это \([101_2, 100_2, 011_2]\);
  • \([1, 2, 4, 8]\) — в двоичном виде это \([0001_2, 0010_2, 0100_2, 1000_2]\).

Рассмотрим две последовательности неотрицательных чисел \(x_1, x_2, \dots, x_n\) и \(y_1, y_2, \dots, y_n\). Назовём эту пару последовательностей взаимнорастущими, если последовательность \(x_1 \oplus y_1, x_2 \oplus y_2, \dots, x_n \oplus y_n\) является растущей, где \(\oplus\) является операцией побитового исключающего ИЛИ (то есть XOR).

Задана последовательность целых чисел \(x_1, x_2, \dots, x_n\). Требуется найти такую лексикографически минимальную последовательность \(y_1, y_2, \dots, y_n\), что последовательности \(x_i\) и \(y_i\) являются взаимнорастущими.

Последовательность \(a_1, a_2, \dots, a_n\) лексикографически меньше последовательности \(b_1, b_2, \dots, b_n\), если существует такое \(1 \le k \le n\), что для любых \(1 \le i < k\) выполнено \(a_i = b_i\), но \(a_k < b_k\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке набора записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина последовательности \(x_i\).

Вторая строка набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i < 2^{30}\)) — элементы последовательности \(x_i\).

Сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных выведите \(n\) целых чисел \(y_1, y_2, \dots, y_n\) (\(0 \le y_i < 2^{30}\)) — лексикографически минимальную последовательность, которая является взаимнорастущей с заданной последовательностью \(x_i\).

A. Паутина лжи

графы жадные алгоритмы Перебор *1400

Когда играешь в игру престолов, ты побеждаешь или умираешь. Третьего не дано.
Серсея Ланнистер, Игра престолов, Джордж Р. Р. Мартин

Есть \(n\) дворян, пронумерованных от \(1\) до \(n\). Дворянин \(i\) обладает могуществом \(i\). Дворяне «дружат» между собой — всего есть \(m\) пар дружных дворян. Дружба между дворянами \(a\) и \(b\) всегда взаимная.

Дворянин считается уязвимым, если выполнены оба следующих условия.

  • у этого дворянина есть хотя бы один друг, и
  • все друзья этого дворянина обладают могуществом, превосходящим могущество этого дворянина.

Вам нужно будет обрабатывать следующие три типа запросов.

  1. Добавить дружбу между \(u\) и \(v\).
  2. Удалить дружбу между \(u\) и \(v\).
  3. Посчитать ответ на следующий процесс.

Процесс: все уязвимые дворяне одновременно умирают, и все их дружбы заканчиваются. После этого, возможно, некоторые другие дворяне становятся уязвимыми. Процесс повторяется до тех пор, пока есть уязвимые дворяне. Можно доказать, что процесс завершится за конечное число шагов. После завершения процесса вам необходимо посчитать количество оставшихся дворян.

Заметьте, что результаты процессов не влияют на дальнейшие и предыдущие запросы, то есть все дворяне живы в начале каждого процесса!

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot 10^5\), \(0 \le m \le 2\cdot 10^5\)) — количество дворян и количество изначальных пар друзей соответственно.

Следующие \(m\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\), \(u \ne v\)), описывающие дружбу между дворянами. Никакая пара друзей не повторяется дважды.

Следующая строка содержит целое число \(q\) (\(1 \le q \le 2\cdot {10}^{5}\)) — количество запросов.

Следующие \(q\) строк содержат сами запросы по одному в строке. Каждый запрос имеет один из следующих видов:

  • \(1\) \(u\) \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) — добавить дружбу между \(u\) и \(v\). Гарантируется, что \(u\) и \(v\) не друзья в этот момент.
  • \(2\) \(u\) \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) — удалить дружбу между \(u\) и \(v\). Гарантируется, что \(u\) и \(v\) дружат в этот момент.
  • \(3\) — вывести ответ на процесс, описанный в условии.
Выходные данные

На каждый запрос \(3\)-го типа выведите целое число, по одному на строку. Гарантируется, что будет хотя бы один запрос типа \(3\).

Примечание

Ситуация в первом запросе типа 3 изображена на рисунке ниже.

В первом раунде процесса дворянин \(1\) слабее, чем все его друзья (\(2\) и \(3\)), и поэтому он умирает. Никакой другой дворянин в раунде 1 не является уязвимым. В раунде 2 дворянин \(3\) слабее своего единственного друга, дворянина \(4\), и поэтому он умирает. На этом этапе процесс завершается, ответ равен \(2\).

Во втором запросе типа 3 единственным выжившим является дворянин \(4\).

    

Второй пример состоит только из одного запроса типа \(3\). В первом раунде умирают два дворянина, во втором раунде умирает один дворянин. Итоговый ответ равен \(1\), поскольку только один дворянин выжил.

E. Грегор и два маляра

графы жадные алгоритмы математика разделяй и властвуй Структуры данных *3400

Два маляра, Амин и Бенджи, перекрашивают потолок в гостиной Грегора! Потолок можно представить как таблицу размера \(n \times m\).

Для каждого \(i\) от \(1\) до \(n\) включительно маляр Амин нанес \(a_i\) слоев краски на весь \(i\)-й ряд. Для каждого \(j\) от \(1\) до \(m\) включительно маляр Бенджи нанес \(b_j\) слоев краски на весь \(j\)-й столбец. Таким образом, клетка \((i,j)\) оказалась покрашенной в \(a_i+b_j\) слоев краски.

Грегор считает, что клетка \((i,j)\) плохо покрашена, если \(a_i+b_j \le x\). Определим плохо покрашенную область как максимальную по включению связную компоненту плохо покрашенных клеток, то есть такую связную компоненту плохо покрашенных клеток, что все клетки, соседние с этой компонентой, не являются плохо покрашенными. Две клетки являются соседними, если они имеют общую сторону.

Грегор потрясен состоянием потолка, покрашенного малярами, и хочет знать количество плохо покрашенных областей.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(x\) (\(1 \le n,m \le 2\cdot 10^5\), \(1 \le x \le 2\cdot 10^5\)) — размеры потолка Грегора и максимальное количество слоев краски в плохо покрашенной клетке.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2\cdot 10^5\)) — количество слоев краски, которое Амин наносит на каждый ряд.

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_j \le 2\cdot 10^5\)) — количество слоев краски, которое Бенджи наносит на каждый столбец.

Выходные данные

Выведите одно целое число — количество плохо покрашенных областей.

Примечание

Рисунок ниже иллюстрирует первый пример. Числа слева от каждого ряда представляют собой список \(a\), а числа над каждым столбцом — список \(b\). Числа внутри каждой клетки равны количеству слоев краски в этой клетке.

Цветные клетки соответствуют плохо покрашенным клеткам. Красные и синие клетки соответственно образуют \(2\) плохо покрашенных области.

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\).

B. Комбинация

жадные алгоритмы сортировки *1100

Илья играет в карточную игру со следующими правилами.

На руках у игрока имеется некоторое количество карт. На каждой карте написано по два целых неотрицательных числа — одно в верхней части карты и одно в нижней. В начале партии игрок выбирает одну из своих карт для отыгрыша. Если в верхней части карты написано число ai, а в нижней — bi, то при ее отыгрыше игрок получает ai очков и получает возможность сыграть дополнительно bi карт. После отыгрыша карта пропадает.

Более формально: пусть есть счетчик количества карт для отыгрыша, который в начале партии равен одному. При отыгрыше карты счетчик уменьшается на один за сыгранную карту и увеличивается на число bi, которое написано в нижней части карты. Далее сыгранная карта пропадает. Если после этого счетчик не равен нулю, игрок получает возможность сыграть еще одну карту из оставшихся. Игра заканчивается, когда счетчик становится равным нулю либо у игрока кончаются карты.

Разумеется, Илья хочет набрать побольше очков. Сможете ли Вы, зная его карты, определить максимальное количество очков, которое он может набрать?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 1000) — количество карт на руках у Ильи.

В следующих n строках записано по два целых неотрицательных числа, разделенных пробелом — ai и bi (0 ≤ ai, bi ≤ 104) — числа, записанные в верхней и нижней части i-ой карты соответственно.

Выходные данные

Выведите единственное число — максимальное количество очков, которое можно набрать за одну партию по описанным правилам.

Примечание

В первом примере ни одна из двух карт не приносит дополнительных ходов, поэтому играть нужно ту, которая приносит больше очков.

Во втором примере сперва нужно сыграть третью карту, которая не приносит очков, но зато позволяет сыграть обе оставшиеся карты.

A. Найди массив

жадные алгоритмы математика *800

Давайте назовем массив \(a\), состоящий из \(n\) положительных (больших, чем \(0\)) целых чисел, красивым, если для каждого \(i\) от \(1\) до \(n\) выполняется следующее условие: либо \(a_i = 1\), либо хотя бы одно из чисел \(a_i - 1\) и \(a_i - 2\) присутствует в массиве.

Например:

  • массив \([5, 3, 1]\) — красивый: для \(a_1\) число \(a_1 - 2 = 3\) присутствует в массиве; для \(a_2\) число \(a_2 - 2 = 1\) присутствует в массиве; для \(a_3\) выполняется условие \(a_3 = 1\);
  • массив \([1, 2, 2, 2, 2]\) — красивый: для \(a_1\) выполняется условие \(a_1 = 1\); для каждого из остальных \(a_i\) число \(a_i - 1 = 1\) присутствует в массиве;
  • массив \([1, 4]\) — некрасивый: для \(a_2\) ни числа \(a_2 - 2 = 2\), ни числа \(a_2 - 1 = 3\) нет в массиве, и \(a_2 \ne 1\);
  • массив \([2]\) — некрасивый: для \(a_1\) ни числа \(a_1 - 1 = 1\), ни числа \(a_1 - 2 = 0\) нет в массиве, и \(a_1 \ne 1\);
  • массив \([2, 1, 3]\) — красивый: для \(a_1\) число \(a_1 - 1 = 1\) присутствует в массиве; для \(a_2\) выполняется условие \(a_2 = 1\); для \(a_3\) чисдл \(a_3 - 2 = 1\) присутствует в массиве.

Вам дано положительное целое число \(s\). Найдите минимально возможный размер красивого массива, сумма элементов которого равна \(s\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Затем следуют \(t\) строк, \(i\)-я из которых содержит одно целое число \(s\) (\(1 \le s \le 5000\)) для \(i\)-го набора входных данных.

Выходные данные

Выведите \(t\) целых чисел, \(i\)-е из них должно быть ответом на \(i\)-й набор входных данных (то есть должно быть равно минимально возможному размеру красивого массива с суммой элементов, равной \(s\)).

Примечание

Рассмотрим пример из условия:

  1. в первом наборе входных данных массив \([1]\) удовлетворяет всем условиям;
  2. во втором наборе входных данных массив \([3, 4, 1]\) удовлетворяет всем условиям;
  3. в третьем наборе входных данных массив \([1, 2, 4]\) удовлетворяет всем условиям;
  4. в четвертом наборе входных данных массив \([1, 4, 6, 8, 10, 2, 11]\) удовлетворяет всем условиям.

B. Удаление максимальной стоимости

жадные алгоритмы математика *1000

Задана строка \(s\) длины \(n\), состоящая только из символов 0 и 1.

Вы выполняете следующую операцию до тех пор, пока строка не станет пустой: взять последовательный подотрезок одинаковых символов, удалить его из строки и склеить оставшиеся две части (любая из оставшихся частей может быть пустой). Например, если удалить подстроку 111 из строки 111110, то получится строка 110. За удаление строки длины \(l\) вы получаете \(a \cdot l + b\) очков.

Ваша задача — определить максимальное количество очков, которое вы можете набрать, если вы должны сделать заданную строку пустой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 100; -100 \le a, b \le 100\)) — длина строки \(s\) и параметры \(a\) и \(b\).

Вторая строка содержит строку \(s\). Строка \(s\) состоит только из символов 0 и 1.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество очков, которое вы можете набрать.

Примечание

В первом примере достаточно удалить всю строку целиком, тогда мы получим \(2 \cdot 3 + 0 = 6\) очков.

Во втором примере, если удалять символы по одному, то за каждый удаленный символ мы получим \((-2) \cdot 1 + 5 = 3\) очков, т.е. суммарно \(15\) очков.

В третьем примере удалим подстроку 00 из строки 100111, получим \(1 \cdot 2 + (-4) = -2\) очков, а строка будет равна 1111, удалив ее целиком получим \(1 \cdot 4 + (-4) = 0\) очков. Суммарно за \(2\) операции получили \(-2\) очков.

C. Манхэттенские подмассивы

геометрия жадные алгоритмы Перебор реализация *1700

Предположим, есть две точки \(p = (x_p, y_p)\) и \(q = (x_q, y_q)\). Тогда обозначим манхэттенское расстояние между ними как \(d(p, q) = |x_p - x_q| + |y_p - y_q|\).

Назовем три точки \(p\), \(q\), \(r\) как плохую тройку, если \(d(p, r) = d(p, q) + d(q, r)\).

Назовем массив \(b_1, b_2, \dots, b_m\) хорошим, если нельзя выбрать три различных индекса \(i\), \(j\) и \(k\) так, что точки \((b_i, i)\), \((b_j, j)\) и \((b_k, k)\) — плохая тройка.

Вам задан массив \(a_1, a_2, \dots, a_n\). Посчитайте количество хороших подмассивов \(a\). Подмассив массива \(a\) — это массив \(a_l, a_{l + 1}, \dots, a_r\) для некоторых \(1 \le l \le r \le n\).

Заметим, что согласно определению, подмассивы длины \(1\) и \(2\) являются хорошими.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(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\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите количество хороших подмассивов массива \(a\).

Примечание

В первом наборе, можно доказать, что любой подмассив массива \(a\) является хорошим. Например, подмассив \([a_2, a_3, a_4]\) — хороший, потому что содержит только три элемента и:

  • \(d((a_2, 2), (a_4, 4)) = |4 - 3| + |2 - 4| = 3\) \(<\) \(d((a_2, 2), (a_3, 3)) + d((a_3, 3), (a_4, 4)) = 3 + 1 + 2 + 1 = 7\);
  • \(d((a_2, 2), (a_3, 3))\) \(<\) \(d((a_2, 2), (a_4, 4)) + d((a_4, 4), (a_3, 3))\);
  • \(d((a_3, 3), (a_4, 4))\) \(<\) \(d((a_3, 3), (a_2, 2)) + d((a_2, 2), (a_4, 4))\);

Во втором наборе, для примера, подмассив \([a_1, a_2, a_3, a_4]\) не является хорошим, потому что содержит плохую тройку \((a_1, 1)\), \((a_2, 2)\), \((a_4, 4)\):

  • \(d((a_1, 1), (a_4, 4)) = |6 - 9| + |1 - 4| = 6\);
  • \(d((a_1, 1), (a_2, 2)) = |6 - 9| + |1 - 2| = 4\);
  • \(d((a_2, 2), (a_4, 4)) = |9 - 9| + |2 - 4| = 2\);

То есть, \(d((a_1, 1), (a_4, 4)) = d((a_1, 1), (a_2, 2)) + d((a_2, 2), (a_4, 4))\).

A. Поликарп и монеты

жадные алгоритмы математика *800

Поликарпу необходимо заплатить на кассе ровно \(n\) бурлей. При этом у Поликарпа есть монеты двух номиналов: \(1\) бурль и \(2\) бурля. Поликарп одинаково любит монеты обоих номиналов. Поэтому он не может отдать намного больше монет одного номинала, чем другого.

Таким образом, Поликарп хочет минимизировать разницу между количеством отданных монет номиналом \(1\) бурль и номиналом \(2\) бурля. Помогите ему, определив два целых неотрицательных числа \(c_1\) и \(c_2\) — количество монет номиналом \(1\) бурль и количество монет номиналом \(2\) бурля соответственно — таких, что такое количество монет в сумме составляет ровно \(n\) бурлей (то есть \(c_1 + 2 \cdot c_2 = n\)), а абсолютная величина разности \(c_1\) и \(c_2\) минимальна (то есть минимизируйте \(|c_1-c_2|\)).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки. Строка содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — сумма в бурлях, которую должен заплатить Поликарп.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите искомые два числа — \(c_1\) и \(c_2\) (\(c_1, c_2 \ge 0\)) — разделённые пробелом, где \(c_1\) — количество монет номиналом \(1\) и \(c_2\) — количество монет номиналом \(2\). Если оптимальных решений несколько, выведите любое из них.

Примечание

В первом наборе данных примера ответ имеет вид «334 333». Сумма номиналов монет равна \(334 \cdot 1 + 333 \cdot 2 = 1000\), при этом \(|334 - 333| = 1\). При этом невозможно добиться того, чтобы \(|c_1 - c_2| = 0\), поскольку тогда \(c_1 = c_2\), значит \(c_1 \cdot 1 + c_1 \cdot 2 = 1000\), но тогда \(c_1\) не будет являться целым числом.

Во втором наборе данных примера ответ имеет вид «10 10». Действительно, с одной стороны, \(10 \cdot 1 + 10 \cdot 2 = 30\), с другой стороны, \(|10 - 10| = 0\), меньше \(0\) абсолютная величина любого числа быть не может.

B1. Чудесная раскраска - 1

жадные алгоритмы Строки *800

Это упрощенная версия задачи B2. Возможно, вы захотите сначала ознакомиться с B2 до того как приступить к решению B1.

У Паши и Маши есть любимая строка \(s\), состоящая из строчных букв латинского алфавита. Они захотели её раскрасить с помощью мелков двух цветов: красного и зелёного. Раскраска строки называется чудесной, если выполняются следующие условия:

  1. каждый символ строки либо закрашивается ровно в один цвет (красный или зелёный), либо не закрашивается вовсе;
  2. любые два символа, покрашенные в один цвет, различны;
  3. количество символов, покрашенных в красный цвет, совпадает с количеством символов, покрашенных в зелёный цвет;
  4. количество покрашенных символов при соблюдении первых трёх условий максимально возможно.

Например, пусть строка \(s\) имеет вид «kzaaa». Одна из её возможных чудесных раскрасок изображена на рисунке.

Пример возможной чудесной раскраски для строки «kzaaa».

Паша и Маша хотят сами научиться делать чудесную раскраску строки. Поскольку они очень маленькие, им нужна помощь в виде подсказки. Помогите им найти \(k\) — количество красных (или зелёных, эти числа равны) букв в чудесной раскраске строки.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной непустой строки \(s\), состоящей из строчных букв латинского алфавита. Количество символов в строке не превышает \(50\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое неотрицательное число \(k\) — количество символов, которые будут покрашены в красный цвет.

Примечание

В первом наборе входных данных содержится строка из условия. Одна из чудесных раскрасок представлена на рисунке. Чудесная раскраска, содержащая \(3\) и более красных букв, не существует, поскольку в таком случае общее количество раскрашенных символов превысит количество символов в строке.

Строку из второго набора входных данных можно раскрасить следующим образом. Первые вхождения букв «c», «o», «e» покрасим в красный цвет, вторые — в зелёный. Буквы «d» и «f» покрасим в красный цвет, «r», «s» — в зелёный. Таким образом, каждый символ будет покрашен либо в красный цвет, либо в зелёный, следовательно, ответа лучше \(5\) не существует.

В третьем наборе входных данных все буквы различны, поэтому в красный цвет можно покрасить любой набор символов, количество которых не превышает половину длины строки и является максимально возможным.

В четвёртом наборе входных данных всего один символ, поэтому, если покрасить его в красный, мы не сможем покрасить какой-либо другой символ в зелёный цвет.

В пятом наборе входных данных все буквы одинаковы, поэтому нельзя покрасить более одного символа в красный цвет.

B2. Чудесная раскраска - 2

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1400

Эта задача является продолжением задачи «Чудесная раскраска - 1». Она имеет довольно много отличий, поэтому прочтите это условие полностью.

Совсем недавно у Паши и Маши появилась любимая последовательность чисел \(a_1, a_2, \dots, a_n\). Они захотели и её раскрасить с помощью мелков \(k\) цветов. Раскраска последовательности называется чудесной, если выполняются следующие условия:

  1. каждый элемент последовательности раскрашивается ровно в один из \(k\) цветов, либо не раскрашивается вовсе;
  2. любые два элемента, раскрашенные в один цвет, различны (то есть нет двух одинаковых значений, которые раскрашены в один цвет);
  3. посчитаем для каждого из \(k\) цветов количество элементов, раскрашенных этот цвет — все полученные количества должны быть равны;
  4. суммарное количество раскрашенных элементов при соблюдении первых трёх условий максимально возможно.

Например, пусть последовательность имеет вид \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Одна из чудесных раскрасок изображена на рисунке.

Пример возможной чудесной раскраски для \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Обратите внимание, что один из элементов остался нераскрашенным.

Помогите Паше и Маше найти чудесную раскраску заданной последовательности \(a\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая из них содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2\cdot10^5\), \(1 \le k \le n\)) — длину заданной последовательности и количество цветов. Вторая из них содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая строка содержит описание возможной чудесной раскраски для соответствующего набора входных данных.

Каждая чудесная раскраска должна быть выведена в виде \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le k\)), где:

  • \(c_i=0\), если \(i\)-й элемент не раскрашен в какой-либо цвет;
  • \(c_i>0\), если \(i\)-й элемент раскрашен в цвет с номером \(c_i\).

Помните, что в чудесной раскраске максимизируется суммарное количество раскрашенных элементов. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных примера ответ соответствует картинке в условии. Красный цвет имеет номер \(1\), синий имеет номер \(2\), зелёный — номер \(3\).

C. Интересный рассказ

жадные алгоритмы сортировки Строки *1500

Стивен Квин хочет написать новый рассказ. Вы знаете, он очень необычный писатель — Стивен использует только буквы 'a', 'b', 'c', 'd' и 'e'!

Чтобы написать рассказ, Стивен выписал \(n\) слов, состоящих из первых \(5\) строчных букв латинского алфавита. Из них он хочет выбрать максимальное количество слов таким образом, чтобы получился интересный рассказ.

Рассказ представляет собой список слов, необязательно различных. Рассказ называется интересным, если существует буква, которая встречается во всех входящих в него словах большее количество раз, чем все остальные буквы латинского алфавита вместе взятые.

Например, рассказ, состоящий из слов «bac», «aaada», «e», является интересным (буква «a» встречается в словах рассказа всего \(5\) раз, остальные — \(4\)), а рассказ, состоящий из слов «aba», «abcde» — нет (не существует буквы, встречающейся во всех словах рассказа большее число раз, чем все остальные вместе взятые).

Вам дан список из \(n\) слов. Выберите из этого списка максимальное количество слов так, чтобы они образовывали интересный рассказ. Если невозможно составить непустой интересный рассказ, выведите \(0\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество слов. Далее следует \(n\) непустых строк — слов, состоящих из строчных букв латинского алфавита. Слова в списке не обязательно различны (иными словами, могут быть одинаковые слова). Слова состоят исключительно из букв 'a', 'b', 'c', 'd' и 'e'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\) и что суммарное количество букв во всех словах, содержащихся в наборах входных данных, не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество слов из заданного списка, которые могут образовать интересный рассказ. Если невозможно составить непустой интересный рассказ, выведите 0.

Примечание

В первом наборе входных данных примера все \(3\) слова могут быть использованы одновременно, чтобы составить интересный рассказ. Рассказ будет иметь вид «bac aaada e».

Во втором наборе входных данных примера \(1\)-е и \(3\)-е слова могут быть использованы для составления интересного рассказа. Рассказ будет иметь вид «aba aba». Заметим, что все три слова одновременно использовать нельзя.

В третьем наборе входных данных примера автор не может составить непустой интересный рассказ. Поэтому ответ равен \(0\).

В четвертом наборе входных данных примера \(3\)-е и \(4\)-е слова могут быть использованы для составления интересного рассказа. Рассказ будет иметь вид «c bc».

B. Забег за золотом

графы жадные алгоритмы Комбинаторика сортировки *1500

Олимпийские игры только что начались, и Федерико с нетерпением ждет начала марафонского забега.

В марафоне будут участвовать \(n\) спортсменов, от \(1\) до \(n\), и все они в прошлом участвовали в \(5\) важных марафонах, пронумерованных от \(1\) до \(5\). Для каждого \(1\le i\le n\) и \(1\le j\le 5\) Федерико помнит, что спортсмен \(i\) занял место \(r_{i,j}\) в марафоне \(j\) (например, \(r_{2,4}=3\) означает, что спортсмен \(2\) был третьим в марафоне \(4\)).

Федерико считает, что спортсмен \(x\) превосходит спортсмена \(y\), если спортсмен \(x\) занял лучшее место, чем спортсмен \(y\), по крайней мере в \(3\) прошлых марафонах, т.е. \(r_{x,j}<r_{y,j}\) по крайней мере для \(3\) различных значений \(j\).

Федерико считает, что у спортсмена хорошие шансы получить золотую медаль на Олимпийских играх, если он превосходит всех остальных спортсменов.

Найдите любого спортсмена, у которого хорошие шансы получить золотую медаль (то есть спортсмена, который превосходит всех остальных спортсменов), или определите, что такого спортсмена нет.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 50\,000\)) — количество спортсменов.

Затем следуют \(n\) строк, каждая из которых описывает места одного спортсмена.

\(i\)-я из этих строк содержит \(5\) целых чисел \(r_{i,1},\,r_{i,2},\,r_{i,3},\,r_{i,4},\, r_{i,5}\) (\(1\le r_{i,j}\le 50\,000\)) — места спортсмена \(i\) в последних \(5\) марафонах. Гарантируется, что в каждом из \(5\) прошедших марафонов \(n\) спортсменов заняли различные места, т.е. для каждого \(1\le j\le 5\), \(n\) значений \(r_{1,j},\, r_{2, j},\, \dots,\, r_{n, j}\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(50\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — номер спортсмена, у которого хорошие шансы получить золотую медаль (то есть спортсмена, который превосходит всех остальных спортсменов). Если таких спортсменов нет, выведите \(-1\). Если таких спортсменов больше, чем один, выведите любого из них.

Примечание

Объяснение первого набора входных данных: Есть только один спортсмен, поэтому он превосходит всех остальных (так как больше никого нет), и поэтому у него хорошие шансы получить золотую медаль.

Пояснение второго набора входных данных: Есть \(n=3\) спортсменов.

  • Спортсмен \(1\) превосходит спортсмена \(2\). Действительно, спортсмен \(1\) лучше спортсмена \(2\) в марафонах \(1\), \(2\) и \(3\).
  • Спортсмен \(2\) превосходит спортсмена \(3\). Действительно, спортсмен \(2\) превосходит спортсмена \(3\) в марафонах \(1\), \(2\), \(4\) и \(5\).
  • Спортсмен \(3\) превосходит спортсмена \(1\). Действительно, спортсмен \(3\) лучше, чем спортсмен \(1\) в марафонах \(3\), \(4\) и \(5\).

Объяснение третьего набора входных данных: Есть \(n=3\) спортсменов.

  • Спортсмен \(1\) превосходит спортсменов \(2\) и \(3\). Поскольку он превосходит всех остальных спортсменов, у него хорошие шансы получить золотую медаль.
  • Спортсмен \(2\) превосходит спортсмена \(3\).
  • Спортсмен \(3\) не превосходит ни одного другого спортсмена.

Пояснение четвертого набора входных данных: Есть \(n=6\) спортсменов.

  • Спортсмен \(1\) превосходит спортсменов \(3\), \(4\), \(6\).
  • Спортсмен \(2\) превосходит спортсменов \(1\), \(4\), \(6\).
  • Спортсмен \(3\) превосходит спортсменов \(2\), \(4\), \(6\).
  • Спортсмен \(4\) не превосходит ни одного другого спортсмена.
  • Спортсмен \(5\) превосходит спортсменов \(1\), \(2\), \(3\), \(4\), \(6\). Поскольку он превосходит всех остальных спортсменов, у него хорошие шансы получить золотую медаль.
  • Спортсмен \(6\) превосходит только спортсмена \(4\).

C. Максимизируйте пересечения

геометрия жадные алгоритмы Комбинаторика Конструктив сортировки *1800

На окружности лежат \(2n\) различных точек, обладающих следующим свойством: как бы вы ни выбрали \(3\) хорды, соединяющие \(3\) непересекающиеся пары точек, ни одна точка строго внутри окружности не принадлежит всем \(3\) хордам. Точки нумеруются \(1, \, 2, \, \dots, \, 2n\) по часовой стрелке.

Изначально \(k\) хорд соединяют \(k\) пар точек таким образом, что все \(2k\) концов этих хорд различны.

Необходимо провести еще \(n - k\) хорд, которые соединят оставшиеся \(2(n - k)\) точек (каждая точка должна быть концом ровно одной хорды).

Пусть \(x\) — это общее количество пересечений всех \(n\) хорд. Вычислите максимальное значение, которого может достичь \(x\) при оптимальном выборе \(n - k\) хорд.

Обратите внимание, что точное расположение точек \(2n\) не имеет значения, пока выполняется свойство, указанное в первом предложении.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(0 \le k \le n\)) — половину количества точек и количество хорд, построенных изначально.

Затем следуют \(k\) строк. В \(i\)-й из них содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, \, y_i \le 2n\), \(x_i \ne y_i\)) — концы \(i\)-й хорды. Гарантируется, что \(2k\) чисел \(x_1, \, y_1, \, x_2, \, y_2, \, \dots, \, x_k, \, y_k\) попарно различны.

Выходные данные

Для каждого набора входных данных выведите максимальное количество пересечений, которое можно получить, проведя \(n - k\) дополнительных хорд.

Примечание

В первом наборе входных данных, есть три способа нарисовать \(2\) дополнительных хорд, показанных ниже (черные хорды — первоначально нарисованные, а красные — новые):

Мы видим, что третий способ дает максимальное количество пересечений, а именно \(4\).

Во втором наборе входных данных, больше не нужно строить хорд. Конечно, при наличии только одной хорды пересечений нет.

В третьем наборе входных данных, мы можем сделать не более одного пересечения, проведя хорды \(1-3\) и \(2-4\), как показано ниже:

E. Цвета и отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *2300

Числа \(1, \, 2, \, \dots, \, n \cdot k\) окрашены в \(n\) цветов. Эти цвета обозначены \(1, \, 2, \, \dots, \, n\). Для каждого \(1 \le i \le n\) существует ровно \(k\) чисел, окрашенных в цвет \(i\).

Пусть \([a, \, b]\) обозначает отрезок целых чисел от \(a\) до \(b\) включительно, то есть множество \(\{a, \, a + 1, \, \dots, \, b\}\). Вы должны выбрать \(n\) отрезков \([a_1, \, b_1], \, [a_2, \, b_2], \, \dots, [a_n, \, b_n]\) таких, что:

  • для каждого \(1 \le i \le n\) имеет место \(1 \le a_i < b_i \le n \cdot k\);
  • для каждого \(1 \le i \le n\), числа \(a_i\) и \(b_i\) окрашены цветом \(i\);
  • каждое число \(1 \le x \le n \cdot k\) принадлежит не более чем \(\left\lceil \frac{n}{k - 1} \right\rceil\) отрезкам.

Можно показать, что такое семейство отрезков всегда существует при заданных ограничениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(2 \le k \le 100\)) — количество цветов и количество вхождений каждого цвета.

Вторая строка содержит \(n \cdot k\) целых чисел \(c_1, \, c_2, \, \dots, \, c_{nk}\) (\(1 \le c_j \le n\)), где \(c_j\) — цвет числа \(j\). Гарантируется, что для каждого \(1 \le i \le n\) \(c_j = i\) имеет место для ровно \(k\) различных индексов \(j\).

Выходные данные

Выведите \(n\) строк. В \(i\)-й строке должны содержаться два целых числа \(a_i\) и \(b_i\).

Если существует несколько допустимых вариантов выбрать отрезки, выведите любой.

Примечание

В первой выборке каждое число может содержаться не более чем в \(\left\lceil \frac{4}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

Во втором примере единственным отрезком, который можно выбрать, является \([1, \, 2]\), и каждое число действительно содержится не более чем в \(\left\lceil \frac{1}{2 - 1} \right\rceil = 1\) отрезках.

В третьем примере, каждое число может содержаться не более чем в \(\left\lceil \frac{3}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

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 вместо печати первого символа, а затем напечатать все оставшиеся символы.

A. Черешня

жадные алгоритмы *800

Вам даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Найдите максимальное значение \(max(a_l, a_{l + 1}, \ldots, a_r) \cdot min(a_l, a_{l + 1}, \ldots, a_r)\) по всем парам \((l, r)\) целых чисел, для которых \(1 \le l < r \le n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — максимально возможное значение произведения из условия.

Примечание

Пусть \(f(l, r) = max(a_l, a_{l + 1}, \ldots, a_r) \cdot min(a_l, a_{l + 1}, \ldots, a_r)\).

В первом наборе входных данных,

  • \(f(1, 2) = max(a_1, a_2) \cdot min(a_1, a_2) = max(2, 4) \cdot min(2, 4) = 4 \cdot 2 = 8\).
  • \(f(1, 3) = max(a_1, a_2, a_3) \cdot min(a_1, a_2, a_3) = max(2, 4, 3) \cdot min(2, 4, 3) = 4 \cdot 2 = 8\).
  • \(f(2, 3) = max(a_2, a_3) \cdot min(a_2, a_3) = max(4, 3) \cdot min(4, 3) = 4 \cdot 3 = 12\).

Таким образом, максимум равен \(f(2, 3) = 12\).

Во втором наборе входных данных максимум равен \(f(1, 2) = f(1, 3) = f(2, 3) = 6\).

B. Кобб

битмаски жадные алгоритмы математика Перебор *1700

Вам даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(k\). Найдите максимальное значение \(i \cdot j - k \cdot (a_i | a_j)\) среди всех пар \((i, j)\) целых чисел таких, что \(1 \le i < j \le n\). Здесь \(|\) обозначает операцию побитового ИЛИ.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(2 \le n \le 10^5\)) и \(k\) (\(1 \le k \le \min(n, 100)\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — максимально возможное значение \(i \cdot j - k \cdot (a_i | a_j)\).

Примечание

Пусть \(f(i, j) = i \cdot j - k \cdot (a_i | a_j)\).

В первом наборе входных данных,

  • \(f(1, 2) = 1 \cdot 2 - k \cdot (a_1 | a_2) = 2 - 3 \cdot (1 | 1) = -1\).
  • \(f(1, 3) = 1 \cdot 3 - k \cdot (a_1 | a_3) = 3 - 3 \cdot (1 | 3) = -6\).
  • \(f(2, 3) = 2 \cdot 3 - k \cdot (a_2 | a_3) = 6 - 3 \cdot (1 | 3) = -3\).

Таким образом, максимум равен \(f(1, 2) = -1\).

В четвертом наборе входных данных максимум равен \(f(3, 4) = 12\).

C. Микаса

Бинарный поиск битмаски жадные алгоритмы реализация *1800

Вам даны два целых числа \(n\) и \(m\). Найдите \(\operatorname{MEX}\) последовательности \(n \oplus 0, n \oplus 1, \ldots, n \oplus m\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

\(\operatorname{MEX}\) последовательности неотрицательных целых чисел — это наименьшее неотрицательное целое число, которое не встречается в этой последовательности. Например, \(\operatorname{MEX}(0, 1, 2, 4) = 3\), а \(\operatorname{MEX}(1, 2021) = 0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 30\,000\))  — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(0 \le n, m \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — ответ на задачу.

Примечание

В первом наборе входных данных последовательность равна \(3 \oplus 0, 3 \oplus 1, 3 \oplus 2, 3 \oplus 3, 3 \oplus 4, 3 \oplus 5\), или \(3, 2, 1, 0, 7, 6\). Наименьшее неотрицательное целое число, которое не присутствует в последовательности, т. е. \(\operatorname{MEX}\) последовательности — \(4\).

Во втором наборе входных данных последовательность равна \(4 \oplus 0, 4 \oplus 1, 4 \oplus 2, 4 \oplus 3, 4 \oplus 4, 4 \oplus 5, 4 \oplus 6\), или \(4, 5, 6, 7, 0, 1, 2\). Наименьшее неотрицательное целое число, которое не присутствует в последовательности, т. е. \(\operatorname{MEX}\) последовательности — \(3\).

В третьем наборе входных данных последовательность равна \(3 \oplus 0, 3 \oplus 1, 3 \oplus 2\), или \(3, 2, 1\). Наименьшее неотрицательное целое число, которое не присутствует в последовательности, т. е. \(\operatorname{MEX}\) последовательности — \(0\).

D. Диана

жадные алгоритмы Конструктив Строки *1800

Вам дано целое число \(n\). Найдите любую строку \(s\) длины \(n\), состоящую только из латинских строчных букв, такую, что каждая непустая подстрока \(s\) встречается в \(s\) нечетное количество раз. Если таких строк несколько, выведите любую. Можно показать, что такая строка всегда существует при заданных ограничениях.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого наборам входных данных выведите одну строку, содержащую строку \(s\). Если таких строк несколько, выведите любую. Можно показать, что такая строка всегда существует при заданных ограничениях.

Примечание

В первом наборе входных данных каждая подстрока «abc» встречается ровно один раз.

В третьем наборе входных данных каждая подстрока «bbcaabbba» встречается нечетное число раз. В частности, «b» встречается \(5\) раз, «a» и «bb» встречаются по \(3\) раза, а каждая из оставшихся подстрок встречается ровно один раз.

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\) после этой операции совпадают.

Для четвертого и пятого отрезков добиться равенства невозможно.

H. Конструктор

графы жадные алгоритмы математика Теория вероятностей *3300

Василий любит различные конструкторы. На один из дней рождения друзья ему подарили полный неориентированный взвешенный граф из \(n\) вершин.

Он хочет построить такое остовное дерево этого графа, чтобы для первых \(k\) вершин выполнялись следующие условия: степень вершины под номером \(i\) не превышает \(d_i\). У вершин от \(k + 1\) до \(n\) степени могут быть любыми.

Василий просит найти вас минимальный вес остовного дерева, подходящего под все условия.

Напомним, что остовным деревом называется подмножество ребер графа, образующее дерево на всех \(n\) вершинах графа. Весом остовного дерева называется сумма весов ребер, входящих в остовное дерево.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 50\), \(1 \leq k \leq min(n - 1, 5)\)).

Вторая строка содержит \(k\) целых чисел \(d_1, d_2, \ldots, d_k\) (\(1 \leq d_i \leq n\)).

\(i\)-я из следующих \(n - 1\) строк содержит по \(n - i\) целых чисел \(w_{i,i+1}, w_{i,i+2}, \ldots, w_{i,n}\) (\(1 \leq w_{i,j} \leq 100\)) — веса ребер между вершинами \((i,i+1),(i,i+2),\ldots,(i,n)\).

Выходные данные

Выведите одно целое число — минимальный вес остовного дерева при заданных ограничениях на степени первых \(k\) вершин.

B. Moamen и k-подотрезки

жадные алгоритмы сортировки *1100

У Moamen есть массив из \(n\) различных целых чисел. Он хочет отсортировать его в неубывающем порядке, проделав следующую операцию ровно один раз:

  1. Разделить массив на ровно \(k\) непустых подотрезка таких, что каждый элемент принадлежит ровно одному подотрезку.
  2. Переупорядочить эти подотрезки произвольным образом.
  3. Объединить подотрезки в один массив.

Последовательность \(a\) является подотрезком \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Помогите Moamen понять, существует ли способ отсортировать массив в неубывающем порядке, применив эту операцию ровно один раз?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание этих наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le |a_i| \le 10^9\)). Гарантируется, что все числа в массиве различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку.

Если Moamen может отсортировать массив в неубывающем порядке, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете выводить каждую букву «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(a = [6, 3, 4, 2, 1]\), и \(k = 4\). Мы можем применить операцию следующим образом:

  1. Разбить \(a\) на \(\{ [6], [3, 4], [2], [1] \}\).
  2. Переупорядочить их: \(\{ [1], [2], [3,4], [6] \}\).
  3. Объединить их: \([1, 2, 3, 4, 6]\), получив отсортированный массив.

Во втором примере не существует способа отсортировать массив, разбив его всего на два \(2\) подотрезка.

Например, если мы разобьем массив на подотрезки как \(\{ [1, -4], [0, -2] \}\), мы можем переупорядочить их только как \(\{ [1, -4], [0, -2] \}\) или \(\{ [0, -2], [1, -4] \}\). В обоих случаях массив не будет отсортирован после объединения.

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\).
Значит, исходная таблица уже прекрасная и мы не должны удалять ничего.

Во втором примере таблица следующая:

C. Прелестные перевороты

жадные алгоритмы Конструктив *2000

У вас есть перестановка — массив \(a = [a_1, a_2, \ldots, a_n]\) из различных целых чисел от \(1\) до \(n\). Длина перестановки \(n\) нечётна.

Вам нужно отсортировать её по возрастанию.

За один шаг вы можете выбрать любой префикс перестановки, имеющий нечётную длину, и перевернуть его. Формально, если \(a = [a_1, a_2, \ldots, a_n]\), вы можете выбрать любое нечётное целое число \(p\) от \(1\) до \(n\) включительно и сделать \(a\) равной \([a_p, a_{p-1}, \ldots, a_1, a_{p+1}, a_{p+2}, \ldots, a_n]\).

Найдите способ отсортировать перестановку \(a\), используя не более \(\frac{5n}{2}\) переворотов такого рода, или определите, что такого способа не существует. Минимизировать число переворотов не нужно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2021\); \(n\) нечётно) — длину перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — саму перестановку.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2021\).

Выходные данные

Для каждого набора входных данных, если невозможно отсортировать заданную перестановку, используя не более \(\frac{5n}{2}\) шагов, выведите одно целое число \(-1\).

В противном случае выведите целое число \(m\) (\(0 \le m \le \frac{5n}{2}\)) — число переворотов в вашей последовательности шагов, и \(m\) целых чисел \(p_i\) (\(1 \le p_i \le n\); \(p_i\) нечётно) — длины префиксов \(a\), которые нужно перевернуть, в хронологическом порядке.

Обратите внимание, что \(m\) минимизировать не нужно. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных перестановка уже отсортирована. Любое чётное число переворотов префикса длины \(3\) не влияет на этот факт.

Во втором наборе входных данных после переворота префикса длины \(3\) перестановка станет равна \([5, 4, 3, 2, 1]\), и далее после переворота префикса длины \(5\) перестановка станет равна \([1, 2, 3, 4, 5]\).

В третьем наборе входных данных перестановку отсортировать невозможно.

E. Нижний уровень

meet-in-the-middle Бинарный поиск графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное *3000

В некоторой компьютерной игре игрок управляет героем, который характеризуется одним целочисленным параметром — силой.

На текущем уровне герой попал в систему из \(n\) пещер, пронумерованных от \(1\) до \(n\), и \(m\) коридоров между ними. Каждый коридор соединяет две различные пещеры. Любые две пещеры соединены не более чем одним коридором. Из любой пещеры можно попасть в любую другую, двигаясь по коридорам.

Герой начинает уровень в пещере \(1\), а в каждой из оставшихся пещер находится монстр.

Герой может перемещаться между пещерами по коридорам. Если герой вышел из пещеры и начал движение по коридору, он обязан завершить его и дойти до противоположного конца коридора.

По любому коридору герой может перемещаться в обоих направлениях. Однако герой не может использовать один и тот же коридор два раза подряд. Формально, если герой перешёл по коридору из пещеры \(i\) в пещеру \(j\), он не может сразу же направиться обратно в пещеру \(i\), но может направиться в любую другую пещеру, соединённую коридором с пещерой \(j\).

Известно, что из любой пещеры выходит как минимум два коридора, поэтому герой никогда не попадёт в тупик даже с учётом предыдущего требования.

Чтобы пройти уровень, герою нужно победить монстров во всех пещерах. Когда герой впервые зайдёт в пещеру, ему придётся драться с монстром в ней. Герой может победить монстра в пещере \(i\) только в том случае, если сила героя строго больше \(a_i\). В случае победы над монстром сила героя увеличится на \(b_i\). Если герой не может победить монстра, с которым он дерётся, игра заканчивается и игрок проигрывает.

После того, как герой победит монстра в пещере \(i\), все последующие визиты в пещеру \(i\) не будут иметь последствий — монстра в этой пещере уже не будет, но и сила героя не будет изменяться.

Найдите минимальную необходимую силу, с которой герой должен начать уровень, чтобы иметь возможность победить всех монстров и пройти уровень.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 1000\); \(n \le m \le min(\frac{n(n-1)}{2}, 2000)\)) — число пещер и коридоров.

Вторая строка содержит \(n-1\) целых чисел \(a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — значения, с которыми сравнивается сила героя при битве с монстрами в пещерах \(2, 3, \ldots, n\).

Третья строка содержит \(n-1\) целых чисел \(b_2, b_3, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — прибавки к силе героя за победу над монстрами в пещерах \(2, 3, \ldots, n\).

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)) — номера пещер, соединённых коридором.

Никакие две пещеры не соединены более чем одним коридором. Из любой пещеры можно попасть в любую другую, двигаясь по коридорам. Из любой пещеры выходит как минимум два коридора.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\), а сумма значений \(m\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную силу героя, необходимую для того, чтобы иметь возможность победить всех монстров и пройти уровень.

Примечание

В первом наборе входных данных герой может пройти уровень, начав с силы \(15\), следующим образом:

  • перейти из пещеры \(1\) в пещеру \(2\): так как \(15 > 11\), герой побеждает монстра, сила героя увеличивается до \(15 + 8 = 23\);
  • перейти из пещеры \(2\) в пещеру \(3\): так как \(23 > 22\), герой побеждает монстра, сила героя увеличивается до \(23 + 7 = 30\);
  • перейти из пещеры \(3\) в пещеру \(4\): так как \(30 > 13\), герой побеждает монстра, сила героя увеличивается до \(30 + 5 = 35\).

Во втором наборе входных данных ситуация аналогична, но прибавки к силе героя в пещерах \(2\) и \(4\) поменялись местами. Герой может использовать другой маршрут, \(1 \rightarrow 4 \rightarrow 3 \rightarrow 2\), и пройти уровень с начальной силой \(15\).

В третьем наборе входных данных герой может пройти уровень, начав с силы \(19\), следующим образом:

  • перейти из пещеры \(1\) в пещеру \(2\): так как \(19 > 10\), герой побеждает монстра, сила героя увеличивается до \(19 + 7 = 26\);
  • перейти из пещеры \(2\) в пещеру \(4\): так как \(26 > 20\), герой побеждает монстра, сила героя увеличивается до \(26 + 10 = 36\);
  • перейти из пещеры \(4\) в пещеру \(5\): так как \(36 > 30\), герой побеждает монстра, сила героя увеличивается до \(36 + 5 = 41\);
  • перейти из пещеры \(5\) в пещеру \(2\): в этой пещере монстра уже нет, поэтому ничего не происходит;
  • перейти из пещеры \(2\) в пещеру \(3\): так как \(41 > 40\), герой побеждает монстра, сила героя увеличивается до \(41 + 2 = 43\).

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\) одного цвета), что является минимальной возможной неидеальностью.

D1. Mocha и Diana (простая версия)

графы Деревья жадные алгоритмы Конструктив Перебор снм *1400

Это простая версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 1000\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

D2. Mocha и Diana (сложная версия)

графы Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм *2500

Это сложная версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 10^5\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

D. Сделай степень двойки

жадные алгоритмы математика Строки *1300

Дано число \(n\). За \(1\) ход можно сделать одно из следующих действий:

  • стереть любую цифру этого числа (допустимо, чтобы число состояло из одной цифры и после этой операции стало «пустым»);
  • дописать справа любую цифру.

Действия можно производить в любом порядке произвольное количество раз.

Обратите внимание, что если после удаления некоторой цифры из числа оно будет содержать ведущие нули, то они не будут удаляться автоматически. Например, если из числа \(301\) удалить \(3\), то останется \(01\), а не \(1\).

Необходимо совершить минимальное количество действий, так чтобы число стало степенью \(2\) (т. е. чтобы нашлось целое число \(k\) (\(k \ge 0\)) такое, что полученное число равно \(2^k\)). Полученное число не должно содержать ведущих нулей.

Например, если \(n=1052\), то ответ равен \(2\). Сначала можно дописать справа цифру \(4\) (получится \(10524\)). Затем стереть цифру \(5\), в результате получится \(1024\), что является степенью числа \(2\).

Например, если \(n=8888\), то ответ равен \(3\). Три раза сотрём любую из цифр \(8\). В результате получится \(8\), что является степенью числа \(2\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число \(m\) — минимальное количество ходов, которые нужно совершить, чтобы число стало степенью \(2\).

Примечание

Ответ на первый набор входных данных разобран выше.

Ответ на второй набор входных данных разобран выше.

В третьем наборе входных данных достаточно приписать справа цифру \(4\) — число \(6\) превратится в \(64\).

В четвёртом наборе входных данных можно сначала приписать справа \(8\), затем удалить \(7\) и \(5\) — получится число \(8\).

В пятом и шестом наборах входных данных числа уже являются степенями двойки, поэтому ни одного хода делать не нужно.

В седьмом наборе данных можно сначала удалить цифру \(3\) (останется \(01\)), затем удалить цифру \(0\) (получится \(1\)).

F1. Ближайшее красивое число (упрощённая версия)

Бинарный поиск битмаски жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *1900

Это упрощённая версия задачи F2. Они отличаются только ограничениями (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 2\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

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\).

C. Самый нижний уровень

Бинарный поиск жадные алгоритмы сортировки *1300

В некоторой компьютерной игре игрок управляет героем, который характеризуется одним целочисленным параметром — силой. Герою предстоит побеждать монстров, каждый из которых также характеризуется одним целочисленным параметром — бронёй.

На текущем уровне перед героем \(n\) пещер. Чтобы пройти уровень, герою нужно зайти во все пещеры в некотором порядке, в каждую ровно один раз, и выйти из каждой целым и невредимым. Когда герой зайдёт в пещеру \(i\), ему придётся подраться с \(k_i\) монстрами по очереди — сначала с монстром с бронёй \(a_{i, 1}\), потом с монстром с бронёй \(a_{i, 2}\) и так далее, в конце с монстром с бронёй \(a_{i, k_i}\).

Герой может победить монстра только в том случае, если сила героя строго больше брони монстра. Если герой не может победить монстра, с которым он дерётся, игра заканчивается и игрок проигрывает. Обратите внимание, что как только герой зашёл в пещеру, он не может из неё выйти, пока не подерётся со всеми монстрами в ней, причём именно в заданном порядке.

Каждый раз, когда герой побеждает монстра, сила героя увеличивается на \(1\).

Найдите минимальную необходимую силу, с которой герой должен начать уровень, чтобы иметь возможность зайти во все пещеры по одному разу в некотором порядке и победить всех монстров.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — число пещер.

\(i\)-я из следующих \(n\) строк содержит целое число \(k_i\) (\(1 \le k_i \le 10^5\)) — число монстров в пещере \(i\), за которым следуют \(k_i\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, k_i}\) (\(1 \le a_{i, j} \le 10^9\)) — уровни брони монстров в том порядке, в котором герою предстоит с ними драться в пещере \(i\).

Гарантируется, что сумма значений \(k_i\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальный уровень силы героя, необходимый, чтобы иметь возможность зайти во все пещеры по одному разу в некотором порядке и победить всех монстров.

Примечание

В первом наборе входных данных нужно победить единственного монстра с бронёй \(42\), для этого достаточно иметь силу героя \(43\).

Во втором наборе входных данных герой с силой \(13\) может пройти уровень следующим образом:

  • зайти в пещеру \(2\):
    • победить монстра с бронёй \(12\), сила героя увеличится до \(14\);
    • победить монстра с бронёй \(11\), сила героя увеличится до \(15\);
  • зайти в пещеру \(1\):
    • победить монстра с бронёй \(10\), сила героя увеличится до \(16\);
    • победить монстра с бронёй \(15\), сила героя увеличится до \(17\);
    • победить монстра с бронёй \(8\), сила героя увеличится до \(18\).

A. The Miracle and the Sleeper

жадные алгоритмы математика *800

Вам даны два целых числа \(l\) и \(r\), \(l\le r\). Найдите наибольшее возможное значение \(a \bmod b\) по всем парам \((a, b)\) целых чисел, для которых \(r\ge a \ge b \ge l\).

Напомним, что \(a \bmod b\) — это остаток, который получается при делении \(a\) на \(b\). Например, \(26 \bmod 8 = 2\).

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит одно целое положительное число \(t\) \((1\le t\le 10^4)\), обозначающее количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\), \(r\) (\(1\le l \le r \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите наибольшее возможное значение \(a \bmod b\) по всем парам \((a, b)\) целых чисел, для которых \(r\ge a \ge b \ge l\).

Примечание

В первом наборе входных данных единственной допустимой парой является \((a, b) = (1, 1)\), для которой \(a \bmod b = 1 \bmod 1 = 0\).

Во втором наборе входных данных оптимальным выбором является пара \((a, b) = (1000000000, 999999999)\), для которой \(a \bmod b = 1\).

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'.

A. Максимизация медианы

Бинарный поиск жадные алгоритмы математика *800

Вам даны два целых положительных числа \(n\) и \(s\). Найдите максимальное возможное значение медианы массива из \(n\) неотрицательных целых чисел (не обязательно различных) такого, что сумма его элементов равна \(s\).

Медиана массива целых чисел длины \(m\) — это число, стоящее на позиции \(\lceil {\frac{m}{2}} \rceil\) (округление вверх) среди его элементов, упорядоченных по неубыванию. Нумерация позиций начинается с \(1\). Например, медиана массива \([20,40,20,50,50,30]\) равна \(\lceil \frac{m}{2} \rceil\)-у элементу \([20,20,30,40,50,50]\), то есть \(30\). Существуют другие определения медианы, но в этой задаче мы будем использовать именно это определение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственную строку с двумя целыми числами \(n\) и \(s\) (\(1 \le n, s \le 10^9\)) — длиной массива и необходимой суммой элементов.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное возможное значение медианы.

Примечание

Возможные массивы для первых трех наборов входных данных (в каждом массиве медиана подчеркнута):

  • В первом наборе входных данных \([\underline{5}]\)
  • Во втором наборе входных данных \([\underline{2}, 3]\)
  • В третьем наборе входных данных \([1, \underline{2}, 2]\)

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\).

D1. Рассадка в кинотеатре (простая версия)

жадные алгоритмы сортировки Структуры данных *1100

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(n = 1\).

В кинотеатре места могут быть представлены как таблица из \(n\) рядов и \(m\) столбцов. Ряды нумеруются целыми числами от \(1\) до \(n\). Места в каждом ряду нумеруются последовательными целыми числами слева направо: в \(k\)-м ряду от \(m (k - 1) + 1\) до \(m k\) для всех рядов \(1 \le k \le n\).

\(1\)\(2\)\(\cdots\)\(m - 1\)\(m\)
\(m + 1\)\(m + 2\)\(\cdots\)\(2 m - 1\)\(2 m\)
\(2m + 1\)\(2m + 2\)\(\cdots\)\(3 m - 1\)\(3 m\)
\(\vdots\)\(\vdots\)\(\ddots\)\(\vdots\)\(\vdots\)
\(m (n - 1) + 1\)\(m (n - 1) + 2\)\(\cdots\)\(n m - 1\)\(n m\)
Таблица с номерами мест

Есть \(nm\) людей, которые хотят прийти в кинотеатр, чтобы посмотреть новый фильм. Они пронумерованы целыми числами от \(1\) до \(nm\). Вы должны задать ровно одно место для каждого человека.

Известно, что в этом кинотеатре чем меньше номер места, тем лучше виден экран. У \(i\)-го человека уровень зрения \(a_i\). Обозначим за \(s_i\) номер места \(i\)-го человека. Необходимо выдать место лучше тем, у кого зрение хуже, то есть для любых двух людей \(i\), \(j\) таких, что \(a_i < a_j\), должно выполняться условие \(s_i < s_j\).

После того, как вы определите места всем людям, они начнут их занимать. В порядке от \(1\) до \(nm\) каждый человек входит в зал и садится на своё место. Чтобы сесть, человек подходит к своему ряду и начинает двигаться от первого места в ряду к своему слева направо. Во время того, как человек будет занимать свое место, какие-то места будут свободны, какие-то будут заняты теми людьми, которые уже вошли в зал. Неудобство человека равно количеству занятых мест, мимо которых он прошёл, пока занимал своё место.

Рассмотрим пример: \(m = 5\), человеку определено место \(4\) в первом ряду, причём места \(1\), \(3\), \(5\) в первом ряду уже заняты, а места \(2\) и \(4\) свободны. Неудобство этого человека будет равно \(2\), потому что он пройдет мимо двух занятых мест: \(1\) и \(3\).

Найдите минимальное общее неудобство (сумму неудобств всех людей), которое можно получить, задав места для всех людей (при этом все условия должны быть выполнены).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(n = 1\), \(1 \le m \le 300\)) — количество рядов и мест в каждом ряду кинотеатра соответственно.

Следующая строка содержит \(n \cdot m\) целых чисел \(a_1, a_2, \ldots, a_{n \cdot m}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень зрения \(i\)-го человека.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора выходных данных выведите единственное целое число — минимальное общее неудобство, которое можно получить.

Примечание

В первом наборе входных данных существует единственный способ определить людям места, потому что все уровни зрения различны. Первый человек занимает первое место, второй человек занимает второе место, третий человек занимает третье место. Неудобство первого человека равно \(0\), второго — \(1\), а третьего — \(2\). Общее неудобство равно \(0 + 1 + 2 = 3\).

Во втором наборе входных данных люди должны занять следующие места: \(s_1 = 2\), \(s_2 = 1\), \(s_3 = 5\), \(s_4 = 4\), \(s_5 = 3\). Общее неудобство будет равно \(6\).

D2. Рассадка в кинотеатре (сложная версия)

жадные алгоритмы реализация сортировки Структуры данных *1600

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(1 \le n \le 300\).

В кинотеатре места могут быть представлены как таблица из \(n\) рядов и \(m\) столбцов. Ряды нумеруются целыми числами от \(1\) до \(n\). Места в каждом ряду нумеруются последовательными целыми числами слева направо: в \(k\)-м ряду от \(m (k - 1) + 1\) до \(m k\) для всех рядов \(1 \le k \le n\).

\(1\)\(2\)\(\cdots\)\(m - 1\)\(m\)
\(m + 1\)\(m + 2\)\(\cdots\)\(2 m - 1\)\(2 m\)
\(2m + 1\)\(2m + 2\)\(\cdots\)\(3 m - 1\)\(3 m\)
\(\vdots\)\(\vdots\)\(\ddots\)\(\vdots\)\(\vdots\)
\(m (n - 1) + 1\)\(m (n - 1) + 2\)\(\cdots\)\(n m - 1\)\(n m\)
Таблица с номерами мест

Есть \(nm\) людей, которые хотят прийти в кинотеатр, чтобы посмотреть новый фильм. Они пронумерованы целыми числами от \(1\) до \(nm\). Вы должны задать ровно одно место для каждого человека.

Известно, что в этом кинотеатре чем меньше номер места, тем лучше виден экран. У \(i\)-го человека уровень зрения \(a_i\). Обозначим за \(s_i\) номер места \(i\)-го человека. Необходимо выдать место лучше тем, у кого зрение хуже, то есть для любых двух людей \(i\), \(j\) таких, что \(a_i < a_j\), должно выполняться условие \(s_i < s_j\).

После того, как вы определите места всем людям, они начнут их занимать. В порядке от \(1\) до \(nm\) каждый человек входит в зал и садится на своё место. Чтобы сесть, человек подходит к своему ряду и начинает двигаться от первого места в ряду к своему слева направо. Во время того, как человек будет занимать свое место, какие-то места будут свободны, какие-то будут заняты теми людьми, которые уже вошли в зал. Неудобство человека равно количеству занятых мест, мимо которых он прошёл, пока занимал своё место.

Рассмотрим пример: \(m = 5\), человеку определено место \(4\) в первом ряду, причём места \(1\), \(3\), \(5\) в первом ряду уже заняты, а места \(2\) и \(4\) свободны. Неудобство этого человека будет равно \(2\), потому что он пройдет мимо двух занятых мест: \(1\) и \(3\).

Найдите минимальное общее неудобство (сумму неудобств всех людей), которое можно получить, задав места для всех людей (при этом все условия должны быть выполнены).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 300\)) — количество рядов и мест в каждом ряду кинотеатра соответственно.

Следующая строка содержит \(n \cdot m\) целых чисел \(a_1, a_2, \ldots, a_{n \cdot m}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень зрения \(i\)-го человека.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора выходных данных выведите единственное целое число — минимальное общее неудобство, которое можно получить.

Примечание

В первом наборе входных данных существует единственный способ рассадить людей: первого человека посадить на первое место, а второго — на второе. Тогда суммарное неудобство будет равно \(1\).

Во втором наборе входных данных оптимальная рассадка выглядит следующим образом:

В третьем наборе входных данных оптимальная рассадка выглядит следующим образом:

Число в клетке обозначает индекс человека, занимающего это место.

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]\)) будет посещён после второго перемещения третьей точкой.

Ниже рисунок, иллюстрирующий первый набор входных данных:

G. Четыре вершины

графы жадные алгоритмы Конструктив кратчайшие пути реализация Структуры данных *3100

Дан неориентированный взвешенный граф, состоящий из \(n\) вершин и \(m\) рёбер.

На этом графе осуществляются запросы:

  • Удалить из графа существующее ребро.
  • Добавить в граф ещё не существующее в нём ребро.

В самом начале и после каждого запроса вам необходимо найти четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между \(a\) и \(b\), существует путь между \(c\) и \(d\) и сумма длин двух кратчайших путей из \(a\) в \(b\) и из \(c\) в \(d\) минимальна. Ответ на запрос — это сумма длин этих двух кратчайших путей. Длина пути равна сумме весов рёбер на этом пути.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) \((4 \le n, m \le 10^5)\) — количество вершин и рёбер в графе соответственно.

Каждая из следующих \(m\) строк содержит три целых числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)) — это означает, что существует ребро между вершинами \(v\) и \(u\) с весом \(w\).

Следующая строка содержит одно целое число \(q\) \((0 \le q \le 10^5)\) — количество запросов.

Следующие \(q\) строк содержат запросы двух типов:

  • \(0\) \(v\) \(u\) — такой запрос означает удаление ребра между вершинами \(v\) и \(u\) \((1 \le v, u \le n, v \neq u)\). Гарантируется, что такое ребро существует в графе.
  • \(1\) \(v\) \(u\) \(w\) — такой запрос означает добавление ребра между вершинами \(v\) и \(u\) весом \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)). Гарантируется, что такого ребра не было в графе.

Гарантируется, что изначальный граф не содержит кратных рёбер.

В самом начале и после каждого запроса граф не обязательно связный.

Гарантируется, что в любой момент количество рёбер в графе не будет меньше \(4\). Можно доказать, что в любой момент существуют четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между вершинами \(a\) и \(b\), и существует путь между вершинами \(c\) и \(d\).

Выходные данные

Выведите \(q + 1\) целое число — минимальную сумму длин кратчайших путей для выбранных пар вершин до всех запросов и после каждого из них.

Примечание

До всех запросов можно выбрать вершины \((a, b) = (3, 2)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(3 + 1 = 4\).

После первого запроса можно выбрать вершины \((a, b) = (2, 5)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(2 + 1 = 3\).

После второго запроса можно выбрать вершины \((a, b) = (3, 4)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(1 + 2 = 3\).

После третьего запроса можно выбрать вершины \((a, b) = (2, 6)\) и \((c, d) = (4, 5)\). Сумма длин двух кратчайших путей равна \(4 + 3 = 7\).

После последнего запроса можно выбрать вершины \((a, b) = (1, 6)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(3 + 2 = 5\).

B. MEXor массива

битмаски жадные алгоритмы *1000

Алиса вручила Бобу два целых числа \(a\) и \(b\) (\(a > 0\) и \(b \ge 0\)). Будучи крайне любознательным, Боб выписал массив из неотрицательных целых чисел с \(\operatorname{MEX}\) всех элементов, равным \(a\), и \(\operatorname{XOR}\) всех элементов, равным \(b\).

Чему равна наименьшая возможная длина массива, выписанного Бобом?

Напомним, что \(\operatorname{MEX}\) (Minimum EXcluded) массива — это наименьшее неотрицательное целое число, которого нет в данном массиве, а \(\operatorname{XOR}\) массива — это побитовое исключающее ИЛИ всех элементов данного массива.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следуют сами наборы.

В единственной строке каждого набора задано два целых числа \(a\) и \(b\) (\(1 \leq a \leq 3 \cdot 10^5\); \(0 \leq b \leq 3 \cdot 10^5\)) — \(\operatorname{MEX}\) и \(\operatorname{XOR}\) массива, соответственно.

Выходные данные

Для каждого набора данных, выведите одно (положительное) целое число — длину наикратчайшего возможного массива с \(\operatorname{MEX}\) \(a\) и \(\operatorname{XOR}\) \(b\). Можно показать, что данный массив всегда существует.

Примечание

В первом наборе входных данных один из кратчайших массивов с \(\operatorname{MEX}\) \(1\) и \(\operatorname{XOR}\) \(1\) равен \([0, 2020, 2021]\).

Во втором наборе один из кратчайших массивов с \(\operatorname{MEX}\) \(2\) и \(\operatorname{XOR}\) \(1\) равен \([0, 1]\).

Можно показать, что данные массивы имеют наименьшую возможную длину.

D. Своеобразная система счисления

жадные алгоритмы Конструктив математика реализация *2000

Боб выписал на доске \(n\) положительных целых чисел в десятичной системе счисления с суммой \(s\) (то есть по основанию \(10\)). Алиса увидела числа на доске, но по ошибке интерпретировала числа как записанные по основанию \(11\) и сложила их (по основанию \(11\)).

Какие числа должен был написать Боб, чтобы сумма, полученная Алисой, была максимально возможной?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют сами наборы.

В единственной строке каждого набора заданы два целых числа \(s\) и \(n\) (\(1 \leq s \leq 10^9\); \(1 \leq n \leq \min(100, s)\)) — сумма и количество чисел на доске, соответственно. Числа \(s\) и \(n\) заданы в десятичной системе счисления (по основанию \(10\)).

Выходные данные

Для каждого набора данных выведите \(n\) положительных целых чисел — числа, которые должен написать Боб, чтобы полученная Алисой сумма была максимально возможной. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе, \(70_{10} + 27_{10} = 97_{10}\), а у Алисы получится сумма \(\)70_{11} + 27_{11} = 97_{11} = 9 \cdot 11 + 7 = 106_{10}.\(\) (Здесь \(x_b\) обозначает число \(x\) по основанию \(b\).) Можно показать, что для Алисы невозможно получить сумму больше, чем \(106_{10}\).

Во втором наборе, Боб выписывает только одно число, поэтому он может выписать только \(17\).

В третьем примере, \(3_{10} + 4_{10} + 100_{10} + 4_{10} = 111_{10}\), а у Алисы получится сумма \(\)3_{11} + 4_{11} + 100_{11} + 4_{11} = 110_{11} = 1 \cdot 11^2 + 1 \cdot 11 = 132_{10}.\(\) Можно показать, что для Алисы невозможно получить сумму более \(132_{10}\).

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\), если все ограничения выполнить невозможно.

B. Xor трех

жадные алгоритмы Конструктив Перебор *2500

У вас есть последовательность \(a\) длины \(n\), состоящая из цифр \(0\) и \(1\).

Вы можете выполнять следующую операцию над этой последовательностью:

  • выбрать индекс \(i\) от \(1\) до \(n-2\) (включительно);
  • одновременно заменить значения \(a_{i}\), \(a_{i+1}\), \(a_{i+2}\) на \(a_{i} \oplus a_{i+1} \oplus a_{i+2}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
Найдите последовательность из не более чем \(n\) операций, после которой все элементы \(a\) будут равны \(0\), или определите, что это невозможно.

Можно показать, что если существует последовательность операций некоторой длины такая, что после ее выполнения все элементы \(a\) будут равны \(0\), то существует и последовательность длины не более \(n\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(3 \le n \le 2\cdot10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = 0\) или \(a_i = 1\)) — элементы \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных:

  • если нет способа сделать все элементы \(a\) равными \(0\), выполнив описанную операцию несколько раз, выведите «NO»;
  • в противном случае в первой строке выведите «YES», во второй строке выведите \(k\) (\(0 \le k \le n\)) — количество операций над \(a\) в вашем решении, а затем в третьей строке выведите последовательность \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n - 2\)) — индексы, которые вы выбираете.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере последовательность содержит только числа \(0\), поэтому ничего не нужно делать.

Во втором примере мы можем преобразовать \([1, 1, 1, 1, 0]\) в \([1, 1, 0, 0, 0]\), а затем в \([0, 0, 0, 0, 0]\), сначала выполнив операцию, начиная с третьего элемента \(a\), а потом начиная с первого элемента \(a\).

В третьем примере независимо от того, сделаем ли мы первую операцию, начиная с первого или второго элемента \(a\), мы получим \([1, 1, 1, 1]\), что не может быть преобразовано в \([0, 0, 0, 0]\).

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\).

D. Бридж-клуб

графы жадные алгоритмы Паросочетания Потоки *2800

В местном бридж-клубе сейчас спорят на \(n\) различных тем, пронумерованных от \(0\) до \(n-1\), и, вот совпадение, в клубе состоят ровно \(2^n\) игроков, пронумерованных от \(0\) до \(2^n-1\). Никакие два игрока не имеют полностью совпадающих взглядов на все \(n\) тем, а именно, у \(i\)-го игрока положительный взгляд на \(j\)-ю тему, если \(i\ \&\ 2^j > 0\), и отрицательный взгляд иначе. Здесь \(\&\) обозначает операцию побитового И.

Вы хотите организовать турнир по бриджу, в котором примут участие не более чем \(k\) пар игроков (в бридж играют командами из двух игроков). Вы можете составлять пары игроков произвольным образом (каждый игрок должен быть не более чем в одной паре), но с одним условием: два игрока не могут быть в одной паре, если у них различные взгляды на \(2\) или более из данных \(n\) тем.

Вы знаете, что \(i\)-й игрок заплатит вам \(a_i\) долларов, если примет участие в турнире. Вычислите максимальную сумму, которую можно получить, выбрав команды оптимальным образом.

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(1 \le n \le 20\), \(1 \le k \le 200\)) — количество спорных тем, и количество пар игроков, которые могут сыграть в турнире.

Вторая строка содержит \(2^n\) целых чисел \(a_0, a_1, \dots, a_{2^n-1}\) (\(0 \le a_i \le 10^6\)) — суммы, которые вам заплатят игроки в случае участия в турнире.

Выходные данные

Выведите одно целое число: максимальную сумму, которую вы можете получить, если составите команды оптимальным образом.

Примечание

В первом примере оптимальное решение — поставить в пару \(0\)-го и \(2\)-го игрока, что принесет \(8 + 5 = 13\) долларов. Хотя \(0\)-й и \(5\)-й игроки принесли бы вместе \(8 + 10 = 18\) долларов, мы их не можем объединить в команду, так как их взгляды отличаются в \(2\) из \(3\) тем.

Во втором примере можно объединить в команду \(0\)-го и \(1\)-го игрока, а также \(2\)-го и \(3\)-го игрока, что в сумме даст \(7 + 4 + 5 + 7 = 23\) долларов.

A. Обратный отсчет

жадные алгоритмы *800

У вас есть цифровые часы, на которых всегда отображаются \(n\) цифр. Каждая цифра может быть любым целым числом от \(0\) до \(9\), поэтому часы могут показывать целые числа от \(0\) до \(10^n-1\). Часы будут показывать лидирующие нули, если число меньше, чем \(10^{n-1}\).

Вы хотите сделать так, чтобы часы показывали \(0\), за минимальное число операций. За одну операцию вы можете сделать одно из следующего:

  • уменьшить число на часах на \(1\), или
  • поменять местами две цифры (вы можете выбрать, цифры на каких позициях менять местами, они не обязательно должны быть соседними).

Определите, какое минимальное число операций необходимо сделать, чтобы часы показывали \(0\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 100\)) — количество цифр на часах.

Вторая строка содержит строку из \(n\) цифр \(s_1, s_2, \ldots, s_n\) (\(0 \le s_1, s_2, \ldots, s_n \le 9\)) — начальное число на часах.

Обратите внимание, что если число на часах меньше \(10^{n-1}\), то часы будут показывать лидирующие нули.

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, чтобы установить на часах значение \(0\).

Примечание

В первом примере оптимально просто уменьшить число \(7\) раз.

Во втором примере можно сначала поменять местами первую и последнюю цифры, а затем уменьшить число на \(1\).

В третьем примере часы уже показывают \(0\), поэтому можно ничего не делать.

B. Смена мест

жадные алгоритмы математика сортировки *1400

Вам даны два массива \(a\) и \(b\) длины \(n\). Массив \(a\) содержит все нечетные целые числа от \(1\) до \(2n\) в некотором порядке, а массив \(b\) содержит все четные целые числа от \(1\) до \(2n\) в некотором порядке.

Вы можете выполнять следующую операцию с этими массивами:

  • выбрать один из двух массивов;
  • выбрать индекс \(i\) от \(1\) до \(n-1\);
  • поменять местами \(i\)-й и \((i+1)\)-й элементы выбранного массива.
Вычислите минимальное количество операций, необходимое для того, чтобы сделать массив \(a\) лексикографически меньше массива \(b\).

Если массивы \(x\) и \(y\) одинаковой длины \(n\) различны, то мы говорим, что \(x\) лексикографически меньше \(y\), если в первой позиции, где \(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 2n\), все \(a_i\) нечетны и различны) — массив \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 2n\), все \(b_i\) четны и различны) — массив \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество операций, необходимое, чтобы сделать массив \(a\) лексикографически меньше массива \(b\).

Можно показать, что ответ всегда существует.

Примечание

В первом примере массив \(a\) уже лексикографически меньше массива \(b\), поэтому не нужно делать никаких операций.

Во втором примере можно поменять местами \(5\) и \(3\), а затем поменять местами \(2\) и \(4\), тогда массивы будут равны \([3, 5, 1]\) и \([4, 2, 6]\). Другое возможное решение — поменять местами \(3\) и \(1\), а затем поменять местами \(5\) и \(1\), тогда массивы будут равны \([1, 5, 3]\) и \([2, 4, 6]\). Еще одно решение — поменять местами \(4\) и \(6\), а затем — \(2\) и \(6\), тогда массивы будут равны \([5, 3, 1]\) и \([6, 2, 4]\).

B. Домашнее задание

жадные алгоритмы Комбинаторика математика *1100

Заданы четыре целых числа \(a\), \(b\), \(c\) и \(m\).

Проверьте, существует ли строка, в которой:

  • \(a\) букв 'A';
  • \(b\) букв 'B';
  • \(c\) букв 'C';
  • нет других букв;
  • ровно \(m\) пар одинаковых соседних букв (ровно \(m\) таких позиций \(i\), что \(i\)-я буква совпадает с \((i+1)\)-й).
Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записано описание набора входных данных — четыре целых числа \(a\), \(b\), \(c\) и \(m\) (\(1 \le a, b, c \le 10^8\); \(0 \le m \le 10^8\)).

Выходные данные

На каждый набор входных данных выведите «YES», если существует строка, которая удовлетворяет всем требованиям. Выведите «NO», если таких строк нет.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных строки «ABCAB» или «BCABA» удовлетворяют требованиям. Существуют и другие подходящие строки.

Во втором наборе нет способа получить пару соседних одинаковых букв, потому что никакая буква не встречается больше одного раза.

В третьем наборе входных данных строка «CABBCC» удовлетворяет требованиям. Существуют и другие подходящие строки.

C. Slay the Dragon

Бинарный поиск жадные алгоритмы сортировки Тернарный поиск *1300

Недавно Петя узнал о новой игре «Slay the Dragon». Как видно из названия, игроку предстоит сражаться с драконами, чтобы победить дракона, необходимо его убить и защитить свой замок. Для этого в распоряжении игрока есть отряд из \(n\) героев, сила \(i\)-го героя равна \(a_i\).

По правилам игры убивать дракона должен отправиться ровно один герой, все остальные будут защищать замок. Если защита дракона равна \(x\), то на его убийство можно отправлять героя с силой не менее \(x\). Если сила атаки дракона равна \(y\), то суммарная сила героев, защищающих замок, должна быть хотя бы \(y\).

За одну золотую монету игрок может увеличить силу любого из героев на \(1\). Эту операцию можно выполнять любое количество раз.

Всего в игре существует \(m\) драконов, у \(i\)-го из них защита \(x_i\), а сила атаки \(y_i\). Пете стало интересно, какое минимальное количество монет ему необходимо потратить, чтобы победить \(i\)-го дракона.

Обратите внимание, что задача решается независимо для каждого дракона (улучшения не сохраняются).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество героев.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)), где \(a_i\) — сила \(i\)-го героя.

Третья строка содержит одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество драконов.

Последующие \(m\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le 10^{12}; 1 \le y_i \le 10^{18}\)) — защита и сила атаки \(i\)-го дракона.

Выходные данные

Выведите \(m\) строк, \(i\)-я из которых содержит одно целое число — минимальное количество монет, которое необходимо потратить, чтобы победить \(i\)-го дракона.

Примечание

Для победы над первым драконом можно увеличить силу третьего героя на \(1\), тогда силы героев будут равны \([3, 6, 3, 3]\). Для убийства дракона можно выбрать первого героя.

Для победы над вторым драконом можно увеличить силы второго и третьего героев на \(1\), тогда силы героев будут равны \([3, 7, 3, 3]\). Для убийства дракона можно выбрать второго героя.

Для победы над третьим драконом можно увеличить силы всех героев на \(1\), тогда силы героев будут равны \([4, 7, 3, 4]\). Для убийства дракона можно выбрать четвертого героя.

Для победы над четверым драконом можно не улучшать героев и выбрать третьего героя для убийства дракона.

Для победы над пятым драконом можно увеличить силу второго героя на \(2\), тогда силы героев будут равны \([3, 8, 2, 3]\). Для убийства дракона можно выбрать второго героя.

D. Самый сильный билд

Бинарный поиск графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных хэши *2000

Иван играет в очередную roguelike компьютерную игру. В игре он управляет одним героем. У героя есть \(n\) слотов для экипировки предметов. Для \(i\)-го слота есть список из \(c_i\) предметов, \(j\)-й из них увеличивает силу героя на \(a_{i,j}\). Предметы для каждого из слотов попарно различные и упорядочены по возрастанию увеличения силы. То есть, \(a_{i,1} < a_{i,2} < \dots < a_{i,c_i}\).

В каждый слот Иван выбирает ровно один предмет. Пусть в \(i\)-й слот он выбрал \(b_i\)-й предмет из соответствующего списка. Последовательность выборов \([b_1, b_2, \dots, b_n]\) называется билдом.

Сила билда — это сумма увеличений силы предметов в нем. Некоторые билды в игре запрещены. Задан список из \(m\) попарно различных запрещенных билдов. Гарантируется, что хотя бы один билд не запрещен.

Какой билд среди не запрещенных в игре имеет максимальную силу? Если есть несколько билдов с максимальной силой, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10\)) — количество слотов экипировки.

В \(i\)-й из следующих \(n\) строк содержится описание предметов для \(i\)-го слота. Сначала одно целое число \(c_i\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количество предметов для \(i\)-го слота. Затем \(c_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,c_i}\) (\(1 \le a_{i,1} < a_{i,2} < \dots < a_{i,c_i} \le 10^8\)).

Сумма \(c_i\) не превосходит \(2 \cdot 10^5\).

В следующей строке записано одно целое число \(m\) (\(0 \le m \le 10^5\)) — количество запрещенных билдов.

В каждой из следующих \(m\) строк содержится описание запрещенного билда — последовательность из \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le c_i\)).

Билды попарно различные, и существует хотя бы один не запрещенный билд.

Выходные данные

Выведите билд с максимальной силой среди не запрещенных в игре. Если есть несколько билдов с максимальной силой, выведите любой из них.

L. Labyrinth

Бинарный поиск жадные алгоритмы снм *2400

In a dream, Lucy found herself in a labyrinth. This labyrinth consists of \(n\) rooms, connected by \(m\) passages (\(i\)-th passage is \(w_i\) cm wide). Each passage can be traversed in both directions. It is guaranteed that it is possible to get from any room to any other room. But this is not an ordinary labyrinth — each room in this labyrinth contains a magic candy. When Lucy eats this magic candy, she is getting wider. Specifically, if she eats candy from room \(i\) she becomes wider by \(c_i\) cm. Note that she is not obliged to eat candy the first time she visits a particular room, but she can eat each candy only once.

Unfortunately, passages in this labyrinth are pretty narrow, so after eating some candy, Lucy can get too wide and will not be able to traverse them — her width should not be greater than the width of the corresponding passage.

Lucy starts her journey in a room number \(1\). She wants to eat all the candies. After that, she will just wake up, so she does not have to be able to return to the room \(1\). She realizes that with her current width, she may not be able to do so, so she plans a workout before embarking on her journey. Lucy wants to know if it is possible to start with some positive width and still eat all the candies. If yes, then what is the maximal starting width with which it is possible.

Input

The first line contains two integers, \(n\) and \(m\) (\(2 \le n \le 10^5; n - 1 \le m \le 10^5\)) — the number of rooms and the number of passages.

The second line contains \(n\) integers — \(c_i\) (\(1 \le c_i \le 10^9\)).

Next \(m\) lines contain three integers each — \(a_i\), \(b_i\) and \(w_i\) (\(1 \le a_i, b_i \le n; a_i \ne b_i; 1 \le w_i \le 10^9\)) describing passage that connects rooms \(a_i\) and \(b_i\) and is \(w_i\) cm wide. It is guaranteed that the resulting labyrinth is connected and there is at most one passage between any pair of rooms.

Output

If it is possible to eat all the candies, output the maximal possible starting width, otherwise output \(-1\).

C. Галочки

жадные алгоритмы реализация *1500

У Казимира есть прямоугольный лист бумаги с клетчатым полем размера \(n \times m\). Изначально все клетки поля пустые.

Обозначим клетку с координатами \(i\) по вертикали и \(j\) по горизонтали за \((i, j)\). Тогда левая верхняя клетка будет обозначаться как \((1, 1)\), а правая нижняя — как \((n, m)\).

Казимир рисует на поле галочки разных размеров. Галочка размера \(d\) (\(d > 0\)) с вершиной в клетке \((i, j)\) рисуется следующим образом:

  1. Сначала закрашивается клетка \((i, j)\).
  2. Затем закрашиваются \(d\) клеток слева-сверху по диагонали от вершины и \(d\) клеток справа-сверху по диагонали от вершины.
  3. Итого закрашенными оказываются клетки с координатами \((i - h, j \pm h)\) для всех \(h\) от \(0\) до \(d\). В частности, галочка состоит из \(2d + 1\) закрашенных клеток.

Если повторно закрасить уже закрашенную клетку, она останется закрашенной. Снизу приведен пример поля \(4 \times 9\), на котором нарисованы две галочки размеров \(2\) и \(3\).

Вам дано описание клетчатого поля размера \(n \times m\). Казимир утверждает, что это поле получилось после того, как он нарисовал на нем сколько-то (возможно, \(0\)) галочек. Галочки могли быть разного размера, но размер каждой из них не меньше \(k\) (то есть \(d \ge k\) для всех галочек).

Проверьте, можно ли получить заданную картинку, нарисовав несколько (возможно, ноль) галочек, для каждой из которых \(d \ge k\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В следующих строках по очереди даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целые числа \(n\), \(m\) и \(k\) (\(1 \le k \le n \le 10\); \(1 \le m \le 19\)) — размеры поля и минимальный размер галочек, которые рисовал Казимир. В следующих \(n\) строках описания дано описание поля: каждая строка состоит из \(m\) символов, каждый из которых равен '.', если эта клетка пустая, и '*', если закрашенная.

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите YES, если данное поле могло быть получено из пустого рисованием галочек размеров \(\ge k\), и NO в противном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор данных из примера состоит из двух звездочек, которые не могут являться самостоятельными галочками, так как не существует галочек размера \(0\).

Второй набор данных из примера описан в условии (см. рисунок в тексте условия). Такое поле может быть получено, если нарисовать галочки размеров \(2\) и \(3\), как и показано на рисунке.

Поле в третьем наборе данных соответствует трем нарисованным галочкам размера \(1\). Их вершины ниже обозначены \(\color{blue}{\text{синим}}\), \(\color{red}{\text{красным}}\) и \(\color{green}{\text{зеленым}}\) цветами:

*.*.
*\(\color{blue}{\textbf{*}}\)**
.\(\color{green}{\textbf{*}}\color{red}{\textbf{*}}\).
....

Поле в четвертом наборе данных из примера могло быть получено рисованием двух галочек размеров \(1\) и \(2\). Их вершины отмечены ниже \(\color{blue}{\text{синим}}\) и \(\color{red}{\text{красным}}\) цветами соответственно:

.....
*...*
.*.*.
..\(\color{red}{\textbf{*}}\).*
...\(\color{blue}{\textbf{*}}\).

Поле в пятом наборе данных из примера не может быть получено, так как \(k = 2\), а последняя звездочка в четвертой сверху строке с координатами \((4, 5)\) может быть только частью галочки размера \(1\).

Поле в шестом наборе данных из примера не может быть получено, так как левая верхняя звездочка \((1, 1)\) не может быть самостоятельной галочкой, так как размеры галочек должны быть положительными, и не может быть частью галочки с вершиной в нижнем ряду, так как отделена от нее разрывом (точкой, '.') в \((2, 2)\).

В седьмом наборе данных, аналогично, поле не может быть получено, так как звездочки с координатами \((1, 2)\) (центральная верхняя), \((3, 1)\) и \((3, 3)\) (крайние нижние) не могут быть частью никаких галочек.

D. Продуктивная встреча

графы жадные алгоритмы Конструктив *1400

На встрече собрались \(n\) человек. В каждый момент времени любые два человека могут отойти и поговорить наедине. Одни и те же два человека могут поговорить несколько (сколько угодно) раз за встречу.

У каждого человека есть ограниченная общительность. Общительность \(i\)-го человека равна неотрицательному целому числу \(a_i\). Это означает, что после \(a_i\) личных разговоров этот человек уходит со встречи (и больше ни с кем не разговаривает). Если \(a_i = 0\), \(i\)-й человек уходит со встречи сразу после ее начала.

Встреча считается тем более продуктивной, чем больше в течение нее состоялось разговоров.

По данному массиву общительности \(a\) определите, какие люди должны разговаривать друг с другом, чтобы суммарное количество разговоров было как можно больше.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора данных первая строка содержит целое число \(n\) (\(2 \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 \cdot 10^5\). Также гарантируется, что сумма всех \(a_i\) (по всем наборам входных данных и всем \(i\)) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на все наборы входных данных.

В первой строке ответа выведите число \(k\) — максимальное количество разговоров, которое возможно провести за встречу.

В каждой из следующих \(k\) строк выведите через пробел по два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\) и \(i \neq j\)) — номера людей, между которыми состоится очередной разговор.

Если ответов несколько, выведите любой из них.

E1. Минимизация перестановки деком

жадные алгоритмы Конструктив математика *1000

На самом деле, задачи E1 и E2 не имеют много общего. Вероятно, вам надо воспринимать их как две отдельные задачи.

Дана перестановка \(p\) размера \(n\). Перестановкой размера \(n\) называется массив размера \(n\), в котором каждое целое число от \(1\) до \(n\) встречается по одному разу. Например, \([1, 4, 3, 2]\) и \([4, 2, 1, 3]\) являются перестановками, а \([1, 2, 4]\) и \([1, 2, 2]\) — нет.

Рассмотрим пустой дек (двухстороннюю очередь). Дек — это структура данных, поддерживающая добавление элементов как в начало, так и в конец. Так, если сейчас в деке лежат элементы \([1, 5, 2]\), при добавлении элемента \(4\) в начало получится последовательность \([\color{red}{4}, 1, 5, 2]\), а при добавлении в конец — \([1, 5, 2, \color{red}{4}]\).

Элементы перестановки по очереди перемещаются в изначально пустой дек, начиная с \(p_1\) и заканчивая \(p_n\). Перед добавлением каждого элемента в дек разрешается выбрать, добавить его в начало или в конец.

Например, если рассмотреть перестановку \(p = [3, 1, 2, 4]\), то одна из возможных последовательностей действий выглядит так:

\(\quad\) 1.положить \(3\) в конец дека:в деке лежит \([\color{red}{3}]\);
\(\quad\) 2.положить \(1\) в начало дека:в деке лежит \([\color{red}{1}, 3]\);
\(\quad\) 3.положить \(2\) в конец дека:в деке лежит \([1, 3, \color{red}{2}]\);
\(\quad\) 4.положить \(4\) в конец дека:в деке лежит \([1, 3, 2, \color{red}{4}]\);

Найдите лексикографически минимальную возможную последовательность элементов в деке после того, как будет обработана вся перестановка.

Последовательность \([x_1, x_2, \ldots, x_n]\) лексикографически меньше последовательности \([y_1, y_2, \ldots, y_n]\), если существует такое \(i \leq n\), что \(x_1 = y_1\), \(x_2 = y_2\), \(\ldots\), \(x_{i - 1} = y_{i - 1}\) и \(x_i < y_i\). Иными словами, если последовательности \(x\) и \(y\) имеют некоторое (возможно, пустое) совпадающее начало, а следующий элемент последовательности \(x\) строго меньше соответствующего элемента последовательности \(y\). Например, последовательность \([1, 3, 2, 4]\) меньше последовательности \([1, 3, 4, 2]\), так как после совпадающего начала \([1, 3]\) в первой последовательности идет меньшее число (\(2\)), чем во второй (\(4\)).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки, а во второй строке через пробел перечислены \(n\) целых чисел \(p_i\) (\(1 \le p_i \le n\); все \(p_i\) различны) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите через пробел \(n\) чисел — элементы лексикографически минимальной перестановки, которую возможно получить в деке после выполнения описанного алгоритма.

Примечание

Один из способов получить лексикографически минимальную перестановку \([1, 3, 2, 4]\) из перестановки \([3, 1, 2, 4]\) (первый набор входных данных из примера) описан в условии задачи.

E2. Оптимизация массива деком

жадные алгоритмы Структуры данных *1700

На самом деле, задачи E1 и E2 не имеют много общего. Вероятно, вам надо воспринимать их как две отдельные задачи.

Дан массив целых чисел \(a[1 \ldots n] = [a_1, a_2, \ldots, a_n]\).

Рассмотрим пустой дек (двухстороннюю очередь). Дек — это структура данных, поддерживающая добавление элементов как в начало, так и в конец. Так, если сейчас в деке лежат элементы \([3, 4, 4]\), при добавлении элемента \(1\) в начало получится последовательность \([\color{red}{1}, 3, 4, 4]\), а при добавлении в конец — \([3, 4, 4, \color{red}{1}]\).

Элементы массива по очереди перемещаются в изначально пустой дек, начиная с \(a_1\) и заканчивая \(a_n\). Перед добавлением каждого элемента в дек разрешается выбрать, добавить его в начало или в конец.

Например, если рассмотреть массив \(a = [3, 7, 5, 5]\), то одна из возможных последовательностей действий выглядит так:

\(\quad\) 1.положить \(3\) в начало дека:в деке лежит \([\color{red}{3}]\);
\(\quad\) 2.положить \(7\) в конец дека:в деке лежит \([3, \color{red}{7}]\);
\(\quad\) 3.положить \(5\) в конец дека:в деке лежит \([3, 7, \color{red}{5}]\);
\(\quad\) 4.положить \(5\) в начало дека:в деке лежит \([\color{red}{5}, 3, 7, 5]\);

Определите, какое минимальное число инверсий может быть в деке после того, как будет обработан весь массив.

Инверсией в последовательности \(d\) называется пара индексов \((i, j)\) такая, что \(i < j\) и \(d_i > d_j\). Например, в массиве \(d = [5, 3, 7, 5]\) ровно две инверсии — \((1, 2)\) и \((3, 4)\), так как \(d_1 = 5 > 3 = d_2\) и \(d_3 = 7 > 5 = d_4\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива, а во второй строке через пробел перечислены \(n\) целых чисел \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите одно целое число — минимальное возможное количество инверсий, которое может быть в последовательности, находящейся в деке, после выполнения описанного алгоритма.

Примечание

Один из способов получить в деке из последовательности \([3, 7, 5, 5]\) (первый набор входных данных из примера) последовательность \([5, 3, 7, 5]\), содержащую только две инверсии, описан в условии задачи.

Также в этом примере можно было получить две инверсии, просто положив каждый элемент исходного массива в конец дека. В таком случае в деке будет лежать исходная последовательность \([3, 7, 5, 5]\), также содержащая ровно две инверсии.

B. Такси

*особая задача жадные алгоритмы реализация *1100

После окончания уроков n групп школьников вышли на улицу и собрались ехать домой к Поликарпу на празднование его дня рождения. Известно, что i-ая группа состоит из si друзей (1 ≤ si ≤ 4), которые не хотят расставаться по пути к Поликарпу. Решено ехать на такси. Каждая машина может вместить не более четырех пассажиров. Какое минимальное количество машин потребуется школьникам, если каждая группа должна целиком находиться в одной из машин такси (но одна машина может вмещать более чем одну группу)?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество групп школьников. Вторая строка содержит последовательность целых чисел s1, s2, ..., sn (1 ≤ si ≤ 4). Числа записаны через пробел, si — количество ребят в i-ой группе.

Выходные данные

Выведите единственное число — минимальное необходимое количество такси, чтобы отвезти всех ребят к Поликарпу.

Примечание

В первом тесте возможно следующее распределение по четырем машинам:

  • третья группа (из четырех школьников),
  • четвертая группа (из трех школьников),
  • пятая группа (из трех школьников),
  • первая и вторая группы (из одного и двух школьников соответственно).

Существуют и другие способы расположиться в четырех машинах.

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

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]\).

B. Диаметр графа

графы жадные алгоритмы Конструктив математика *1200

CQXYM хочет построить связный неориентированный граф на \(n\) вершинах с \(m\) ребер и диаметром, строго меньшим \(k-1\).

Также CQXYM не хочет, чтобы граф имел петли или кратные ребра (то есть каждое ребро соединяет две различные вершины, между любой парой вершин проведено не более чем одно ребро).

Диаметр графа — это максимальное расстояние между любыми двумя его вершинами.

Расстояние между двумя вершинами — наименьшее количество ребер в пути, концами которого являются эти вершины.

CQXYM задается вопросом, можно ли построить такой граф.

Входные данные

Входные данные состоят из нескольких тестовых примеров.

Первая строка содержит целое число \(t (1 \leq t \leq 10^5)\) — количество тестовых примеров. Ниже приводится описание тестовых случаев.

Единственная для каждого тестового случая строка содержит три целых числа: \(n(1 \leq n \leq 10^9)\), \(m\), \(k\) \((0 \leq m,k \leq 10^9)\).

Выходные данные

Для каждого тестового случая выведите YES, если построить граф возможно, и NO в противном случае. Вы можете выводить буквы в любом регистре (верхнем или нижнем).

Примечание

В первом тестовом случае диаметр графа равен 0.

Во втором случае диаметр графа может быть только 2.

В третьем случае диаметр графа может быть только 1.

C. Баба Капа вяжет шарф

жадные алгоритмы Перебор Строки Структуры данных *1200

Баба Капа решила связать шарф и попросила Деда Шера сделать для него шаблон, представляющий собой строку из строчных букв латинского алфавита. Деда Шер написал строку \(s\) длины \(n\).

Баба Капа хочет связать красивый шарф, а по ее мнению красивый шарф можно связать только из строки, являющейся палиндромом. Она хочет изменить шаблон, написанный Дедой Шером, но, чтобы его сильно не обидеть, она выберет одну любую строчную букву латинского алфавита и уберет какие-то (на свой выбор, возможно никакие или все) вхождения этой буквы в строку \(s\).

При этом она хочет, чтобы количество удаленных из шаблона символов было как можно меньше. Помогите ей и скажите, какое минимальное количество символов она может удалить, чтобы строка \(s\) стала палиндромом, или скажите, что это невозможно. Заметьте, что она может удалять только символы, равные одной букве, которую она выбрала.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки 'kek', 'abacaba', 'r' и 'papicipap' — палиндромы, а строки 'abb' и 'iq' — нет.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описание наборов входных данных. Описание каждого набора входных данных состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки.

Вторая строка описания каждого набора входных данных содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов, которое потребуется удалить Бабе Капе, чтобы строка стала палиндромом, если это возможно, а если невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных можно выбрать букву 'a' и удалить ее первое и последнее вхождение, получится строка 'bcaacb', являющаяся палиндромом. Также можно выбрать букву 'b' и удалить все ее вхождения, получится строка 'acaaca', также являющаяся палиндромом.

Во втором наборе входных данных можно показать, что нельзя выбрать букву и удалить какие-то ее вхождения так, чтобы получилась строка-палиндром.

В третьем наборе входных данных можно ничего не удалять, строка и так является палиндромом.

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]\)

D. Омкар и смысл жизни

жадные алгоритмы интерактив Конструктив *1800

Оказывается, смысл жизни — это перестановка \(p_1, p_2, \ldots, p_n\) целых чисел \(1, 2, \ldots, n\) (\(2 \leq n \leq 100\)). Омкар, создавший все живое, знает эту перестановку и позволит вам выяснить ее с помощью некоторых запросов.

Запрос состоит из массива \(a_1, a_2, \ldots, a_n\) целых чисел от \(1\) до \(n\). \(a\) — это не обязательно перестановка. Омкар сначала вычислит попарную сумму \(a\) и \(p\), то есть вычислит массив \(s\), где \(s_j = p_j + a_j\) для всех \(j = 1, 2, \ldots, n\). Затем он найдет наименьший индекс \(k\) такой, что \(s_k\) встречается в \(s\) более одного раза, и скажет вам \(k\). Если такого индекса \(k\) не существует, то он скажем вам \(0\).

Можно выполнить не более \(2n\) запросов. Выясните смысл жизни \(p\).

Протокол взаимодействия

Начните взаимодействие с чтения одного целого числа \(n\) (\(2 \leq n \leq 100\))  — длины перестановки \(p\).

Затем вы можете делать запросы. Запрос состоит из одной строки «\(? \enspace a_1 \enspace a_2 \enspace \ldots \enspace a_n\)» (\(1 \leq a_j \leq n\)).

Ответом на каждый запрос будет одно целое число \(k\), как описано выше (\(0 \leq k \leq n\)).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Чтобы вывести ответ, выведите одну строку «\(! \enspace p_1 \enspace p_2 \enspace \ldots \enspace p_n\)» затем завершите работу.

Вы можете сделать не более \(2n\) запросов. Вывод ответа не считается запросом.

Формат взлома

Для взлома сначала выведите строку, содержащую \(n\) (\(2 \leq n \leq 100\)), затем выведите другую строку, содержащую скрытую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\).

Примечание

В примере скрытая перестановка \(p\) равна \([3, 2, 1, 5, 4]\). Было сделано три запроса.

Первый запрос — \(a = [4, 4, 2, 3, 2]\). Это дает \(s = [3 + 4, 2 + 4, 1 + 2, 5 + 3, 4 + 2] = [7, 6, 3, 8, 6]\). \(6\) — единственное число, которое встречается более одного раза, и впервые оно появляется на индексе \(2\), что делает ответ на запрос \(2\).

Второй запрос — \(a = [3, 5, 1, 5, 5]\). Это дает \(s = [3 + 3, 2 + 5, 1 + 1, 5 + 5, 4 + 5] = [6, 7, 2, 10, 9]\). Здесь нет чисел, которые встречаются более одного раза, поэтому ответ на запрос — \(0\).

Третий запрос — \(a = [5, 2, 4, 3, 1]\). Это дает \(s = [3 + 5, 2 + 2, 1 + 4, 5 + 3, 4 + 1] = [8, 4, 5, 8, 5]\). \(5\) и \(8\) встречаются здесь более одного раза. \(5\) впервые появляется на индексе \(3\), а \(8\) впервые появляется на индексе \(1\), причем \(1 < 3\), что делает ответ на запрос \(1\).

Обратите внимание, что пример приведен только для того, чтобы показать, как работает взаимодействие; не гарантируется, что приведенные выше запросы представляют собой правильную стратегию, с помощью которой можно определить ответ.

E. Момент цветения

графы Деревья жадные алгоритмы Конструктив Паросочетания поиск в глубину и подобное *2200

Она делает все возможное, чтобы безупречно провести последний обряд человека и сохранить баланс инь и ян в мире.

Ху Тао, будучи маленькой проказницей, попыталась напугать вас этой задачей с графом! Вам дан связный неориентированный граф из \(n\) вершин с \(m\) ребрами. У вас также есть \(q\) запросов. Каждый запрос состоит из двух вершин \(a\) и \(b\).

Изначально все ребра графа имеют вес \(0\). Для каждого запроса вы должны выбрать простой путь, начинающийся из \(a\) и заканчивающийся в \(b\). Затем к весу каждого ребра вдоль этого пути добавляется \(1\). Определите, возможно ли, чтобы после обработки всех \(q\) запросов все ребра в этом графе имели четный вес. Если да, то выведите выбор путей для каждого запроса.

Если это невозможно, определите наименьшее количество дополнительных запросов, которые можно добавить, чтобы это стало возможным. Можно показать, что при заданных ограничениях это число не превысит \(10^{18}\).

Простой путь определяется как любой путь, который не посещает вершину более одного раза.

Считается, что ребро имеет четный вес, если его значение кратно \(2\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 3 \cdot 10^5\), \(n-1 \leq m \leq \min{\left(\frac{n(n-1)}{2}, 3 \cdot 10^5\right)}\)).

Каждая из следующих \(m\) строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x, y \leq n\), \(x\neq y\)), указывающих на неориентированное ребро между вершинами \(x\) и \(y\). Входные данные не будут содержать петель или дублирующихся ребер, и полученный граф будет связным.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 3 \cdot 10^5\)).

Каждая из следующих \(q\) строк содержит два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq n, a \neq b\)), описание каждого запроса.

Гарантируется, что \(nq \leq 3 \cdot 10^5\).

Выходные данные

Если можно заставить все веса ребер быть четными, выведите «YES» в первой строке, а затем \(2q\) строк, указывающих выбор пути для каждого запроса в том же порядке, в котором задаются запросы. Для каждого запроса первая строка должна содержать одно целое число \(x\): количество узлов в выбранном пути. Следующая строка должна содержать \(x\) целых чисел \(p_i\), указывающих выбранный путь (\(p_1 = a, p_x = b\) и все числа должны лежать между \(1\) и \(n\)). Этот путь не может содержать одну вершину более одного раза и должен быть корректным простым путем в графе.

Если невозможно заставить все веса ребер быть четными, выведите «NO» в первой строке и минимальное количество запросов, которые нужно добавить, во второй строке.

Примечание

Вот как выглядят запросы для первого примера (красный цвет соответствует 1-му запросу, синий — 2-му, а зеленый — 3-му):

Обратите внимание, что каждое ребро в графе входит либо в \(0\), либо в \(2\) цветных пути.

Граф во втором примере выглядит следующим образом:

Не существует такого назначения путей, которое заставит все ребра иметь четные веса при заданных запросах. Чтобы получить набор запросов, удовлетворяющих условию, нужно добавить по крайней мере \(2\) новых запроса.

B. Покраска прямоугольников

жадные алгоритмы математика *1000

У Васи есть красный клетчатый прямоугольник размера \(n \times m\). Но он ему не нравится. Поэтому Вася несколько раз разрежет исходный или любой другой, получившийся в ходе разрезания, прямоугольник на две части вдоль одной из линий сетки. Он может сделать эту операцию сколько угодно раз.

В результате он получит набор прямоугольников. Прямоугольники \(1 \times 1\) запрещены.

Еще Вася умеет красить клеточки в синий цвет. Он хочет, чтобы каждый прямоугольник из набора был раскрашен так, что соседние по стороне клетки имели разные цвета.

Какое минимальное количество клеточек Васе придется покрасить?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Единственная строка описания каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \leq n, m \leq 3 \cdot 10^4\), \(n \cdot m \geq 2\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество клеток, которое придется покрасить Васе.

Примечание

Приведенные ниже картинки показывают, как прямоугольник может быть разрезан, и какие клетки могут быть покрашены синим после этого.

В первом наборе входных данных:

Во втором наборе входных данных:

В третьем наборе входных данных:

В четвертом наборе входных данных:

C. Два массива

жадные алгоритмы математика сортировки *900

Вам даны два массива из целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\).

Определим следующее преобразование массива \(a\):

  1. Выберите любое целое неотрицательное число \(k\), удовлетворяющее условию \(0 \le k \le n\).
  2. Выберите \(k\) различных индексов \(1 \le i_1 < i_2 < \ldots < i_k \le n\).
  3. Прибавьте \(1\) ко всем элементам \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\), остальные элементы массива \(a\) остаются неизменными.
  4. Переставьте элементы массива \(a\) в любом порядке.

Можно ли применить какое-то преобразование массива \(a\) ровно один раз, и получить массив, равный \(b\)?

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 100\)) — длину массивов \(a\) и \(b\).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100 \le a_i \le 100\)).

Третья строка описания каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-100 \le b_i \le 100\)).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует такое преобразование массива \(a\), в результате которого получится массив, равный \(b\). Выведите «NO» (без кавычек) иначе.

Можно выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно сделать следующее преобразование:

  • Выбираем \(k = 2\).
  • Выбираем \(i_1 = 1\), \(i_2 = 2\).
  • Добавляем \(1\) к \(a_1\) and \(a_2\). В результате получится массив \([0, 2, 0]\).
  • Меняем элементы на второй и третьей позициях.

Во втором наборе входных данных нет подходящего преобразования.

В третьем наборе можно выбрать \(k = 0\) и не менять порядок элементов.

E. Игра с камнями

Бинарный поиск жадные алгоритмы игры Структуры данных *2300

Боб решил отдохнуть от домашних заданий по матанализу и придумал для себя игру.

Игра происходит на последовательности куч камней, которая может быть представлена как массив \(s_1, \ldots, s_k\), где \(s_i\) — количество камней в \(i\)-й куче. За один ход Боб выбирает две соседние непустые кучи \(i\) и \(i+1\) и убирает по одному камню из каждой. Если куча стала пустой, то её соседи не становятся соседними. Игра заканчивается, когда у Боба нет доступных ходов. Боб считает, что он выиграл, если в конце игры все кучи стали пустыми.

Мы считаем последовательность куч выигрышной, если Боб может начать с неё и выиграть после некоторой последовательности ходов.

Вам дана последовательность \(a_1, \ldots, a_n\), посчитайте количество выигрышных подотрезков \(a\). Другими словами, найдите количество отрезков \([l, r]\) (\(1 \leq l \leq r \leq n\)) таких, что \(a_l, a_{l+1}, \ldots, a_r\) является выигрышной последовательностью куч.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^5\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом наборе входных данных Боб не может выиграть с подотрезками длины \(1\), так как нет ни одной пары соседних куч для массива длины \(1\).

Во втором наборе входных данных каждый подотрезок не является выигрышным.

В четвертом наборе входных данных подотрезок \([1, 4]\) выигрышный, потому что Боб может сделать ходы со следующими парами соседних кучек: \((2, 3)\), \((1, 2)\), \((3, 4)\). Другой выигрышный подотрезок это \([2, 3]\).

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\).

Во втором наборе входных данных множества символов строк не пересекаются, поэтому никакая непустая строка не может быть общей подпоследовательностью.

B. Выворачивание массива

жадные алгоритмы *900

Вам дан массив \(a\) длины \(n\).

Определим операцию выворачивания массива. Положим значение \(x = a_n\). Далее массив \(a\) делится на две части: левую и правую. Левая часть содержит элементы массива \(a\), которые не больше \(x\) (\(\le x\)), а правая — элементы массива \(a\), строго большие \(x\) (\(> x\)). Относительный порядок элементов в частях остается таким же, как до выворачивания, то есть разделение выполняется стабильно. Затем части склеиваются: слева левая, справа правая.

Например, если \(a\) равен \([2, 4, 1, 5, 3]\), то выворачивание происходит так: \([2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]\).

Мы будем применять операцию выворачивания к массиву \(a\) много раз. Можно показать, что после нескольких операций массив \(a\) больше не будет меняться. Выведите наименьшее число \(k\) такое, что после \(k\) выворачиваний массив больше не будет меняться.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора находится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке набора находятся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных требуется вывести единственное число \(k\) — наименьшее количество выворачиваний, после которых массив не будет меняться.

Примечание

Рассмотрим первый пример.

  • Первое выворачивание: \(a = [1, 4, 2, 5, 3]\), \(x = 3\). \([2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]\).
  • Второе и последующие выворачивании: \(a = [2, 1, 3, 4, 5]\), \(x = 5\). \([2, 1, 3, 4, 5] \to [2, 1, 3, 4, 5], [] \to [2, 1, 3, 4, 5]\). Эти выворачивания не меняют массив, поэтому ответ \(1\).

Рассмотрим второй пример.

  • Первое выворачивание: \(a = [5, 3, 2, 4, 1]\), \(x = 1\). \([5, 3, 2, 4, 1] \to [1], [5, 3, 2, 4] \to [1, 5, 3, 2, 4]\).
  • Второе выворачивание: \(a = [1, 5, 3, 2, 4]\), \(x = 4\). \([1, 5, 3, 2, 4] \to [1, 3, 2, 4], [5] \to [1, 3, 2, 4, 5]\).
  • Третье и последующие выворачивании: \(a = [1, 3, 2, 4, 5]\), \(x = 5\). \([1, 3, 2, 4, 5] \to [1, 3, 2, 4, 5], [] \to [1, 3, 2, 4, 5]\). Эти выворачивания не меняют массив, поэтому ответ \(2\).

C. Минимизируйте расстояние

жадные алгоритмы *1300

На числовой прямой расположены \(n\) складов. Склад номер \(i\) находится в точке \(x_i\) для всех \(1 \le i \le n\).

У вас есть \(n\) коробок с товарами, которые нужно доставить по одной в каждый из \(n\) складов. Вы и все \(n\) коробок изначально находитесь в начале координат, точке \(0\). Одновременно вы можете переносить не более \(k\) коробок. Вы должны брать по несколько коробок из начала координат, доставлять их по складам, и возвращаться в начало координат для следующей партии коробок.

Вычислите минимальное расстояние, которое вам нужно пройти, чтобы доставить все коробки по складам. Вы не обязаны возвращаться в начало координат после того, как доставите все коробки.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,500\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(-10^9 \le x_i \le 10^9\)). Может оказаться, что некоторые склады находятся в одинаковых точках на прямой.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное расстояние, которое вы должны пройти, чтобы доставить все коробки по складам.

Примечание

В первом примере вы можете носить только по одной коробке. Поэтому один из путей, минимизирующий расстояние, такой: \(0 \to 2 \to 0 \to 4 \to 0 \to 3 \to 0 \to 1 \to 0 \to 5\), где каждый \(0\) обозначает, что вы идете в начало координат и забираете одну коробку, а каждое положительное число означает доставку коробки в склад в соответствующей координате. Общее расстояние равно \(25\). Существуют и другие оптимальные решения.

Во втором примере одно из оптимальных решение такое: \(0 \to 6 \to 8 \to 7 \to 0 \to 5 \to 4 \to 3 \to 0 \to (-5) \to (-10) \to (-15)\), общее расстояние равно \(41\). Можно показать, что \(41\) — минимальное возможное расстояние в этом примере.

A. Друзья или нет?

*особая задача жадные алгоритмы реализация *1400

У Поликарпа есть хобби — он разрабатывает необычную социальную сеть. Работа почти закончена, осталось только реализовать модуль, определяющий друзей. Да-да, в этой социальной сети не придется добавлять друзей вручную! Определение пар друзей осуществляется следующим образом. Пусть пользователь A написал сообщение пользователю B в момент t1, а пользователь B написал сообщение пользователю A в момент t2. Если 0 < t2 - t1 ≤ d, тогда сообщение пользователя B было ответом на сообщение пользователя A. Пользователи A и B считаются друзьями, если A ответил хотя бы на одно сообщение B или B ответил хотя бы на одно сообщение A.

Вам дан журнал переписки в хронологическом порядке и число d. Найдите все пары пользователей, которые будут считаться друзьями.

Входные данные

В первой строке входных данных записаны два целых числа n и d (1 ≤ n, d ≤ 1000). В n следующих строках задан журнал переписки. В i-ой строке записана строка журнала в виде «Ai Bi ti» (без кавычек), означающая, что пользователь Ai послал сообщение пользователю Bi в момент времени ti (1 ≤ i ≤ n). Здесь Ai и Bi — непустые строки, состоящие из строчных латинских букв, длиной не более 20 символов, ti — целое число (0 ≤ ti ≤ 10000). Гарантируется, что строки журнала заданы в порядке неубывания ti, и никакой пользователь не присылал сообщения самому себе. Элементы в строках разделяются единичными пробелами.

Выходные данные

В первую строку выведите целое число k — количество пар друзей. В следующих k строках выведите пары друзей в виде «Ai Bi» (без кавычек). Как пользователей в парах, так и сами пары можно выводить в любом порядке. Каждая пара должна быть выведена ровно один раз.

Примечание

В первом примере Вася и Петя — друзья, потому что времена отправки их сообщений отличаются на единицу, а Аня и Иван — нет, потому что времена отправки их сообщений отличаются больше чем на единицу.

B. На вкус и цвет фломастеры разные

*особая задача жадные алгоритмы сортировки *1100

У Поликарпа есть n фломастеров и m колпачков для фломастеров. Каждый фломастер характеризуется двумя числами: xi — цвет и yi — диаметр. Соответственно, каждый колпачок характеризуется двумя числами: aj — цвет и bj — диаметр. Колпачком (aj, bj) можно закрыть фломастер (xi, yi) только в том случае, если их диаметры совпадают, то есть bj = yi. При этом фломастер считается красиво закрытым, если цвет колпачка и фломастера совпадают, то есть aj = xi.

Найдите способ закрыть максимальное количество фломастеров. Если таких способов несколько, выберите из них такой, при котором количество красиво закрытых фломастеров максимально.

Входные данные

В первой строке входных данных записаны два целых числа n и m через пробел (1 ≤ n, m ≤ 105) — количество фломастеров и количество колпачков, соответственно.

В следующих n строках описаны фломастеры. В i-ой строке записаны через пробел два целых числа xi, yi (1 ≤ xi, yi ≤ 1000) — цвет i-го фломастера и его диаметр, соответственно.

В следующих m строках описаны колпачки. В j-ой строке записаны через пробел два целых числа aj, bj (1 ≤ aj, bj ≤ 1000) — цвет j-го колпачка и его диаметр, соответственно.

Выходные данные

Выведите два целых числа u, v через пробел, где u — количество закрытых фломастеров, а v — количество красиво закрытых фломастеров в искомом оптимальном способе. Помните, что необходимо найти способ закрыть максимальное количество фломастеров, а если таких способов несколько, выбрать из них тот, при котором количество красиво закрытых фломастеров максимально.

Примечание

В первом тестовом примере первый фломастер нужно закрыть четвертым колпачком, второй фломастер — первым, а третий фломастер — вторым. Таким образом, закрыты будут три фломастера, красиво закрыты — два, первый и третий.

E. Зебробашня

*особая задача жадные алгоритмы сортировки Структуры данных *1700

Маленькая Танечка любит играть в кубики. Вообще-то она любит играть во что угодно, будь то кубики или тессеракты, лишь бы это «что угодно» было разноцветное. Каждый кубик характеризуется двумя параметрами — цвет ci и размер si. Зебробашней называется башня, состоящая из кубиков ровно двух цветов, причем цвета кубиков в башне должны чередоваться (цвета соседних должны отличаться). В Зебробашне должно быть не менее двух кубиков. Каких-либо других ограничений нет. Ниже на рисунке изображен пример Зебробашни.

Высота Зебробашни — это сумма размеров всех кубиков, которые в нее входят. Помогите маленькой Танечке построить Зебробашню наибольшей возможной высоты, используя имеющиеся кубики.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество кубиков. В следующих n строках заданы описания кубиков, по одному описанию в строке. Описание кубика состоит из записанных через пробел двух целых чисел ci и si (1 ≤ ci, si ≤ 109) — цвет i-го кубика и его размер, соответственно. Гарантируется, что существует хотя бы два кубика, цвета которых различны.

Выходные данные

Выведите описание Зебробашни максимальной возможной высоты в следующем формате. В первую строку выведите высоту башни, во вторую строку — количество кубиков в ней, в третью — номера кубиков в башне в порядке их перечисления снизу вверх, разделенные одиночными пробелами. Считайте кубики пронумерованными от 1 до n в том порядке, в котором они были заданы во входных данных.

Если существует несколько Зебробашен максимальной высоты, разрешается вывести любую из них.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Геймер Хемосе

Бинарный поиск жадные алгоритмы математика сортировки *800

Однажды Ахмед Хоссам пришел к Хемосе и сказал: «Давай порешаем контест с тренировок!». Хемосе не хотел этого делать, так как он играл в Valorant, поэтому он придумал задачу и рассказал ее Ахмеду, чтобы отвлечь его. К сожалению, Ахмед не может ее решить... Не могли бы вы ему помочь?

В игре Valorant есть Агент, и у него есть \(n\) оружий. \(i\)-е оружие имеет значение урона \(a_i\), и Агент столкнется с врагом, чье здоровье равно \(H\).

Агент будет делать один или больше ходов, пока враг не умрет.

За один ход Агент выбирает оружие и уменьшает здоровье врага на величину урона этого оружия. Враг умрет, когда его здоровье станет меньше или равно \(0\). Однако не все так просто: Агент не может использовать одно и то же оружие \(2\) раза подряд.

Какое минимальное количество раз Агенту нужно использовать оружие, чтобы убить врага?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) \((1 \leq t \leq 10^5)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(H\) \((2 \leq n \leq 10^3, 1 \leq H \leq 10^9)\) — количество доступного оружия и начальное значение здоровья врага.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 10^9)\) — значения урона оружий.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество раз, которое Агент должен будет использовать оружие, чтобы убить врага.

Примечание

В первом наборе входных данных Агент может использовать второе оружие, в результате чего здоровье врага становится равным \(4-7=-3\). \(-3 \le 0\), поэтому враг мертв, и использования оружия \(1\) раз было достаточно.

Во втором наборе входных данных Агент может использовать сначала первое оружие, а затем второе. После этого здоровье врага упадет до \(6-4-2 = 0\), то есть он будет убит после использования оружия \(2\) раза.

В третьем наборе входных данных Агент может использовать оружия в порядке (третье, первое, третье), уменьшая значение здоровья врага до \(11 - 7 - 2 - 7 = -5\) после использования оружия \(3\) раза. Обратите внимание, что мы не можем убить врага, используя третье оружие дважды, поскольку даже хотя \(11-7-7<0\), одно и то же оружие не разрешается использовать дважды подряд.

E. Скучающий Бакри

битмаски жадные алгоритмы математика *2400

Бакри надоело решать задачи, связанные с xor, поэтому он попросил вас решить для него эту задачу.

Вам дан массив \(a\) из \(n\) целых чисел \([a_1, a_2, \ldots, a_n]\).

Назовем подмассив \(a_{l}, a_{l+1}, a_{l+2}, \ldots, a_r\) хорошим, если \(a_l \, \& \, a_{l+1} \, \& \, a_{l+2} \, \ldots \, \& \, a_r > a_l \oplus a_{l+1} \oplus a_{l+2} \ldots \oplus a_r\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, \(\&\) обозначает операцию побитового И.

Найдите длину самого длинного хорошего подмассива \(a\), или определите, что такого подмассива не существует.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива.

Выходные данные

Выведите одно целое число — длину самого длинного хорошего подмассива. Если хороших подмассивов нет, выведите \(0\).

Примечание

В первом случае ответ равен \(2\), так как весь массив хороший: \(5 \& 6 = 4 > 5 \oplus 6 = 3\).

В третьем случае ответ равен \(4\), и один из самых длинных хороших подмассивов - \([a_2, a_3, a_4, a_5]\): \(1\& 3 \& 3 \&1 = 1 > 1\oplus 3 \oplus 3\oplus 1 = 0\).

F1. Алиса и перекрашивание 1

жадные алгоритмы Конструктив *2600

Разница между версиями заключается в стоимости операций. Решение для одной версии не будет работать для другой!

У Алисы есть таблица размером \(n \times m\), изначально все ее клетки окрашены в белый цвет. Клетка на пересечении \(i\)-й строки и \(j\)-го столбца обозначается как \((i, j)\). Алиса может выполнять следующие операции:

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, 1)\), и инвертировать цвета всех его клеток. (Инвертировать означает изменить цвет клетки с белого на черный или с черного на белый).

    Эта операция стоит \(1\) монету.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, 1)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(2\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(4\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(3\) монеты.

Напомним, что подпрямоугольник — это все клетки \((x, y)\) с \(x_1 \le x \le x_2\), \(y_1 \le y \le y_2\) для некоторых \(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le m\).

Алиса хочет получить свою любимую раскраску с помощью этих операций. Какое наименьшее количество монет ей придется потратить? Можно показать, что всегда можно преобразовать исходную таблицу в любую другую.

Входные данные

Первая строка ввода содержит \(2\) целых числа \(n, m\) (\(1 \le n, m \le 500\)) — размеры таблицы.

В \(i\)-й из следующих \(n\) строк содержится строка \(s_i\) длины \(m\), состоящая из букв W и B. \(j\)-й символ строки \(s_i\) - W, если клетка \((i, j)\) окрашена в белый цвет в любимой раскраске Алисы, и B, если она окрашена в черный цвет.

Выходные данные

Выведите наименьшее количество монет, которое Алиса должна будет потратить, чтобы получить свою любимую раскраску.

Примечание

В первом примере оптимально просто применить четвертую операцию один раз к прямоугольнику, содержащему клетки \((2, 2), (2, 3), (3, 2), (3, 3)\). Это обойдется в \(3\) монеты.

F2. Алиса и перекрашивание 2

жадные алгоритмы Конструктив Паросочетания Потоки *2800

Разница между версиями заключается в стоимости операций. Решение для одной версии не будет работать для другой!

У Алисы есть таблица размером \(n \times m\), изначально все ее клетки окрашены в белый цвет. Клетка на пересечении \(i\)-й строки и \(j\)-го столбца обозначается как \((i, j)\). Алиса может выполнять следующие операции:

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, 1)\), и инвертировать цвета всех его клеток. (Инвертировать означает изменить цвет клетки с белого на черный или с черного на белый).

    Эта операция стоит \(1\) монету.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, 1)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(3\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(4\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(2\) монеты.

Напомним, что подпрямоугольник — это все клетки \((x, y)\) с \(x_1 \le x \le x_2\), \(y_1 \le y \le y_2\) для некоторых \(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le m\).

Алиса хочет получить свою любимую раскраску с помощью этих операций. Какое наименьшее количество монет ей придется потратить? Можно показать, что всегда можно преобразовать исходную таблицу в любую другую.

Входные данные

Первая строка ввода содержит \(2\) целых числа \(n, m\) (\(1 \le n, m \le 500\)) — размеры таблицы.

В \(i\)-й из следующих \(n\) строк содержится строка \(s_i\) длины \(m\), состоящая из букв W и B. \(j\)-й символ строки \(s_i\) - W, если клетка \((i, j)\) окрашена в белый цвет в любимой раскраске Алисы, и B, если она окрашена в черный цвет.

Выходные данные

Выведите наименьшее количество монет, которое Алиса должна будет потратить, чтобы получить свою любимую раскраску.

Примечание

В первом примере оптимально просто применить четвертую операцию один раз к прямоугольнику, содержащему клетки \((2, 2), (2, 3), (3, 2), (3, 3)\). Это обойдется в \(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\).

C. Спасти больше мышек

Бинарный поиск жадные алгоритмы жадные алгоритмы *1000

На координатной прямой находятся одна кошка, \(k\) мышек и одна норка. Кошка находится в точке \(0\), а норка в точке \(n\). Все мышки находятся между кошкой и норкой: \(i\)-я мышка расположена в точке \(x_i\) (\(0 < x_i < n\)), в одной точке может находиться много мышек.

За одну единицу времени происходит следующее. Сначала ровно одна любая мышка передвигается вправо на \(1\). Если эта мышка оказалась в норке, то она в ней прячется (т. е. больше никуда данная мышка передвигаться не будет и кошка не сможет её съесть). Затем (после того, как мышка завершила своё передвижение) кошка передвигается вправо на \(1\). Если в точке назначения кошки есть мышки, то кошка их съедает (они затем передвигаться не смогут). Процесс продолжается до тех пор, пока каждая мышка не будет спрятана или съедена.

Иными словами, сначала ход делает одна из мышек. Если мышка спряталась в норке, то она спаслась. Затем кошка делает ход. Кошка съедает тех мышек, которые находятся в точке, куда она сделала ход (если кошка «приземлилась» в норке, то она никого не съедает).

Каждую единицу времени вы можете выбрать мышку, которая в этот момент времени будет передвигаться. Какое максимальное количество мышек может добраться до норки, не будучи съеденными?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\), \(1 \le k \le 4 \cdot 10^5\)). Вторая строка содержит \(k\) целых чисел \(x_1, x_2, \dots x_k\) (\(1 \le x_i < n\)) — исходные координаты мышек.

Гарантируется, что сумма всех \(k\), заданных во входных данных, не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно число \(m\) (\(m \ge 0\)) — максимальное количество мышек, которые могут добраться до норки, не будучи съеденными.

C. Спасти больше мышек

Бинарный поиск жадные алгоритмы жадные алгоритмы *1000

На координатной прямой находятся одна кошка, \(k\) мышек и одна норка. Кошка находится в точке \(0\), а норка в точке \(n\). Все мышки находятся между кошкой и норкой: \(i\)-я мышка расположена в точке \(x_i\) (\(0 < x_i < n\)), в одной точке может находиться много мышек.

За одну единицу времени происходит следующее. Сначала ровно одна любая мышка передвигается вправо на \(1\). Если эта мышка оказалась в норке, то она в ней прячется (т. е. больше никуда данная мышка передвигаться не будет и кошка не сможет её съесть). Затем (после того, как мышка завершила своё передвижение) кошка передвигается вправо на \(1\). Если в точке назначения кошки есть мышки, то кошка их съедает (они затем передвигаться не смогут). Процесс продолжается до тех пор, пока каждая мышка не будет спрятана или съедена.

Иными словами, сначала ход делает одна из мышек. Если мышка спряталась в норке, то она спаслась. Затем кошка делает ход. Кошка съедает тех мышек, которые находятся в точке, куда она сделала ход (если кошка «приземлилась» в норке, то она никого не съедает).

Каждую единицу времени вы можете выбрать мышку, которая в этот момент времени будет передвигаться. Какое максимальное количество мышек может добраться до норки, не будучи съеденными?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\), \(1 \le k \le 4 \cdot 10^5\)). Вторая строка содержит \(k\) целых чисел \(x_1, x_2, \dots x_k\) (\(1 \le x_i < n\)) — исходные координаты мышек.

Гарантируется, что сумма всех \(k\), заданных во входных данных, не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно число \(m\) (\(m \ge 0\)) — максимальное количество мышек, которые могут добраться до норки, не будучи съеденными.

E. Садовник и дерево

Деревья жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *1600

Дерево — это неориентированный связный граф, в котором отсутствуют циклы. В этой задаче речь идет о некорневых деревьях.

Лист дерева — это вершина, которая соединена не более чем с одной другой вершиной.

Садовник Виталий вырастил дерево из \(n\) вершин. Он решил подстричь дерево. Для этого он совершает несколько операций. За одну операцию он удаляет все листья дерева.

Пример дерева.

Например, рассмотрим дерево, изображённое на рисунке выше. На рисунке ниже приведён результат применения к дереву ровно одной операции.

Результат применения операции «удалить все листья».

Обратите внимание на особенные случаи применения операций:

  • применение операции к пустому дереву (из \(0\) вершин) не меняет его;
  • применение операции к дереву из одной вершины приводит к удалению этой вершины (т. е. одна эта вершина считается листом);
  • применение операции к дереву из двух вершин приводит к удалению обеих вершин (обе вершины считаются листьями).

Виталий применил к дереву последовательно \(k\) операций. Сколько вершин в нём осталось?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 4 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — количество вершин в дереве и количество операций. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — две вершины, которые соединены ребром. Гарантируется, что заданный граф является деревом, в нём отсутствуют петли и кратные рёбра. Гарантируется, что сумма \(n\) из всех наборов входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество вершин, которое осталось в дереве после применения \(k\) операций.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе задано дерево из двух вершин. К нему применяются \(200000\) операций. Первая удаляет обе вершины, остальные операции не изменяют дерево.

В третьем наборе входных данных дано дерево из трёх вершин. В результате применения первой операции в нём остаётся всего \(1\) вершина (с номером \(2\)), в результате второй операции дерево становится пустым.

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\) бурлей.

В третьем наборе входных данных единственный запрос описывает строку «[]», которая уже является правильной скобочной последовательностью.

C. Сделай их равными

жадные алгоритмы математика Перебор Строки *1200

У Теофаниса есть строка \(s_1 s_2 \dots s_n\) и символ \(c\). Он хочет сделать все символы своей строки равными \(c\), используя наименьшее количество операций.

За одну операцию, он может выбрать число \(x\) (\(1 \le x \le n\)) и для каждой позиции \(i\), где \(i\) не делится на \(x\), заменить \(s_i\) на \(c\).

Определите наименьшее количество операций, для того чтобы сделать все символы строки равными \(c\) и соответствующие \(x\)-ы, которые нужно выбрать.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\)) и строчная буква латинского алфавита \(c\) — длина строки \(s\) и буква, из которой должна состоять строка в результате.

Во второй строке каждого набора задана строка \(s\) из строчных букв латинского алфавита — первоначальная строка.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, сначала выведите одно целое число \(m\) — наименьшее количество операций для того, чтобы сделать все символы равными \(c\).

Далее выведите \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(1 \le x_j \le n\)) — \(x\)-ы, которые нужно использовать в заданном порядке.

Можно доказать, что при заданных ограничениях ответ всегда существует. Если существует несколько ответов, выведите любой.

Примечание

Опишем, что происходит в третьем наборе входных данных:

  1. \(x_1 = 2\): выбираем все позиции, которые не делятся на \(2\), и заменяем их, т. е. bzyx \(\rightarrow\) bzbx;
  2. \(x_2 = 3\): выбираем все позиции, которые не делятся на \(3\), и заменяем их, т. е. bzbx \(\rightarrow\) bbbb.

A. Weights

жадные алгоритмы Конструктив *2600

You are given an array \(A\) of length \(N\) weights of masses \(A_1\), \(A_2\)...\(A_N\). No two weights have the same mass. You can put every weight on one side of the balance (left or right). You don't have to put weights in order \(A_1\),...,\(A_N\). There is also a string \(S\) consisting of characters "L" and "R", meaning that after putting the \(i-th\) weight (not \(A_i\), but \(i-th\) weight of your choice) left or right side of the balance should be heavier. Find the order of putting the weights on the balance such that rules of string \(S\) are satisfied. 

Input

The first line contains one integer \(N\) (\(1 \leq N \leq 2*10^5\)) - the length of the array \(A\) The second line contains \(N\) distinct integers: \(A_1\), \(A_2\),...,\(A_N\) (\(1 \leq A_i \leq 10^9\)) - the weights given The third line contains string \(S\) of length \(N\) consisting only of letters "L" and "R" - string determining which side of the balance should be heavier after putting the \(i-th\) weight of your choice

Output

The output contains \(N\) lines. In every line, you should print one integer and one letter - integer representing the weight you are putting on the balance in that move and the letter representing the side of the balance where you are putting the weight. If there is no solution, print \(-1\).

Note

Explanation for the test case: 

after the 1st weight: 3 L (left side is heavier)

after the 2nd weight: 2 R (left side is heavier)

after the 3rd weight: 8 R (right side is heavier)

after the 4th weight: 13 L (left side is heavier)

after the 5th weight: 7 L (left side is heavier)

So, the rules given by string \(S\) are fulfilled and our order of putting the weights is correct.

J. Bob's Beautiful Array

битмаски жадные алгоритмы Перебор *2600

Bob really likes playing with arrays of numbers. That's why for his birthday, his friends bought him a really interesting machine – an array beautifier.

The array beautifier takes an array \(A\) consisting of \(N\) integers, and it outputs a new array \(B\) of length N that it constructed based on the array given to it. The array beautifier constructs the new array in the following way: it takes two numbers at different indices from the original array and writes their sum to the end of the new array. It does this step \(N\) times - resulting in an output array of length \(N\). During this process, the machine can take the same index multiple times in different steps.

Bob was very excited about the gift that his friends gave him, so he put his favorite array in the machine. However, when the machine finished, Bob was not happy with the resulting array. He misses his favorite array very much, and hopes to get it back.

Given the array that the machine outputted, help Bob find an array that could be the original array that he put in the machine. Sometimes the machine makes mistakes, so it is possible that no appropriate input array exists for the array it has outputted. In such case, let Bob know that his array is forever lost.

Input

The first line contains one positive integer \(N\) (\(2 \leq N \leq 10^3\)) – the length of Bob's array.

The second line contains \(N\) integers \(B_1\), \(B_2\), ..., \(B_N\) (\(1 \leq B_i \leq 10^6\)) – the elements of the array the machine outputted.

Output

If an appropriate input array exists, print "YES", followed by the input array \(A_1\), \(A_2\), ..., \(A_N\) (\(-10^9 \leq A_i \leq 10^9\)) in the next line. Otherwise, print "NO".

B. Вор и спички

жадные алгоритмы реализация сортировки *900

Вор пробрался на склад спичек и хочет украсть как можно больше спичек. На складе находится m контейнеров, в контейнере номер i находится ai коробок спичек, а в каждой коробке bi спичек. Все коробки имеют одинаковый размер. В рюкзак вора помещается ровно n коробок. Ваша задача найти наибольшее количество спичек, которое сможет унести вор. У него нет времени на перекладывание спичек между коробками, поэтому он просто выбирает не более n коробок так, чтобы суммарное число спичек в них было максимальным.

Входные данные

В первой строке входных данных находится число n (1 ≤ n ≤ 2·108) и число m (1 ≤ m ≤ 20). В i + 1 строке находится пара чисел ai и bi (1 ≤ ai ≤ 108, 1 ≤ bi ≤ 10). Все числа во входных данных — целые.

Выходные данные

Выведите единственное число — ответ на задачу.

A. Близнецы

жадные алгоритмы сортировки *900

Представьте себе, что у Вас есть брат или сестра-близнец. Это кажется очень необычным, что в мире есть еще один человек, который выглядит также как Вы. И даже трудно сказать хорошо это или плохо, что Вы как будто не один такой на этой планете. А если у Вас и вправду есть близнец, тогда Вы точно знаете, каково это.

Теперь представьте себе обычное утро в Вашей семье. Пока вы еще спите, мама уже собирается на работу. Она так торопилась, что чуть не забыла оставить вам, ее любимым детям, немного денег, чтобы покушать в школе в столовой. В кошельке она нашла некоторое количество монет, а именно n монет произвольных достоинств a1, a2, ..., an. Времени у нее было мало, поэтому поделить монеты она не успела. Тогда она написала записку, в которой попросила вас разделить деньги поровну.

Проснувшись, Вы нашли оставленные мамой монеты и прочитали записку. «Но зачем делить монеты поровну?» — подумали Вы, ведь Ваш близнец еще спит и ничего не узнает. Поэтому Вы решили поступить следующим образом: выбрать себе некоторое подмножество монет, так чтобы сумма достоинств взятых Вами монет оказалась строго больше, чем сумма достоинств оставшейся части монет, которая достанется Вашему близнецу. Однако, Вы справедливо решили, что если взять слишком много монет, то Ваш близнец подумает, что Вы его обманули. Поэтому, чтобы не вызывать подозрений, Вы решили взять наименьшее количество монет, сумма достоинств которых окажется строго больше суммы достоинств оставшихся. Исходя из этого, выясните, какое минимальное количество монет Вам понадобится взять, чтобы разделить их описанным образом.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100) — количество монет. Во второй строке задана последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100) — достоинства монет. Все числа разделены пробелами.

Выходные данные

В единственной строке выведите одно число — минимальное необходимое количество монет.

Примечание

В первом примере придется взять 2 монеты (суммы у Вас и Вашего близнеца равны 6, 0 соответственно). Если взять 1 монету, получим суммы 3, 3. Если взять 0 монет получим суммы 0, 6. Эти варианты Вам не подходят, потому что Ваша сумма должна быть строго больше суммы Вашего близнеца.

Во втором примере одной монетой мы снова не обойдемся. Можно выбрать монеты достоинством 1, 2, либо 2, 2. В любом случае наименьшее количество монет равно 2.

B. Несчастливый билет

жадные алгоритмы сортировки *1100

Наверное, каждый когда-нибудь ездил в общественном транспорте и оплачивал проезд. Получив свой билет (традиционно в билете четное количество цифр), многие проверяют, является ли этот билет счастливым. Напомним, что билет называется счастливым, если сумма цифр в его первой половине совпадает с суммой цифр во второй.

Но, разумеется, далеко не каждый билет счастливый. Более того, иногда, посмотрев на билет, можно сразу сказать, что счастливым он не является. Поэтому рассмотрим следующий критерий несчастливости, по которому точно можно определить несчастливый билет. Будем говорить, что билет точно не счастливый, если каждой цифре его первой половины можно сопоставить некоторую цифру второй половины так, что каждая цифра из первой половины строго меньше сопоставленной цифры из второй половины, либо каждая цифра из первой половины строго больше сопоставленной цифры из второй половины. Каждую цифру в сравнениях нужно использовать в точности один раз. Другими словами, найдется такое взаимно-однозначное соответствие между цифрами первой и второй половины билета, что либо каждая цифра первой половины окажется строго меньше соответствующей ей цифры второй половины, либо каждая цифра первой половины окажется строго больше соответствующей ей цифры второй половины.

Например, билет 2421 удовлетворяет данному критерию несчастливости и счастливым являться не будет (искомое соответствие 2 > 1 и 4 > 2), билет 0135 также удовлетворяет критерию (искомое соответствие 0 < 3 и 1 < 5), а билет 3754 критерию не удовлетворяет.

У Вас в руках находится билет, состоящий из 2n цифр. А Ваша задача — проверить, выполняется ли для него критерий несчастливости.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100). Во второй строке содержится строка, состоящая из 2n цифр, задающая Ваш билет.

Выходные данные

В первую строку выведите «YES», если билет удовлетворяет критерию несчастливости, и «NO» в противном случае (без кавычек).

E. Array Game

жадные алгоритмы игры *1900

Alice and Bob are playing a game. They are given an array \(A\) of length \(N\). The array consists of integers. They are building a sequence together. In the beginning, the sequence is empty. In one turn a player can remove a number from the left or right side of the array and append it to the sequence. The rule is that the sequence they are building must be strictly increasing. The winner is the player that makes the last move. Alice is playing first. Given the starting array, under the assumption that they both play optimally, who wins the game?

Input

The first line contains one integer \(N\) (\(1 \leq N \leq 2*10^5\)) - the length of the array \(A\).

The second line contains \(N\) integers \(A_1\), \(A_2\),...,\(A_N\) (\(0 \leq A_i \leq 10^9\))

Output

The first and only line of output consists of one string, the name of the winner. If Alice won, print "Alice", otherwise, print "Bob".

A. Уничтожение массива

битмаски жадные алгоритмы математика теория чисел *1300

Вам задан массив \(a_1, a_2, \ldots, a_n\), состоящий из неотрицательных целых чисел.

Определим операцию «уничтожения» с целочисленным параметром \(k\) (\(1 \leq k \leq n\)) следующим образом:

  • Выбираем \(k\) различных индексов массива \(1 \leq i_1 < i_2 < \ldots < i_k \le n\).
  • Вычисляем \(x = a_{i_1} ~ \& ~ a_{i_2} ~ \& ~ \ldots ~ \& ~ a_{i_k}\), где \(\&\) обозначает операцию побитового И (обратитесь к тексту в примечании для формального определения).
  • Вычитаем \(x\) из всех \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\); остальные элементы массива оставляем без изменения.

Найдите все значения \(k\), для которых с помощью конечного количества операций уничтожения с параметром \(k\) можно сделать все элементы массива \(a\) равными \(0\). Можно показать, что для любого массива \(a\) существует хотя бы одно подходящее \(k\).

Обратите внимание, что вы сначала выбираете значение \(k\) и только потом применяете операции уничтожения с первоначально выбранным параметром \(k\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют сами наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 200\,000\)) — длина массива \(a\).

В следующей строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{30}\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите все значения \(k\), для которых с помощью операций уничтожения (с заданным параметром \(k\)) можно сделать все элементы массива \(a\) равными \(0\).

Выводите их в возрастающем порядке.

Примечание

В первом наборе входных данных:

  • При \(k = 1\) мы можем сделать четыре операции уничтожения с наборами индексов \(\{1\}\), \(\{2\}\), \(\{3\}\), \(\{4\}\). Так как \(\&\) одного элемента равен самому элементу, то при каждой операции \(x = a_i\), и \(a_i - x = a_i - a_i = 0\).
  • При \(k = 2\) мы можем сделать две операции уничтожения с наборами индексов, например, \(\{1, 3\}\) и \(\{2, 4\}\): \(x = a_1 ~ \& ~ a_3\) \(=\) \(a_2 ~ \& ~ a_4\) \(=\) \(4 ~ \& ~ 4 = 4\). При каждой из этих операций \(x = 4\), а потому после первой операции \(a_1 - x = 0\) и \(a_3 - x = 0\), и после второй — \(a_2 - x = 0\) и \(a_4 - x = 0\).
  • При \(k = 3\) невозможно сделать все \(a_i\) равными \(0\). Если мы сделаем любую операцию уничтожения в самом начале, то в нашем массиве три числа станут равными \(0\) и одно число останется равным \(4\). После этого любая операция уничтожения не будет изменять массив, потому что среди выбранных индексов будет хотя бы один, значение массива для которого уже равно \(0\).
  • При \(k = 4\) мы можем сделать одну операцию уничтожения с набором индексов \(\{1, 2, 3, 4\}\), потому что \(x = a_1 ~ \& ~ a_2 ~ \& ~ a_3 ~ \& ~ a_4\) \(= 4\).

Во втором наборе входных данных при \(k = 2\) мы можем сделать следующие операции уничтожения:

  • Операция с индексами \(\{1, 3\}\): \(x = a_1 ~ \& ~ a_3\) \(=\) \(13 ~ \& ~ 25 = 9\). \(a_1 - x = 13 - 9 = 4\) и \(a_3 - x = 25 - 9 = 16\). Массив \(a\) после операции станет \([4, 7, 16, 19]\).
  • Операция с индексами \(\{3, 4\}\): \(x = a_3 ~ \& ~ a_4\) \(=\) \(16 ~ \& ~ 19 = 16\). \(a_3 - x = 16 - 16 = 0\) и \(a_4 - x = 19 - 16 = 3\). Массив \(a\) после операции станет \([4, 7, 0, 3]\).
  • Операция с индексами \(\{2, 4\}\): \(x = a_2 ~ \& ~ a_4\) \(=\) \(7 ~ \& ~ 3 = 3\). \(a_2 - x = 7 - 3 = 4\) и \(a_4 - x = 3 - 3 = 0\). Массив \(a\) после операции станет \([4, 4, 0, 0]\).
  • Операция с индексами \(\{1, 2\}\): \(x = a_1 ~ \& ~ a_2\) \(=\) \(4 ~ \& ~ 4 = 4\). \(a_1 - x = 4 - 4 = 0\) и \(a_2 - x = 4 - 4 = 0\). Массив \(a\) после операции станет \([0, 0, 0, 0]\).

Формальное определение побитового «И»

Определим операцию побитового «И» (\(\&\)). Пусть даны два целых неотрицательных числа \(x\) и \(y\), рассмотрим их двоичные записи (возможно с ведущими нулями): \(x_k \dots x_2 x_1 x_0\) и \(y_k \dots y_2 y_1 y_0\). Здесь \(x_i\) это \(i\)-й бит числа \(x\), а \(y_i\) это \(i\)-й бит числа \(y\). Пусть \(r = x ~ \& ~ y\) — результат операции \(\&\) над числами \(x\) и \(y\). Тогда двоичной записью \(r\) будет \(r_k \dots r_2 r_1 r_0\), где:

\(\) r_i = \begin{cases} 1, ~ \text{if} ~ x_i = 1 ~ \text{and} ~ y_i = 1 \\ 0, ~ \text{if} ~ x_i = 0 ~ \text{or} ~ y_i = 0 \end{cases} \(\)

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\).

A. Эра

жадные алгоритмы *800

У Shohag есть последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Он может выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите любое целое положительное число \(k\) (в разных операциях оно может быть разным).
  • Выберите любую позицию в последовательности (возможно, начало или конец последовательности, или между любыми двумя элементами) и вставьте \(k\) в последовательность в этой позиции.
  • Таким образом, последовательность \(a\) изменяется, и следующая операция выполняется над этой измененной последовательностью.

Например, если \(a=[3,3,4]\) и он выбирает \(k = 2\), то после операции он может получить одну из последовательностей \([\underline{2},3,3,4]\), \([3,\underline{2},3,4]\), \([3,3,\underline{2},4]\) или \([3,3,4,\underline{2}]\).

Shohag хочет, чтобы эта последовательность удовлетворяла следующему условию: для каждого \(1 \le i \le |a|\) выполнялось \(a_i \le i\). Здесь \(|a|\) обозначает размер \(a\).

Помогите ему найти минимальное количество операций, которые он должен выполнить для достижения этой цели. Можно показать, что при ограничениях задачи всегда можно достичь этой цели за конечное число операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — начальную длину последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое необходимо выполнить для достижения цели, указанной в условии.

Примечание

В первом наборе входных данных мы должны выполнить хотя бы одну операцию, так как \(a_2=3>2\). Мы можем выполнить операцию \([1, 3, 4] \rightarrow [1, \underline{2}, 3, 4]\) (новый вставленный элемент подчеркнут), теперь условие выполнено.

Во втором наборе входных данных Shohag может выполнить следующие операции:

\([1, 2, 5, 7, 4] \rightarrow [1, 2, \underline{3}, 5, 7, 4] \rightarrow [1, 2, 3, \underline{4}, 5, 7, 4] \rightarrow [1, 2, 3, 4, 5, \underline{3}, 7, 4]\).

В третьем наборе входных данных последовательность уже удовлетворяет условию.

B. Реверс сорт

жадные алгоритмы сортировки *1000

У Ashish есть бинарная строка \(s\) длины \(n\), которую он хочет отсортировать в неубывающем порядке.

Он может выполнять следующую операцию:

  1. Выберите подпоследовательность любой длины, элементы которой идут в невозрастающем порядке. Формально, выберите любое \(k\) такое, что \(1 \leq k \leq n\) и любую последовательность \(k\) индексов \(1 \le i_1 \lt i_2 \lt \ldots \lt i_k \le n\) такую, что \(s_{i_1} \ge s_{i_2} \ge \ldots \ge s_{i_k}\).
  2. Затем, «разверните» эту последовательность. Формально, поменяйте местами \(s_{i_1}\) с \(s_{i_k}\), \(s_{i_2}\) с \(s_{i_{k-1}}\), \(\ldots\) и \(s_{i_{\lfloor k/2 \rfloor}}\) с \(s_{i_{\lceil k/2 \rceil + 1}}\) (Здесь \(\lfloor x \rfloor\) обозначает наибольшее целое число, не превосходящее \(x\), а \(\lceil x \rceil\) обозначает наименьшее целое число, не меньшее \(x\)).

Найдите минимальное количество операций, необходимых для того, чтобы отсортировать строку в неубывающем порядке. Можно доказать, что всегда можно отсортировать заданную бинарную строку не более чем за \(n\) операций.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((1 \le n \le 1000)\)  — длину бинарной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), содержащую только символы \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите следующее:

  • минимальное количество операций \(m\) в первой строке (\(0 \le m \le n\)).
  • Каждая из следующих \(m\) строк должна иметь вид: \(k\) \(i_1\) \(i_2\) ... \(i_{k}\), где \(k\) — длина, а \(i_1 \lt i_2 \lt ... \lt i_{k}\) — индексы выбранной подпоследовательности. Для них должны выполняться ограничения из условия.
Примечание

В первом наборе входных данных строка уже отсортирована в неубывающем порядке.

Во втором наборе входных данных мы можем выполнить следующую операцию:

  • \(k = 4:\) выбираем индексы \(\{1, 3, 4, 5\}\)

    \(\underline{1}\) \(0\) \(\underline{1}\) \(\underline{0}\) \(\underline{0}\) \(\rightarrow \) \(\underline{0}\) \(0\) \(\underline{0}\) \(\underline{1}\) \(\underline{1}\)

В третьем наборе входных данных мы можем выполнить следующую операцию:

  • \(k = 3:\) выбираем индексы \(\{3, 5, 6\}\)

    \(0\) \(0\) \(\underline{1}\) \(0\) \(\underline{0}\) \(\underline{0}\) \(\rightarrow \) \(0\) \(0\) \(\underline{0}\) \(0\) \(\underline{0}\) \(\underline{1}\)

C. Доминантный характер

жадные алгоритмы Перебор реализация Строки *1400

У Ashish есть строка \(s\) длины \(n\), содержащая только символы 'a', 'b' и 'c'.

Он хочет найти длину наименьшей подстроки, которая удовлетворяет следующим условиям:

  • Длина подстроки не меньше чем \(2\)
  • 'a' встречается строго больше раз в этой подстроке, чем 'b'
  • 'a' встречается строго больше раз в этой подстроке, чем 'c'

Ashish занят планированием следующего раунда Codeforces. Помогите ему решить задачу.

Строка \(a\) является подстрокой строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) символов из начала и несколько (возможно, ноль или все) символов из конца.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^{5})\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 10^{6})\)  — длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\), состоящую только из символов 'a', 'b' и 'c'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^{6}\).

Выходные данные

Для каждого набора входных данных выведите длину наименьшей подстроки, удовлетворяющей заданным условиям, или выведите \(-1\), если такой подстроки нет.

Примечание

Рассмотрим первый набор входных данных. В подстроке «aa», 'a' встречается дважды, а 'b' и 'c' встречаются ноль раз. Поскольку 'a' встречается строго больше раз, чем 'b' и 'c', подстрока «aa» удовлетворяет условию, и ответ равен \(2\). Подстрока «a» также удовлетворяет этому условию, однако ее длина меньше \(2\).

Во втором наборе входных данных можно показать, что ни в одной из подстрок «cbabb» 'a' не встречается строго больше раз, чем 'b' и 'c'.

В третьем наборе входных данных, «cacabccc», длина наименьшей подстроки, удовлетворяющей условиям, равна \(3\).

D. Деревонумерация

битмаски Деревья жадные алгоритмы игры Конструктив поиск в глубину и подобное реализация *2100

Eikooc и Sushi играют в игру.

Игра проводится на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево с \(n\) вершинами это неориентированный связный граф с \(n-1\) ребрами.

Игроки поочередно перемещают фишку по дереву. Eikooc делает первый ход, помещая фишку на любую вершину по своему выбору. Sushi делает следующий ход, затем Eikooc, затем Sushi, и так далее. В каждый ход после первого, игрок должен переместить фишку в какую-то вершину \(u\) такую, что:

  • Между вершинами \(u\) и \(v\) (на которой фишка находится данный момент), есть ребро
  • \(u\) не была посещена ранее
  • \(u \oplus v \leq min(u, v)\)

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

Оба игрока играют оптимально. Игрок, который не может сделать ход, проигрывает.

Ниже приведены примеры, демонстрирующие правила игры.

Предположим, Eikooc начинает игру, помещая фишку в вершину \(4\). Затем Sushi перемещает фишку в вершину \(6\), которая не была посещена и является соседней к \(4\). Также \(6 \oplus 4 = 2 \leq min(6, 4)\). На следующем ходу Eikooc перемещает фишку в вершину \(5\), которая не была посещена и является соседней к \(6\). Также, \(5 \oplus 6 = 3 \leq min(5, 6)\). У Sushi больше нет ходов для игры, поэтому она проигрывает.
Предположим, Eikooc начинает игру, помещая фишку в вершинул \(3\). Sushi перемещает фишку в вершину \(2\), которая не была посещена и является соседней к \(3\). Также \(3 \oplus 2 = 1 \leq min(3, 2)\). Eikooc не может переместить фишку в вершину \(6\), так как \(6 \oplus 2 = 4 \nleq min(6, 2)\). Поскольку у Eikooc нет ходов для игры, она проигрывает.

Перед началом игры Eikooc решает тайком перенумеровать вершины дерева в свою пользу. Формально, перенумерация — это перестановка \(p\) длины \(n\) (последовательность из \(n\) целых чисел, где каждое целое число от \(1\) до \(n\) встречается ровно один раз), где \(p_i\) обозначает новый номер вершины \(i\).

Она хочет максимизировать количество вершин, которые она может выбрать в первый ход, для которых она сможет гарантировать себе победу. Помогите Eikooc найти любую перенумерацию, которая поможет ей в этом.

Входные данные

Первая строка содержит одно целое число \(t~(1 \le t \le 10^5)\)  — количество наборов входных данных. Описание каждого набора входных данных выглядит следующим образом.

Первая строка каждого набора входных данных содержит целое число \(n~(1 \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\).

Выходные данные

Для каждого набора входных данных выведите любую подходящую перестановку  — перестановку длины \(n\), которая максимизирует количество вершин, которые Eikooc может выбрать в первый ход и иметь выиграшную стратегию. Если таких перестановок несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных у Eikooc есть только одна вершина. У Sushi не будет ходов после того, как Eikooc выберет эту вершину, и Eikooc выиграет.

Во втором наборе входных данных \(1 \oplus 2 = 3 \nleq min(1, 2)\). Следовательно, после того, как Eikooc выберет любую из вершин, у Sushi не останется ходов, и Eikooc выиграет. И \(\{1, 2\}\), и \(\{2, 1\}\) являются допустимыми перенумерациями.

E. Уравнитель массивов

Бинарный поиск жадные алгоритмы математика реализация сортировки теория чисел *2400

У Jeevan есть два массива \(a\) и \(b\) размером \(n\). Он любит выполнять странные операции над массивами. На этот раз он придумал два типа операций:

  • Выберите любое \(i\) (\(1 \le i \le n\)) и увеличьте \(a_j\) на \(1\) для каждого \(j\), которое кратно \(i\) и \(1 \le j \le n\).
  • Выберите любое \(i\) (\(1 \le i \le n\)) и уменьшите \(a_j\) на \(1\) для каждого \(j\), которое кратно \(i\) и \(1 \le j \le n\).

Он хочет преобразовать массив \(a\) в массив \(b\), используя минимальное общее количество операций. Однако Jeevan, похоже, забыл значение \(b_1\). Поэтому он делает некоторые предположения. Он задаст вам \(q\) вопросов, соответствующих его \(q\) догадкам, \(i\)-я из которых имеет вид:

  • Если \(b_1 = x_i\), то какое минимальное количество операций требуется для преобразования \(a\) в \(b\)?

Помогите ему, ответив на каждый вопрос.

Входные данные

Первая строка содержит одно целое число \(n\) \((1 \le n \le 2 \cdot 10^{5})\)  — размер массивов \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \le a_i \le 10^{6})\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, ..., b_n\) \((1 \le b_i \le 10^6\) для \(i \neq 1\); \(b_1 = -1\), что означает, что значение \(b_1\) неизвестно\()\).

Четвертая строка содержит одно целое число \(q\) \((1 \le q \le 2 \cdot 10^{5})\)  — количество вопросов.

Каждая из следующих \(q\) строк содержит одно целое число \(x_i\) \((1 \le x_i \le 10^6)\)  — представляющее \(i\)-й вопрос.

Выходные данные

Выведите \(q\) целых чисел  — ответы на каждый из его \(q\) вопросов.

Примечание

Рассмотрим первый пример.

  • \(b_1 = 1\): Нам нужно преобразовать \([3, 7] \rightarrow [1, 5]\). Мы можем выполнить следующие операции:

    \([3, 7]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 1}}\) \([2, 6]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 1}}\) \([1, 5]\) Следовательно, ответ равен \(2\).

  • \(b_1 = 4\): Нам нужно преобразовать \([3, 7] \rightarrow [4, 5]\). Мы можем выполнить следующие операции:

    \([3, 7]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 2}}\) \([3, 6]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 2}}\) \([3, 5]\) \(\xrightarrow[\text{увеличить}]{\text{i = 1}}\) \([4, 6]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 2}}\) \([4, 5]\)

    Следовательно, ответ — \(4\).

  • \(b_1 = 3\): Нам нужно преобразовать \([3, 7] \rightarrow [3, 5]\). Мы можем выполнить следующие операции:

    \([3, 7]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 2}}\) \([3, 6]\) \(\xrightarrow[\text{уменьшить}]{\text{i = 2}}\) \([3, 5]\)

    Следовательно, ответ равен \(2\).

B. Файлы обновлений

жадные алгоритмы математика реализация *1100

Берляндский государственный университет получил файлы обновления для операционной системы. Изначально они установлены только на \(1\)-м компьютере.

Файлы обновлений должны быть скопированы на все \(n\) компьютеров. Компьютеры не подключены к интернету, поэтому единственный способ перенести файлы обновлений с одного компьютера на другой — скопировать их с помощью патч-корда (кабель, соединяющий два компьютера напрямую). Одновременно к компьютеру может быть подключен только один кабель. Это означает, что с любого компьютера, на котором установлены файлы обновления, их можно скопировать на любой другой компьютер всего за один час.

Ваша задача — найти минимальное количество часов, необходимое для копирования файлов обновлений на все \(n\) компьютеров, если в университете есть только \(k\) патч-кордов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, которая содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^{18}\)) — количество компьютеров и количество патч-кордов.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество часов, необходимое для копирования файлов обновлений на все \(n\) компьютеров.

Примечание

Рассмотрим примеры из условия:

  • \(n=8\), \(k=3\):
    1. в течение первого часа мы копируем файлы с компьютера \(1\) на компьютер \(2\);
    2. в течение второго часа мы копируем файлы с компьютера \(1\) на компьютер \(3\), и с компьютера \(2\) на компьютер \(4\);
    3. в течение третьего часа мы копируем файлы с компьютера \(1\) на компьютер \(5\), с компьютера \(2\) на компьютер \(6\), и с компьютера \(3\) на компьютер \(7\);
    4. в течение четвертого часа мы копируем файлы с компьютера \(2\) на компьютер \(8\).
  • \(n=6\), \(k=6\):
    1. в течение первого часа мы копируем файлы с компьютера \(1\) на компьютер \(2\);
    2. в течение второго часа мы копируем файлы с компьютера \(1\) на компьютер \(3\), и с компьютера \(2\) на компьютер \(4\);
    3. в течение третьего часа мы копируем файлы с компьютера \(1\) на компьютер \(5\), и с компьютера \(2\) на компьютер \(6\).
  • \(n=7\), \(k=1\):
    1. в течение первого часа мы копируем файлы с компьютера \(1\) на компьютер \(2\);
    2. в течение второго часа мы копируем файлы с компьютера \(1\) на компьютер \(3\);
    3. в течение третьего часа мы копируем файлы с компьютера \(1\) на компьютер \(4\);
    4. в течение четвертого часа мы копируем файлы с компьютера \(4\) на компьютер \(5\);
    5. в течение пятого часа мы копируем файлы с компьютера \(4\) на компьютер \(6\);
    6. в течение шестого часа мы копируем файлы с компьютера \(3\) на компьютер \(7\).

C. Банкноты

жадные алгоритмы теория чисел *1400

В Берляндии используют банкноты \(n\) различных типов. Банкноты \(i\)-го типа имеют номинал \(10^{a_i}\) бурлей (бурли — валюта, используемая в Берляндии); номинал банкнот первого типа равен \(1\).

Давайте обозначим \(f(s)\) как минимальное количество банкнот, необходимое для представления ровно \(s\) бурлей. Например, если номиналы банкнот, используемых в Берляндии, составляют \(1\), \(10\) и \(100\), то \(f(59) = 14\): \(9\) банкнот номиналом \(1\) и \(5\) банкнот номиналом \(10\) могут быть использованы для представления ровно \(9 \cdot 1 + 5 \cdot 10 = 59\) бурлей, и это невозможно сделать меньшим количеством банкнот.

Для заданного целого числа \(k\) найдите минимальное положительное число бурлей \(s\), которое не может быть представлено с помощью \(k\) или меньшего количества банкнот (то есть \(f(s) > k\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10; 1 \le k \le 10^9\)).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 = a_1 < a_2 < \dots < a_n \le 9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное положительное число бурлей \(s\), которое не может быть представлено с помощью \(k\) или меньшего количества банкнот.

D. Сине-красная перестановка

жадные алгоритмы математика сортировки *1300

Задан массив целых чисел \(a\) длины \(n\). Элементы массива могут быть как различными, так и одинаковыми.

Каждый элемент массива покрашен либо в синий цвет, либо в красный. Непокрашенных элементов в массиве нет. За один ход разрешается применить к массиву одну из двух описанных ниже операций:

  • либо выбрать любой синий элемент и уменьшить его значение на \(1\);
  • либо выбрать любой красный элемент и увеличить его значение на \(1\).

Допустимы ситуации, в которых элементов некоторого цвета нет вообще. Например, если весь массив целиком покрашен в синий, или, наоборот, в красный. В таком случае первый (или второй, соответственно) способ сделать ход недоступен.

Определите, можно ли сделать \(0\) или более ходов так, чтобы в результате массив стал перестановкой чисел от \(1\) до \(n\)?

Иными словами, проверьте существует ли такая последовательность ходов (возможно, пустая), что после её применения массив \(a\) содержит в некотором порядке все числа от \(1\) до \(n\) (включительно), каждое ровно по одному разу.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте.

Описание каждого набора входных данных состоит из трех строк. В первой строке содержится целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина исходного массива \(a\). Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — сами элементы массива.

Третья строка имеет длину \(n\) и состоит исключительно из букв 'B' и/или 'R': \(i\)-й символ равен 'B', если \(a_i\) покрашен в синий цвет, и равен 'R', если в красный.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите YES, если соответствующий массив можно превратить в перестановку, и NO в противном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных примера можно выполнить следующую последовательность ходов:

  • выбрать \(i=3\), элемент \(a_3=5\) синий, поэтому уменьшим его, получим \(a=[1,2,4,2]\);
  • выбрать \(i=2\), элемент \(a_2=2\) красный, поэтому увеличим его, получим \(a=[1,3,4,2]\);
  • выбрать \(i=3\), элемент \(a_3=4\) синий, поэтому уменьшим его, получим \(a=[1,3,3,2]\);
  • выбрать \(i=2\), элемент \(a_2=2\) красный, поэтому увеличим его, получим \(a=[1,4,3,2]\).

Получили, что \(a\) — перестановка. Следовательно, ответ YES.

G. Подготовка банкета 1

жадные алгоритмы *2200

Известный шеф-повар приготовил \(n\) блюд: \(i\)-е блюдо состоит из \(a_i\) грамм рыбы и \(b_i\) грамм мяса.

Организаторы банкета оценивают баланс \(n\) блюд следующим образом. Баланс равен модулю (абсолютной величине) разности суммарной массы рыбы и суммарной массы мяса.

Формально, баланс равен \(\left|\sum\limits_{i=1}^n a_i - \sum\limits_{i=1}^n b_i\right|\). Чем баланс меньше, тем лучше.

Для того, чтобы улучшить баланс, был приглашен дегустатор. Он съест ровно \(m\) грамм еды из каждого блюда. Для каждого блюда дегустатор определяет отдельно сколько он съест рыбы, а сколько мяса. Главное, чтобы суммарно в каждом из блюд он съел ровно \(m\) грамм.

Определите, сколько какого типа еды должен съесть дегустатор в каждом из блюд, чтобы величина баланса оказалась минимально возможной. Если ответов несколько, выведите любой из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\); \(0 \leq m \leq 10^6\)). Затем следуют \(n\) строк, \(i\)-я из которых содержит пару целых чисел \(a_i\) и \(b_i\) (\(0 \leq a_i, b_i \le 10^6\)) — количество грамм рыбы и мяса в \(i\)-м блюде.

Гарантируется, что из каждого блюда возможно съесть \(m\) грамм еды. Иными словами, \(m \leq a_i+b_i\) для всех \(i\) от \(1\) до \(n\), включительно.

Сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке минимальное значение баланса, которое можно достичь, съев из каждого блюда ровно \(m\) грамм еды.

Далее выведите \(n\) строк, которые описывают способ это сделать: \(i\)-я строка должна содержать два целых числа \(x_i\) и \(y_i\) (\(0 \leq x_i \leq a_i\); \(0 \leq y_i \leq b_i\); \(x_i+y_i=m\)), где \(x_i\) — сколько грамм рыбы надо съесть из \(i\)-го блюда, а \(y_i\) — сколько грамм мяса.

Если есть несколько способов добиться минимального баланса, выведите любой из них.

H. Подготовка банкета 2

жадные алгоритмы сортировки *2200

Известный шеф-повар опять приготовил \(n\) блюд: \(i\)-е блюдо состоит из \(a_i\) грамм рыбы и \(b_i\) грамм мяса.

Организаторы банкета считают два блюда \(i\) и \(j\) равными, если \(a_i=a_j\) и одновременно \(b_i=b_j\).

Организаторы банкета оценивают разнообразие \(n\) блюд следующим образом. Разнообразие набора блюд равно количеству различных блюд в нём. Чем разнообразие меньше, тем лучше.

Для того, чтобы уменьшить разнообразие, был приглашен дегустатор. Он съест ровно \(m_i\) грамм еды из каждого блюда. Для каждого блюда дегустатор определяет отдельно сколько он съест рыбы, а сколько мяса. Главное, чтобы суммарно в \(i\)-м блюде он съел ровно \(m_i\) грамм.

Определите, сколько какого типа еды должен съесть дегустатор в каждом из блюд, чтобы величина разнообразия оказалась минимально возможной. Если ответов несколько, выведите любой из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество блюд. Затем следуют \(n\) строк, \(i\)-я из которых содержит три целых числа \(a_i\), \(b_i\), \(m_i\) (\(0 \leq a_i, b_i \le 10^6\); \(0 \le m_i \le a_i+b_i\)) — количество грамм рыбы в \(i\)-м блюде, количество грамм мяса в \(i\)-м блюде и сколько суммарно грамм дегустатор должен съесть в \(i\)-м блюде.

Сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке минимальное значение разнообразия, которое можно достичь, съев из блюда \(i\) ровно \(m_i\) грамм еды (для всех \(i\) от \(1\) до \(n\)).

Далее выведите \(n\) строк, которые описывают способ это сделать: \(i\)-я строка должна содержать два целых числа \(x_i\) и \(y_i\) (\(0 \leq x_i \leq a_i\); \(0 \leq y_i \leq b_i\); \(x_i+y_i=m_i\)), где \(x_i\) — сколько грамм рыбы надо съесть из \(i\)-го блюда, а \(y_i\) — сколько грамм мяса.

Если есть несколько способов добиться минимального баланса, выведите любой из них.

B. Постройте перестановку

жадные алгоритмы Конструктив *1200

Вам даны три целых числа \(n, a, b\). Определите, существует ли перестановка \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), такая, что:

  • Существует ровно \(a\) индексов \(i\) с \(2 \le i \le n-1\) таких, что \(p_{i-1} < p_i > p_{i+1}\) (другими словами, существует ровно \(a\) локальных максимумов).

  • Существует ровно \(b\) индексов \(i\) с \(2 \le i \le n-1\) таких, что \(p_{i-1} > p_i < p_{i+1}\) (другими словами, существует ровно \(b\) локальных минимумов).

Если такие перестановки существуют, найдите любую такую перестановку.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 10^5\), \(0 \leq a,b \leq n\)).

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, если не существует перестановки с необходимыми свойствами, выведите \(-1\).

В противном случае выведите найденную перестановку во второй строке. Если таких перестановок несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных одним из примеров такой перестановки является \([1, 3, 2, 4]\). В ней \(p_1 < p_2 > p_3\), причем \(2\) — единственный такой индекс, а \(p_2> p_3 < p_4\), причем \(3\) — единственный такой индекс.

Можно показать, что для третьего набора входных данных такой перестановки не существует.

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\)-й игрок обыграет любого другого игрока в любой игре, поэтому он обязательно выиграет турнир.

Во втором наборе входных данных каждый может стать победителем.

В третьем наборе входных данных есть только один игрок. Очевидно, что он выиграет турнир.

A. Дели и преумножай

жадные алгоритмы математика реализация теория чисел *900

У Василия есть массив из \(n\) чисел \(a_1, a_2, \dots, a_n\). Он может любое количество раз выполнить следующую последовательность операций:

  1. выбрать два любых элемента массива \(a_i\) и \(a_j\), где \(a_i\) должно делиться нацело на \(2\)
  2. \(a_i = \frac{a_i}{2}\)
  3. \(a_j = a_j \cdot 2\)

Помогите Василию найти максимальную сумму элементов массива, которую он сможет добиться, используя описанную последовательность операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((1 \le n \le 15)\) — количество элементов в массиве Василия.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i < 16)\) — описание массива Василия.

Выходные данные

Для каждого набора входных данных выведите максимальную сумму элементов массива после оптимального применения последовательности операций.

Примечание

В первом тестовом примере оптимальный порядок выглядит следующим образом:

  1. Выбрать \(i = 2\) и \(j = 1\). После выполнения последовательности операций \(a_2 = \frac{4}{2} = 2\) и \(a_1 = 6 \cdot 2 = 12\), массив будет следующим: [12, 2, 2].
  2. Выбрать \(i = 2\) и \(j = 1\). После выполнения последовательности операций \(a_2 = \frac{2}{2} = 1\) и \(a_1 = 12 \cdot 2 = 24\), массив будет следующим: [24, 1, 2].
  3. Выбрать \(i = 3\) и \(j = 1\). После выполнения последовательности операций \(a_3 = \frac{2}{2} = 1\) и \(a_1 = 24 \cdot 2 = 48\), массив будет следующим: [48, 1, 1].

Итоговый ответ \(48 + 1 + 1 = 50\).

В третьем тестовом примере нет возможности поменять сумму элементов, поэтому ответ \(10\).

D. Социальная сеть

графы Деревья жадные алгоритмы реализация снм *1600

Василий приехал на посвященную криптовалютам конференцию. Для того, чтобы быть в курсе всех самых важных новостей из мира криптовалют, нужно постоянно заводить новые знакомства или пользоваться знакомствами своих друзей.

В конференции участвует \(n\) человек, которые изначально не знакомы между собой. Василий может познакомить двух любых людей \(a\) и \(b\), которые не были знакомы до этого.

У Василия есть \(d\) условий, \(i\)-е из которых требует, чтобы человек \(x_i\) имел связь с человеком \(y_i\). Формально два человека \(x\) и \(y\) имеют связь, если найдется цепочка \(p_1=x, p_2, p_3, \dots, p_k=y\) такая, что для всех \(i\) от \(1\) до \(k - 1\) известно, что люди под номерами \(p_i\) и \(p_{i + 1}\) знакомы.

Василий хочет, чтобы для каждого \(i\) (\(1 \le i \le d\)) вы рассчитали, какое максимальное количество знакомств может иметь один человек при условии, что Василий выполнил все условия от \(1\) до \(i\) включительно, произведя при этом ровно \(i\) знакомств. Проверка условий происходит после того, как Василий провел \(i\) знакомств. Ответ для каждого \(i\) необходимо найти независимо. То есть, когда вы вычисляете ответ для \(i\), вы должны считать, что никто из людей еще не был знаком.

Входные данные

Первая строка содержит два целых числа \(n\) и \(d\) (\(2 \le n \le 10^3, 1 \le d \le n - 1\)) — количество людей и количество условий.

Следующие \(d\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n, x_i \neq y_i\)) — номера людей, которые должны иметь связь согласно \(i\)-му условию.

Выходные данные

Выведите \(d\) целых чисел. \(i\)-е число должно быть равно количеству знакомств у человека с наибольшим возможным количеством знакомств, если Василий провел \(i\) знакомств и выполнил первые \(i\) условий.

Примечание

Пояснение для первого тестового примера:

В этом пояснении круг и вписанное число обозначают человека с соответствующим номером. Линии, соединяющие людей, обозначают то, что эти люди знакомы между собой. Человек, отмеченный красным цветом, имеет наибольшее количество знакомых. Данные способы познакомить людей не являются единственными правильными.

G. Прогулка по матрице

жадные алгоритмы математика Структуры данных *3000

У Василия есть два массива чисел \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_m\). Для этих массивов выполняется свойство выпуклости. Формально массив \(c\) длины \(k\) называется выпуклым, если \(c_i - c_{i - 1} < c_{i + 1} - c_i\) для всех \(i\) от \(2\) до \(k - 1\) и \(c_1 < c_2\).

За жизнь Василия с этими массивами происходило \(q\) изменений одного из двух типов:

  1. Прибавить к суффиксу массива \(a\) длины \(k\) арифметическую прогрессию \(d, d \cdot 2, d \cdot 3, \dots, d \cdot k\). Массив после изменения выглядит следующим образом: \([a_1, a_2, \dots, a_{n - k}, a_{n - k + 1} + d, a_{n - k + 2} + d \cdot 2, \dots, a_n + d \cdot k]\).
  2. Такая же операция, но для массива \(b\).

После каждого изменения из массивов \(a\) и \(b\) создается матрица \(d\) размера \(n \times m\), где \(d_{i, j}=a_i + b_j\). Василий хочет дойти от клетки (\(1, 1\)) до клетки (\(n, m\)) этой матрицы. От клетки (\(x, y\)) он может перейти только в клетки (\(x + 1, y\)) и (\(x, y + 1\)). Длиной пути считается сумма всех чисел в клетках, которые посетил Василий, включая стартовую и конечную клетку.

После каждого изменения Василий хочет, чтобы вы помогли ему узнать минимальную длину пути, которую он мог бы пройти.

Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(q\) (\(2 \le n \le 100, 2 \le m \le 10^5\), \(1 \le q \le 10^5\)) — размеры массивов и количество изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)) — описание массива \(a\).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^{12}\)) — описание массива \(b\).

Следующие \(q\) строк содержат три целых числа \(type\), \(k\) и \(d\) (\(1 \le type \le 2\), если \(type = 1\), то \(1 \le k \le n\) иначе \(1 \le k \le m\), \(1 \le d \le 10^3\)).

Выходные данные

После каждого изменения выведите одно целое число — минимальную длину пути в построенной матрице.

A. Оденьте их скорее!

Бинарный поиск жадные алгоритмы Перебор *1300

В Двумерном королевстве наступили тяжелые времена... Сегодня утром Трехмерное королевство объявило войну Двумерному и в ходе этого (возможно, вооруженного) конфликта решится, кому же все-таки принадлежит прямая.

В Двумерном королевстве есть постоянная армия, состоящая из n человек. Каждый боец прошел специальную регистрацию и указал желаемый размер бронежилета: i-ый боец указал размер ai. Известно, что бойцы люди неприхотливые, поэтому штаб считает, что им комфортно носить любые бронежилеты с размерами от ai - x до ai + y включительно (числа x, y ≥ 0 заданы).

В распоряжении армии Двумерного королевства есть m бронежилетов, размер j-го бронежилета равен bj. Помогите мобилизовать армию Двумерного королевства — оденьте наибольшее возможное количество бойцов армии в бронежилеты. Каждый бронежилет разрешается использовать только один раз. i-ый боец может надеть j-ый бронежилет, если ai - x ≤ bj ≤ ai + y.

Входные данные

В первой строке входных данных записаны четыре целых числа n, m, x и y (1 ≤ n, m ≤ 105, 0 ≤ x, y ≤ 109) — количество бойцов, количество бронежилетов и два числа, характеризующие неприхотливость бойцов, соответственно.

Во второй строке записаны в неубывающем порядке n разделенных единичными пробелами целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — желаемые размеры бронежилетов.

В третьей строке записаны в неубывающем порядке m разделенных единичными пробелами целых чисел b1, b2, ..., bm (1 ≤ bj ≤ 109) — размеры имеющихся в наличии бронежилетов.

Выходные данные

В первой строке выведите единственное целое число k — максимальное количество одетых в бронежилеты бойцов.

В следующих k строках выведите k пар, по одной паре в строке в формате «ui vi» (без кавычек). Пара (ui, vi) означает, что боец с номером ui должен быть одет в бронежилет номер vi. Бойцы и бронежилеты нумеруются, начиная с единицы, в том порядке, в котором они заданы во входных данных. Все номера бойцов в парах должны быть попарно различны, все номера бронежилетов в парах также должны быть попарно различны. Пары можно выводить в любом порядке.

Если существует несколько оптимальных ответов, разрешается вывести любой.

Примечание

В первом примере требуется точное совпадение размеров бронежилетов: первый боец получает первый бронежилет (размер 1), а третий — второй бронежилет (размер 3). В этом примере возможен другой ответ, в котором второй бронежилет достается не третьему, а четвертому бойцу.

Во втором примере размер бронежилета должен отличаться от пожеланий бойца не больше чем на 2 размера, и одеть можно всех бойцов.

B. Скидки

жадные алгоритмы Конструктив сортировки *1700

Как-то раз Поликарп по пути домой заглянул в супермаркет. Оказалось, что в супермаркете проходит акция по продаже табуреток. Условия акции таковы: если в корзинке с купленными товарами есть хотя бы одна табуретка, то на минимальный по стоимости товар из корзинки предоставляется скидка 50% (то есть он становится дешевле в два раза). Если товаров минимальной стоимости несколько, скидка предоставляется только на один из них!

У Поликарпа есть k корзинок, и он хочет скупить все табуретки и карандаши из супермаркета. Помогите ему распределить табуретки и карандаши по корзинкам так, чтобы суммарная стоимость товаров (с учетом скидок) была как можно меньше.

Поликарп обязан использовать все k корзинок для покупки товаров, ни одна корзинка не должна остаться пустой. В каждой корзинке может быть произвольное количество табуреток и/или карандашей.

Входные данные

В первой строке входных данных записано два целых числа n и k (1 ≤ k ≤ n ≤ 103) — количество товаров в супермаркете и количество корзинок у Поликарпа, соответственно. В следующих n строках заданы описания товаров в виде «ci ti» (без кавычек), где ci (1 ≤ ci ≤ 109) — целое число, обозначающее стоимость i-го товара, ti (1 ≤ ti ≤ 2) — целое число, обозначающее тип i-го товара (1 — табуретка, 2 — карандаш). Числа в строках разделяются одним пробелом.

Выходные данные

В первую строку выведите единственное вещественное число с ровно одним знаком после запятой — минимальную суммарную стоимость товаров с учетом скидок.

В следующих k строках выведите описания товаров в корзинках. В i-й строке выведите описание i-й корзинки в формате «t b1 b2 ... bt» (без кавычек), где t — количество товаров в i-й корзинке, а последовательность b1, b2, ..., bt (1 ≤ bj ≤ n) — номера товаров, которые следует положить в эту корзинку в оптимальном распределении. Все номера товаров во всех корзинках должны быть попарно различны, каждый товар должен находиться ровно в одной корзинке. Товары в корзинках и сами корзинки можно выводить в любом порядке. Товары нумеруются от 1 до n в том порядке, в котором они заданы во входных данных.

Если существует несколько оптимальных распределений, разрешается вывести любое.

Примечание

В первом примере в первую корзинку следует положить 1-ый и 2-ой товар, а во вторую — 3-ий товар. Тогда в каждой корзинке будет табуретка, и на товар минимальной стоимости предоставляется скидка 50%. Суммарная стоимость товаров составит: 2·0.5 + (3 + 3·0.5) = 1 + 4.5 = 5.5.

B. Калиндромный массив

жадные алгоритмы *1100

Массив \([b_1, b_2, \ldots, b_m]\) является палиндромом, если \(b_i = b_{m+1-i}\) для каждого \(i\) от \(1\) до \(m\). Пустой массив также является палиндромом.

Массив называется калиндромом, если выполняется следующее условие:

  • Можно выбрать некоторое целое число \(x\) и удалить некоторые элементы массива, равные \(x\), так, чтобы оставшийся массив (после склеивания оставшихся частей) был палиндромом.

Обратите внимание, что необязательно удалять все элементы, равные \(x\), и необязательно удалять хотя бы один элемент, равный \(x\).

Например:

  • \([1, 2, 1]\) является калиндромом, потому что вы можете просто не удалять ни одного элемента.
  • \([3, 1, 2, 3, 1]\) является калиндромом, потому что можно выбрать \(x = 3\) и удалить оба элемента, равные \(3\), получив массив \([1, 2, 1]\), который является палиндромом.
  • \([1, 2, 3]\) не является калиндромом.

Вам дан массив \([a_1, a_2, \ldots, a_n]\). Определите, является ли \(a\) калиндромом или нет.

Входные данные

Первая строка содержит одно целое число \(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\).

Выходные данные

Для каждого наборов входных данных выведите YES, если \(a\) — калиндром, и NO в противном случае. Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных массив \([1]\) уже является палиндромом, поэтому он также является калиндромом.

Во втором наборе входных данных мы можем выбрать \(x = 2\), удалить второй элемент и получить массив \([1]\), который является палиндромом.

В третьем наборе входных данных получить палиндром невозможно.

В четвертом наборе входных данных можно выбрать \(x = 4\) и удалить пятый элемент, получив \([1, 4, 4, 1]\). Также можно выбрать \(x = 1\), удалить первый и четвертый элементы и получить \([4, 4, 4]\).

C. Кеши устраивает вечеринку

Бинарный поиск жадные алгоритмы *1600

Кеши устраивает вечеринку и хочет, чтобы все на ней были счастливы.

У него есть \(n\) друзей. У его \(i\)-го друга есть \(i\) долларов.

Если пригласить \(i\)-го друга на вечеринку, то он будет счастлив только в том случае, если не более \(a_i\) человек на вечеринке будут строго богаче его и не более \(b_i\) человек будут строго беднее его.

Кеши хочет пригласить как можно больше людей. Найдите максимальное число людей, которых он может пригласить на вечеринку, чтобы каждый приглашенный был счастлив.

Входные данные

Первая строка содержит одно целое число \(t\) \((1\le t\le 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1\le n\le 2 \cdot 10^5)\) — количество друзей Кеши.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) \((0 \le a_i, b_i < n)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество людей, которых может пригласить Кеши.

Примечание

В первом наборе входных данных он приглашает первого и второго человека. Если он пригласит всех, то третий человек не будет счастлив, потому что будет более чем \(1\) человек беднее его.

E. AmShZ и G.O.A.T.

Бинарный поиск жадные алгоритмы математика Перебор реализация *2300

Назовем массив из \(k\) целых чисел \(c_1, c_2, \ldots, c_k\) ужасным, если выполняется следующее условие:

  • Пусть \(AVG\) — это \(\frac{c_1 + c_2 + \ldots + c_k}{k}\) (то есть среднее значение всех элементов массива, не обязательно целое). Тогда количество элементов массива, которые больше \(AVG\), должно быть строго больше количества элементов массива, которые меньше \(AVG\). Обратите внимание, что элементы, равные \(AVG\), не учитываются.

    Например, \(c = \{1, 4, 4, 5, 6\}\) является ужасным, потому что \(AVG = 4.0\) и \(5\)-й и \(4\)-й элементы больше \(AVG\), а \(1\)-й элемент меньше \(AVG\).

Назовем массив из \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) плохим, если хотя бы одна из его непустых подпоследовательностей ужасна, и хорошим в противном случае.

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Найдите минимальное количество элементов, которые нужно удалить из него, чтобы получить хороший массив.

Массив является подпоследовательностью другого массива, если он может быть получен из него путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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\).

В каждом наборе входных данных для любого \(1 \le i \lt n\) гарантируется, что \(a_i \le a_{i+1}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество элементов, которые нужно удалить из него, чтобы получить хороший массив.

Примечание

В первом примере массив \(a\) уже хороший.

Во втором примере достаточно удалить \(1\), получив массив \([4, 4, 5, 6]\), который является хорошим.

G. AmShZ выиграл пари

жадные алгоритмы Структуры данных хэши *3300

Прямо перед Евро-2020 AmShZ и Safar сделали ставки на то, кто станет чемпионом, AmShZ поставил на Италию, а Safar — на Францию.

Конечно же, AmShZ выиграл. Следовательно, Safar дал ему скобочную последовательность \(S\). Обратите внимание, что скобочная последовательность — это строка, состоящая из символов '(' и ')'.

AmShZ может выполнить следующую операцию любое количество раз:

  • Сначала, он разрезает свою строку \(S\) на три (возможно, пустых) последовательных подстроки \(A, B\) и \(C\). Затем он склеивает их с помощью символов '(' и ')', в результате чего получается новая строка \(S\) = \(A\) + '(' + \(B\) + ')' + \(C\).

    Например, если \(S\) = «))(» и AmShZ разрежет ее на \(A\) = «», \(B\) = «))» и \(C\) = «(», то в качестве новой строки он получит \(S\) = «()))(».

После выполнения некоторых (возможно, ни одной) операций, AmShZ отдает свою строку Кеши и просит его найти исходную строку. Конечно, Кеши может найти более одной возможной начальной строки. Кеши заинтересован в нахождении лексикографически наименьшей возможной начальной строки.

Ваша задача — помочь Кеши в достижении его цели.

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая появляется раньше в алфавите, чем соответствующая буква в \(b\).
Входные данные

Единственная строка ввода содержит единственную строку \(S\) — строку после операций \((1\le |S|\le 3 \cdot 10^5)\).

Гарантируется, что первый символ \(S\) — ')'.

Выходные данные

Выведите лексикографически наименьшую возможную начальную строку перед операциями.

Примечание

В первом примере можно преобразовать «)((())))» в «)(()(())))», разбив её на «)(», пустую строку, и «(())))». Можно показать, что это лексикографически наименьшая возможная начальная строка

H. Игра в кальмара

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *3100

После просмотра нового сериала «Игра в кальмара» Маштали и Соруш решили провести свою собственную «Игру в кальмара»! Соруш согласился быть ведущим и предоставить деньги для приза победителю, а Маштали стал фронтменом!

\(m\) игроков зарегистрировались для участия в играх, чтобы выиграть большой приз, но когда Маштали узнал, каким огромным будет приз победителя, он решил убить устранить всех игроков, чтобы забрать деньги себе!

Вот как злой Маштали собирается уничтожить игроков:

Дано некорневое дерево с \(n\) вершинами. У каждого игрока есть \(2\) специальные вершины \(x_i\) и \(y_i\).

За одну операцию Маштали может выбрать любую вершину \(v\) дерева. Затем для каждого оставшегося игрока \(i\) он находит вершину \(w\) на простом пути из \(x_i\) в \(y_i\), которая ближе всего к \(v\). Если \(w\ne x_i\) и \(w\ne y_i\), игрок \(i\) будет устранен.

Теперь Маштали задался вопросом: «Какое минимальное количество операций я должен выполнить, чтобы устранить всех игроков и забрать деньги себе?».

Поскольку он думал только о деньгах, он не смог решить задачу самостоятельно и обратился к вам за помощью!

Входные данные

Первая строка содержит \(2\) целое число \(n\) и \(m\) \((1 \le n, m \le 3 \cdot 10^5)\) — количество вершин дерева и количество игроков.

Вторая строка содержит \(n-1\) целых чисел \(par_2, par_3, \ldots, par_n\) \((1 \le par_i < i)\) — обозначающих ребро между вершиной \(i\) и \(par_i\).

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(x_i\) и \(y_i\) \((1 \le x_i, y_i \le n, x_i \ne y_i)\) — специальные вершины \(i\)-го игрока.

Выходные данные

Выведите минимальное количество операций, которые Маштали должен выполнить.

Если Маштали никак не может устранить всех игроков, выведите \(-1\).

Примечание

Пояснение к первому примеру:

В первую операцию, Маштали может выбрать вершину \(1\) и устранить игроков с красным и синим цветами. Во второй операции он может выбрать вершину \(6\) и устранить игрока с оранжевым цветом.

Во втором примере Маштали не сможет устранить первого игрока.

E1. Побег из лабиринта (простая версия)

Деревья жадные алгоритмы кратчайшие пути поиск в глубину и подобное *1700

Эта задача отличается от E2 только поставленным вопросом.

Влад построил лабиринт из \(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\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите «YES», если Влад может гарантировать себе победу, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных независимо от стратегии друзей Влад может выиграть, пройдя до комнаты \(4\). Игра при этом может выглядеть следующим образом:

Изначальное расположение Влада и друзей. Влад помечен зелёным цветом, друзья — красным.
Расположение по прошествии одной единицы времени.
Конец игры.

Заметим, что если Влад попробует дойти до выхода в вершине \(8\), то друг из комнаты \(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».

G. Робот и конфеты

жадные алгоритмы Паросочетания Структуры данных *2500

У Поликарпа есть прямоугольное поле размером \(n \times m\) клеток (размер поля \(n \cdot m\) не превышает \(10^6\) клеток, \(m \ge 2\)), в каждой клетке которого может быть конфета. Поле состоит из \(n\) строк и \(m\) столбцов.

Обозначим клетку с координатами \(x\) по вертикали и \(y\) по горизонтали за \((x, y)\). Тогда левая верхняя клетка будет обозначаться как \((1, 1)\), а правая нижняя — как \((n, m)\).

Если в клетке поля есть конфета, то клетка поля помечена символом «1», иначе — символом «0».

Поликарп сконструировал Робота, который может собирать конфеты. Робот может переместиться из клетки \((x, y)\) либо в клетку \((x+1, y+1)\), либо в клетку \((x+1, y-1)\). Если Робот находится в клетке, в которой есть конфета, он её забирает.

Пока на поле есть хотя бы одна конфета, выполняется следующий алгоритм:

  • Поликарп ставит Робота в произвольную клетку первой (верхней) строки поля. Он сам выбирает в какую клетку поставить Робота. Робота можно ставить в одну и ту же клетку несколько раз.
  • Робот перемещается по полю и собирает конфеты. Поликарп управляет Роботом. Когда Робот покидает поле, Поликарп подбирает его.
  • Если на поле есть хотя бы одна конфета, Поликарп повторяет алгоритм.

Найдите минимальное количество раз, сколько нужно ставить Робота на верхнюю строку поля, чтобы собрать все конфеты. Гарантируется, что Поликарп всегда может собрать все конфеты.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(2 \le m\), \(2 \le n \cdot m \le 10^6\)) — размеры поля. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-ю строку поля. Каждая из них представляет собой строку размера \(m\) символов: cимвол «1» соответствует клетке с конфетой, символ «0» — пустой клетке.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных в тесте не превосходит \(10^6\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных: минимальное количество раз, которое Поликарпу нужно поставить Робота на верхнюю строку поля, чтобы собрать все конфеты.

Примечание

В первом наборе Поликарп может вообще не ставить Робота на поле, так что ответ 0

Во втором наборе Поликарпу потребуется два раза ставить робота на поле. Робот может собрать конфеты так: в первый раз Поликарп ставит Робота в клетку \((1, 1)\) соберет конфеты на позициях \((1, 1)\) и \((3, 3)\). Во второй раз Поликарп может снова поставить Робота в клетку \((1, 1)\) и тогда Робот переместится сначала в клетку \((2,2)\), затем в клетку \((3, 1)\) и соберет последнюю конфету.

В четвертом наборе можно показать, что за три прохода Робот не сможет собрать все конфеты.

B. Особая перестановка

жадные алгоритмы Конструктив *900

Перестановка длины \(n\) — это массив \(p=[p_1,p_2,\dots, p_n]\), в котором каждое целое число от \(1\) до \(n\) (включительно) встречается ровно один раз. Например, \(p=[4, 2, 6, 5, 3, 1]\) — перестановка \(6\).

Вам даны три целых числа \(n\), \(a\) и \(b\), где \(n\) — четное число. Выведите любую перестановку длины \(n\), в которой минимум среди всех элементов левой половины равен \(a\), и максимум среди всех элементов правой половины равен \(b\). Выведите -1, если такой перестановки не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(t\) строк содержат сами наборы входных данных.

Каждый набор входных данных — это три числа \(n\), \(a\), \(b\) (\(2 \le n \le 100\); \(1 \le a,b \le n\); \(a \ne b\)), где \(n\) — четное число (т.е. \(n \bmod 2 = 0\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую подходящую перестановку, или -1, если такой перестановки не существует. Если есть несколько перестановок, подходящих под условия, вы можете вывести любую из них.

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\)-е оружие.

G. Массив максимальной суммы

жадные алгоритмы Комбинаторика Конструктив сортировки *2500

Вам задан массив \(c = [c_1, c_2, \dots, c_m]\). Массив \(a = [a_1, a_2, \dots, a_n]\) строится по нему следующим образом: он состоит из чисел \(1, 2, \dots, m\), и для каждого \(i \in [1,m]\), \(i\) встречается в \(a\) строго \(c_i\) раз. Таким образом, количество элементов в \(a\) равно \(\sum\limits_{i=1}^{m} c_i\).

Определим для данного массива \(a\) значение \(f(a)\) как \(\)f(a) = \sum_{\substack{1 \le i < j \le n\\ a_i = a_j}}{j - i}.\(\)

Другими словами, \(f(a)\) — это суммарное расстояние между всеми парами одинаковых чисел.

Ваша задача — определить наибольшее возможное значение \(f(a)\) и количество массивов с данным значением \(f(a)\). Два массива считаются различными, если элементы в какой-то позиции различаются.

Входные данные

В первой строке задано одно целое число \(m\) (\(1 \le m \le 5 \cdot 10^5\)) — размер массива \(c\).

Во второй строке заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_i \le 10^6\)) — массив \(c\).

Выходные данные

Выведите два целых числа — максимально возможное \(f(a)\) и количество массивов \(a\) с данным значением. Так как оба ответа могут быть очень большими, выведите их по модулю \(10^9 + 7\).

Примечание

В первом примере, все возможные массивы \(a\) — это перестановки \([1, 2, 3, 4, 5, 6]\). Так как у каждого такого \(a\) значение \(f(a) = 0\), то максимально возможное \(f(a) = 0\) и количество таких массивов равно \(6! = 720\).

Во втором примере, единственный возможный массив состоит из \(10^6\) единиц и его \(f(a) = \sum\limits_{1 \le i < j \le 10^6}{j - i} = 166\,666\,666\,666\,500\,000\) и \(166\,666\,666\,666\,500\,000 \bmod{10^9 + 7} = 499\,833\,345\).

B. Отсутствующий остаток

жадные алгоритмы реализация сортировки *1000

Задана последовательность \(a_1, a_2, \dots, a_n\), состоящая из \(n\) попарно различных положительных чисел.

Найдите \(\left\lfloor \frac n 2 \right\rfloor\) различных пар целых чисел \(x\) и \(y\) таких, что:

  • \(x \neq y\);
  • \(x\) и \(y\) встречаются в \(a\);
  • \(x~mod~y\) не встречается в \(a\).

Обратите внимание, что некоторые \(x\) или \(y\) могут входить в несколько пар.

\(\lfloor x \rfloor\) обозначает функцию округления вниз — наибольшее целое число меньше либо равное \(x\). \(x~mod~y\) обозначает остаток от деления \(x\) на \(y\).

Если существует несколько решений, выведите любое из них. Можно показать, что решение всегда существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)).

Все числа в последовательности попарно различные. Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Ответ на каждый набор входных данных должен содержать \(\left\lfloor \frac n 2 \right\rfloor\) различных пар целых чисел \(x\) и \(y\) таких, что \(x \neq y\), \(x\) и \(y\) встречаются в \(a\) и \(x~mod~y\) не встречается в \(a\). Выведите пары одну за другой.

Можно выводить пары в любом порядке. Однако, внутри пары числа должны быть такие, что первое число — это \(x\), а второе число — это \(y\). Все пары должны быть попарно различны.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных существует только две пары: \((1, 4)\) и \((4, 1)\). \(\left\lfloor \frac 2 2 \right\rfloor=1\), поэтому надо найти одну пару. \(1~mod~4=1\), и \(1\) встречается в \(a\), поэтому такая пара некорректная. Поэтому единственный возможный ответ — это пара \((4, 1)\).

Во втором наборе входных данных мы выбрали пары \(8~mod~2=0\) и \(8~mod~4=0\). \(0\) не входит в \(a\), поэтому такой ответ правильный. В данном тесте существуют несколько решений.

В третьем наборе входных данных выбранные пары — \(9~mod~5=4\) и \(7~mod~5=2\). Ни \(4\), ни \(2\) не встречаются в \(a\), поэтому такой ответ правильный.

A. Divan и магазин

жадные алгоритмы Конструктив Перебор *800

Бизнесмен по имени Divan обожает шоколад! Сегодня он пришёл в магазин, чтобы закупиться им. Как и любой другой бизнесмен, Divan знает цену деньгам, поэтому он считает, что покупать слишком дорогие плитки шоколада не имеет никакого смысла, несмотря на всю его любовь к шоколаду. С другой же стороны, слишком дешёвый шоколад обычно слишком невкусный и вообще непонятно, зачем его покупать, ведь кроме отвращения он ничего не вызывает.

В магазине, в который он пришёл, есть \(n\) различных плиток шоколада, \(i\)-я из которых имеет цену \(a_i\) долларов. Слишком дорогой плиткой шоколада Divan считает такую, что её цена строго выше \(r\) долларов. Слишком дешёвой плиткой шоколада он считает такую, что её цена строго меньше, чем \(l\) долларов. Диван не будет покупать плитку, если она слишком дешёвая или слишком дорогая.

Кроме того, даже если по отдельности плитки шоколада не столь уж и дорогие, Divan, конечно, не собирается всю свою прибыль тратить на них, поэтому он ограничивает свои траты на шоколад \(k\) долларами.

Ваша задача заключается в том, чтобы определить, какое максимальное число плиток шоколада Divan сможет сегодня купить.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы четыре целых числа \(n\), \(l\), \(r\) и \(k\) (\(1 \le n \le 100\), \(1 \le l \le r \le 10^9\), \(1 \le k \le 10^9\)) — количество плиток в магазине, самая низкая и самая высокая цены, по которым Divan готов купить шоколадку, и бюджет, рассчитанный на покупку шоколада соответственно.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — цены плиток шоколада в магазине.

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальное количество плиток шоколада, которые Divan сможет купить.

Примечание

В первом примере Divan сможет купить плитки шоколада под номерами \(1\) и \(3\) и потратит на это \(100\) долларов.

Во втором примере Divan сможет купить плитки шоколада под номерами \(3\) и \(4\) и потратит на это \(7\) долларов.

Во третьем примере Divan сможет купить плитки шоколада под номерами \(3\), \(4\) и \(5\), потратив на это \(12\) долларов.

В четвёртом примере Divan не может купить ни одной плитки шоколада, потому что каждую из них он считает либо слишком дешёвой, либо слишком дорогой.

В пятом примере Divan не может купить ни одной плитки шоколада, потому что первую плитку он считает слишком дешёвой, а на вторую и третью ему не хватит выделенного бюджета.

В шестом примере Divan сможет купить все плитки шоколада, которые есть в магазине.

A. Сокращение разрыва

жадные алгоритмы математика *800

Есть \(n\) зданий, состоящих из блоков, и построенных в ряд. Высота \(i\)-го здания равна \(a_i\). Вы — глава строительной бригады и хотите, чтобы построенные здания выглядели как можно приятней. За один день вы можете сделать следующую операцию:

  • Выбрать два индекса \(i\) и \(j\) (\(1 \leq i, j \leq n\); \(i \neq j\)) и переместить один блок со здания \(i\) на здание \(j\). Фактически, данная операция уменьшает \(a_i\) на \(1\) и увеличивает \(a_j\) на \(1\).

Вы считаете уродливостью зданий разницу между высотой самого высокого и самого низкого зданий. Формально говоря, уродство определяется как \(\max(a)-\min(a)\).

Какого минимально возможного уродства вы сможете достичь, имея в запасе неограниченное количество дней?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество зданий.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^7\)) — высоты зданий.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное уродство зданий.

Примечание

В первом наборе входных данных, уродство уже равно \(0\).

Во втором наборе, вы можете сделать одну операцию с \(i = 1\) и \(j = 3\). Высоты зданий станут равны \([2, 2, 2, 2]\) с уродством \(0\).

В третьем наборе, вы можете сделать, например, следующие три операции:

  1. с \(i = 3\) и \(j = 1\): высоты зданий станут равны \([2, 2, 2, 1, 5]\),
  2. с \(i = 5\) и \(j = 4\): высоты зданий станут равны \([2, 2, 2, 2, 4]\),
  3. с \(i = 5\) и \(j = 3\): высоты зданий станут равны \([2, 2, 3, 2, 3]\).
В результате уродство зданий станет равно \(1\). Можно доказать, что это — минимально возможное уродство, достижимое для данного теста.

B. И не ноль

битмаски жадные алгоритмы математика *1300

Вам задан массив из всех целых чисел из отрезка \([l, r]\) включая границы. Например, если \(l = 2\) и \(r = 5\), массив будет равен \([2, 3, 4, 5]\). Какое наименьшее количество элементов вам нужно из него удалить, чтобы побитовое И массива перестало быть равно нулю?

Побитовое И — бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях чисел.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора заданы два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 2 \cdot 10^5\)) — описание массива.

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных, массив равен \([1, 2]\). Сначала, побитовое И равно \(0\), так как \(1\ \& \ 2 = 0\). Однако, после удаления \(1\) (или \(2\)), массив станет равен \([2]\) (или \([1]\)), и его побитовое И будет равно \(2\) (или \(1\)). Можно доказать, что этот ответ оптимальный, то есть ответ равен \(1\).

Во втором наборе, массив равен \([2, 3, 4, 5, 6, 7, 8]\). Сначала, побитовое И равно \(0\). Однако после удаления \(4\), \(5\) и \(8\), массив станет равен \([2, 3, 6, 7]\), и его побитовое И будет равно \(2\). Можно доказать, что этот ответ оптимальный, то есть ответ равен \(3\). Заметим, что возможны и другие способы удалить \(3\) элемента.

C. Менора

графы жадные алгоритмы математика Перебор *1600

У вас есть особая версия меноры: она состоит из \(n\) свечей и некоторые из них уже зажжены. Мы можем описать, какие из свечей горят, с помощью бинарной строки \(s\), где \(i\)-я свечка горит тогда и только тогда, когда \(s_i=1\).

Первоначально, горящие свечки описаны строкой \(a\). За одну операцию, вы можете выбрать любую горящую в данный момент свечку — выбранная свеча продолжит гореть, а каждая из других свечей изменит свое состояние (если она горела, то потухнет, а если не горела — то загорится).

Вы хотите, чтобы в результате свечи горели так, как описывает строка \(b\). Ваша задача определить, возможно ли это и какое наименьшее количество операций нужно будет совершить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1\le n\le 10^5\)) — количество свечей.

Во второй строке каждого набора задана строка \(a\) длины \(n\), состоящая из символов 0 и 1 — первоначально состояние свечей.

В третьей строке задана строка \(b\) длины \(n\), состоящая из символов 0 и 1 — желаемое состояние свечей.

Гарантируется, что сумма \(n\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, чтобы превратить \(a\) в \(b\), или же \(-1\), если это невозможно.

Примечание

В первом наборе входных данных, две строки уже равны, а потому нам не нужно применять ни одной операции.

Во втором наборе, мы можем применить одну операцию, выбрав вторую свечку, и превратить \(01\) в \(11\).

В третьем наборе, невозможно применить ни одной операции, потому что нет ни одной горящей свечи, которую можно выбрать.

В четвертом наборе, мы можем применить следующие операции, чтобы превратить \(a\) в \(b\):

  1. Выберем \(7\)-ю свечу: \(100010{\color{red}1}11\to 011101{\color{red} 1}00\).
  2. Выберем \(2\)-ю свечу: \(0{\color{red} 1}1101100\to 1{\color{red} 1}0010011\).
  3. Выберем \(1\)-ю свечу: \({\color{red}1}10010011\to {\color{red}1}01101100\).

В пятом наборе, мы можем применить следующие операции, чтобы превратить \(a\) в \(b\):

  1. Выберем \(6\)-ю свечу: \(00101{\color{red}1}011\to 11010{\color{red}1}100\)
  2. Выберем \(2\)-ю свечу: \(1{\color{red}1}0101100\to 0{\color{red}1}1010011\)
  3. Выберем \(8\)-ю свечу: \(0110100{\color{red}1}1\to 1001011{\color{red}1}0\)
  4. Выберем \(7\)-ю свечу: \(100101{\color{red}1}10\to 011010{\color{red}1}01\)

E. Фиолетовый мелок

графы Деревья жадные алгоритмы игры математика поиск в глубину и подобное сортировки Структуры данных *2400

Два игрока, Красный и Синий, снова в деле, и этот раз они играют с цветными мелками! Сегодня озорной паре под руку попалось корневое дерево, с которым они играют в свою любимую игру, раскрашивая вершины этого дерева.

Игра выглядит следующим образом: есть дерево из \(n\) вершин с корнем в вершине \(1\), и каждая вершина первоначально белого цвета. У Красного и Синего есть ровно по одному ходу. Первым ходит Красный.

В свой ход, Красный может выполнить следующее действие произвольное количество раз:

  • Он выбирает любое поддерево корневого дерева и красит каждую из вершин поддерева в красный.
Однако, для большей честности, Красный может покрасить только \(k\) вершин дерева. Другими словами, после окончания хода Красного, не более \(k\) вершин может быть покрашено в красный.

Далее подходит очередь Синего. Он может выполнять следующее действие произвольное количество раз:

  • Он выбирает любое поддерево корневого дерева и красит каждую вершину поддерева в синий. Однако, ему нельзя выбирать поддеревья, в которых содержатся вершины, уже покрашенные в красный. Ведь в таком случае вершина получится фиолетового цвета, а никто не любит фиолетовый мелок* (англ. purple crayon).
Заметим, что нет ограничения на то, сколько вершин покрасит Синий, главное, что он не красит уже покрашенные Красным вершины.

После того как каждый сделает свой ход, счет игры определяется следующим образом: пусть \(w\) — количество оставшихся белых вершин, \(r\) — количество красных вершин, а \(b\) — количество синих вершин. Счет игры будет равен \(w \cdot (r - b)\).

Красный хочет максимизировать счет, а Синий — минимизировать. Чему будет равен счет игры, если оба игрока действуют оптимально?

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le n\)) — количество вершин в дереве и максимальное количество красных вершин.

В следующих \(n - 1\) строках заданы описания ребер дерева. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) через пробел (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — \(i\)-е ребро дерева.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно число — итоговый счет игры, если и Красный и Синий действуют оптимально.

Примечание

В первом наборе входных данных, одна из оптимальных стратегий следующая:

  • Красный выбирает для покраски поддеревья вершин \(2\) и \(3\).
  • Синий выбирает для покраски поддерево вершины \(4\).
В результате вершины \(2\) и \(3\) покрашены в красный, \(4\) — в синий, а вершина \(1\) — в белый. Счет игры равен \(1 \cdot (2 - 1) = 1\).

Во втором наборе, оптимальная стратегия следующая:

  • Красный выбирает для покраски поддерево вершины \(4\). Тем самым красит вершины \(4\) и \(5\).
  • Синий не может ничего выбрать, а потому ничего не красит.
В результате вершины \(4\) и \(5\) покрашены в красный, а вершины \(1\), \(2\) и \(3\) — белые. Счет игры равен \(3 \cdot (2 - 0) = 6\).

В третьем наборе:

Счет игры равен \(4 \cdot (2 - 1) = 4\).

B. Зеркало в строке

жадные алгоритмы Строки *1100

У вас есть строка \(s_1 s_2 \ldots s_n\), вы стоите слева от нее и смотрите направо. Вы хотите выбрать индекс \(k\) (\(1 \le k \le n\)) и поставить зеркало после \(k\)-го символа строки, таким образом, вы будете видеть строку \(s_1 s_2 \ldots s_k s_k s_{k - 1} \ldots s_1\). Какую лексикографически минимальную строку вы можете увидеть?

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\,000\)): количество наборов входных данных.

Следующие \(t\) строк содержат описания наборов, по две строки на набор.

В первой строке записано целое число \(n\) (\(1 \leq n \leq 10^5\)): длина строки.

Во второй строке записана строка \(s\) длины \(n\), состоящая из маленьких латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальную строку, которую вы можете увидеть.

Примечание

В первом примере выберем \(k = 1\), чтобы получить «cc».

Во втором примере выберем \(k = 3\), чтобы получить «cbaabc».

В третьем примере выберем \(k = 1\), чтобы получить «aa».

В четвертом примере выберем \(k = 1\), чтобы получить «bb».

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]\).

E. Лексикографически достаточно малая

жадные алгоритмы Перебор Строки Структуры данных *2200

Вам даны две строки \(s\) и \(t\) равной длины \(n\). За одну операцию вы можете поменять местами любые два соседних символа в строке \(s\).

Вам нужно сказать, какое наименьшее количество операций вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10\,000\)): количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого тестового случая содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Третья строка каждого тестового случая содержит строку \(t\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите наименьшее количество операций, которое вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\), или \(-1\), если это невозможно сделать.

A. Запрещённая подпоследовательность

жадные алгоритмы Конструктив сортировки Строки *800

Вам даны строки \(S\) и \(T\), состоящие из строчных символов латинского алфавита. Гарантируется, что \(T\) является перестановкой строки abc.

Найдите строку \(S'\), которая является лексикографически минимальной перестановкой \(S\), и при этом \(T\) не является подпоследовательностью \(S'\).

Строка \(a\) является перестановкой строки \(b\), если количество вхождений для всех различных символов одинаковое в обеих строках.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно нуля или всех) символов.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится строка \(S\) (\(1 \le |S| \le 100\)), состоящая из строчных символов латинского алфавита.

Во второй строке каждого набора входных данных содержится строка \(T\), которая является перестановкой строки abc. (Следовательно, \(|T| = 3\)).

Заметьте, что нет ограничения на сумму \(|S|\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите единственную строку \(S'\), которая является лексикографически минимальной перестановкой \(S\), и при этом \(T\) не является подпоследовательностью \(S'\).

Примечание

В первом наборе входных данных и aaaabbc, и aaaabcb лексикографически меньше, чем aaaacbb, но они содержат abc как подпоследовательность.

Во втором наборе входных данных abccc является лексикографически минимальной перестановкой cccba и не содержит acb как подпоследовательность.

В третьем наборе входных данных bcdis является лексикографически минимальной перестановкой dbsic и не содержит bac как подпоследовательность.

C. Паприка и перестановка

Бинарный поиск жадные алгоритмы математика сортировки *1300

Паприка любит перестановки. У неё есть массив \(a_1, a_2, \dots, a_n\). Она хочет сделать массив перестановкой целых чисел от \(1\) до \(n\).

Чтобы достичь этой цели, она может применять к массиву операции. За одну операцию она может выбрать два целых числа \(i\) (\(1 \le i \le n\)) и \(x\) (\(x > 0\)), и затем присвоить \(a_i := a_i \bmod x\) (то есть заменить \(a_i\) на остаток от деления \(a_i\) на \(x\)). В разных операциях выбираемые \(i\) и \(x\) могут быть разными.

Определите минимальное количество операций, необходимое, чтобы сделать массив перестановкой целых чисел от \(1\) до \(n\). Если это невозможно, выведите \(-1\).

Перестановкой называется массив, состоящий из \(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 10^5\)).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \dots, a_n\). (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, необходимое, чтобы сделать массив перестановкой целых чисел от \(1\) до \(n\), или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных единственная возможная последовательность операций, минимизирующая количество операций, следующая:

  • Выберем \(i=2\), \(x=5\). Заменим \(a_2 := a_2 \bmod 5 = 2\).

Для второго набора входных данных невозможно получить перестановку целых чисел от \(1\) to \(n\).

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\).

G. Торговая задача

жадные алгоритмы снм сортировки Структуры данных *2200

Монокарп играет в компьютерную игру (ага, опять). В этой игре довольно нестандартно реализована механика торговли.

Чтобы поторговать с кем-то из персонажей игры, Монокарп должен выбрать какую-то свою вещь и обменять ее на вещь того персонажа, с которым он торгует. У каждой вещи есть целочисленная цена. Если у Монокарпа есть вещь с ценой \(x\), он может обменять ее на вещь (ровно одну) с ценой не более \(x+k\).

Изначально у Монокарпа есть \(n\) вещей, цена \(i\)-й из них равна \(a_i\). У персонажа, с которым Монокарп торгует, изначально есть \(m\) вещей, цена \(i\)-й из них равна \(b_i\). Монокарп может поторговать с этим персонажем столько раз, сколько захочет (возможно, ноль), каждый раз меняя одну из своих вещей на вещь, принадлежащую персонажу, по описанным ранее правилам. Обратите внимание, что если Монокарп получает какую-то вещь в результате обмена, он потом может ее обменять на другую вещь (так как это теперь его вещь); и наоборот, если Монокарп отдал свою вещь в процессе обмена, он может получить ее обратно, обменяв на нее что-то еще.

Вы должны ответить на \(q\) запросов. В каждом запросе вам подается одно целое число, которое соответствует значению \(k\). Чтобы ответить на запрос, вы должны посчитать максимально возможную суммарную стоимость вещей, которые могут оказаться у Монокарпа (при условии, что вещь стоимости \(x\) можно обменивать на вещь стоимости не более \(x+k\)). Обратите внимание, что запросы независимые: Монокарп на самом деле не обменивает вещи, он просто хочет оценить максимально возможную суммарную цену вещей.

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m, q \le 2 \cdot 10^5\)).

Во второй строке заданы \(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\)) — цены вещей у персонажа, с которым торгует Монокарп.

В четвертой строке заданы \(q\) целых чисел, \(i\)-е из которых равно значению \(k\) в \(i\)-м запросе (\(0 \le k \le 10^9\)).

Выходные данные

Для каждого запроса выведите одно целое число — максимально возможную суммарную цену вещей, которые могут оказаться у Монокарпа при заданном значении \(k\) для запроса.

D. Новогодняя задача

Бинарный поиск жадные алгоритмы сортировки *1800

У Влада есть \(n\) друзей, для каждого из которых он хочет купить один подарок на Новый год.

Всего в городе есть \(m\) магазинов, в каждом из которых он может купить подарок любому из друзей. Если \(j\)-й друг (\(1 \le j \le n\)) получает подарок, купленный в магазине с номером \(i\) (\(1 \le i \le m\)), то друг получает \(p_{ij}\) единиц радости. Прямоугольная таблица \(p_{ij}\) задана во входных данных.

Влад успевает посетить не более \(n-1\) магазина (\(n\) — количество друзей). Он сам может выбрать, какие именно магазины посетит, и для каких друзей он будет покупать подарки в каждом из них.

Пусть \(j\)-й друг получил \(a_j\) единиц радости от подарка Влада. Найдем величину \(\alpha=\min\{a_1, a_2, \dots, a_n\}\). Цель Влада — купить подарки так, чтобы значение \(\alpha\) было как можно больше. Иными словами, Влад хочет максимизировать минимальную из радостей друзей.

Например, пусть \(m = 2\), \(n = 2\). Пусть радости от подарков, которые мы можем приобрести в первом магазине: \(p_{11} = 1\), \(p_{12}=2\), во втором магазине: \(p_{21} = 3\), \(p_{22}=4\).

Тогда Владу достаточно зайти только во второй магазин и купить в нем для первого друга подарок, приносящий радость \(3\), а для второго — приносящий радость \(4\). При этом величина \(\alpha\) будет равна \(\min\{3, 4\} = 3\).

Помогите Владу выбрать подарки для своих друзей так, чтобы значение \(\alpha\) было максимально возможным. Обратите внимание на то, что каждый друг должен получить один подарок. Влад может посетить не более \(n-1\) магазина (\(n\) — количество друзей). В магазине он может купить произвольное количество подарков.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(m\) и \(n\) (\(2 \le n\), \(2 \le n \cdot m \le 10^5\)) через пробел — количество магазинов и количество друзей, где \(n \cdot m\) — это произведение \(n\) на \(m\).

Затем следуют \(m\) строк, содержащих по \(n\) чисел. Число в \(i\)-й строке и \(j\)-м столбце \(p_{ij}\) (\(1 \le p_{ij} \le 10^9\)) — радость от подарка, предназначенного для друга с номером \(j\) в магазине с номером \(i\).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных — максимальное возможное значение \(\alpha\), где \(\alpha\) — минимальная из радостей от подарка по всем друзьям Влада.

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\), выполняя инкременты, невозможно.

F. Сыграем в Шляпу?

жадные алгоритмы Конструктив математика Перебор *2000

Шляпа — игра на скоростное объяснение/отгадывание слов. Это весело. Попробуйте! В этой задаче речь идёт о варианте игры, когда игроки сидят за столом и каждый играет за себя.

\(n\) человек собрались в комнате с \(m\) столами (\(n \ge 2m\)). Они хотят \(k\) раз сыграть в Шляпу. То есть за каждым столом будет сыграно \(k\) игр, каждый игрок примет участие в \(k\) играх.

Для этого на каждую игру они распределяются по столам. Во время каждой игры один игрок играет ровно за одним столом. Разные игры можно играть за разными столами.

Игроки хотят составить наиболее «честное» расписание игр. По этой причине они ищут такое расписание (распределение по столам на каждую игру), что:

  • За любым столом каждый раз играет либо \(\lfloor\frac{n}{m}\rfloor\) человек, либо \(\lceil\frac{n}{m}\rceil\) человек (то есть либо округлённое вниз \(n/m\), либо округлённое вверх \(n/m\)). За одним столом в разные игры может играть разное количество человек.
  • Посчитаем для каждого игрока величину \(b_i\) — количество раз, сколько \(i\)-й игрок сыграл за столом размера \(\lceil\frac{n}{m}\rceil\) (округлённое вверх \(n/m\)). Любые два значения \(b_i\) должны отличаться не более чем на \(1\). Иными словами, для любых двух игроков \(i\) и \(j\) должно быть верно \(|b_i - b_j| \le 1\).

Например, если \(n=5\), \(m=2\) и \(k=2\), то по требованию первого пункта за каждым столом должны играть либо два игрока, либо три игрока. Рассмотрим следующие расписания:

  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(5, 1\), а за вторым — \(2, 3, 4\). Это расписание не является «честным», так как \(b_2=2\) (второй игрок два раза играл за большим столом), а \(b_5=0\) (пятый игрок не играл за большим столом).
  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(4, 5, 2\), а за вторым — \(1, 3\). Это расписание является «честным», так все \(b=[1,2,1,1,1]\) (любые два значения \(b_i\) отличаются не более чем на \(1\)).

Найдите любое «честное» расписание игр для \(n\) человек, если они играют на \(m\) столах \(k\) игр.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из одной строки, которая содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2\cdot10^5\), \(1 \le m \le \lfloor\frac{n}{2}\rfloor\), \(1 \le k \le 10^5\)) — количество человек, столов и игр соответственно.

Гарантируется, что сумма \(nk\) (\(n\) умножить на \(k\)) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите искомое расписание — последовательность \(k\) блоков по \(m\) строк. Каждый блок соответствует одной игре, строка в блоке — одному столу. В каждую строку выводите количество игроков за столом и номера игроков (числа от \(1\) до \(n\)), кто должен играть за этим столом.

Если искомых расписаний несколько, то выведите любое из них. Можно показать, что искомое решение обязательно существует.

Вы можете выводить дополнительные пустые строки для разделения ответов на разные наборы входных данных.

G. Необычный сапёр

Бинарный поиск жадные алгоритмы поиск в глубину и подобное снм сортировки *2000

Поликарп очень любит играть в игру сапёр. Недавно он нашёл похожую игру и там такие правила.

На поле находятся мины, для каждой известны координаты её местоположения (\(x_i, y_i\)). Каждая мина имеет время жизни в секундах, после которого она взорвётся. После взрыва мина также детонирует все мины по вертикали и горизонтали на расстоянии \(k\) (две перпендикулярные линии). В итоге получаем взрыв на поле в виде символа «плюс» ('+'). Таким образом, один взрыв может вызвать новые взрывы, а новые взрывы — следующие и так далее.

Также Поликарп может сам взорвать одну любую мину в каждую секунду, начиная с нулевой. После этого также проходит цепная реакция взрывов. Мины взрываются моментально и также моментально детонируют другие мины по написанным выше правилам.

Поликарп хочет установить новый рекорд и просит вас помочь ему рассчитать, за какое минимальное количество секунд можно взорвать все мины.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка.

Далее идёт строка, которая содержит целые числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le k \le 10^9\)) — количество мин и расстояние, которое задевают мины при взрыве, соответственно.

Затем следуют \(n\) строк, \(i\)-я из которых описывает \(x\) и \(y\) координаты \(i\)-й мины и время до её взрыва (\(-10^9 \le x, y \le 10^9\), \(0 \le timer \le 10^9\)). Гарантируется, что все мины имеют различные координаты.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных — минимальное количество секунд, за которое можно взорвать все мины.

Примечание
Первый набор входных данных примера.

Первый пример:

  • Секунда \(0\): взрываем мину в клетке \((2, 2)\) она никого не задевает так как \(k=0\).
  • Секунда \(1\): взрываем мину в клетке \((0, 1)\), а мина в клетке \((0, 0)\) взрывается сама.
  • Секунда \(2\): взрываем мину в клетке \((1, 1)\), а мина в клетке \((1, 0)\) взрывается сама.

Второй пример:

  • Секунда \(0\): взрываем мину в клетке \((2, 2)\) получаем:
  • Секунда \(1\): взрывается мина в клетке \((0, 0)\) и так как \(k=2\) взрыв задевает мины в клетках \((0, 1)\) и \((1, 0)\), а их взрывы задевают мину в клетке \((1, 1)\) и на поле не остаётся мин.

B. Треугольники на прямоугольнике

геометрия жадные алгоритмы математика *1000

На плоскости нарисован прямоугольник с противоположными углами в \((0, 0)\) и \((w, h)\) и сторонами, параллельными осям координат.

Задан список из точек на плоскости таких, что каждая точка лежит на стороне прямоугольника, но не в его углу. Также на каждой стороне прямоугольника лежит не менее двух точек.

Ваша задача — выбрать три точки таким образом, что:

  • ровно две из них лежат на одной и той же стороне прямоугольника;
  • площадь треугольника, построенного на них, максимально возможна.

Выведите удвоенную площадь этого треугольника. Можно показать, что удвоенная площадь треугольника, построенного на точках с целочисленными координатами, всегда целая.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(w\) и \(h\) (\(3 \le w, h \le 10^6\)) — координаты угла прямоугольника.

В следующих двух строках содержится описание точек на горизонтальных сторонах. Сначала целое число \(k\) (\(2 \le k \le 2 \cdot 10^5\)) — количество точек. Затем \(k\) целых чисел \(x_1 < x_2 < \dots < x_k\) (\(0 < x_i < w\)) — \(x\) координаты точек в возрастающем порядке. \(y\) координата в первой строке равна \(0\), а во второй строке — \(h\).

В следующих двух строках содержится описание точек на вертикальных сторонах. Сначала целое число \(k\) (\(2 \le k \le 2 \cdot 10^5\)) — количество точек. Затем \(k\) целых чисел \(y_1 < y_2 < \dots < y_k\) (\(0 < y_i < h\)) — \(y\) координаты точек в возрастающем порядке. \(x\) координата в первой строке равна \(0\), а во второй строке — \(w\).

Суммарное количество точек на всех сторонах во всех наборах входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — удвоенную максимальную площадь треугольника, образованного такими тремя точками, что ровно две из них лежат на одной и той же стороне.

Примечание

Точки в первом наборе входных данных в примере:

  • \((1, 0)\), \((2, 0)\);
  • \((2, 8)\), \((3, 8)\), \((4, 8)\);
  • \((0, 1)\), \((0, 4)\), \((0, 6)\);
  • \((5, 4)\), \((5, 5)\).

Наибольший треугольник образон точками \((0, 1)\), \((0, 6)\) и \((5, 4)\) — его площадь равна \(\frac{25}{2}\). Поэтому удвоенная площадь равна \(25\). Две точки на одной стороне: \((0, 1)\) и \((0, 6)\).

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' так, чтобы ее получить.

D. Без сдачи

жадные алгоритмы Конструктив Перебор *2000

Однажды, рано утром, вы решили сходить в магазин неподалеку и купить там пачку чипсов. В магазине продаются чипсы \(n\) разных вкусов. Пачка чипсов с \(i\)-м вкусом стоит \(a_i\) бурлей.

В магазине могут закончиться чипсы каких-то вкусов, а потому вы решили выбрать пачку уже после того как придете в магазин. Однако у данного плана есть две серьезные проблемы:

  1. у вас есть только монеты номиналом \(1\), \(2\) и \(3\) бурля;
  2. так как еще утро, в магазине вас попросят заплатить без сдачи, т. е. если вы выберете пачку чипсов с \(i\)-м вкусом, вы должны будете заплатить ровно \(a_i\) бурлей.

Носить много монет тяжело, а потому вам хочется взять наименьшее суммарное количество монет. Соответственно, вас интересует вопрос: какое наименьшее количество монет вам нужно будет взять с собой, чтобы вы могли расплатиться за пачку чипсов любого вкуса без сдачи?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 100\)) — количество вкусов чипсов в магазине.

Во второй строке каждого запроса заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — стоимости пачек с соответствующими вкусами.

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее количество монет, которое вам понадобится взять с собой, чтобы купить пачку чипсов любого вкуса без сдачи.

Примечание

В первом наборе входных данных, вы можете, например, взять с собой \(445\) монеты с номиналом \(3\) и \(1\) монету номинала \(2\). Таким образом, вы наберете \(1337 = 445 \cdot 3 + 1 \cdot 2\).

Во втором наборе, вы можете, например, взять \(2\) монеты номинала \(3\) и \(2\) монеты номинала \(2\). Так вы сможете заплатить как ровно \(8 = 2 \cdot 3 + 1 \cdot 2\), так и ровно \(10 = 2 \cdot 3 + 2 \cdot 2\).

В третьем наборе, достаточно взять \(1\) монету номинала \(3\) и \(2\) монеты номинала \(1\).

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\) во второй строке.

B. Магазин целых чисел

жадные алгоритмы реализация Структуры данных *1500

Магазин целых чисел продаёт \(n\) отрезков, \(i\)-й из которых состоит из чисел от \(l_i\) до \(r_i\) и стоит \(c_i\) монет.

Завтра Вася отравится в этот магазин и купит несколько отрезков. Он получит все числа, лежащие хотя бы в одном из выбранных отрезков. Количество монет, которое он потратит на покупку равно сумме стоимостей отрезков, которые он купит.

В качестве подарка за покупку, Вася дополнительно получит ещё несколько целых чисел. Число \(x\), не купленное Васей ранее, он получит тогда и только тогда, когда для \(x\) выполняются два следующих условия:

  • Найдётся купленное Васей число \(l\), меньшее \(x\).
  • Найдётся купленное Васей число \(r\), большее \(x\).

Число \(x\) Вася может получить в подарок не более одного раза, таким образом все числа, которые получит Вася будут различными.

Например, если Вася купит отрезок \([2, 4]\) за \(20\) монет и отрезок \([7, 8]\) за \(22\) монеты, он потратит \(42\) монеты и получит числа \(2, 3, 4, 7, 8\) как содержимое отрезков. В качестве подарка он получит числа \(5\) и \(6\).

По техническим причинам, завтра в магазине будут доступны к покупке только \(s\) первых отрезков (то есть отрезки \([l_1, r_1], [l_2, r_2], \ldots, [l_s, r_s]\)). Вася не сможет купить отрезки, не доступные к покупке.

Вася хочет получить (купить или получить в подарок) как можно больше целых чисел. Если это можно сделать разными способами, то он выберет самый дешёвый из них.

Для всех значений \(s\) от \(1\) до \(n\) определите, сколько монет потратит Вася, если к покупке будут доступны только \(s\) первых отрезков.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 10^5\)) — количество отрезков в магазине.

В следующих \(n\) строках дано по три числа \(l_i\), \(r_i\), \(c_i\) (\(1 \leq l_i \leq r_i \leq 10^9, 1 \leq c_i \leq 10^9\)) — концы \(i\)-го отрезка и его стоимость.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел: \(s\)-е (\(1 \leq s \leq n\)) из них должно быть равно количеству монет, которое потратит Вася, если к покупке будут доступны только первые \(s\) отрезков.

Примечание

В первом наборе входных данных при \(s = 1\) Вася может купить только один отрезок \([2, 4]\) за \(20\) монет и получить \(3\) числа.

Способ получить \(7\) чисел за \(42\) монеты при \(s = 2\) описан в условии.

Во втором наборе входных данных обратите внимание на то, что в магазине могут быть одинаковые отрезки.

D. Зимний поход

жадные алгоритмы Конструктив математика *2100

Циклическая страна представляет клетчатое поле \(2n \times 2n\). Строки этого поля пронумерованы числами от \(1\) до \(2n\) сверху вниз, а столбцы пронумерованы числами от \(1\) до \(2n\) слева направо. Клетка \((x, y)\) — это клетка на пересечении строки \(x\) и столбца \(y\) для \(1 \leq x \leq 2n\) и \(1 \leq y \leq 2n\).

Сейчас Ваши \(n^2\) друзей находятся в левом верхнем углу этого поля. Иными словами, в каждой клетке \((x, y)\), где \(1 \leq x, y \leq n\) находится ровно один Ваш друг. В некоторых из остальных клеток поля находятся сугробы.

Ваши друзья хотят переместиться в правый нижний угол этого поля. Для этого в каждой клетке \((x, y)\), для которой \(n+1 \leq x, y \leq 2n\) должен оказаться ровно один друг. При этом неважно, в какой клетке окажется каждый друг.

Вы решили помочь своим друзьям совершить поход.

Вы будете давать друзьям инструкции по перемещению одного из следующих видов:

  • Выбрать некоторую строку \(x\). Все друзья, находящиеся в этой строке перемещаются в следующую клетку этой строки. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x, y + 1)\) для \(1 \leq y < 2n\), a друг из клетки \((x, 2n)\) окажется в клетке \((x, 1)\).
  • Выбрать некоторую строку \(x\). Все друзья, находящиеся в этой строке перемещаются в предыдущую клетку этой строки. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x, y - 1)\) для \(1 < y \leq 2n\), а друг из клетки \((x, 1)\) окажется в клетке \((x, 2n)\).
  • Выбрать некоторый столбец \(y\). Все друзья, находящиеся в этом столбце перемещаются в следующую клетку этого столбца. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x + 1, y)\) для \(1 \leq x < 2n\), а друг из клетки \((2n, y)\) окажется в клетке \((1, y)\).
  • Выбрать некоторый столбец \(y\). Все друзья, находящиеся в этом столбце перемещаются в предыдущую клетку этого столбца. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x - 1, y)\) для \(1 < x \leq 2n\), а друг из клетки \((1, y)\) окажется в клетке \((2n, y)\).

Обратите внимание, как ведут себя друзья, находящиеся на границах клетчатого поля в этих инструкциях.

Пример применения третьей операции ко второму столбцу. Здесь разноцветные кружки обозначают Ваших друзей, а синим покрашены клетки с сугробами.

Вы можете давать инструкции любое количество раз. Вы можете давать инструкции разных видов. Если после одной из этих инструкций один из друзей окажется в сугробе, то он замёрзнет.

Чтобы друзья не замёрзли, Вы можете до объявления первой инструкции убрать некоторые сугробы с помощью следующей операции:

  • Выбрать клетку \((x, y)\), в которой сейчас находится сугроб и убрать его за \(c_{x, y}\) монет.

Вы можете делать эту операцию любое количество раз.

Вы хотите потратить как можно меньше монет на уборку сугробов, а затем дать друзьям инструкции таким образом, чтобы они переместились в правый нижний угол поля и никто из них не замёрз.

Определите, сколько монет Вы потратите.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 250\)) — половина длины стороны поля.

В следующих \(2n\) строках дано по \(2n\) чисел \(c_{i, 1}, c_{i, 2}, \ldots, c_{i, 2n}\) (\(0 \leq c_{i, j} \leq 10^9\)) — стоимости уборки сугробов в каждой клетке. Если \(c_{i, j} = 0\) для некоторых \(i, j\), то в клетке \((i, j)\) нет сугроба. Иначе в клетке \((i, j)\) есть сугроб.

Гарантируется, что \(c_{i, j} = 0\) для \(1 \leq i, j \leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(250\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество монет, которое Вам нужно потратить.

Примечание

В первом наборе входных данных можно убрать сугробы в клетках \((2, 1)\) и \((2, 2)\) за \(100\) монет. После этого Вы можете дать инструкции

  • Перемещение в предыдущую клетку в первом столбце. После этого друг окажется в клетке \((2, 1)\).
  • Перемещение в следующую клетку во второй строке. После этого друг окажется в клетке \((2, 2)\) и закончит поход.

Во втором наборе входных данных можно убрать все сугробы на клетках столбцов \(3\) и \(4\) за \(22\) монеты. После этого Вы можете дать инструкции

  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в четвёртом столбце.
  • Перемещение в следующую клетку в четвёртом столбце.

Можно показать, что в результате этих инструкций ни один из друзей не замёрзнет, и что нельзя убрать сугробы меньшей суммарной стоимости.

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\) соответственно. Тогда можно назначить первой группе первого преподавателя, а второй группе — третьего преподавателя.

F. Странные инструкции

жадные алгоритмы реализация Структуры данных *2700

У Даши есть \(10^{100}\) монет. Недавно она нашла бинарную строку \(s\) длины \(n\) и несколько операций, с помощью которых её можно изменять (каждую операцию можно делать сколько угодно раз):

  1. Заменить подстроку строки \(s\), равную 00, на 0 и получить \(a\) монет.
  2. Заменить подстроку строки \(s\), равную 11, на 1 и получить \(b\) монет.
  3. Удалить из строки \(s\) символ 0, заплатив за это \(c\) монет.

Оказалось, что при выполнении операций нужно соблюдать следующее правило:

  • Запрещается делать две операции с номерами одинаковой чётности подряд. Операции пронумерованы числами от \(1\) до \(3\) в порядке, в котором они даны выше.

Определите максимальное количество монет, которое Даша может получить делая эти операции и не нарушая правило.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано четыре целых числа \(n\), \(a\), \(b\), \(c\) (\(1 \leq n \leq 10^5, 1 \leq a, b, c \leq 10^9\)).

Во второй строке дана бинарная строка \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ.

Примечание

В первом наборе входных данных одна из оптимальных последовательностей операций такая: 01101 \(\rightarrow\) 0101 \(\rightarrow\) 011 \(\rightarrow\) 01. Эта последовательность состоит из операций \(2\), \(3\) и \(2\) в таком порядке. Она удовлетворяет всем правилам и даёт \(3\) монеты. Можно показать, что нельзя получить больше монет, поэтому ответ \(3\).

Во втором наборе входных данных одна из оптимальных последовательностей операций такая: 110001 \(\rightarrow\) 11001 \(\rightarrow\) 1001 \(\rightarrow\) 101.

В третьем наборе входных данных одна из оптимальных последовательностей операций такая: 011110 \(\rightarrow\) 01110 \(\rightarrow\) 1110 \(\rightarrow\) 110 \(\rightarrow\) 11 \(\rightarrow\) 1.

B. Berland Music

жадные алгоритмы математика сортировки Структуры данных *1000

Berland Music — это стриминговый сервис, созданный специально для поддержки локальных Берляндских исполнителей. Его разработчики в данный момент работают над модулем рекомендаций песен.

Представим, что Монокарпу порекомендовали \(n\) песен, пронумерованных от \(1\) до \(n\). У \(i\)-й песни предсказанный рейтинг равен \(p_i\), где \(1 \le p_i \le n\) и каждое целое число от \(1\) до \(n\) встречается ровно один раз. Другими словами, \(p\) — перестановка.

После прослушивания каждой песни Монокарп ее оценил — понравилась она ему или нет. Последовательность его оценок представлена строкой \(s\) такой, что \(s_i=0\) значит, что ему не понравилась \(i\)-я песня, а \(s_i=1\) значит, что понравилась.

Теперь сервису надо пересчитать рейтинги песен так, чтобы:

  • новые рейтинги \(q_1, q_2, \dots, q_n\) все еще были перестановкой (\(1 \le q_i \le n\); каждое целое число от \(1\) до \(n\) встречается ровно один раз);
  • каждая песня, которая понравилась Монокарпу, имеет рейтинг больше каждой, которая ему не понравилась (формально, для всех \(i, j\) таких, что \(s_i=1\) и \(s_j=0\), выполняется \(q_i>q_j\)).

Среди всех корректных перестановок \(q\) найдите такую, у которой значение \(\sum\limits_{i=1}^n |p_i-q_i|\) наименьшее, где \(|x|\) — это абсолютное значение \(x\).

Выведите перестановку \(q_1, q_2, \dots, q_n\). Если существует несколько ответов, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(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\). \(0\) значит, что Монокарпу не понравилась песня, а \(1\) — что понравилась.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите перестановку \(q\) — пересчитанные рейтинги песен. Если существует несколько ответов таких, что \(\sum\limits_{i=1}^n |p_i-q_i|\) минимально, выведите любой из них.

Примечание

В первом наборе входных данных существует только одна перестановка \(q\) такая, что каждая понравившаяся песня имеет рейтинг выше, чем каждая не понравившаяся: песня \(1\) получает рейтинг \(2\), а песня \(2\) — рейтинг \(1\). \(\sum\limits_{i=1}^n |p_i-q_i|=|1-2|+|2-1|=2\).

Во втором наборе входных данных Монокарпу понравились все песни, поэтому корректны все перестановки. Перестановка с минимальной суммой абсолютных разностей равна перестановке \(p\). Ее стоимость равна \(0\).

C. Присвоить или уменьшить

Бинарный поиск жадные алгоритмы Перебор сортировки *1600

Вам задан целочисленный массив \(a_1, a_2, \dots, a_n\) и целое число \(k\).

За один шаг, вы можете

  • либо выбрать некоторый индекс \(i\) и уменьшить \(a_i\) на единицу (сделать \(a_i = a_i - 1\));
  • либо выбрать два индекса \(i\) и \(j\) и присвоить элементу \(a_i\) значение \(a_j\) (сделать \(a_i = a_j\)).

За какое наименьшее количество шагов вы можете сделать сумму массива \(\sum\limits_{i=1}^{n}{a_i} \le k\)? (В массиве разрешены отрицательные элементы).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Во первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^{15}\)) — размер массива \(a\) и верхнее ограничение на сумму.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите одно число — наименьшее количество шагов для получения \(\sum\limits_{i=1}^{n}{a_i} \le k\).

Примечание

В первом наборе входных данных, вам нужно уменьшить \(a_1\) \(10\) раз, чтобы получить сумму не более \(k = 10\).

Во втором наборе, сумма массива \(a\) уже не превосходит \(69\), а потому вам не нужно ничего менять.

В третьем наборе, вы можете, например:

  1. присвоить \(a_4 = a_3 = 1\);
  2. уменьшить \(a_4\) на единицу, и получить \(a_4 = 0\).
В результате вы получите массив \([1, 2, 1, 0, 1, 2, 1]\) с суммой, не превосходящей \(8\), за \(1 + 1 = 2\) шага.

В четвертом наборе, вы можете, например:

  1. выбрать \(a_7\) и уменьшить его на один \(3\) раза; вы получите \(a_7 = -2\);
  2. выбрать \(4\) элемента \(a_6\), \(a_8\), \(a_9\) и \(a_{10}\) и присвоить им значение \(a_7 = -2\).
В результате вы получите массив \([1, 2, 3, 1, 2, -2, -2, -2, -2, -2]\) с суммой, меньше или равной \(1\), за \(3 + 4 = 7\) шагов.

E. Тест по математике

битмаски жадные алгоритмы Перебор *2200

Петя — учитель по математике. \(n\) его студентов написали тест, состоящий из \(m\) вопросов. Для каждого студента известно на какие вопросы он ответил верно, а на какие нет.

Если студент правильно ответил на \(j\)-й вопрос, он получает \(p_j\) баллов (иначе он получает \(0\) баллов). Причем баллы за вопросы распределены так, что массив \(p\) является перестановкой чисел от \(1\) до \(m\).

Для \(i\)-го студента Петя знает, что он ожидает получить \(x_i\) баллов за тест. Пете стало интересно, насколько неожиданными могут быть результаты. Петя считает, что неожиданность результатов для студентов равна \(\sum\limits_{i=1}^{n} |x_i - r_i|\), где \(r_i\) — количество баллов, которое \(i\)-й студент получил за тест.

Ваша задача — помочь Пете, найти такую перестановку \(p\), для которой неожиданность результатов максимальна. Если оптимальных ответов несколько, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10\); \(1 \le m \le 10^4\)) — количество студентов и количество вопросов соответственно.

Вторая строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i \le \frac{m(m+1)}{2}\)), где \(x_i\) — количество баллов, которое ожидает получить \(i\)-й студент.

Далее следуют \(n\) строк, \(i\)-я строка содержит строку \(s_i\) (\(|s_i| = m; s_{i, j} \in \{0, 1\}\)), где \(s_{i, j}\) равно \(1\), если \(i\)-й студент ответил правильно на \(j\)-й вопрос, и \(0\) в противном случае.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(m\) целых чисел — перестановку \(p\), для которой неожиданность результатов максимальна. Если оптимальных ответов несколько, выведите любой из них.

C. Сбалансированные кучки камней

Бинарный поиск жадные алгоритмы *1600

В ряд находятся \(n\) кучек камней. В \(i\)-й кучке изначально \(h_i\) камней. Вы хотите изменить число камней в кучках, выполнив следующий процесс один раз:

  • Вы идете по кучкам от \(3\)-й до \(n\)-й, в таком порядке.
  • Пусть \(i\) — номер текущей кучки.
  • Вы можете выбрать целое число \(d\) (\(0 \le 3 \cdot d \le h_i\)), переместить \(d\) камней из \(i\)-й кучки в \((i - 1)\)-ю кучку, и \(2 \cdot d\) камней из \(i\)-й кучки в \((i - 2)\)-ю.
  • Таким образом, \(h_i\) уменьшается на \(3 \cdot d\), \(h_{i - 1}\) увеличивается на \(d\), и \(h_{i - 2}\) увеличивается на \(2 \cdot d\).
  • Вы можете выбирать различные или одинаковые \(d\) для различных операций. Некоторые кучки могут стать пустыми, но они все еще считаются за кучки.

Какое наибольшее число камней в наименьшей кучке может получиться после завершения процесса?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(h_1, h_2, h_3, \ldots, h_n\) (\(1 \le h_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное число камней, которое может содержать наименьшая по количеству камней кучка после завершения процесса.

Примечание

В первом примере изначально размеры кучек равны \([1, 2, 10, 100]\). Мы можем перемещать камни следующим образом.

  • переместить \(3\) и \(6\) камней с \(3\)-й кучки на \(2\)-ю и \(1\)-ю кучки соответственно. Размеры кучек будут равны \([7, 5, 1, 100]\);
  • Переместить \(6\) и \(12\) камней с последней кучки на \(3\)-ю и \(2\)-ю кучки соответственно. Размеры кучек будут равны \([7, 17, 7, 82]\).

Во втором наборе размер последней кучки равен \(1\) и мы не можем его увеличить.

В третьем наборе оптимально не перемещать никакие камни.

В четвертом примере можно достичь состояния, в котором размеры кучек равны \([3, 5, 3, 4, 3, 3]\).

E. Дублирование среднего

Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *2500

Дано бинарное дерево из \(n\) вершин. Вершины дерева пронумерованы от \(1\) до \(n\), корень дерева имеет номер \(1\). Каждая вершина может не иметь детей, иметь только правого или только левого ребенка, или иметь двух детей. Для удобства обозначим за \(l_u\) и \(r_u\) левого и правого ребенка вершины \(u\) соответственно, при этом \(l_u = 0\), если у \(u\) нет левого ребенка, и \(r_u = 0\), если у \(u\) нет правого ребенка.

В каждой вершине дерева записана некоторая строка, изначально состоящая из одного символа \(c_u\). Определим строковое представление дерева как конкатенацию всех строк, записанных в вершинах, в порядке центрированного обхода. Формально, пусть \(f(u)\) — строковое представление поддерева с корнем в вершине \(u\). \(f(u)\) определена так: \(\) f(u) = \begin{cases} \texttt{<пустая строка>,} & \text{если }u = 0; \\ f(l_u) + c_u + f(r_u) & \text{иначе}, \end{cases} \(\) где \(+\) обозначает строковую конкатенацию.

Представление всего дерева это \(f(1)\).

Для каждой вершины мы можем продублировать строку, записанную в ней, не более одного раза, а именно, заменить \(c_u\) на \(c_u + c_u\). Эта операция возможна только если \(u\) — корень дерева, или строка, записанная в родителе этой вершины уже продублирована.

Вам дано дерево и целое число \(k\). Какое лексикографически минимальное строковое представление дерево может иметь, если мы можем продублировать строку в не более чем \(k\) вершинах?

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Вторая строка содержит строку \(c\), состоящую из \(n\) маленьких букв латинского алфавита, где \(c_i\) — строка, записанная в вершине \(i\) изначально, \(1 \le i \le n\). Обратите внимание, что данная строка \(c\) не является начальным строковым представлением дерева.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i, r_i \le n\)). Если у \(i\)-й вершины нет левого ребенка, \(l_i = 0\), и если у \(i\)-й вершины нет правого ребенка, \(r_i = 0\).

Гарантируется, что данные значения описывают корректное бинарное дерево с корнем в \(1\).

Выходные данные

Выведите одну строку, содержащую лексикографически минимальное строковое представление, которое может иметь дерево после не более чем в \(k\) вершинах строка будет продублирована.

Примечание

Рисунке ниже иллюстрируют примеры. Число в вершине обозначает номер вершины, а строка в нижнем индексе — строку, написанную в вершине. Справа находится строковое представление дерева, где каждая буква имеет цвет соответствующей вершине дерева.

Ниже находится дерево для первого примера. Мы продублировали строки в вершинах \(1\) и \(3\). Строку в вершине \(2\) не нужно дублировать, так как в таком случае представление будет «bbaaab», что лексикографически больше, чем «baaaab».

Во втором примере можно продублировать строки в вершинах \(1\) и \(2\). Обратите внимание, что если продублировать только строку в корне, то представление будет хуже, чем у изначального дерева.

В третьем примере не нужно ничего дублировать. Даже если мы продублируем строку в вершине \(3\), мы будем обязаны также продублировать строку в вершине \(2\), что сделает результат хуже.

Нет способа получить строку «darkkcyan» из дерева с начальным представлением «darkcyan» :(.

C. Деление на два и перестановка

жадные алгоритмы Конструктив математика Паросочетания Потоки *1100

Вам дан массив \(a\), состоящий из \(n\) целых положительных чисел. Над ним вы можете совершать операции.

За одну операцию можно заменить любой элемент массива \(a_i\) на \(\lfloor \frac{a_i}{2} \rfloor\), то есть на целую часть от деления \(a_i\) на \(2\) (округление вниз).

Проверьте, можно ли за произвольное количество операций (возможно, \(0\)) сделать так, чтобы массив \(a\) стал перестановкой чисел от \(1\) до \(n\) — то есть содержал все числа от \(1\) до \(n\), каждое по одному разу.

Например, если \(a = [1, 8, 25, 2]\), \(n = 4\), то ответ положительный. Можно поступить так:

  1. Заменим \(8\) на \(\lfloor \frac{8}{2} \rfloor = 4\), тогда \(a = [1, 4, 25, 2]\).
  2. Заменим \(25\) на \(\lfloor \frac{25}{2} \rfloor = 12\), тогда \(a = [1, 4, 12, 2]\).
  3. Заменим \(12\) на \(\lfloor \frac{12}{2} \rfloor = 6\), тогда \(a = [1, 4, 6, 2]\).
  4. Заменим \(6\) на \(\lfloor \frac{6}{2} \rfloor = 3\), тогда \(a = [1, 4, 3, 2]\).
Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных содержит ровно две строки. В первой из них записано целое число \(n\) (\(1 \le n \le 50\)), во второй записаны целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если можно сделать так, чтобы массив \(a\) стал перестановкой чисел от \(1\) до \(n\),
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый тест разобран в тексте условия задачи.

Во втором тесте получить искомый массив невозможно.

D. Раскраска палиндромов

Бинарный поиск жадные алгоритмы сортировки Строки *1400

У вас есть строка \(s\), состоящая из строчных букв латинского алфавита.

Вы можете покрасить некоторые буквы в цвета от \(1\) до \(k\). Необязательно красить все буквы. Для каждого цвета должна быть буква, покрашенная в этот цвет.

Затем вы можете сколько угодно раз менять местами любые два символа, покрашенные в один цвет.

После этого будет создано \(k\) строк, \(i\)-я из них будет содержать все символы, покрашенные в цвет \(i\), записанные в порядке их следования в строке \(s\).

Ваша задача покрасить символы строки так, чтобы все полученные \(k\) строк были палиндромами, а длина самой короткой из этих \(k\) строк была как можно больше.

Прочтите пояснение к первому набору входных данных примера, если вам требуется пояснение к условию задачи.

Напомним, что строка является палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, строки abacaba, cccc, z и dxd являются палиндромами, а строки abab и aaabaa — нет.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — длина строки и число цветов, в которые можно красить её буквы. Вторая строка описания каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма длин всех строк в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную длину самой короткой строки-палиндрома, которую возможно получить.

Примечание
  • В первом наборе входных данных \(s\)bxyaxzay», \(k=2\). Далее будем использовать индексы в строке от \(1\) до \(8\). Подойдет следующая раскраска: \(\mathtt{\mathbf{\color{red}{b}\color{blue}{xy}\color{red}{a}\color{blue}{x}z\color{red}{a}\color{blue}{y}}}\) (буква z осталась непокрашенной). После покраски:
    • поменяем местами два красных символа (с индексами \(1\) и \(4\)) местами, получим \(\mathtt{\mathbf{\color{red}{a}\color{blue}{xy}\color{red}{b}\color{blue}{x}z\color{red}{a}\color{blue}{y}}}\);
    • поменяем местами два синих символа (с индексами \(5\) и \(8\)) местами, получим \(\mathtt{\mathbf{\color{red}{a}\color{blue}{xy}\color{red}{b}\color{blue}{y}z\color{red}{a}\color{blue}{x}}}\).

    Теперь, если для каждого из двух цветов выписать соответствующие буквы слева направо, то получим две строки \(\mathtt{\mathbf{\color{red}{aba}}}\) и \(\mathtt{\mathbf{\color{blue}{xyyx}}}\). Обе они являются палиндромами, длина наименьшей равна \(3\). Можно показать, что большую длину наименее длинного палиндрома достичь нельзя.

  • Во втором наборе входных данных подойдёт такая раскраска: \([1, 1, 2, 2, 3, 3]\). Менять символы местами не нужно. Обе полученные строки равны aa, они являются палиндромами и их длина равна \(2\).
  • В третьем наборе входных данных можно покрасить любой символ и взять его в строку.
  • В четвёртом наборе входных данных можно покрасить \(i\)-й символ в цвет \(i\).
  • В пятом наборе входных данных можно покрасить в каждый из цветов по одному символу.
  • В шестом наборе входных данных подойдёт такая раскраска: \([1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0]\). Переставим символы так, чтобы получить палиндромы abcba и acbca.

G. Дерево минимального ора

битмаски графы жадные алгоритмы поиск в глубину и подобное снм *1900

В последнее время Влад увлёкся остовными деревьями, так что его друзья не долго думая подарили ему на день рождения связный взвешенный неориентированный граф из \(n\) вершин и \(m\) рёбер.

Влад определил орность остовного дерева как побитовое ИЛИ всех его весов и теперь его интересует, какова минимальная возможная орность, которой можно добиться, выбрав некоторое остовное дерево. Остовное дерево — связный подграф данного графа, не содержащий циклов.

Иными словами вы хотите оставить \(n-1\) ребро, так чтобы граф остался связным и побитовое ИЛИ весов рёбер было как можно меньше. Вы должны найти само побитовое ИЛИ.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка.

Далее следуют два числа \(n\) и \(m\) (\(3 \le n \le 2 \cdot 10^5, n - 1 \le m \le 2 \cdot 10^5\)) — количество вершин и рёбер графа, соответственно.

Следующие \(m\) строк содержат описание рёбер. Строка \(i\) содержит три числа \(v_i\), \(u_i\) и \(w_i\) (\(1 \le v_i, u_i \le n\), \(1 \le w_i \le 10^9\), \(v_i \neq u_i\)) — вершины, которые соединяет ребро, и его вес.

Гарантируется, что сумма \(m\) и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и каждый тест содержит связный граф.

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных — минимальную возможную орность остовного дерева.

Примечание
Изначальный граф из первого примера.
Орность такого дерева равна 2 or 2 = 2 и является оптимальной.
Оставив ребро веса \(1\) мы получим орность 1 or 2 = 3.

A. Древняя цивилизация

битмаски жадные алгоритмы математика *800

Марсианские ученые исследуют Ганимед, один из многочисленных спутников Юпитера. Недавно на нем были обнаружены руины древней цивилизации. Ученые доставили на Марс несколько табличек с надписями на неизвестном науке языке.

Было установлено, что жители Ганимеда использовали алфавит из двух букв, причем каждое слово имело фиксированную длину — ровно \(\ell\) букв. Поэтому ученые решили записывать каждое слово этого языка как целое положительное число от \(0\) до \(2^{\ell} - 1\). Первой букве алфавита соответствуют нули в двоичной записи числа, а второй букве алфавита — единицы.

Одно и то же слово может иметь в языке разные формы. Тогда необходимо восстановить начальную форму слова. Ниже описано, как это делается.

Назовем расстоянием между двумя словами количество позиций, в которых эти слова различаются. Например, расстояние между словами \(1001_2\) и \(1100_2\) (в двоичной записи) равно двум, т. к. они имеют разные буквы на второй и четвертой позициях, если считать слева направо. Будем в дальнейшем обозначать расстояние между словами \(x\) и \(y\) как \(d(x, y)\).

Пусть слово имеет \(n\) форм, \(i\)-я из которых описывается целым числом \(x_i\). Все \(x_i\) не обязательно различны, т. к. две разные формы слова могут записываться одинаково. Рассмотрим некоторое слово \(y\). Тогда близость слова \(y\) равна сумме расстояний до каждой из форм исследуемого слова, т. е. сумме \(d(x_i, y)\) по всем \(1 \le i \le n\).

Начальной формой является слово \(y\) с минимально возможной близостью.

Вам необходимо помочь ученым и написать программу, которая находит начальную форму слова по всем его известным формам. Обратите внимание, что начальная форма не обязательно должна совпадать с какой-либо из известных \(n\) форм слова.

Входные данные

В первой строке входных данных находится целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных находится два целых числа \(n\) и \(\ell\) (\(1 \le n \le 100\), \(1 \le \ell \le 30\)) — количество форм слова и количество букв в одной форме.

Во второй строке каждого набора входных данных находится \(n\) целых чисел \(x_i\) (\(0 \le x_i \le 2^\ell - 1\)) — формы слова. Числа не обязательно являются различными.

Выходные данные

Для каждого теста выведите одно целое число — начальную форму слова, т. е. такое \(y\) (\(0 \le y \le 2^\ell - 1\)), что сумма \(d(x_i, y)\) по всем \(1 \le i \le n\) минимально возможная. Обратите внимание, что \(y\) не обязано совпадать с каким-либо числом из \(x_i\).

Если вариантов восстановить начальную форму слова несколько, выведите любой из них.

Примечание

Рассмотрим примеры из условия.

В первом примере слова в двоичной записи записываются как \(x_1 = 10010_2\), \(x_2 = 01001_2\) и \(x_3 = 10101_2\). Пусть \(y = 10001_2\). Тогда \(d(x_1, y) = 2\) (различие в четвертой и пятой позиции), \(d(x_2, y) = 2\) (различие в первой и второй позиции), \(d(x_3, y) = 1\) (различие в третьей позиции). Получаем, что близость равна \(2 + 2 + 1 = 5\). Можно показать, что меньшего значения близости добиться невозможно.

Во втором примере все формы слова одинаковы и равны \(18\) (\(10010_2\) в двоичной записи), поэтому начальная форма тоже равна \(18\). Как нетрудно догадаться, близость в таком случае равна нулю.

B. Элементарные частицы

жадные алгоритмы Перебор сортировки *1100

Марсиане активно занимаются межпланетной торговлей. А город Олимп-Сити, известный своим космодромом, давно стал местом, куда поступают товары со всех уголков Галактики. Чтобы перевозить еще больше грузов с далеких планет, марсианам необходимы быстрые космические корабли.

Группа ученых как раз проводит эксперименты, чтобы построить быстрый двигатель для нового космического корабля. В текущем эксперименте участвует последовательность из \(n\) элементарных частиц, где \(i\)-я частица имеет тип \(a_i\).

Назовем подотрезком последовательности частиц (\(a_1, a_2, \dots, a_n\)) последовательность (\(a_l, a_{l+1}, \dots, a_r\)) для некоторой левой границы \(l\) и правой границы \(r\) (\(1 \le l \le r \le n\)). Например, у последовательности \((1\ 4\ 2\ 8\ 5\ 7)\) ее подотрезком при \(l=2\) и \(r=4\) является последовательность \((4\ 2\ 8)\). Также скажем, что два подотрезка являются различными, если хотя бы одна из границ этих подотрезков не совпадает.

Обратите внимание, что подотрезки могут быть одинаковыми как последовательности, но при этом считаться различными. Например, возьмем последовательность \((1\ 1\ 1\ 1\ 1)\) и два подотрезка: один с \(l=1\) и \(r=3\), другой — с \(l=2\) и \(r=4\). Оба подотрезка равны \((1\ 1\ 1)\), но при этом считаются различными, поскольку их левая и правая границы не совпадают.

Ученые хотят провести реакцию и получить два различных подотрезка одинаковой длины. Обозначим эту длину \(k\). При этом полученная пара подотрезков должна быть гармоничной, т. е. для некоторого \(i\) (\(1 \le i \le k\)) должно оказаться так, что типы частиц на \(i\)-й позиции совпадают. Например, пара подотрезков \((1\ 7\ 3)\) и \((4\ 7\ 8)\) гармонична, т. к. у обоих подотрезков на второй позиции стоит \(7\), а пара подотрезков \((1\ 2\ 3)\) и \((3\ 1\ 2)\) — нет.

Чем длиннее получатся гармоничные подотрезки, тем больше шансов, что ученые смогут сконструировать быстрый двигатель. Поэтому они попросили Вас помочь рассчитать максимальную возможную длину гармоничной пары из различных подотрезков.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 150\,000\)) — количество элементарных частиц в последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 150\,000\)) — типы частиц.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого теста выведите одно целое число — максимальную возможную длину гармоничной пары из различных отрезков. Если такой пары не существует, требуется вместо этого вывести число \(-1\).

Примечание

Первый пример изображен на рисунке ниже:

Как видно на рисунке, можно выбрать подотрезки \((2\ 1\ 3\ 4)\) и \((3\ 1\ 5\ 2)\), которые образуют гармоничную пару. Их длина равна \(4\), поэтому ответ равен \(4\).

Во втором примере можно взять два отрезка: первый — с \(l=1\) и \(r=5\), а второй — с \(l=2\) и \(r=6\). Как нетрудно видеть, эти отрезки образуют гармоничную пару и при этом считаются различными несмотря на то, что оба равны \((1\ 1\ 1\ 1\ 1)\).

В третьем примере можно заметить, что гармоничный отрезок построить нельзя, и ответ равен \(-1\).

B. Небольшое сжатие

жадные алгоритмы Строки *1100

Дана десятичная запись целого числа \(x\) без лидирующих нулей.

Требуется проделать над ним следующую операцию, называемую сжатием, ровно один раз: взять две соседние цифры в \(x\) и заменить на их сумму без лидирующих нулей (если сумма равна \(0\), то она представляется как один \(0\)).

Например, если \(x = 10057\), то возможные сжатия следующие:

  • выбрать первую и вторую цифры \(1\) и \(0\), заменить на \(1+0=1\); результат \(1057\);
  • выбрать вторую и третью цифры \(0\) и \(0\), заменить на \(0+0=0\); результат тоже \(1057\);
  • выбрать третью и четвертую цифры \(0\) и \(5\), заменить на with \(0+5=5\); результат все еще \(1057\);
  • выбрать четвертую и пятую цифры \(5\) и \(7\), заменить на \(5+7=12\); результат \(10012\).

Какое наибольшее число можно получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одного целого числа \(x\) (\(10 \le x < 10^{200000}\)). \(x\) не содержит лидирующих нулей.

Суммарная длина десятичных представлений \(x\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее число, которое можно получить после применения сжатия ровно один раз. Число не должно содержать лидирующих нулей.

Примечание

Первый набор входных данных уже объяснен в условии.

Во втором наборе входных данных есть только одно возможное сжатие: первая и вторая цифры.

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\), соответственно.

D. Турнир боевого искусства

Бинарный поиск жадные алгоритмы математика Перебор *2100

Монокарп планирует провести соревнование по смешанным единоборствам. В нем будет три весовых категории: легкий вес, средний вес и тяжелый вес. Победитель в каждой категории определяется по системе плей-офф.

В частности, это подразумевает, что количество участников в каждой категории должно быть степенью двойки. Дополнительно в каждой категории должно быть ненулевое количество участников.

\(n\) участников уже зарегистрировались на соревнование, \(i\)-й из них весит \(a_i\). Чтобы разделить участников на категории, Монокарп планирует установить две целых границы весов \(x\) и \(y\) (\(x < y\)).

Все участники с весом строго меньше \(x\) будут считаться легким весов. Все участники с весом больше или равно \(y\), будут считаться тяжелым весом. Все остальные участники будут считаться средним весом.

Возможно, что распределение не сделает количество участников в каждой категории степенью двойки. Оно так же может сделать и пустые категории. Чтобы решить эти проблемы, Монокарп может пригласить любое количество участников в каждую категории.

Обратите внимание, что Монокарп не может выгнать никого из \(n\) участников, которые уже зарегистрировались на соревнование.

Однако, он хочет пригласить как можно меньше дополнительных участников. Помогите Монокарпу выбрать \(x\) и \(y\) таким образом, чтобы суммарное количество необходимых дополнительных участников было как можно меньше. Выведите это количество.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество зарегистрированных участников.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — веса зарегистрированных участников.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество дополнительных участников, которых Монокарпу необходимо пригласить после того, как он выберет границы весов \(x\) и \(y\).

Примечание

В первом наборе входных данных Монокарп может выбрать \(x=2\) и \(y=3\). Легкая, средняя и тяжелая весовые категории будут содержать \(2\), \(1\) и \(1\) участников, соответственно. Они все являются степенями двойки, поэтому дополнительных участников не нужно.

Во втором наборе входных данных вне зависимости от выбора \(x\) и \(y\) в одной категории будет \(1\) участник, в остальных — \(0\). Монокарпу придется пригласить \(1\) участника в обе из оставшихся категорий.

В третьем наборе входных данных Монокарп может выбрать \(x=1\) и \(y=2\). Легкая, средняя и тяжелая весовые категории будут содержать \(0\), \(3\) и \(3\) участников, соответственно. В каждую категорию придется пригласить по одному участнику.

В четвертом наборе входных данных Монокарп может выбрать \(x=8\) и \(y=9\). Легкая, средняя и тяжелая весовые категории будут содержать \(8\), \(0\) и \(0\) участников, соответственно. В среднюю и тяжелую категории придется пригласить по одному участнику.

E. Черно-белое дерево

Деревья жадные алгоритмы поиск в глубину и подобное *2400

Дано дерево из \(n\) вершин. Некоторые вершины дерева (хотя бы две) — черные, остальные — белые.

Вы ставите фишку в какую-то из вершин дерева и после этого проводите следующие операции:

  • пусть фишка сейчас находится в вершине \(x\). Вы выбираете черную вершину \(y\), а затем перемещаете фишку по первому ребру в простом пути из \(x\) в \(y\).

Вы не можете выбирать одну и ту же вершину \(y\) в двух операциях подряд (то есть для любых двух последовательных операций выбранные черные вершины должны быть различны).

Вы заканчиваете операции, когда фишка оказывается в черной вершине (если она изначально в черной вершине — вы не выполняете операции вообще), или когда количество выполненных операций становится больше \(100^{500}\).

Для каждой вершины \(i\) вы должны определить, существует ли (не обязательно непустая) последовательность операций, в результате которой фишка окажется в черной вершине, если изначально фишка расположена в вершине \(i\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\)) — количество вершин дерева.

Во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le 1\)), где \(c_i = 0\) означает, что \(i\)-я вершина — белая, а \(c_i = 1\) означает, что \(i\)-я вершина — черная. Хотя бы два значения \(c_i\) равны \(1\).

Затем следует \(n-1\) строка, каждая из которых содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)) — концы некоторого ребра. Эти ребра задают дерево.

Выходные данные

Выведите \(n\) целых чисел. \(i\)-е из них должно быть равно \(1\), если существует (возможно, пустая) последовательность операций, которая перемещает фишку в черную вершину, если изначально расположить ее в вершине \(i\), или \(0\), если такой последовательности операций не существует.

B. Не садиться

жадные алгоритмы игры сортировки *1300

Рахул и Тина с нетерпением ждут начала нового учебного года в колледже. Вот они заходят в учебный класс и видят, что места для студентов расположены в виде прямоугольника \(n \times m\). Место, соответствующее клетке в строке \(r\) столбце \(c\) этого прямоугольника, обозначается как \((r, c)\). Расстояние между двумя местами \((a,b)\) и \((c,d)\) вычисляется по формуле \(|a-c| + |b-d|\).

Как президент класса, Тина имеет доступ к ровно \(k\) ведрам розовой краски. Далее происходит следующий процесс.

  • Сначала Тина выбирает ровно \(k\) мест в классе, чтобы покрасить их розовой краской. Одним ведром краски можно покрасить ровно одно место.
  • После того как Тина покрасит \(k\) мест в розовый цвет, Рахул выбирает, где ему сесть. Он не выберет место, покрашенное в розовый цвет, так как он очень не любит розовый.
  • После того, как Рахул выберет свое место, Тина выбирает место для себя. Она может выбрать любое место, покрашенное или нет, за исключением того места, которое выбрал Рахул.

Рахул хочет выбрать место так, чтобы он сидел как можно ближе к Тине. Однако Тина хочет сидеть как можно дальше от Рахула из-за сложной истории отношений, которую мы решили не добавлять в условие задачи.

Теперь Рахул задается вопросом: для \(k = 0, 1, \dots, n \cdot m - 1\), если у Тины есть \(k\) ведер с краской, насколько близко Рахул может сидеть к Тине, если и Рахул, и Тина знают о намерениях друг друга и оба действуют оптимально? Пожалуйста, помогите удовлетворить любопытство Рахула!

Входные данные

Входные данные состоят из одного или нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных в тесте. Далее заданы описания наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n \cdot m \leq 10^5\)) — количество строк и столбцов в прямоугольнике, который описывает места студентов в классе.

Сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n \cdot m\) целых чисел — расстояние между Рахулом и Тиной, если они оба действуют оптимально для каждого \(k \in [0, n \cdot m - 1]\).

Примечание

Одна из возможных последовательностей выбора для первого набора входных данных, где у Тины есть \(k=3\) ведра с красками, выглядит следующим образом.

Тина красит места в позициях \((1, 2)\), \((2, 2)\), \((3, 2)\) розовой краской. Рахул выбирает место \((3, 1)\), после чего Тина выбирает место \((1, 3)\).

Следовательно, расстояние между Тиной и Рахулом равно \(|3-1| + |1-3| = 4\). Мы можем доказать, что это действительно минимально возможное расстояние при заданных ограничениях. Могут быть и другие варианты мест, которые также приводят к тому же ответу.

При \(k=0\) в первом наборе входных данных Рахул может решить сесть на \((2, 2)\), а Тина может сесть на \((4, 3)\), так что расстояние между ними будет \(|2 - 4| + |2 - 3| = 3\).

Ниже приведены изображения случаев \(k=3\) и \(k=0\) для первого набора входных данных.

Возможная рассадка при \(k=3\). Возможная рассадка при \(k=0\).

F. Не разрезать

геометрия графы жадные алгоритмы кратчайшие пути реализация *2700

У вас есть квадрат \(k \times k\), причем \(k\) четно. Клетка в строке \(r\) и столбце \(c\) обозначается \((r,c)\). Две клетки \((r_1, c_1)\) и \((r_2, c_2)\) называются соседними, если \(\lvert r_1 - r_2 \rvert + \lvert c_1 - c_2 \rvert = 1\).

Массив пар соседних клеток называется прочным, если существует способ разрезать квадрат на две связных конгруэнтных части таким образом, что в каждой данной паре клеток обе клетки принадлежат одной части. Две части конгруэнтны, если одну можно наложить на другую с помощью переноса, вращения и/или зеркального отражения, а также их комбинаций.

Рисунок выше демонстрирует первый пример. Стрелки показывают пары клеток, а жирная линия показывает разрез на две части.

Вам дан массив \(a\) из \(n\) пар соседних клеток. Найдите размер наибольшей прочной подпоследовательности \(a\). Массив \(p\) является подпоследовательностью \(q\), если \(p\) может быть получен из \(q\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\); \(2 \leq k \leq 500\), \(k\) четно) — размер \(a\) и размер квадрата, соответственно.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит четыре целых числа \(r_{i,1}\), \(c_{i,1}\), \(r_{i,2}\) и \(c_{i,2}\) (\(1 \leq r_{i,1}, c_{i,1}, r_{i,2}, c_{i,2} \leq k\)) — \(i\)-й элемент \(a\), где \((r_{i,1}, c_{i,1})\) — строка и столбец первой клетки, а \((r_{i,2}, c_{i,2})\) — строка и столбец второй. Эти квадраты соседние.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\), и что сумма значений \(k\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — размер наибольшей прочной подподпоследовательности \(a\).

Примечание

В первом примере \(a\) не является прочным, но подпоследовательность \([a_1, a_2, a_3, a_4, a_5, a_6, a_8]\) является, т. к. квадрат может быть разрезан способом, показанным в условии.

Во втором примере подпоследовательность из четырех последних элементов \(a\) является прочным, т. к. квадрат можно разрезать с помощью горизонтальной прямой через центр.

A. MEX-массив

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1400

Магнус только что узнал о MEX, и он ему так понравился, что он решил сразу его использовать.

Учитывая массив \(a\) из \(n\) неотрицательных целых чисел, Магнус хочет создать новый массив \(b\), который сформирован следующим образом:

Пока массив \(a\) не пуст:

  • Выберите целое число \(k\) (\(1 \leq k \leq |a|\)).
  • Добавьте MEX первых \(k\) чисел массива \(a\) в конец массива \(b\) и удалите эти числа из массива \(a\), сдвинув позиции оставшихся чисел в \(a\).

Магнус любит большие массивы так же сильно, как и MEX, поэтому он хочет, чтобы новый массив \(b\) был лексикографически максимальным. Магнус просит вас сказать ему, какой лексикографически максимальный массив \(b\), он может создать, построив его оптимальным образом.

Массив \(x\) лексикографически больше массива \(y\), если в первой позиции, где \(x\) и \(y\) различаются \(x_i > y_i\), или если \(|x| > |y|\) и \(y\) — это префикс \(x\) (где \(|x|\) обозначает размер массива \(x\)).

MEX набора неотрицательных целых чисел — это минимальное неотрицательное целое число, которого нет в наборе. Например, MEX ({\({1, 2, 3}\)}) \(= 0\) и MEX ({\({0, 1, 2, 4, 5}\)}) \(= 3\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Описание тестовых примеров следует ниже.

Первая строка каждого тестового примера содержит единственное целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого тестового примера содержит \(n\) неотрицательных целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_i \leq n\)), где \(a_i\) — это \(i\)-е число из массива \(a\).

Гарантируется, что сумма \(n\) по всем тестам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового примера выведите \(m\) — длину лексикографически максимального массива \(b\), который может создать Магнус, за которым следуют \(m\) целых чисел, обозначающие элементы массива \(b\).

Примечание

В первом наборе входных данных лексикографически максимальный массив \(b\) получается выбором \(k=5\), что приводит к \(MEX\) всего массива \(a\). Он лексикографически максимален, так как массив, начинающийся с меньшего числа, чем \(4\), лексикографически меньше, и выбор \(k<5\) приведет к массиву, начинающемуся с числа меньше чем \(4\).

Во втором наборе входных данных есть два способа получить максимальный массив: сначала выбрать \(k=6\), затем \(k=2\) или сначала выбрать \(k=7\), а затем \(k=1\).

B. Особые предпочтения в фильмах

жадные алгоритмы Строки *1700

Mihai планирует посмотреть фильм. Ему нравятся только фильмы-палиндромы, поэтому он хочет пропустить некоторые (возможно, ноль) сцен, чтобы оставшиеся части фильма образовали палиндром.

Вам дан список \(s\) из \(n\) непустых строк длины не более \(3\), представляющих сцены из фильма Mihai.

Подпоследовательность \(s\) называется классной, если она не пуста и конкатенация строк подпоследовательности по порядку является палиндромом.

Можете ли вы помочь Mihai проверить, есть ли хотя бы одна классная подпоследовательность \(s\)?

Палиндром — это строка, которая читается одинаково в обоих направлениях. Например, строки «z», «aaa», «aba», «abccba» являются палиндромами, а строки «codeforces», «reality», «ab» таковыми не являются.

Последовательность \(a\) называется непустой подпоследовательностью последовательности \(b\), если \(a\) получается из \(b\) удалением нескольких (возможно, нуля, но не всех) элементов.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Далее следует описание тестовых случаев.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество сцен в фильме.

Далее следуют \(n\) строк, \(i\)-я из которых содержит единственную непустую строку \(s_i\) длины не более \(3\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если есть классная подпоследовательность \(s\), или «NO» в противном случае (без учета регистра).

Примечание

В первом наборе входных данных из \(s\) можно выбрать классную подпоследовательность \([ab, cc, ba]\).

C. XOR-сетка

жадные алгоритмы интерактив Конструктив математика реализация *2300

XOR множества \(\{s_1,s_2,\ldots,s_m\}\) определяется как \(s_1 \oplus s_2 \oplus \ldots \oplus s_m\), где \(\oplus\) обозначает побитовую операцию XOR.

Почти выиграв IOI, Виктор купил себе сетку размером \(n\times n\), содержащую целые числа в каждой ячейке. \(n\) — четное число. Целое число в \(i\)-й строке и \(j\)-м столбце равно \(a_{i,j}\).

К сожалению, Mihai украл сетку у Виктора и сказал ему, что вернет ее только с одним условием: Виктор должен сообщить Mihai XOR всех чисел сетки.

Виктор не помнит все элементы сетки, но он помнит некоторую информацию о ней: для каждой ячейки Виктор помнит XOR всех соседних ячеек.

Две клетки считаются соседними, если они имеют общую сторону — другими словами, для некоторых целых чисел \(1 \le i, j, k, l \le n\) ячейка в \(i\)-й строке и \(j\)-м столбце является соседом ячейки в \(k\)-й строке и \(l\)-м столбце, если \(|i - k| = 1\) и \(j = l\), или если \(i = k\) и \(|j - l| = 1\).

Чтобы вернуть свою сетку, Виктор просит вас о помощи. Можете ли вы, используя информацию, которую помнит Виктор, найти XOR всей сетки?

Можно доказать, что ответ определяется однозначно.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Далее следует описание тестовых случаев.

Первая строка каждого набора входных данных содержит единственное четное целое число \(n\) (\(2 \leq n \leq 1000\)) — размер сетки.

Далее следуют \(n\) строк, каждая из которых содержит \(n\) целых чисел. \(j\)-е число в \(i\)-й строке представляет собой XOR всех чисел, записанных в соседях ячейки в \(i\)-й строке и \(j\)-м столбце.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(1000\) и в исходной сетке \(0 \leq a_{i, j} \leq 2^{30} - 1\).

Формат взлома

Чтобы взломать решение, используйте следующий формат:

Первая строка должна содержать единственное целое число t (\(1 \le t \le 100\)) — количество тестов.

Первая строка каждого набора входных данных должна содержать единственное четное целое число \(n\) (\(2 \leq n \leq 1000\)) — размер сетки.

Далее должны следовать \(n\) строк, каждая из которых содержит \(n\) целых чисел. \(j\)-е целое число в \(i\)-й из этих строк равно \(a_{i,j}\) в исходной сетке Виктора. Значения в сетке должны быть целыми числами в диапазоне \([0, 2^{30}-1]\).

Сумма \(n\) по всем тестам не должна превышать \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — XOR всей сетки.

Примечание

Для первого набора входных данных одна из возможных исходных сеток Виктора:

\(1\)\(3\)
\(2\)\(4\)

Для второго набора входных данных одна из возможных исходных сеток Виктора:

\(3\)\(8\)\(8\)\(5\)
\(9\)\(5\)\(5\)\(1\)
\(5\)\(5\)\(9\)\(9\)
\(8\)\(4\)\(2\)\(9\)

Для третьего набора входных данных одна из возможных исходных сеток Виктора:

\(4\)\(3\)\(2\)\(1\)
\(1\)\(2\)\(3\)\(4\)
\(5\)\(6\)\(7\)\(8\)
\(8\)\(9\)\(9\)\(1\)

A. Скачивание оперативной памяти

жадные алгоритмы Перебор сортировки *800

А вы знали, что вы можете скачать дополнительную оперативную память? Есть магазин с \(n\) разными программами, каждая из которых увеличивает вашу оперативную память (ОЗУ). \(i\)-й программе, увеличивающей ОЗУ, требуется \(a_i\) гигабайт памяти, чтобы выполниться (память занимается временно, как только программа завершит работу, память снова освободится), и после ее использования она увеличит вашу ОЗУ на \(b_i\) гигабайт (навсегда). Каждая программа может быть использована не более одного раза. Изначально у вашего компьютера \(k\) гигабайт оперативной памяти.

Заметьте, что вы не можете использовать программу, увеличивающую ОЗУ, если ей требуется больше гигабайт оперативной памяти, чем есть у вашего компьютера в момент запуска. Вы можете использовать программы, увеличивающие ОЗУ, в любом порядке.

Для вас ОЗУ — самая важная вещь на свете, и поэтому вам очень интересно узнать, какое максимальное количество гигабайт ОЗУ вы сможете получить?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Описание тестовых примеров следует ниже.

Первая строка каждого тестового примера содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(1 \le k \le 1000\)). Затем следует две строки, каждая из которых содержит \(n\) целых чисел, описывающих массивы \(a\) и \(b\) (\(1 \le a_i, b_i \le 1000\)).

Выходные данные

Для каждого тестового примера выведите одну строку, содержащую максимально-возможный объем оперативной памяти.

Примечание

В первом наборе входных данных изначально у вас достаточно оперативной памяти только для запуска третьей программы, и после ее использования ваша оперативная память увеличится до \(20\) гигабайт, что позволит вам использовать первую программу и увеличить объем оперативной памяти до \(29\) гигабайт. Единственная оставшаяся программа требует \(30\) гигабайт ОЗУ и ее нельзя будет использовать.

Во втором наборе входных данных вы можете использовать все программы кроме третьей, которые требуют всего \(1\) гигабайт для запуска, чтобы увеличить объем ОЗУ до \(5\) гигабайт, а затем использовать третью программу, чтобы увеличить объем ОЗУ до \(6\) гигабайт.

В третьем наборе входных данных каждая программа требует более \(1\)-го гигабайта ОЗУ для запуска, поэтому объем имеющейся у вас оперативной памяти останется равным \(1\) гигабайту.

B. НОД-массив

жадные алгоритмы математика теория чисел *800

Рассмотрим массив \(a\), состоящий из всех целых чисел в диапазоне \([l, r]\). Например, если \(l = 3\) и \(r = 7\), то \(a = [3, 4, 5, 6, 7]\).

Учитывая \(l\), \(r\) и \(k\), может ли \(\gcd(a)\) быть больше \(1\) после выполнения следующей операции не более \(k\) раз?

  • Выберите \(2\) числа из \(a\).
  • Удалите одно вхождение каждого из них из массива.
  • Добавьте их произведение в \(a\).

\(\gcd(b)\) обозначает наибольший общий делитель (НОД) всех чисел в \(b\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество тестов. Описание тестовых примеров следует ниже.

Входные данные для каждого тестового примера состоят из одной строки, содержащей \(3\) целых числа \(l\), \(r\) и \(k\) (\(1 \leq l \leq r \leq 10^9, \enspace 0 \leq k \leq r - l\)).

Выходные данные

Для каждого тестового примера выведите «YES», если возможно получить НОД соответствующего массива больше, чем \(1\), выполнив не более \(k\) операций, и «NO» в противном случае (без учета регистра).

Примечание

Для первого набора входных данных \(a = [1]\), поэтому ответ «NO», так как единственный элемент в массиве равен \(1\).

Для второго набора входных данных массив равен \(a = [3, 4, 5]\) и у нас есть \(1\) операция. За одну операцию массив может измениться на: \([3, 20]\), \([4, 15]\) или \([5, 12]\), каждый из которых имеет наибольший общий делитель, равный \(1\), поэтому ответ «NO».

Для третьего набора входных данных \(a = [13]\), поэтому ответ «YES», так как единственный элемент в массиве равен \(13\).

Для четвертого набора входных данных \(a = [4]\), поэтому ответ «YES», так как единственный элемент в массиве равен \(4\).

B. Отрезок и разбиение

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

Дан массив \(a\), состоящий из \(n\) целых чисел. Найдите отрезок значений \([x, y]\) (\(x \le y\)) и разбейте \(a\) на ровно \(k\) (\(1 \le k \le n\)) подмассивов таких, что:

  • Каждый подмассив состоит из нескольких последовательных элементов \(a\), то есть он равен \(a_l, a_{l+1}, \ldots, a_r\) для некоторых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).
  • Каждый элемент \(a\) принадлежит ровно одному подмассиву.
  • Для каждого подмассива количество элементов внутри отрезка \([x, y]\) (включительно) строго больше, чем количество элементов вне этого отрезка. Элемент с индексом \(i\) находится внутри отрезка \([x, y]\), если и только если \(x \le a_i \le y\).

Напечатайте любое решение, минимизирующее \(y - x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) – длина массива \(a\) и количество подмассивов, на которые нужно разбить изначальный массив.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равен \(i\)-му элементу массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\)

Выходные данные

Для каждого набора входных данных выведите \(k+1\) строк.

В первой строке выведите \(x\) и \(y\) — границы найденного отрезка.

Затем выведите \(k\) строк: \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1\leq l_i \leq r_i \leq n\)) — границы \(i\)-го подмассива.

Вы можете выводить подмассивы в любом порядке.

Примечание

В первом наборе входных данных должен быть только один подмассив, который обязан совпадать со всем массивом. Внутри отрезка \([1, 2]\) содержится \(2\) элемента, а вне его – \(0\). Если выбрать отрезок \([1, 1]\), то внутри него будет содержаться \(1\) элемент (\(a_1\)), вне его будет содержаться \(1\) элемент (\(a_2\)), и ответ будет некорректным.

Во втором наборе можно выбрать отрезок \([2, 2]\) и разбить массив на подмассивы \((1, 3)\) и \((4, 4)\). В подмассиве \((1, 3)\) \(2\) элемента содержатся внутри отрезка (\(a_2\) и \(a_3\)) и \(1\) элемент вне его (\(a_1\)). В подмассиве \((4, 4)\) содержится \(1\) элемент (\(a_4\)), лежащий внутри отрезка.

В третьем наборе можно выбрать отрезок \([5, 5]\) и разбить массив на подмассивы \((1, 4)\), \((5, 7)\) и \((8, 11)\). В подмассиве \((1, 4)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((5, 7)\) содержится \(2\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((8, 11)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его.

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\).

A. Мин-макс замены

жадные алгоритмы *800

Даны два массива \(a\) и \(b\), содержащие \(n\) положительных целых чисел каждый. Вы можете выполнить следующую операцию неограниченное количество раз:

  • Выбрать индекс \(i\) (\(1\leq i\leq n\)) и поменять местами \(a_i\) и \(b_i\) (то есть \(a_i\) становится равным \(b_i\) и наоборот).

Найдите минимальное возможное значение выражения \(\max(a_1, a_2, \ldots, a_n) \cdot \max(b_1, b_2, \ldots, b_n)\), которое можно получить, проделывая описанную операцию любое количество раз (возможно ноль).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит целое число \(n\) (\(1\le n\le 100\)) — размер массивов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10\,000\)), где \(a_i\)\(i\)-й элемент массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10\,000\)), где \(b_i\)\(i\)-й элемент массива \(b\).

Выходные данные

Для каждого набора входных данных напечатайте одно целое число — минимальное возможное значение выражения \(\max(a_1, a_2, \ldots, a_n) \cdot \max(b_1, b_2, \ldots, b_n)\), которое можно получить, применяя описанную операцию любое количество раз (возможно ноль).

Примечание

В первом наборе входных данных вы можете применить операцию в индексах \(2\) и \(6\), получая \(a = [1, 4, 6, 5, 1, 5]\) и \(b = [3, 2, 3, 2, 2, 2]\), \(\max(1, 4, 6, 5, 1, 5) \cdot \max(3, 2, 3, 2, 2, 2) = 6 \cdot 3 = 18\).

Во втором наборе, независимо от того как применять операцию, всегда будет выполнено \(a = [3, 3, 3]\) и \(b = [3, 3, 3]\), поэтому ответ будет равен \(\max(3, 3, 3) \cdot \max(3, 3, 3) = 3 \cdot 3 = 9\).

В третьем наборе можно применить операцию в индексе \(1\), получив \(a = [2, 2]\), \(b = [1, 1]\) и ответ, равный \(\max(2, 2) \cdot \max(1, 1) = 2 \cdot 1 = 2\).

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]\).

В пятом наборе массив состоит только из одного элемента, поэтому никаких операций не требуется.

D. Новогодний концерт

Бинарный поиск жадные алгоритмы математика Структуры данных теория чисел *2000

Новый год совсем близко, а это значит, что в 179-й школе уже полным ходом идет подготовка к новогоднему концерту.

Всего в школе есть \(n\) классов, пронумерованных целыми числами от \(1\) до \(n\), \(i\)-й класс подготовил сценку продолжительностью \(a_i\) минут.

Иднар, как главный за проведение новогоднего концерта, знает, что если на концерте будет \(k\) сценок продолжительностями \(b_1\), \(b_2\), \(\ldots\), \(b_k\) минут, то зрителям станет скучно, если найдутся \(l\) и \(r\) такие, что \(1 \le l \le r \le k\) и \(\gcd(b_l, b_{l + 1}, \ldots, b_{r - 1}, b_r) = r - l + 1\), где \(\gcd(b_l, b_{l + 1}, \ldots, b_{r - 1}, b_r)\) обозначает наибольший общий делитель (НОД) чисел \(b_l\), \(b_{l + 1}\), \(\ldots\), \(b_{r - 1}\), \(b_r\).

Чтобы во время концерта зрителям не стало скучно, Иднар может сколько угодно раз (возможно, ноль) попросить \(t\)-й класс (\(1 \le t \le k\)) сделать другую сценку продолжительностью \(d\), где \(d\) может быть любым целым положительным числом. Таким образом, после данной операции \(b_t\) станет равно \(d\). Заметьте, что \(t\) и \(d\) для разных операций могут быть различными.

Для последовательности продолжительностей сценок \(b_1\), \(b_2\), \(\ldots\), \(b_{k}\) определим функцию \(f(b)\) как минимальное количество классов, у которых Иднар должен попросить заменить сценку, чтобы зрителям не стало скучно.

Иднар еще точно не определился, какие сценки будут допущены на концерт, поэтому хочет узнать значение функции \(f\) от каждого из непустых префиксов \(a\). Иными словами, Иднар хочет узнать значения \(f(a_1)\), \(f(a_1\),\(a_2)\), \(\ldots\), \(f(a_1\),\(a_2\),\(\ldots\),\(a_n)\).

Входные данные

Первая строка содержит единственное целое число \(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\) чисел — \(f(a_1)\), \(f(a_1\),\(a_2)\), \(\ldots\), \(f(a_1\),\(a_2\),\(\ldots\),\(a_n)\).

Примечание

В первом тесте можно заменить \(1\) на \(2\), поэтому ответ \(1\).

Во втором тесте:

  • \([1]\) можно преобразовать в \([2]\),
  • \([1, 4]\) можно преобразовать в \([3, 4]\),
  • \([1, 4, 2]\) можно преобразовать в \([2, 3, 2]\).

B. Меньшинство

жадные алгоритмы *800

Задана строка \(s\), состоящая только из символов '0' и '1'.

Требуется выбрать последовательную подстроку \(s\) и удалить все вхождения символа, который является строгим меньшинством в ней, из подстроки.

То есть, если количество '0' в подстроке строго меньше количества '1', то удалить все вхождения '0' из подстроки. Если количество '1' строго меньше количества '0', то удалить все вхождения '1'. Если количества совпадают, то не делать ничего.

Необходимо применить операцию ровно один раз. Какое наибольшее количество символов можно удалить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных содержится непустая строка \(s\), состоящая только из символов '0' и '1'. Длина \(s\) не превосходит \(2 \cdot 10^5\).

Суммарная длина строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее количество символов, которые можно удалить, если применить операции ровно один раз.

Примечание

В первом наборе входных данных можно выбрать подстроки «0», «1» или «01». В «0» количество '0' равно \(1\), количество '1' равно \(0\). '1' — строгое меньшинство, поэтому все его вхождения удаляются из подстроки. Однако, раз там их \(0\), то ничего не меняется. То же для «1». А в «01» ни '0', ни '1', не являются строгим меньшинством. Поэтому ничего не меняется. Так что не существует способа удалить какие-либо символы.

Во втором наборе входных данных можно выбрать подстроку «10101010101». Она содержит \(5\) символов '0' и \(6\) символов '1'. '0' является строгим меньшинством. Поэтому можно удалить все его вхождения. Существуют и другие подстроки, которые дают тот же ответ.

В третьем наборе входных данных можно выбрать подстроку «011000100». Она содержит \(6\) символов '0' и \(3\) символа '1'. '1' является строгим меньшинством. Поэтому можно удалить все его вхождения.

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\) операций.

E. Запросы об остовном дереве

Бинарный поиск графы Деревья жадные алгоритмы математика поиск в глубину и подобное снм сортировки Структуры данных *2400

Задан связный взвешенный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

К нему задаются \(k\) запросов. Каждый запрос состоит из одного целого числа \(x\). На каждый запрос вы должны выбрать остовное дерево в графе. Пусть веса его ребер будут \(w_1, w_2, \dots, w_{n-1}\). Стоимость остовного дерева равна \(\sum \limits_{i=1}^{n-1} |w_i - x|\) (сумма абсолютных разностей между весами и \(x\)). Ответ на запрос — это минимальная стоимость остовного дерева.

Запросы даны в сжатом формате. Первые \(p\) \((1 \le p \le k)\) запросов \(q_1, q_2, \dots, q_p\) даны явно. Для запросов с \(p+1\) по \(k\) выполняется \(q_j = (q_{j-1} \cdot a + b) \mod c\).

Выведите исключающее или ответов на все запросы.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 50\); \(n - 1 \le m \le 300\)) — количество вершин и количество ребер в графе.

В каждой из следующих \(m\) строк содержится описание неориентированного ребра: три целых числа \(v\), \(u\) и \(w\) (\(1 \le v, u \le n\); \(v \neq u\); \(0 \le w \le 10^8\)) — вершины, которые соединяет ребро, и его вес. Обратите внимание, что между парой вершин может быть несколько ребер. Ребра образуют связный граф.

В следующей строке записаны пять целых чисел \(p, k, a, b\) и \(c\) (\(1 \le p \le 10^5\); \(p \le k \le 10^7\); \(0 \le a, b \le 10^8\); \(1 \le c \le 10^8\)) — количество запросов, заданных явно, общее количество запросов и параметры для генерации запросов.

В следующей строке записаны \(p\) целых чисел \(q_1, q_2, \dots, q_p\) (\(0 \le q_j < c\)) — первые \(p\) запросов.

Выходные данные

Выведите одно целое число — исключающее или ответов на все запросы.

Примечание

Запросы в первом примере: \(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0\). Ответы: \(11, 9, 7, 3, 1, 5, 8, 7, 5, 7, 11\).

Запросы во втором примере: \(3, 0, 2, 1, 6, 0, 3, 5, 4, 1\). Ответы: \(14, 19, 15, 16, 11, 19, 14, 12, 13, 16\).

Запросы в третьем примере: \(75, 0, 0, \dots\). Ответы: \(50, 150, 150, \dots\).

A. Разворачивай и конкатенируй

жадные алгоритмы Строки *800

Real stupidity beats artificial intelligence every time.
— Terry Pratchett, Hogfather, Discworld

Вам дана строка \(s\) длины \(n\) и число \(k\). Обозначим за \(rev(s)\) развёрнутую строку \(s\) (т.е. \(rev(s) = s_n s_{n-1} ... s_1\)). Вы можете выполнять два типа операций:

  • заменить строку \(s\) на \(s + rev(s)\)
  • заменить строку \(s\) на \(rev(s) + s\)

После выполнения ровно \(k\) операций (возможно, различных) над строкой, какое количество различных строк вы можете получить из начальной строки \(s\)?

Мы обозначили конкатенацию строк \(s\) и \(t\) как \(s + t\). Другими словами, \(s + t = s_1 s_2 ... s_n t_1 t_2 ... t_m\), где \(n\) и \(m\) - длины строк \(s\) и \(t\) соответственно.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В следующих \(2 \cdot t\) строках вводится \(t\) наборов входных данных:

Первая строка каждого набора содержит два числа \(n\) и \(k\) (\(1 \le n \le 100\), \(0 \le k \le 1000\)).

Вторая строка каждого набора содержит одну строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите количество различных строк, которые вы можете получить после применения ровно \(k\) операций.

Можно показать, что при данных ограничениях ответ не превосходит \(10^9\).

Примечание

Рассмотрим первый набор входных данных:

После первой операции строка \(s\) может стать либо aabbaa, либо baaaab. После второй операции \(s\) может принимать только такие 2 значения: aabbaaaabbaa и baaaabbaaaab.

A. Минимальная OR сумма

битмаски жадные алгоритмы *800

Вам дан массив чисел \(a\) размера \(n\).

Вы можете выполнить следующую операцию над массивом:

  • Выберите два различных целых числа \(i, j\) \((1 \leq i < j \leq n\)), замените \(a_i\) на \(x\) и \(a_j\) на \(y\). Чтобы не нарушать массив, должно выполняться \(a_i | a_j = x | y\), где \(|\) обозначает побитовое ИЛИ. Заметьте, что \(x\) и \(y\) это целые неотрицательные числа.

Пожалуйста, выведите минимальную сумму элементов массива, которую вы можете получить после выполнения вышеуказанной операции любое количество раз.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) \((1 \leq t \leq 1000)\). Далее следует описание тестовых случаев.

Первая строка каждого набора входных данных содержит целое число \(n\) \((2 \leq n \leq 100)\) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots ,a_n\) \((0 \leq a_i < 2^{30})\).

Выходные данные

Для каждого набора входных данных выведите в строке одно число — минимальную возможную сумму массива.

Примечание

В первом примере вы можете выполнить следующие операции для получения массива \([1, 0, 2]\):

1. выбираем \(i = 1, j = 2\), делаем \(a_1 = 1\) и \(a_2 = 2\), так как \(1 | 3 = 1 | 2\). Массив становится \([1, 2, 2]\).

2. выбираем \(i = 2, j = 3\), делаем \(a_2 = 0\) и \(a_3 = 2\), так как \(2 | 2 = 0 | 2\). Массив становится \([1, 0, 2]\).

Мы можем доказать, что минимальная сумма равна \(1 + 0 + 2 = 3\).

Во втором примере нам не нужны никакие операции.

B. Избегайте локальных максимумов

жадные алгоритмы *800

Вам дан массив \(a\) размера \(n\). Каждый элемент этого массива представляет собой целое число от \(1\) до \(10^9\).

Вы можете выполнить несколько операций с этим массивом. Во время операции вы можете заменить элемент массива любым целым числом от \(1\) до \(10^9\).

Выведите минимальное количество необходимых операций, чтобы результирующий массив не содержал локальных максимумов, и результирующий массив после операций.

Элемент \(a_i\) является локальным максимумом, если он строго больше обоих своих соседей (то есть \(a_i > a_{i - 1}\) и \(a_i > a_{i + 1}\)). Поскольку \(a_1\) и \(a_n\) имеют только по одному соседу, они никогда не будут локальным максимумом.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка будет содержать единственное целое число \(t\) \((1 \leq t \leq 10000)\) — количество тестов. Затем следуют \(t\) тестовых случаев.

Первая строка каждого теста содержит одно целое число \(n\) \((2 \leq n \leq 2 \cdot 10^5)\) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots ,a_n\) \((1 \leq a_i \leq 10^9)\) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите строку, содержащую одно целое число \(m\) — минимальное количество требуемых операций. Затем выведите строку, состоящую из \(n\) целых чисел — результирующий массив после операций. Обратите внимание, что этот массив должен отличаться ровно на \(m\) элементов от исходного массива.

Если ответов несколько, выведите любой.

Примечание

В первом примере массив не содержит локального максимума, поэтому нам не нужно выполнять операции.

Во втором примере мы можем изменить \(a_2\) на \(3\), тогда у массива не будет локальных максимумов.

C. Дифференциальная сортировка

жадные алгоритмы Конструктив *1200

Вам дан массив \(a\) из \(n\) элементов.

Вы можете выполнить следующую операцию не более \(n\) раз: выбрать три индекса \(x,y,z\) \((1 \leq x < y < z \leq n)\) и заменить \(a_x\) на \(a_y - a_z\). После операции \(|a_x|\) должно быть меньше \(10^{18}\).

Ваша цель сделать полученный массив неубывающим. Если решений несколько, можно вывести любое. Если это невозможно, вы должны сообщить об этом.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка будет содержать единственное целое число \(t\) \((1 \leq t \leq 10000)\) — количество тестов. Затем следуют \(t\) тестовых случаев.

Первая строка каждого теста содержит одно целое число \(n\) \((3 \leq n \leq 2 \cdot 10^5)\) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots ,a_n\) \((-10^9 \leq a_i \leq 10^9)\) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите \(-1\), если решения нет. В противном случае в первой строке выведите единственное целое число \(m\) \((0 \leq m \leq n)\) — количество выполненных вами операций.

Тогда \(i\)-я из следующих \(m\) строк должна содержать три целых числа \(x,y,z\) \((1 \leq x < y < z \leq n)\)— описание \(i\)-й операции.

Если решений несколько, можно вывести любое. Обратите внимание, что вам не нужно минимизировать количество операций в этой задаче.

Примечание

В первом примере массив становится

\([-6,-4,2,-1,2]\) после первой операции,

\([-6,-4,-3,-1,2]\) после второй операции.

Во втором примере невозможно сделать массив отсортированным ни после какой последовательности операций.

В третьем примере массив уже отсортирован, поэтому никаких операций выполнять не нужно.

E. Автомобили

2-sat графы жадные алгоритмы Конструктив поиск в глубину и подобное снм сортировки *2200

На координатной оси \(OX\) стоят \(n\) автомобилей. Каждая машина изначально находится в целочисленной точке, и никакие две машины не находятся в одной и той же точке. Кроме того, каждая машина ориентирована либо влево, либо вправо, и в любой момент они могут двигаться с любой постоянной положительной скоростью в этом направлении.

Более формально мы можем описать \(i\)-й автомобиль буквой и целым числом: его ориентацию \(ori_i\) и его местоположение \(x_i\). Если \(ori_i = L\), то \(x_i\) убывает со временем. Точно так же, если \(ori_i = R\), то \(x_i\) увеличивается со временем.

Мы называем две машины нерелевантными, если они никогда не оказываются в одной и той же точке независимо от их скорости. Другими словами, они не будут иметь одну и ту же координату в любой момент.

Мы называем два автомобиля предназначенными, если они когда-нибудь окажутся в одной и той же точке независимо от их скорости.

К сожалению, мы потеряли всю информацию о наших машинах, но мы помним \(m\) отношений между ними. Существует два типа отношений:

\(1\) \(i\) \(j\)\(i\)-й автомобиль и \(j\)-й автомобиль нерелевантные.

\(2\) \(i\) \(j\)\(i\)-й автомобиль и \(j\)-й автомобиль предназначенные.

Восстановите ориентации и местоположения автомобилей, удовлетворяющих отношениям, или сообщите, что это невозможно. Если решений несколько, можно вывести любое.

Обратите внимание на то, что если два автомобиля окажутся в одной точке, то они продолжат свое движение.

Входные данные

Первая строка содержит два целых числа: \(n\) и \(m\) \((2 \leq n \leq 2 \cdot 10^5; 1 \leq m \leq min(2 \cdot 10^5, \frac{n(n-1)}{2})\) — количество автомобилей и количество отношений соответственно.

Каждая из следующих \(m\) строк содержит три целых числа: \(type\), \(i\) и \(j\) \((1 \leq type \leq 2; 1 \leq i,j \leq n; i≠j)\).

Если \(type\) = \(1\), то \(i\)-й автомобиль и \(j\)-й автомобиль являются нерелевантными. В противном случае \(i\)-й автомобиль и \(j\)-й автомобиль являются предназначенными.

Гарантируется, что для каждой пары автомобилей существует не более \(1\)-го отношения между ними.

Выходные данные

В первой строке выведите «YES», если можно восстановить ориентации и положения автомобилей, удовлетворяющих отношениям, и «NO» в противном случае.

Если ответ «YES», выведите \(n\) строк, каждая из которых содержит символ и целое число: \(ori_i\) и \(x_i\) \((ori_i \in \{L, R\}; -10^9 \leq x_i \leq 10^9)\) — представляет информацию о \(i\)-м автомобиле.

Если ориентация налево, то \(ori_i\) = \(L\). В противном случае \(ori_i\) = \(R\).

\(x_i\) — координата, где находится \(i\)-й автомобиль. Обратите внимание, что все \(x_i\) должны быть различными.

Мы можем доказать, что если существует решение, то должно быть и решение, удовлетворяющее ограничениям на \(x_i\).

F. Ближайшая пара

жадные алгоритмы Структуры данных *2800

На оси \(OX\) имеется \(n\) взвешенных точек. Координата и вес \(i\)-й точки равны \(x_i\) и \(w_i\) соответственно. Все точки имеют различные координаты и положительные веса. Кроме того, \(x_i < x_{i + 1}\) выполняется для любого \(1 \leq i < n\).

Взвешенное расстояние между точками \(i\) и \(j\) определяется как \(|x_i - x_j| \cdot (w_i + w_j)\), где \(|val|\) обозначает абсолютное значение \(val\).

Вы должны ответить на \(q\) запросов, где \(i\)-й запрос задает следующее:

Найдите минимальное взвешенное расстояние среди всех пар различных точек подмассива \([l_i,r_i]\).

Входные данные

Первая строка содержит 2 целых числа \(n\) и \(q\) \((2 \leq n \leq 3 \cdot 10^5; 1 \leq q \leq 3 \cdot 10^5)\) — количество точек и количество запросов.

Далее следуют \(n\) строк, \(i\)-я из них содержит 2 целых числа \(x_i\) и \(w_i\) \((-10^9 \leq x_i \leq 10^9; 1 \leq w_i \leq 10^9)\) — координата и вес \(i\)-й точки.

Гарантируется, что точки даны в порядке возрастания \(x\).

Далее следует \(q\) строк, \(i\)-я из которых содержит 2 целых числа \(l_i\) и \(r_i\) \((1 \leq l_i < r_i \leq n)\) — заданный подмассив \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число — минимальное взвешенное расстояние среди всех пар различных точек в данном подмассиве.

Примечание

Для первого запроса минимальное взвешенное расстояние находится между точками \(1\) и \(3\), что равно \(|x_1 - x_3| \cdot (w_1 + w_3) = |-2 - 1| \cdot (2 + 1) = 9\).

Для второго запроса минимальное взвешенное расстояние находится между точками \(2\) и \(3\), что равно \(|x_2 - x_3| \cdot (w_2 + w_3) = |0 - 1| \cdot (10 + 1) = 11\).

Для четвертого запроса минимальное взвешенное расстояние находится между точками \(3\) и \(4\), что равно \(|x_3 - x_4| \cdot (w_3 + w_4) = |1 - 9| \cdot (1 + 2) = 24\).

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\).

C. Андрей и камни

жадные алгоритмы реализация *1200

Андрей разложил у себя на столе \(n\) кучек с камнями. В кучке с номером \(i\) лежит \(a_i\) камней. Он хочет добиться того, что каждый камень будет лежать либо в кучке \(1\), либо в кучке \(n\).

Для этого Андрей может выполнить следующую операцию сколько угодно раз: выбрать \(3\) индекса \(1 \le i < j < k \le n\) такие, что в кучке \(j\) лежит хотя бы \(2\) камня, забрать \(2\) камня из кучки \(j\) и один из них положить в кучку \(i\), а второй в кучку \(k\).

Определите, за какое минимальное количество операций Андрей сможет переложить камни так, чтобы каждый камень лежал либо в кучке \(1\), либо в кучке \(n\), или скажите, что это сделать невозможно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длина массива.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное число операций, которые надо сделать, чтобы каждый камень лежал либо в кучке \(1\), либо в кучке \(n\), или выведите \(-1\), если это сделать невозможно.

Примечание

В первом наборе входных данных оптимально сделать следующее:

  1. Выбрать \((i, j, k) = (1, 2, 5)\). Массив становится равным \([2, 0, 2, 3, 7]\).
  2. Выбрать \((i, j, k) = (1, 3, 4)\). Массив становится равным \([3, 0, 0, 4, 7]\).
  3. Затем два раза выбрать \((i, j, k) = (1, 4, 5)\). Массив становится равным \([5, 0, 0, 0, 9]\). Этот массив удовлетворяет условию задачи, потому что все камни лежат в \(1\)-й или \(5\)-й кучке.
Всего \(4\) операции.

Во втором наборе входных данных положить все камни в кучки \(1\) и \(3\) невозможно:

  1. Изначально есть только один способ совершить операцию, выбрав \((i, j, k) = (1, 2, 3)\). Массив становится равным \([2, 1, 2]\).
  2. Теперь ни одной операции сделать невозможно, а массив не удовлетворяет условию задачи, поэтому ответ \(-1\).

В третьем наборе входных данных оптимально сделать следующее:

  1. Выбрать \((i, j, k) = (1, 2, 3)\). Массив становится равным \([2, 0, 2]\). Этот массив удовлетворяет условию задачи, потому что все камни лежат в \(1\)-й или \(3\)-й кучке.
Всего \(1\) операция.

В четвёртом наборе входных данных изначально нельзя сделать ни одной операции, и исходный массив не удовлетворяет условию задачи, поэтому ответ \(-1\).

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\) вершины.

G. День рождения

жадные алгоритмы Конструктив математика *3000

Виталий подарил Максиму на \(16\)-й день рождения \(n\) чисел \(1, 2, \ldots, n\). Максиму надоело играть в настольные игры на празднике, поэтому он решил поиграть с этими числами. За один ход Максим может выбрать два числа \(x\) и \(y\) среди тех, которые у него есть, выкинуть их и добавить вместо них два числа \(x + y\) и \(|x - y|\). Он хочет, чтобы после всех ходов все числа были равны, и сумма чисел была минимальна.

Помогите Максиму найти решение. Друзья Максима не хотят долго ждать, поэтому в решении должно быть не более \(20n\) ходов. Гарантируется, что при заданных ограничениях, если решение существует, то существует решение, которое делает все числа равными, минимизирует их сумму и при этом тратит не более \(20n\) ходов.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 25\,000\)) — количество наборов входных данных.

В каждом наборе входных данных вводится единственное число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество чисел, подаренных Максиму.

Гарантируется, что сумма \(n\) не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно сделать все числа равными.

Иначе выведите одно число \(s\) (\(0 \le s \le 20n\)) — количество ходов. Далее выведите \(s\) строк. \(i\)-я строка должна содержать два числа \(x_i\) и \(y_i\) — числа, которые Максим должен выбрать на \(i\)-м ходу. После всех операций числа должны стать равными.

Не забудьте, что вам не только нужно сделать все числа равными, но и минимизировать их сумму. Гарантируется, что при заданных ограничениях, если решение существует, то существует решение, которое делает все числа равными, минимизирует их сумму и при этом тратит не более \(20n\) ходов.

H. Минимизируй количество инверсий

жадные алгоритмы математика сортировки Структуры данных *3500

Дана перестановка \(p\) длины \(n\).

Можно выбрать любую её подпоследовательность, удалить её из перестановки и приписать в начало перестановки в том же порядке.

Для каждого \(k\) от \(0\) до \(n\) найдите минимальное количество инверсий в перестановке, которое можно получить, выбрав подпоследовательность длины ровно \(k\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных.

В первой строке каждого набора вводится число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина перестановки.

Во второй строке каждого набора вводится перестановка \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)).

Гарантируется, что сумма \(n\) не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n + 1\) число, где \(i\)-е число — ответ на задачу для длины подпоследовательности, равной \(i - 1\).

Примечание

Во втором наборе:

  • Для длины \(0\): \([4, 2, 1, 3] \rightarrow [4, 2, 1, 3]\): \(4\) инверсии.
  • Для длины \(1\): \([4, 2, \mathbf{1}, 3] \rightarrow [1, 4, 2, 3]\): \(2\) инверсии.
  • Для длины \(2\): \([4, \mathbf{2}, \mathbf{1}, 3] \rightarrow [2, 1, 4, 3]\) или \([4, 2, \mathbf{1}, \textbf{3}] \rightarrow [1, 3, 4, 2]\): \(2\) инверсии.
  • Для длины \(3\): \([4, \mathbf{2}, \mathbf{1}, \mathbf{3}] \rightarrow [2, 1, 3, 4]\): \(1\) инверсия.
  • Для длины \(4\): \([\mathbf{4}, \mathbf{2}, \mathbf{1}, \mathbf{3}] \rightarrow [4, 2, 1, 3]\): \(4\) инверсии.

A. Разворот

жадные алгоритмы Конструктив математика *800

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) длины \(n\). Вам нужно выбрать два целых числа \(l,r\) (\(1 \le l \le r \le n\)) и развернуть подотрезок \([l,r]\) перестановки. Перестановка станет равной \(p_1,p_2, \dots, p_{l-1},p_r,p_{r-1}, \dots, p_l,p_{r+1},p_{r+2}, \dots ,p_n\).

Найдите лексикографически минимальную перестановку, которая может быть получена в результате применения ровно одной операции разворота для начальной перестановки.

Заметьте, что для двух различных перестановок равной длины \(a\) и \(b\), \(a\) лексикографически меньше \(b\), если в первой позиции, где они отличаются, в \(a\) стоит меньший элемент.

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \le n \le 500\)) — длина перестановки.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки.

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальную перестановку, которую вы можете получить.

Примечание

В первом наборе входных данных длина перестановки равна \(1\), поэтому единственный возможный отрезок \([1,1]\). Итоговая перестановка равна \([1]\).

Во втором наборе входных данных мы можем получить тождественную перестановку с помощью разворота отрезка \([1,2]\). Итоговая перестановка равна \([1,2,3]\).

В третьем наборе входных данных наилучшим возможным отрезком является \([2,3]\). Итоговая перестановка равна \([1,2,4,3]\).

В четвёртом наборе входных данных не существует меньшей перестановки, поэтому мы можем оставить её, выбрав отрезок \([1,1]\). Итоговая перестановка равна \([1,2,3,4,5]\).

D. Большая кисть

жадные алгоритмы Конструктив реализация Структуры данных *2000

Вы нашли картину на холсте размером \(n \times m\). Холст можно представить в виде сетки с \(n\) строками и \(m\) столбцами. Каждая клетка покрашена в какой-то цвет. Клетка \((i, j)\) имеет цвет \(c_{i,j}\).

Рядом с картиной вы также нашли кисть в форме квадрата \(2 \times 2\), поэтому холст был покрашен следующим образом. Изначально никакая клетка не была покрашена. Затем следующая операция покраски была выполнена некоторое количество раз:

  • Выбрать два целых числа \(i\) и \(j\) (\(1 \le i < n\), \(1 \le j < m\)) и некоторый цвет \(k\) (\(1 \le k \le nm\)).
  • Покрасить клетки \((i, j)\), \((i + 1, j)\), \((i, j + 1)\), \((i + 1, j + 1)\) в цвет \(k\).

Каждая клетка должна быть покрашена хотя бы один раз. Клетка может быть покрашена несколько раз. В этом случае её итоговый цвет будет равен последнему.

Найдите некоторую последовательность из не более \(nm\) операций, позволяющую получить картину, которую вы нашли, или определите, что это невозможно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 1000\)) — размеры холста.

В \(i\)-й из следующих \(n\) строк входных данных содержатся \(m\) целых чисел. \(j\)-е из них равно \(a_{i,j}\) (\(1 \le a_{i,j} \le nm\)) — цвет клетки \((i, j)\).

Выходные данные

Если решения не существует, выведите единственное число \(-1\).

Иначе, на первой строке, выведите одно целое число \(q\) (\(1 \le q \le nm\)) — количество операций.

Далее выведите сами операции по порядку. В \(k\)-й из следующих \(q\) строк, выведите три целых числа \(i\), \(j\), \(c\) (\(1 \le i < n\), \(1 \le j < m\), \(1 \le c \le nm\)) — описание \(k\)-й операции.

Если существует несколько решений, выведите любое.

Примечание

В первом наборе входных данных решение не единственно. Здесь представлено одно из них:

Во втором наборе входных данных не существует способа получить данную картину, поэтому ответ \(-1\).

F. Два плаката

жадные алгоритмы Перебор Структуры данных *3200

Вы хотите прорекламировать свой новый бизнес, поэтому собираетесь разместить два плаката на рекламном щите в центре города. Рекламный щит состоит из \(n\) вертикальных панелей шириной \(1\) и различной целочисленной высоты, соединенных горизонтальной перекладиной. \(i\)-я из \(n\) панелей имеет высоту \(h_i\).

Изначально все панели свисают с перекладины (их верхние края лежат на ней), но перед размещением двух постеров разрешается сдвинуть каждую панель вверх на любую целую величину, главное, чтобы она все еще была соединена с перекладиной (нижний край панели лежит под или на ней).

После того, как операции будут сделаны, вы разместите два плаката: один под перекладиной и один над ней. Им не разрешается выходить за перекладину, и они должны полностью располагаться внутри панелей.

Какую максимальную общую площадь могут покрыть два плаката, если вы сделаете оптимальные операции? Заметьте, что вы также можете разместить плакат площади \(0\). Этот случай равносилен размещению одного плаката.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)) — количество вертикальных панелей.

Вторая строка входных данных содержит \(n\) целых чисел \(h_1, h_2, ..., h_n\) (\(1 \le h_i \le 10^{12}\)) — высоты \(n\) вертикальных панелей.

Выходные данные

Выведите единственное целое число — максимальную общая площадь, которую могут покрыть два плаката вместе.

Примечание

В первом тестовом примере мы можем выбрать верхний плакат с площадью \(12\) и нижний плакат с площадью \(6\), как на изображении ниже.

Во втором тестовом примере мы можем покрыть весь рекламный щит, используя один плакат.

A. Великая последовательность

жадные алгоритмы Перебор сортировки *1200

Последовательность положительных целых чисел называется великой для заданного положительного целого числа \(x\), если ее элементы можно разбить на пары так, что одно из чисел в паре при умножении на \(x\) будет равно другому числу в паре. Более формально, последовательность \(a\) длины \(n\) великая для заданного числа \(x\), если \(n\) четно и существует такая перестановка \(p\) размера \(n\), что для любого \(i\) (\(1 \le i \le \frac{n}{2}\)) выполняется, что \(a_{p_{2i-1}} \cdot x = a_{p_{2i}}\).

У Стаса есть последовательность положительных целых чисел \(a\) и положительное целое число \(x\). Помогите ему сделать последовательность великой: найдите минимальное количество положительных целых чисел, которое можно приписать к последовательности \(a\), чтобы она стала великой для числа \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(2 \le x \le 10^6\)).

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество положительных целых чисел, которое можно добавить к последовательности \(a\), чтобы она стала великой для числа \(x\).

Примечание

В первом наборе входных данных последовательность уже является великой для числа \(4\), потому что числа можно разбить на пары \((1, 4)\), \((4, 16)\). Поэтому можно добавить \(0\) чисел.

Во втором наборе входных данных можно добавить числа \(1\) и \(14\) к последовательности, тогда получившиеся \(8\) чисел можно разбить на пары \((1, 2)\), \((1, 2)\), \((2, 4)\), \((7, 14)\). Меньше чем \(2\) числа добавить невозможно.

C. Анонимность наше все

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2200

В работе врача важно сохранять анонимность своих клиентов и результатов анализов. Результаты теста отправляются каждому лично по электронной почте, но люди очень нетерпеливые и им хочется узнавать результаты сразу.

Именно поэтому в одном центре для сдачи анализов «Девитро» придумали экспериментальный способ сообщать результаты. Пусть всего анализы сдавало \(n\) человек в порядке очереди. Тогда главврач Стас может сделать несколько сообщений, в каждом из которых сообщить, был ли больной человек среди людей в очереди от \(l\)-го до \(r\)-го (включительно) для некоторых значений \(l\) и \(r\).

В процессе Стас будет проверять, насколько хорошо работает эта схема, и будет интересоваться, можно ли однозначно узнать результат анализа \(i\)-го человека по уже сообщенной информации. И если это сделать можно, то болен ли этот человек.

Помогите Стасу протестировать свою схему.

Входные данные

В первой строке находится два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество людей, сдавших анализы и количество запросов.

В каждой из следующих \(q\) строк находится описание запросов. Первое число в строке \(t\) (\(t = 0\) или \(t = 1\)) — тип запроса.

Если \(t = 0\), то дальше в этой строке находятся еще три целых числа \(l, r, x\) (\(1 \le l \le r \le n\), \(x = 0\) или \(x = 1\)). Этот запрос соответствует тому, что Стас сообщает, что среди людей от \(l\)-го до \(r\)-го (включительно) в очереди:

  • был больной, если \(x=1\),
  • не было больного, если \(x=0\).

Если \(t = 1\), то дальше в этой строке находится одно целое число \(j\) (\(1 \le j \le n\)) — номер пациента в очереди, чья конфиденциальность волнует Стаса.

Гарантируется, что все запросы корректны, то есть всегда существует пример очереди длины \(n\), для которой все озвученные результаты (утверждения из запросов, где \(t = 0\)) корректны.

Выходные данные

После каждого вопроса Стаса (запроса с \(t = 1\)) выведите:

  • «NO», если пациент однозначно не болен,
  • «YES», если пациент однозначно болен,
  • «N/A», если по имеющейся информации нельзя однозначно сказать, болен пациент или нет.
Примечание

В первом тесте для первых пяти запросов:

  1. Изначально Стас сообщает, что среди \(4\), \(5\) людей нет больных.
  2. В следующем запросе Стас интересуется конфиденциальностью человека \(5\). Из предыдущего запроса мы знаем, что он однозначно не болен.
  3. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Мы не знаем про него вообще никакой информации, поэтому он может быть как болен, так и не болен.
  4. Затем Стас сообщает, что среди \(4\), \(5\), \(6\) людей есть больной.
  5. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Теперь мы можем однозначно сказать, что он болен, потому что из предыдущего запроса среди трех человек болен мог быть только он.

D. Два массива

битмаски жадные алгоритмы Комбинаторика математика Перебор хэши *2700

Стас перешел в новую школу «75-угольник», и на первом же уроке биологии начал умничать, за что его учитель попросил решить задачу по генетике, решение которой сам не знает.

Вам дано \(n\) массивов, \(i\)-й из которых содержит \(m\) различных целых чисел — \(a_{i,1}, a_{i,2},\ldots,a_{i,m}\). Также дан массив положительных целых чисел \(w\) длины \(n\).

Вам надо найти минимальное возможное значение выражения \(w_i + w_j\) среди всех пар целых чисел \((i, j)\) (\(1 \le i, j \le n\)) таких, что среди чисел \(a_{i,1}, a_{i,2},\ldots,a_{i,m}, a_{j,1}, a_{j,2},\ldots,a_{j,m}\) все числа различны.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(2 \leq n \leq 10^5\), \(1 \le m \le 5\)).

В \(i\)-й из следующих \(n\) строк сначала находится \(m\) различных целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\), затем число \(w_i\) (\(1\leq a_{i,j} \leq 10^9\), \(1 \leq w_{i} \leq 10^9\)).

Выходные данные

Выведите единственное число — ответ на задачу.

Если ни одной подходящей пары \((i, j)\) не существует, выведите \(-1\).

Примечание

В первом тесте минимальное значение это \(5 = w_3 + w_4\), так как среди чисел \(\{2, 3, 4, 5\}\) все различны.

Во втором тесте нет ни одной подходящей пары \((i, j)\).

B. В чем сила, брат?

жадные алгоритмы *900

Стас — воспитатель в детском саду. Под его попечением находятся \(n\) детей. Он решил собрать из некоторых из них команду для «brawl:go 2».

У Стаса есть \(n\) улучшений, \(i\)-е из которых имеет тип \(a_i\). Сила ребенка равняется количеству различных типов улучшений у него.

Если Стас создает команду размера \(k\), он распределит все \(n\) улучшений между \(k\) детьми так, чтобы у каждого из \(k\) детей было хотя бы одно улучшение, и каждое улучшение он выдал ровно одному ребенку.

Для каждого целого \(k\) от \(1\) до \(n\) найдите минимальную сумму сил детей в команде размера \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 3 \cdot 10^5\))  — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество улучшений у Стаса.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — типы улучшений, которые есть у Стаса.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел, где \(k\)-е число это минимальная суммарная сила команды размера \(k\).

Примечание

Для первого набора входных данных можно раздавать улучшения так, чтобы суммарная сила была минимальна:

  • \(k = 1: \{1, 1, 2\}\)
  • \(k = 2: \{1, 1\}, \{2\}\)
  • \(k = 3: \{1\}, \{1\}, \{2\}\)

Для второго набора входных данных можно раздавать улучшения так, чтобы суммарная сила была минимальна:

  • \(k = 1: \{1, 2, 2, 2, 4, 5\}\)
  • \(k = 2: \{2, 2, 2, 4, 5\}, \{1\}\)
  • \(k = 3: \{2, 2, 2, 5\}, \{1\}, \{4\}\)
  • \(k = 4: \{2, 2, 2\}, \{1\}, \{4\}, \{5\}\)
  • \(k = 5: \{2, 2\}, \{1\}, \{2\}, \{4\}, \{5\}\)
  • \(k = 6: \{1\}, \{2\}, \{2\}, \{2\}, \{4\}, \{5\}\)

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]\).

B. Качество против количества

жадные алгоритмы Конструктив Перебор сортировки *800

\( \def\myred#1{\color{red}{\underline{\bf{#1}}}} \def\myblue#1{\color{blue}{\overline{\bf{#1}}}} \) \(\def\RED{\myred{\unicode{1050}\unicode{1088}\unicode{1072}\unicode{1089}\unicode{1085}\unicode{1099}\unicode{1081}}} \def\BLUE{\myblue{\unicode{1057}\unicode{1080}\unicode{1085}\unicode{1080}\unicode{1081}}}\)

Вам дана последовательность из \(n\) неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Изначально все элементы непокрашены. Вы можете покрасить каждое число в \(\RED\) или \(\BLUE\) (но не в оба) или оставить его непокрашенным.

Обозначим за \(\text{Count}(c)\) количество элементов последовательности, покрашенных в \(c\), а за \(\text{Sum}(c)\) — сумму этих чисел.

Например, если данная последовательность равна \([2, 8, 6, 3, 1]\), и она покрашена следующим образом: \([\myblue{2}, 8, \myred{6}, \myblue{3}, 1]\) (где \(6\) покрашена красным, \(2\) и \(3\) покрашены синим, \(1\) и \(8\) непокрашены), то \(\text{Sum}(\RED)=6\), \(\text{Sum}(\BLUE)=2+3=5\), \(\text{Count}(\RED)=1\) и \(\text{Count}(\BLUE)=2\).

Определите, можно ли покрасить последовательность так, чтобы \(\text{Sum}(\RED) > \text{Sum}(\BLUE)\) и \(\text{Count}(\RED) < \text{Count}(\BLUE)\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строка находится одно целое число \(n\) (\(3\le n\le 2\cdot 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i\le 10^9\)) — данная последовательность.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если возможно раскрасить данную последовательность, удовлетворив заданные ограничения, и NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут считаться положительным ответом).

Примечание

В первом примере нет способа раскрасить элементы заданным образом. Например, если раскрасить последовательность следующим образом: \([\myblue{1},\myblue{2},\myred{3}]\) (где \(3\) покрашена красным, \(1\) и \(2\) покрашены синим), то \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\), но \(\text{Sum}(\RED)=3 \ngtr \text{Sum}(\BLUE)=3\). Поэтому это не является корректным способом раскрасить последовательность.

Во втором примере один из возможных способов раскрасить последовательность показан в условии. Легко видеть, что \(\text{Sum}(\RED)=6 > \text{Sum}(\BLUE)=5\), а также \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\).

В третьем примере можно показать, что нет способа раскрасить последовательность правильным образом. Например, если раскрасить последовательность следующим образом: \([\myred{3},\myred{5},\myblue{4}, \myblue{2}]\) (где \(3\) и \(5\) покрашены красным, \(4\) и \(2\) покрашены синим), то \(\text{Sum}(\RED) = 8 > \text{Sum}(\BLUE) = 6\), но \(\text{Count}(\RED) = 2 \nless \text{Count}(\BLUE) = 2\). Поэтому это не является корректным способом раскрасить последовательность.

В четвертом примере можно показать, что нет способа раскрасить последовательность правильным образом.

F. Игра вокруг стола

жадные алгоритмы Конструктив реализация *2900

Вокруг круглого стола сидят \(n\) игроков, пронумерованных от \(1\) до \(n\). Игрок номер \((i+1)\) сидит справа от \(i\)-го игрока для всех \(1 \le i < n\), а \(1\)-й игрок сидит справа от \(n\)-го.

У них есть \(n^2\) карт, на каждой из которых написано одно целое число от \(1\) до \(n\). Для каждого числа от \(1\) до \(n\) есть ровно \(n\) с этим числом.

Изначально все карты некоторым образом распределены между игроками, причем у каждого ровно \(n\) карт. За один шаг каждый игрок выбирает одну из своих карт и передает ее игроку справа. Все игроки выполняют свой шаг одновременно.

Игрок \(i\) называется готовым, если на всех его картах написано число \(i\). Цель игроков — достичь конфигурации, где все игроки готовы. Найдите способ сделать это за не более чем \((n^2-n)\) шагов. Вам не нужно минимизировать число шагов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 100\)).

Далее следуют \(n\) строк. \(i\)-я из них содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1\le c_j\le n\)) — начальные карты \(i\)-го игрока.

Гарантируется, что для всех целых \(i\) от \(1\) до \(n\) существуют ровно \(n\) карт с числом \(i\).

Выходные данные

В первой строке выведите целое число \(k\) (\(0\le k\le (n^2-n)\)) — количество шагов в вашем решении.

Далее выведите \(k\) строк. В \(i\)-й из них выведите \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(1\le d_j\le n\)), где \(d_j\) равно числу, написанному на карте, которую \(j\)-й игрок передает на \(i\)-м шаге игроку, сидящему справа от него.

Можно показать, что в данных ограничениях ответ всегда существует. Если существует несколько решений, выведите любое.

Примечание

В первом примере если первый игрок передает карту с числом \(2\), а второй игрок передает карту с числом \(1\), то у первого игрока будет две карты с числом \(1\), а у второго — две карты с числом \(2\). Значит после этого шага оба игрока готовы.

Во втором примере можно также сделать \(0\) шагов. Обратите внимание, что не нужно минимизировать число шагов.

C. Мадока и детские шалости

жадные алгоритмы Конструктив *1300

Мадока в детстве была крайне капризным ребенком, и одной из её любимых шалостей было рисование на своей стене. По воспоминаниям Мадоки, стена представляла собой таблицу из \(n\) строк и \(m\) столбцов, состоящую только из нулей и единиц. Клетка в \(i\)-й строке и \(j\)-м столбце (\(1 \le i \le n\), \(1 \le j \le m\)) имела координаты \((i, j)\).

Однажды она увидела картину «Девочка-волшебница Мадока» и решила нарисовать её у себя на стене. Изначально таблица Мадоки представляет из себя таблицу размера \(n \times m\), заполненную нулями. Далее она применяет следующую операцию любое количество раз:

Мадока выбирает любой подпрямоугольник таблицы и красит его в шахматную раскраску (при этом левый верхний угол подпрямоугольника всегда имеет цвет \(0\)). Обратите внимание, что некоторые клетки могут быть покрашены несколько раз. В этом случае итоговый цвет клетки равен цвету, полученному при последнем перекрашивании.

Белый цвет обозначает \(0\), чёрный \(1\). Так, например, прямоугольник на первой картинке покрашен в шахматную раскраску, а остальные нет.

Для лучшего понимания условия рекомендуем ознакомиться с пояснениями к первому тесту.

Помогите Мадоке и найдите некоторую последовательность из не более чем \(n \cdot m\) действий, позволяющую получить данную картину, или определите, что такой не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100\)) — размеры таблицы. Каждая из следующих \(n\) строк содержит строку длины \(m\), состоящую только из \(1\) и \(0\) — описание картины, которую хочет получить Мадока.

Выходные данные

Если данную картину получить невозможно, выведите \(-1\).

Иначе выведите в первой строке единственное целое число \(q\) (\(0 \leq q \leq n \cdot m\)) — количество операций, которое ей нужно, чтобы получить картину. Обратите внимание, что вам не нужно минимизировать количество операций.

Затем выведите для каждой операции (в порядке выполнения) в отдельной строке четыре числа — координаты левого верхнего угла и правого нижнего угла подпрямоугольника.

Примечание

Ниже содержится описание первого набора входных данных.

В третьем наборе входных данных получить нужную картину невозможно.

В четвёртом наборе входных данных исходная таблица уже является нужной картиной.

E. Мадока и шестиклассики

жадные алгоритмы поиск в глубину и подобное Структуры данных *2500

После ошеломительного успеха у пятого класса, Мадоке решили доверить преподавать уже шестиклассникам.

Всего в её классе есть \(n\) одноместных парт. Изначально Мадока за \(i\)-ю парту посадила ученика под номером \(b_i\) (\(1 \le b_i \le n\)), а за дверью образовалась бесконечная очередь учеников с номерами \(n + 1, n + 2, n + 3, \ldots\) в надежде оказаться на её уроке. Обратите внимание, что все ученики имеют различные номера.

После каждого урока происходит следующие события по порядку.

  1. Ученик, сидевший за партой \(i\), перемещается за парту \(p_i\). Все ученики перемещаются одновременно.
  2. Если за какой-то партой оказалось больше одного ученика, то за ней остается ученик с наименьшим номером, а все остальные навсегда покидают класс.
  3. Затем на каждую пустую парту в порядке возрастания номеров садится ученик с наименьшим номером из очереди снаружи.

Обратите внимание, что в итоге за каждой партой снова находится ровно один ученик. Гарантируется, что числа \(p\) таковы, что как минимум один ученик покидает класс после каждого урока. Обратите внимание на пояснение к первому примеру для лучшего понимания.

После нескольких (возможно нуля) уроков за партой \(i\) сидит ученик \(a_i\). По данным значениям \(a_1, a_2, \ldots, a_n\) и \(p_1, p_2, \ldots, p_n\), найдите лексикографически наименьшую подходящую перестановку \(b_1, b_2, \ldots, b_n\), описывающую возможную начальную рассадку.

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Для двух различных перестановок равной длины \(a\) и \(b\), \(a\) лексикографически меньше \(b\), если в первой позиции, где \(a\) и \(b\) различны, в \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество парт в классе.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — места, куда пересаживаются ученики. Гарантируется, что \(p\) содержит хотя бы два равных элемента.

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — конечная рассадка учеников. Гарантируется, что существует изначальная перестановка, из которой получилась рассадка \(a\).

Выходные данные

В единственной строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — лексикографически минимальную перестановку, описывающую начальную рассадку учеников, из которой могла получится конечная рассадка \(a\).

Примечание

Описание первого теста находится ниже:

На первой картинке показана стартовая рассадка, являющаяся ответом. Затем ученики, сидящие за партами \(1, 2\) пересаживаются за \(5\) парту. Также за \(1\) парту пересел ученик с парты \(5\), а за парту под номером \(3\) пересаживается ученик с \(4\) парты.

Таким образом, после всех этих пересадок, получается рассадка, показаная на втором изображении. Затем за партой под номером \(5\) выгоняют ученика с номером \(3\), а за партой под номером \(3\) выгоняют ученика с номером \(5\). (Поскольку их номера не самые маленькие) Затем за парты под номерами \(2, 4\) садятся новые ученики с номерами \(6, 7\). И эта рассадка (после конца первого урока) показана на третьем изображении.

На \(4\) изображении показана рассадка, после второго урока до того, как всех лишних выгнали. А на пятой показана финальная рассадка после \(2\) урока.

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]\)

B. Игра в пас

жадные алгоритмы реализация *1300

Даниэль наблюдает за игрой футбольной команды во время тренировки. Во время этой тренировки они хотят улучшить свои навыки паса.

В игре участвуют \(n\) игроков, которые делают передачи друг другу. Тренировка закончилась, но к сожалению, поскольку мячи двигались слишком быстро, Даниэль не смог понять, сколько мячей находилось в игре. Единственное, что он знает, это количество пасов, сделанных каждым игроком за время тренировки.

Найдите минимально возможное количество мячей, которые участвовали в игре.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество игроков в команде.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)), где \(a_i\) обозначает количество пасов, сделанных \(i\)-м игроком.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом наборе входных данных с единственным мячом игра могла проходить так:

\(2 \rightarrow 1 \rightarrow 3 \rightarrow 4 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 2\).

Во втором наборе входных данных выполнить передачи одним мячом невозможно. Один из возможных способов игры двумя мячами:

\(2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 1\).

\(2 \rightarrow 3 \rightarrow 2 \rightarrow 1\)

В третьем наборе пасов не было, поэтому возможны \(0\) мячей.

C. Вес системы вложенных отрезков

жадные алгоритмы реализация сортировки хэши *1200

На числовой прямой заданы \(m\) точек, \(i\)-я из которых имеет координату \(x_i\) и целочисленный вес \(w_i\). Координаты всех точек различны, точки пронумерованы от \(1\) до \(m\).

Последовательность из \(n\) отрезков \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\) называется системой вложенных отрезков, если для каждой пары \(i, j\) (\(1 \le i < j \le n\)) выполнено \(l_i < l_j < r_j < r_i\). Другими словами, второй отрезок находится строго внутри первого, третий отрезок находится строго внутри второго, и так далее.

Для заданного числа \(n\) найдите такую систему вложенных отрезков, что:

  • оба конца каждого из отрезков являются одной из \(m\) заданных точек;
  • сумма весов \(2\cdot n\) точек, которые использованы в качестве концов отрезков, минимальна.

Например, пусть \(m = 8\). Заданные точки отмечены на рисунке, их веса выделены красным цветом, координаты — синим. Составим систему из трёх вложенных отрезков:

  • вес первого отрезка: \(1 + 1 = 2\)
  • вес второго отрезка: \(10 + (-1) = 9\)
  • вес третьего отрезка: \(3 + (-2) = 1\)
  • сумма весов всех отрезков в системе: \(2 + 9 + 1 = 12\)
Система из трёх вложенных отрезков
Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка.

В первой строке каждого набора входных данных записано два положительных целых числа \(n\) (\(1 \le n \le 10^5\)) и \(m\) (\(2 \cdot n \le m \le 2 \cdot 10^5\)).

В последующих \(m\) строках записаны пары целых чисел \(x_i\) (\(-10^9 \le x_i \le 10^9\)) и \(w_i\) (\(-10^4 \le w_i \le 10^4\)) — координата и вес точки с номером \(i\) (\(1 \le i \le m\)) соответственно. Все \(x_i\) различны.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) строку: в первой из них выведите вес составленной системы, а в последующих \(n\) строках ровно по два числа  — номера точек, являющихся границами отрезка с номером \(i\) (\(1 \le i \le n\)). Порядок вывода концов отрезка не важен — вы можете вывести как сначала левый, а затем правый конец, так и наоборот.

Если способов составить систему вложенных отрезков с минимальным весом несколько, выведите любой из них.

Примечание

Первый набор входных данных совпадает с примером из условия. Можно показать, что вес составленной системы является минимальным.

Во втором наборе входных данных есть всего \(6\) точек, поэтому необходимо использовать каждую из них, чтобы составить \(3\) отрезка.

E. Перенос экзамена

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *1900

Сейчас у Дмитрия сессия, и он должен сдать \(n\) экзаменов. Сессия начинается в день \(1\) и длится \(d\) дней. \(i\)-й экзамен пройдёт в день \(a_i\) (\(1 \le a_i \le d\)), все \(a_i\) — различны.

Пример, где \(n=3\), \(d=12\), \(a=[3,5,9]\). Оранжевым — дни сдачи экзамена. Перед первым экзаменом Дмитрий отдохнёт \(2\) дня, перед вторым он отдохнёт \(1\) день и перед третьим он отдохнёт \(3\) дня.

Для расписания сессии Дмитрий считает специальную величину \(\mu\) — наименьшее из времен отдыха перед экзаменом по всем экзаменам. Например, для картинки выше \(\mu=1\). Иными словами, для расписания он подсчитывает ровно \(n\) чисел — сколько дней он отдыхает между экзаменом сдачей экзамена \(i-1\) и \(i\) (для \(i=0\) между началом сессии и сдачей экзамена \(i\)). Затем он находит \(\mu\) — минимум среди этих \(n\) чисел.

Дмитрий считает, что может улучшить предложенное расписание сессии. Он может попросить изменить дату одного экзамена (изменить одно произвольное значение \(a_i\)). Помогите ему поменять дату так, чтобы все \(a_i\) остались различны, а значение \(\mu\) было как можно больше.

Например, для рассмотренного выше расписания Дмитрию наиболее выгодно перенести второй экзамен на самый конец сессии. Новое расписание примет вид:

Теперь длительности отдыхов перед экзаменами равны \([2,2,5]\). Следовательно, \(\mu=2\).

Дмитрий может оставить предложенное расписание без изменений (если не существует способа передвинуть один экзамен так, что это приведёт к улучшению ситуации).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Перед каждым набором в тесте записана пустая строка.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(2 \le n \le 2 \cdot 10^5, 1 \le d \le 10^9\)) — количество экзаменов и длительность сессии, соответственно.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le d, a_i < a_{i+1}\)), где \(i\)-е число означает дату сдачи \(i\)-го экзамена.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение \(\mu\), если Дмитрий может перенести один любой экзамен на произвольный день. Все значения \(a_i\) должны остаться различны.

Примечание

Первый пример разобран в условии.

Одно из оптимальных изменений расписаний для второго примера:

Изначальное расписание.

Новое расписание

В третьем примере необходимо передвинуть экзамен с дня \(1\) на любой день от \(4\) до \(100\).

В четвёртом примере любое изменение расписания только уменьшит \(\mu\), соответственно расписание нужно оставить исходным.

В пятом примере необходимо перенести экзамен с дня \(1\) на любой день от \(100000000\) до \(300000000\).

Одно из оптимальных изменений расписаний для шестого примера:

Изначальное расписание.

Новое расписание

В седьмом примере каждый день занят экзаменами и перестроить расписание невозможно.

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\) — номера опций в нужном порядке. Если существует несколько ответов, разрешается вывести любой из них.

B. Докажи, что он не прав

жадные алгоритмы Конструктив *800

Недавно, ваш друг обнаружил одну интересную операцию над массивом \(a\):

  1. Выберите два индекса \(i\) и \(j\) (\(i \neq j\));
  2. Присвойте \(a_i = a_j = |a_i - a_j|\).

Поиграв с данной операцией некоторое время, он пришел к следующему утверждению:

  • В любом массиве \(a\) из \(n\) целых чисел, в котором \(1 \le a_i \le 10^9\), вы можете найти пару индексов \((i, j)\) такую, что после применения операции выше общая сумма массива \(a\) уменьшится.

Данное утверждение вам кажется крайне сомнительным, а потому вы хотите найти контрпример для заданного \(n\). Сможете ли вы найти такой контрпример и доказать, что он не прав?

Другими словами, найдите массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), такой, что для любой пары индексов \((i, j)\) применение операции выше не уменьшает общую сумму (сумма либо возрастает, либо не меняется).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 1000\)) — длина массива \(a\).

Выходные данные

Для каждого набора входных данных, если не существует контрпримера в виде массива \(a\) размера \(n\), выведите NO.

В противном случае выведите YES и сам массив \(a\) (\(1 \le a_i \le 10^9\)). Если существует несколько контрпримеров, выведите любой.

Примечание

В первом наборе входных данных, единственные возможные пары индексов — это \((1, 2)\) и \((2, 1)\).

Если вы примените операцию к паре \((1, 2)\) (или \((2, 1)\)), вы получите \(a_1 = a_2 = |1 - 337| = 336\), или же массив \([336, 336]\). В обоих случаях, общая сумма увеличивается, а потому данный массив \(a\) является контрпримером.

E. Сумма паросочетаний

жадные алгоритмы Комбинаторика Конструктив математика Паросочетания Перебор поиск в глубину и подобное *2600

Обозначим размер максимального паросочетания в графе \(G\) как \(\mathit{MM}(G)\).

Задан двудольный граф. Вершины первой доли пронумерованы от \(1\) до \(n\). Вершины второй доли пронумерованы от \(n+1\) до \(2n\). Степень каждой вершины равна \(2\).

Для четверки целых чисел \((l, r, L, R)\), где \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\), определим \(G'(l, r, L, R)\) как граф, который состоит из всех вершин заданного графа, которые находятся либо в отрезке \([l, r]\), либо в отрезке \([L, R]\), и всех ребер заданного графа таких, что вершины их концов принадлежат одному из этих отрезков. Другими словами, чтобы получить граф \(G'(l, r, L, R)\) из изначального графа, надо удалить все вершины \(i\) такие, что \(i \notin [l, r]\) и \(i \notin [L, R]\), и все инцидентные им ребра.

Посчитайте сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\) таких, что \(1 \le l \le r \le n\) and \(n+1 \le L \le R \le 2n\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 1500\)) — количество вершин в каждой доле.

Затем следует \(2n\) строке, в каждой записано ребро графа. В \(i\)-й строке записано два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(n + 1 \le y_i \le 2n\)) — концы \(i\)-го ребра.

В графе нет кратных ребер, и у каждой вершины ровно два инцидентных ребра.

Выходные данные

Выведите одно целое число — сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\), у которых \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\).

B. Операция вычитания

жадные алгоритмы математика Структуры данных *1100

Вам дан список из \(n\) целых чисел. Вы можете выполнить следующую операцию: вы выбираете элемент \(x\) из списка, удаляете \(x\) из списка и вычитаете \(x\) из всех оставшихся элементов. Таким образом, за одну операцию длина списка уменьшается ровно на \(1\).

Для заданного целого числа \(k\) (\(k>0\)) определите, существует ли такая последовательность из \(n-1\) операции, что после применения этих операций единственный оставшийся элемент списка равен \(k\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5\), \(1 \leq k \leq 10^9\)) — количество целых чисел в списке и целевое значение, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел списка \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вы можете получить \(k\) с помощью последовательности из \(n-1\) операций. В противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере у нас есть список \(\{4, 2, 2, 7\}\), и у нас есть цель \(k = 5\). Один из способов добиться этой цели следующий: сначала выбираем третий элемент, получая список \(\{2, 0, 5\}\). Далее выбираем первый элемент, получая список \(\{-2, 3\}\). Наконец, мы выбираем первый элемент, получая список \(\{5\}\).

F. Параметрическое MST

Бинарный поиск графы жадные алгоритмы Конструктив математика сортировки *2600

Вам дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Для любого вещественного числа \(t\) рассмотрим полный взвешенный граф на \(n\) вершинах \(K_n(t)\) с весом ребра между вершинами \(i\) и \(j\), равным \(w_{ij}(t) = a_i \cdot a_j + t \cdot (a_i + a_j)\).

Пусть \(f(t)\) будет стоимостью минимального остовного дерева для \(K_n(t)\). Определите, ограничена ли \(f(t)\) сверху, и если да, то выведите максимальное значение, которое она достигает.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано одно целое число \(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^6 \leq a_i \leq 10^6\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с максимальным значением \(f(t)\) (можно показать, что это целое число) или «INF», если \(f(t)\) не ограничена сверху.

B. XY последовательность

жадные алгоритмы *800

Вам заданы четыре целых числа \(n\), \(B\), \(x\) и \(y\). Вам нужно построить последовательность \(a_0, a_1, a_2, \dots, a_n\), в которой \(a_0 = 0\) и для каждого \(i \ge 1\) вы можете выбрать:

  • либо \(a_i = a_{i - 1} + x\),
  • либо \(a_i = a_{i - 1} - y\).

Ваша задача — построить такую последовательность \(a\), что \(a_i \le B\) для всех \(i\) и \(\sum\limits_{i=0}^{n}{a_i}\) максимально возможна.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора заданы четыре целых числа \(n\), \(B\), \(x\) и \(y\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le B, x, y \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите одно число — максимально возможное значение \(\sum\limits_{i=0}^{n}{a_i}\).

Примечание

В первом наборе входных данных, оптимальная последовательность \(a\) равна \([0, 1, 2, 3, 4, 5]\).

Во втором наборе, оптимальная последовательность \(a\) равна \([0, 10^9, 0, 10^9, 0, 10^9, 0, 10^9]\).

В третьем наборе, оптимальная последовательность \(a\) равна \([0, -3, -6, 1, -2]\).

C. Удаление скобочной последовательности

жадные алгоритмы реализация *1200

Вам задана скобочная последовательность, состоящая из \(n\) символов '(' и/или )'. Вы производите над ней последовательность операций.

В течение одной операции вы выбираете кратчайший префикс этой строки (какое-то количество первых символов строки), который является хорошим, и удаляете его из строки.

Префикс считается хорошим, если выполняется одно из следующих двух условий:

  • этот префикс является правильной скобочной последовательностью;
  • этот префикс является палиндромом длины хотя бы два.

Скобочная последовательность называется правильной, если из нее возможно получить корректное арифметическое выражение вставкой символов '+' и '1' в эту последовательность. Например, последовательности (())(), () и (()(())) являются правильными, когда )(, (() и (()))( ими не являются.

Скобочная последовательность называется палиндромом, если она читается одинаково и вперед и назад. Например, скобочные последовательности )), (( и )(() являются палиндромами, а скобочные последовательности (), )( и ))( ими не являются.

Вы прекращаете производить операции тогда, когда невозможно найти ни одного хорошего префикса. Ваша задача — найти количество операций, которые вы произведете, а также количество оставшихся в строке символов после всех операций.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Следующие \(2t\) строк описывают сами наборы.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длину скобочной последовательности.

Вторая строка набора содержит \(n\) символов '(' и/или ')' — саму скобочную последовательность.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(5 \cdot 10^5\) (\(\sum n \le 5 \cdot 10^5\)).

Выходные данные

На каждый набор тестовых данных выведите два целых числа \(c\) и \(r\) — количество операций, которые вы произведете над данной скобочной последовательностью и количество оставшихся в ней символов после всех операций.

D. Для геймеров. От геймеров.

Бинарный поиск жадные алгоритмы математика Перебор сортировки *2000

Монокарп играет в стратегическую игру. В игре он собирает отряд для борьбы с монстрами. Перед каждой битвой у Монокарпа есть \(C\) монет, которые он может потратить на свой отряд.

Перед началом каждой битвы в его отряде никого нет. Монокарп выбирает один тип воинов и набирает не больше воинов этого типа, чем он может себе позволить за \(C\) монет.

Существует \(n\) типов воинов. Каждый тип воинов имеет три параметра:

  • \(c_i\) — стоимость одного воина \(i\)-го типа;
  • \(d_i\) — урон, который наносит один воин \(i\)-го типа за секунду;
  • \(h_i\) — здоровье одного воина \(i\)-го типа.

Монокарпу придется сразиться с \(m\) монстрами. У каждого монстра есть два параметра:

  • \(D_j\) — урон, который наносит \(j\)-й монстр за секунду;
  • \(H_j\) — здоровье \(j\)-го монстра.

Монокарп сражается только с \(j\)-м монстром во время \(j\)-й битвы. Он хочет, чтобы все его воины остались в живых. И отряд Монокарпа, и монстр атакуют одновременно и непрерывно. Таким образом, Монокарп выигрывает битву тогда и только тогда, когда его отряд убивает монстра строго быстрее, чем монстр убивает одного из его воинов. Время сравнивается без округления.

Для каждого монстра Монокарп хочет знать минимальное количество монет, которое он должен потратить, чтобы убить этого монстра. Если это количество больше, чем \(C\), то сообщите, что убить этого монстра невозможно.

Входные данные

В первой строке записаны два целых числа \(n\) и \(C\) (\(1 \le n \le 3 \cdot 10^5\); \(1 \le C \le 10^6\)) — количество типов воинов и количество монет у Монокарпа перед каждой битвой.

В \(i\)-й из следующих \(n\) строк записаны три целых числа \(c_i, d_i\) и \(h_i\) (\(1 \le c_i \le C\); \(1 \le d_i, h_i \le 10^6\)).

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество монстров, с которыми придется сразиться Монокарпу.

В \(j\)-й из следующих \(m\) строк записаны два целых числа \(D_j\) и \(H_j\) (\(1 \le D_j \le 10^6\); \(1 \le H_j \le 10^{12}\)).

Выходные данные

Выведите \(m\) целых чисел. Для каждого монстра выведите минимальное количество монет, которое Монокарп должен потратить, чтобы убить этого монстра. Если это количество больше, чем \(C\), то выведите \(-1\).

Примечание

Рассмотрим первого монстра из первого примера.

Монокарп не может взять одного воина первого типа, потому что и ему, и монстру потребуется \(0.75\) секунды, чтобы убить друг друга. Он может взять двух воинов стоимостью \(6\) монет и убить монстра за \(0.375\) секунду.

Монокарп может взять одного воина второго типа, потому что он убивает монстра за \(0.6\) секунды, а монстр убивает его за \(0.625\) секунды. Воин быстрее. Таким образом, достаточно \(5\) монет.

Монокарпу понадобится как минимум три воина третьего типа, чтобы убить первого монстра, что будет стоить \(30\) монет.

Монокарп потратит меньше всего монет, если выберет второй тип воинов и возьмет одного воина этого типа.

F. Дзюдзю и бинарная строка

жадные алгоритмы Конструктив математика Перебор *2700

Красота бинарной строки — это количество в ней \(\texttt{1}\), делённое на длину строки. Например, красота строки \(\texttt{01101}\) равна \(\frac{3}{5}\).

У Дзюдзю есть бинарная строка \(s\) длины \(n\). Она хочет выбрать некоторые непересекающиеся подотрезки \(s\) так, чтобы их конкатенация имела длину \(m\) и такую же красоту, как и строка \(s\).

Более формально, она хочет найти два массива \(l\) и \(r\) равной длины \(k\) таких, что \(1 \leq l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k \leq n\), а также:

  • \(\sum\limits_{i=1}^k (r_i - l_i + 1) = m\);
  • Красота \(s[l_1,r_1]+s[l_2,r_2]+\ldots+s[l_k,r_k]\) в точности равна красоте \(s\), где \(s[x, y]\) обозначает подотрезок \(s_x s_{x+1} \ldots s_y\), а \(+\) обозначает конкатенацию строк.
Дзюдзю не любит разделять строки на много частей, поэтому она также хочет минимизировать значение \(k\). Найдите минимальное значение \(k\) такое, что существуют массивы \(l\) и \(r\), удовлетворяющие ограничениям выше, или определите, что подходящих массивов \(l\) и \(r\) не существует ни при каком \(k\).
Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует подходящих \(l\) и \(r\), выведите \(-1\).

Иначе выведите \(k + 1\) строку.

В первой строке выведите число \(k\) (\(1 \leq k \leq m\)) — минимальное количество требуемых подотрезков.

Затем выведите \(k\) строк, \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — границы \(i\)-го подотрезка. Обратите внимание, что вы должны выводить подотрезки так, чтобы выполнялось неравенство \(l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k\).

Примечание

В первом примере красота \(\texttt{0011}\) равна красоте \(\texttt{01}\).

Во втором примере красота \(\texttt{11000011}\) равна \(\frac{1}{2}\) и не существует подотрезка длины \(6\) с такой же красотой. Поэтому мы должны использовать \(2\) непересекающихся подотрезка \(\texttt{10}\) и \(\texttt{0011}\).

В третьем примере есть \(8\) способов разбить строку таким образом, что \(\sum\limits_{i=1}^k (r_i - l_i + 1) = 3\), но ни в одном из них конкатенация не будет иметь такую же красоту, как \(\texttt{0101}\).

В последнем примере мы не должны разбивать строку.

A. Красные против синих

жадные алгоритмы Конструктив математика реализация *1000

Команда красных и команда синих соревнуются в одной из игр-шутеров. Их игра транслировалась на весь мир. Всего они сыграли \(n\) матчей.

В конце оказалось, что команда красных выиграла \(r\) раз, а команда синих — \(b\) раз. Команда красных была сильнее, поэтому \(b\) строго меньше \(r\).

Вы пропустили трансляцию, но думаете, что матч был очень интересным, так как его смотрели много людей. Вы представляете строку длины \(n\), где \(i\)-й символ обозначает, кто выиграл \(i\)-й матч: R, если выиграла команда красных, и B, если выиграла команда синих. Вы считаете, что строка была такой, что максимальное число раз, которое какая либо команда выигрывала подряд было минимально возможным. Например, в строке RBBRRRB команда красных выиграла максимум \(3\) матча подряд.

Найдите строку, удовлетворяющую данным критериям. Если есть несколько возможных ответов, выведите любой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных описывается одной строкой, содержащей три целых числа \(n\), \(r\) и \(b\) (\(3 \leq n \leq 100\); \(1 \leq b < r \leq n\), \(r+b=n\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, удовлетворяющую данным условиям. Если существует несколько решений, выведите любое из них.

Примечание

Первый пример показывает оптимальный ответ для случая, описанного в в условии. Максимальное количество раз, которое команда выигрывала подряд в RBRBRBR, равно \(1\). Нельзя уменьшить это значение.

Ответ для второго примера RRBRBRBRBR. Максимальное количество раз, которое команда выигрывала подряд, равно \(2\), а именно в RR в начале строки. Можно показать, что нельзя уменьшить это значение.

B. Обращение битов

битмаски жадные алгоритмы Конструктив Строки *1300

Вам дана битовая строка длины \(n\). Вы должны сделать ровно \(k\) ходов. На каждом ходу вы должны выбрать один бит строки. Состояние всех битов кроме выбранного изменятся на противоположное (\(0\) станет \(1\), \(1\) станет \(0\)). Вам нужно вывести лексикографически максимальную строку, которую вы можете получить, используя все \(k\) ходов. Кроме того, для каждого бита выведите, сколько раз вы его выбираете для получения такой строки. Если есть несколько возможных решений, выведите любое из них.

Битовая строка \(a\) лексикографически больше битовой строки \(b\) такой же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится \(1\), а в строке \(b\) — \(0\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор описывается в двух строках. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\); \(0 \leq k \leq 10^9\)).

Вторая строка содержит битовую строку длины \(n\), каждый символ которой либо \(0\), либо \(1\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

Первая строка должна содержать лексикографически максимальную строку, которую вы можете получить.

Вторая строка должна содержать \(n\) целых чисел \(f_1, f_2, \ldots, f_n\), где \(f_i\) — количество раз, которое вы выбираете \(i\)-й бит. Сумма всех чисел должна быть равна \(k\).

Примечание

Рассмотрим первый пример. Ниже пошагово показано, как изменяется строка после каждого хода.

  • Выбирается бит \(1\): \(\color{red}{\underline{1}00001} \rightarrow \color{red}{\underline{1}}\color{blue}{11110}\).
  • Выбирается бит \(4\): \(\color{red}{111\underline{1}10} \rightarrow \color{blue}{000}\color{red}{\underline{1}}\color{blue}{01}\).
  • Выбирается бит \(4\): \(\color{red}{000\underline{1}01} \rightarrow \color{blue}{111}\color{red}{\underline{1}}\color{blue}{10}\).
Итоговая строка равна \(111110\), это лексикографически максимальная строка, которую можно получить.

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. Обратная сумма сортировки

жадные алгоритмы Конструктив математика реализация Структуры данных *1900

Представим, что у вас был массив \(A\) из \(n\) элементов, каждый из которых это \(0\) или \(1\).

Определим функцию \(f(k,A)\), которая возвращает массив \(B\), который является результатом сортировки первых \(k\) элементов массива \(A\) в неубывающем порядке. Например, \(f(4,[0,1,1,0,0,1,0]) = [0,0,1,1,0,1,0]\). Обратите внимание, что первые \(4\) элемента были отсортированы.

Рассмотрим массивы \(B_1, B_2,\ldots, B_n\), равные \(f(1,A), f(2,A),\ldots,f(n,A)\). Пусть \(C\) — массив, равный поэлементной сумме массивов \(B_1, B_2,\ldots, B_n\).

Например, пусть \(A=[0,1,0,1]\). Тогда \(B_1=[0,1,0,1]\), \(B_2=[0,1,0,1]\), \(B_3=[0,0,1,1]\), \(B_4=[0,0,1,1]\). Тогда \(C=B_1+B_2+B_3+B_4=[0,1,0,1]+[0,1,0,1]+[0,0,1,1]+[0,0,1,1]=[0,2,2,4]\).

Вам дан массив \(C\). Найдите бинарный массив \(A\) такой, что, если его обработать как описано выше, то получится данный массив \(C\). Гарантируется, что такой массив \(A\) существует для данного \(C\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq n\)). Гарантируется, что для данного массива \(C\) существует подходящий массив \(A\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(0\) или \(1\)). Если существуют несколько ответов, выведите любой.

Примечание

Рассмотрим первый пример. Начнем с массива \(A=[1,1,0,1]\) и построим массивы \(B_i\):

  • \(B_1=[\color{blue}{1},1,0,1]\);
  • \(B_2=[\color{blue}{1},\color{blue}{1},0,1]\);
  • \(B_3=[\color{blue}{0},\color{blue}{1},\color{blue}{1},1]\);
  • \(B_4=[\color{blue}{0},\color{blue}{1},\color{blue}{1},\color{blue}{1}]\)
Затем просуммируем каждый столбик и получим \(C=[1+1+0+0,1+1+1+1,0+0+1+1,1+1+1+1]=[2,4,2,4]\).

C. Медиана

жадные алгоритмы математика сортировки *1500

Медианой в массиве длины n называется элемент, который после сортировки элементов по неубыванию будет стоять на позиции номер (элементы массива нумеруются начиная с 1). Медианой массива (2, 6, 1, 2, 3) является число 2, а медианой массива (0, 96, 17, 23) — число 17.

Под выражением понимается целая часть от деления числа a на число b.

Однажды Вася показал Пете массив из n натуральных чисел и предложил найти медиану этого массива. Петя, даже не взглянув на числа, ответил, что она равна x. Петя очень честный мальчик, поэтому он решил добавить к заданному массиву несколько чисел таким образом, чтобы медиана получившегося массива стала равна x.

Петя может добавлять в массив любые целые числа от 1 до 105, в том числе и одинаковые. Разумеется, разрешается ничего не добавлять в массив. Если число добавляется несколько раз, то в ответе оно учитывается такое же количество раз. Исходные числа массива запрещено удалять либо заменять.

Пока Петя отвлекает Васю, вы должны найти минимальное количество чисел, которые ему потребуются.

Входные данные

В первой строке входных данных записаны два разделенных пробелом целых числа n и x (1 ≤ n ≤ 500, 1 ≤ x ≤ 105) — длина исходного массива и требуемое значение медианы. Во второй строке записаны n чисел через пробел — исходный массив. Элементы массива — целые числа от 1 до 105. Элементы массива не обязательно различны.

Выходные данные

Выведите единственное целое число — минимальное количество чисел, которое нужно добавить Пете в массив, чтобы его медиана стала равна x.

Примечание

В первом примере в массив (10, 20, 30) достаточно добавить число 9. В получившемся массиве (9, 10, 20, 30) медианой будет элемент на позиции , то есть 10.

Во втором примере в массив нужно добавить числа 4, 5, 5, 5. В получившемся массиве медиана равна 4.

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.

A. Вася и монеты

жадные алгоритмы математика *800

Вася решил пойти в магазин за продуктами. Он нашёл в своём кошельке \(a\) монет по \(1\) бурлю и \(b\) монет по \(2\) бурля. Он пока не знает суммарную стоимость всех товаров, поэтому помогите ему узнать \(s\) (\(s > 0\)) — минимальную положительную целочисленную сумму денег, которую он не может заплатить без сдачи или заплатить вообще, используя только свои монеты.

Например, если \(a=1\) и \(b=1\) (у него есть одна монета номиналом \(1\) бурль и одна монета номиналом \(2\) бурля), то:

  • \(1\) бурль он может заплатить без сдачи, заплатив одной монетой в \(1\) бурль,
  • \(2\) бурля он может заплатить без сдачи, заплатив одной монетой в \(2\) бурля,
  • \(3\) бурля он может заплатить без сдачи, заплатив одной монетой в \(1\) бурль и одной монетой в \(2\) бурля,
  • \(4\) бурля он не может заплатить без сдачи (более того эту сумму он не может заплатить вообще).

Таким образом, для \(a=1\) и \(b=1\) ответ равен \(s=4\).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Описание каждого набора входных данных состоит из одной строки, содержащей по два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^8\)) — количество монет у Васи по \(1\) бурлю и по \(2\) бурля соответственно.

Выходные данные

Для каждого набора входных данных на отдельной строке выведите одно целое число \(s\) (\(s > 0\)) — минимальную сумму денег, которую Вася не сможет заплатить без сдачи или заплатить вообще.

Примечание
  • Первый набор входных данных примера разобран в условии.
  • Во втором наборе входных данных у Васи есть только монеты по \(1\) бурлю, и он может набрать или любую сумму от \(1\) до \(4\), но \(5\) уже не может.
  • В третьем наборе входных данных у Васи есть только монеты по \(2\) бурля, и он не может заплатить без сдачи \(1\) бурль.
  • В четвёртом наборе входных данных у Васи нет ни одной монеты, и он не может заплатить даже \(1\) бурль.

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\)-й символ и любой из первых трех.

E. Матрица и сдвиги

жадные алгоритмы Конструктив Перебор реализация *1600

Вам задана двоичная матрица \(A\) размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\). Ячейка, находящаяся на пересечении строки \(i\) и столбца \(j\) называется \(A_{ij}\). Рассмотрим набор из \(4\) операций:

  1. Циклически сдвинуть все строки вверх. Строка с номером \(i\) будет записана на место строки \(i-1\) (\(2 \le i \le n\)), строка с номером \(1\) будет записана на место строки \(n\).
  2. Циклически сдвинуть все строки вниз. Строка с номером \(i\) будет записана на место строки \(i+1\) (\(1 \le i \le n - 1\)), строка с номером \(n\) будет записана на место строки \(1\).
  3. Циклически сдвинуть все столбцы влево. Столбец с номером \(j\) будет записан на место столбца \(j-1\) (\(2 \le j \le n\)), столбец с номером \(1\) будет записан на место столбца \(n\).
  4. Циклически сдвинуть все столбцы вправо. Столбец с номером \(j\) будет записан на место столбца \(j+1\) (\(1 \le j \le n - 1\)), столбец с номером \(n\) будет записан на место столбца \(1\).
Слева изображена матрица \(3 \times 3\) до применения к ней операции \(3\), справа — после.

Вы можете провести над матрицей произвольное (возможно, нулевое) количество операций, операции можно проводить в любом порядке.

После этого вы можете осуществить произвольное (возможно, нулевое) количество новых xor-операций:

  • Выбрать любую ячейку \(A_{ij}\) и записать в нее значение выражения \(A_{ij} \oplus 1\). Другими словами, в ячейку \(A_{ij}\) необходимо будет записать значение \((A_{ij} + 1) \bmod 2\).

Каждое применение этой xor-операции стоит один бурль. Заметим, что \(4\) операции сдвигов — бесплатные. Эти \(4\) операции можно проводить только до осуществления xor-операций.

Выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Единичной называется такая матрица, на главной диагонали которой стоят единицы, а остальные её элементы являются нулями (то есть, \(A_{ij} = 1\) при \(i = j\) и \(A_{ij} = 0\) иначе).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных. Перед каждым набором входных данных во входных данных записана пустая строка.

В первой строке каждого набора входных данных записано единственное число \(n\) (\(1 \le n \le 2000\))

Затем следует \(n\) строк, каждая из которых содержит ровно \(n\) символов и состоит только из нулей и единиц. Эти строки описывают значения в ячейках матрицы.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превышает \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Иными словами, выведите минимальное количество xor-операций, которое потребуется совершить после применения циклических сдвигов к матрице, для того, чтобы матрица \(A\) стала единичной.

Примечание

В первом наборе входных данных можно действовать следующим образом: сначала циклически сдвинуть все строки вниз, тогда на главной диагонали матрицы будут стоять одни единицы. Затем необходимо будет применить xor-операцию к единственной единице, которая окажется не на главной диагонали.

Во втором наборе входных данных можно получить единичную матрицу, дважды применив к матрице операцию \(2\) — циклический сдвиг строк вверх.

A. Балансировка массива

жадные алгоритмы математика *800

Вам заданы два массива длины \(n\): \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_n\).

Вы можете применить к ним следующую операцию произвольное количество раз:

  1. Выбрать позицию \(i\) (\(1 \le i \le n\));
  2. Поменять местами \(a_i\) и \(b_i\).

Чему равна наименьшая возможная сумма \(|a_1 - a_2| + |a_2 - a_3| + \dots + |a_{n-1} - a_n|\) \(+\) \(|b_1 - b_2| + |b_2 - b_3| + \dots + |b_{n-1} - b_n|\) (другими словами, \(\sum\limits_{i=1}^{n - 1}{\left(|a_i - a_{i+1}| + |b_i - b_{i+1}|\right)}\)), которую можно получить после применения заданной операции произвольное количество раз (возможно, ни разу)?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 4000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 25\)) — длина массивов \(a\) и \(b\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

В третьей строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — массив \(b\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшую возможную сумму \(\sum\limits_{i=1}^{n-1}{\left(|a_i - a_{i+1}| + |b_i - b_{i+1}|\right)}\).

Примечание

В первом наборе входных данных мы можем, например, поменять местами \(a_3\) с \(b_3\) и \(a_4\) с \(b_4\). Мы получим массивы \(a = [3, 3, 3, 3]\) и \(b = [10, 10, 10, 10]\) с суммой \(3 \cdot |3 - 3| + 3 \cdot |10 - 10| = 0\).

Во втором наборе массивы уже имеют наименьшую сумму (описанную ранее), равную \(|1 - 2| + \dots + |4 - 5| + |6 - 7| + \dots + |9 - 10|\) \(= 4 + 4 = 8\).

В третьем наборе мы можем, например, поменять местами \(a_5\) с \(b_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\) раз.

C. Полей деревья

Бинарный поиск жадные алгоритмы математика *1700

В парке находятся \(n\) деревьев, пронумерованных от \(1\) до \(n\). Изначальная высота \(i\)-го дерева равна \(h_i\).

Вы хотите полить эти деревья таким образом, чтобы они все выросли до одинаковой высоты.

Процесс полива происходит следующим образом. Вы начинаете поливать деревья в день \(1\). В течение \(j\)-го дня вы можете:

  • Выбрать дерево и полить его. Если день нечетный (например, \(1, 3, 5, 7, \dots\)), то высота дерева увеличится на \(1\). Если день четный (например, \(2, 4, 6, 8, \dots\)), то высота дерева увеличится на \(2\).
  • Или пропустить день без полива какого-либо дерева.

Заметьте, что вы не можете поливать больше одного дерева в день.

Ваша задача — найти минимальное количество дней, необходимое для того, чтобы все деревья выросли до одинаковой высоты.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество деревьев.

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^9\)), где \(h_i\) равно высоте \(i\)-го дерева.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(3 \cdot 10^5\) (\(\sum n \le 3 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество дней, необходимое для того, чтобы все деревья выросли до одинаковой высоты.

Примечание

Рассмотрим первый набор тестовых данных примера. Изначальное состояние деревьев выглядит как \([1, 2, 4]\).

  1. В течение первого дня польем первое дерево, таким образом последовательность высот станет равна \([2, 2, 4]\);
  2. в течение второго дня польем второе дерево, таким образом последовательность высот станет равна \([2, 4, 4]\);
  3. пропустим третий день;
  4. в течение четвертого дня давайте польем первое дерево, таким образом последовательность высот станет равна \([4, 4, 4]\).

Таким образом, ответ равен \(4\).

D. Покрытие прогрессиями

жадные алгоритмы Структуры данных *1900

Вам даны два массива: массив \(a\), состоящий из \(n\) нулей и массив \(b\), состоящий из \(n\) целых чисел.

Вы можете применить к массиву \(a\) следующую операцию произвольное количество раз: выбрать какой-то подотрезок \(a\) длины \(k\) и добавить арифметическую прогрессию \(1, 2, \ldots, k\) к этому подотрезку — то есть добавить \(1\) к первому элементу подотрезка, \(2\) ко второму элементу и так далее. Выбранный подотрезок должен находиться внутри границ массива \(a\) (если левая граница выбранного подотрезка равна \(l\), тогда должно выполняться условие \(1 \le l \le l + k - 1 \le n\)). Заметьте, что добавляемая прогрессия всегда имеет вид \(1, 2, \ldots, k\), а не \(k, k - 1, \ldots, 1\) или какой-нибудь другой (то есть самый левый элемент всегда увеличивается на \(1\), второй элемент всегда увеличивается на \(2\) и так далее).

Ваша задача — найти минимально возможное количество операций, необходимое для того, чтобы удовлетворить условие \(a_i \ge b_i\) для всех \(i\) от \(1\) до \(n\). Заметьте, что условие \(a_i \ge b_i\) должно быть выполнено для всех элементов сразу.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) — количество элементов в обоих массивах и длину подотрезка соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^{12}\)), где \(b_i\) — это \(i\)-й элемент массива \(b\).

Выходные данные

Выведите одно целое число — минимально возможное количество операций, необходимое для того, чтобы удовлетворить условие \(a_i \ge b_i\) для всех \(i\) от \(1\) до \(n\).

Примечание

Рассмотрим первый тестовый пример. В этом тесте у нас нет никакого выбора, кроме как добавить пять прогрессий для того, чтобы сделать первый элемент массива равным \(5\). В этом случае массив \(a\) будет равен \([5, 10, 15]\).

Рассмотрим второй тестовый пример. В этом тесте давайте добавим одну прогрессию на отрезке \([1; 3]\) и две прогрессии на отрезке \([4; 6]\). В этом случае массив \(a\) будет равен \([1, 2, 3, 2, 4, 6]\).

F. Порталы

Бинарный поиск жадные алгоритмы *2600

На прямой расположено \(n+1\) порталов. Они находятся в точках \(0\), \(a_1\), \(a_2\), \(a_3\), ..., \(a_n\). Можно телепортироваться из точки \(x\) в точку \(y\), если в обеих этих точках есть порталы, и такая телепортация стоит \((x-y)^2\) энергии.

Вы хотите установить несколько дополнительных порталов так, чтобы можно было телепортироваться из точки \(0\) в точку \(a_n\) (возможно, через какие-то промежуточные порталы), потратив суммарно не более \(m\) энергии. Каждый портал, который вы устанавливаете, должен располагаться в целочисленной точке.

Какое минимальное количество порталов вам нужно установить?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 < a_2 < a_3 < \dots < a_n \le 10^9\)).

В третьей строке задано одно целое число \(m\) (\(a_n \le m \le 10^{18}\)).

Выходные данные

Выведите одно целое число — минимальное количество порталов, которое нужно установить, чтобы можно было телепортироваться из точки \(0\) в точку \(a_n\), потратив суммарно не более \(m\) энергии. Можно показать, что при вышеописанных ограничениях на входные данные это всегда возможно.

B. Toys

жадные алгоритмы Строки

Vittorio has three favorite toys: a teddy bear, an owl, and a raccoon. Each of them has a name.

Vittorio takes several sheets of paper and writes a letter on each side of every sheet so that it is possible to spell any of the three names by arranging some of the sheets in a row (sheets can be reordered and flipped as needed). The three names do not have to be spelled at the same time, it is sufficient that it is possible to spell each of them using all the available sheets (and the same sheet can be used to spell different names).

Find the minimum number of sheets required. In addition, produce a list of sheets with minimum cardinality which can be used to spell the three names (if there are multiple answers, print any).

Input

The first line contains a string \(t\) consisting of uppercase letters of the English alphabet (\(1\le |t| \le 1000\)) — the name of the teddy bear.

The second line contains a string \(o\) consisting of uppercase letters of the English alphabet (\(1\le |o| \le 1000\)) — the name of the owl.

The third line contains a string \(r\) consisting of uppercase letters of the English alphabet (\(1\le |r| \le 1000\)) — the name of the raccoon.

The values \(|t|\), \(|o|\), \(|r|\) denote the length of the three names \(t\), \(o\), \(r\).

Output

The first line of the output contains a single integer \(m\) — the minimum number of sheets required.

Then \(m\) lines follow: the \(j\)-th of these lines contains a string of two uppercase letters of the English alphabet — the letters appearing on the two sides of the \(j\)-th sheet.

Note that you can print the sheets and the two letters of each sheet in any order.

Note

In the first sample, the solution uses two sheets: the first sheet has A on one side and G on the other side; the second sheet has A on one side and M on the other side.

The name AA can be spelled using the A side of both sheets. The name GA can be spelled using the G side of the first sheet and the A side of the second sheet. Finally, the name MA can be spelled using the M side of the second sheet and the A side of the first sheet.

D. Evolution of Weasels

жадные алгоритмы реализация Строки

A wild basilisk just appeared at your doorstep. You are not entirely sure what a basilisk is and you wonder whether it evolved from your favorite animal, the weasel.

How can you find out whether basilisks evolved from weasels? Certainly, a good first step is to sequence both of their DNAs. Then you can try to check whether there is a sequence of possible mutations from the DNA of the weasel to the DNA of the basilisk.

Your friend Ron is a talented alchemist and has studied DNA sequences in many of his experiments. He has found out that DNA strings consist of the letters A, B and C and that single mutations can only remove or add substrings at any position in the string (a substring is a contiguous sequence of characters). The substrings that can be removed or added by a mutation are AA, BB, CC, ABAB or BCBC. During a sequence of mutations a DNA string may even become empty.

Ron has agreed to sequence the DNA of the weasel and the basilisk for you, but finding out whether there is a sequence of possible mutations that leads from one to the other is too difficult for him, so you have to do it on your own.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains a string \(u\) (\(1\le |u|\le 200\)) — the DNA of the weasel.

The second line of each test case contains a string \(v\) (\(1\le |v|\le 200\)) — the DNA of the basilisk.

The values \(|u|\), \(|v|\) denote the lengths of the strings \(u\) and \(v\). It is guaranteed that both strings \(u\) and \(v\) consist of the letters A, B and C.

Output

For each test case, print YES if there is a sequence of mutations to get from \(u\) to \(v\) and NO otherwise.

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.

B. Техника массивного клонирования

жадные алгоритмы Конструктив сортировки *900

Дан массив \(a\) из \(n\) целых чисел. У этого массива изначально есть только одна копия, данная вам.

Можно делать два вида действий:

  1. Выбрать любой массив и создать его копию. После это появляется ещё один массив, равный выбранному.
  2. Поменять местами два элемента из любых копий (возможно, в одной копии) на любых позициях.

Вам нужно найти минимальное количество действий, необходимое, чтобы хотя бы в одной копии все элементы были равны.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива \(a\).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — исходная копия массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество действий, которое нужно сделать, чтобы хотя бы в одной копии массива все элементы были равны.

Примечание

В первом наборе входных данных в массиве уже все числа равны, поэтому ответ равен \(0\).

Во втором наборе входных данных сначала можно сделать копию данного массива. Тогда будут два одинаковых массива:

\([ \ 0 \ 1 \ 3 \ 3 \ 7 \ 0 \ ]\) и \([ \ 0 \ 1 \ 3 \ 3 \ 7 \ 0 \ ]\)

После этого можно поменять местами элементы так, чтобы все нули оказались в одном массиве:

\([ \ 0 \ \underline{0} \ \underline{0} \ 3 \ 7 \ 0 \ ]\) и \([ \ \underline{1} \ 1 \ 3 \ 3 \ 7 \ \underline{3} \ ]\)

Теперь создадим копию первого массива:

\([ \ 0 \ 0 \ 0 \ 3 \ 7 \ 0 \ ]\), \([ \ 0 \ 0 \ 0 \ 3 \ 7 \ 0 \ ]\) и \([ \ 1 \ 1 \ 3 \ 3 \ 7 \ 3 \ ]\)

Поменяем местами элементы в первых двух копиях:

\([ \ 0 \ 0 \ 0 \ \underline{0} \ \underline{0} \ 0 \ ]\), \([ \ \underline{3} \ \underline{7} \ 0 \ 3 \ 7 \ 0 \ ]\) и \([ \ 1 \ 1 \ 3 \ 3 \ 7 \ 3 \ ]\).

В итоге за \(6\) действий получили массив, в котором все элементы одинаковые.

Можно доказать, что невозможно получить ответ меньше.

C. Заражение дерева

Бинарный поиск Деревья жадные алгоритмы сортировки *1600

Деревом называется связный граф без циклов. В корневом дереве есть особая вершина, которая называется корнем. Родитель вершины \(v\) (отличной от корня) — вершина перед \(v\) на кратчайшем пути от корня до \(v\). Дети вершины \(v\) — все вершины, для которых \(v\) является родителем.

Вам дано корневое дерево из \(n\) вершин. Вершина \(1\) — корень. Изначально все вершины здоровы.

Каждую секунду вы делаете две операции: распространение и, после этого, инъекцию:

  1. Распространение: для каждой вершины \(v\), если хотя бы один ребёнок \(v\) заражён, то вы можете распространить инфекцию, дополнительно заразив не более одного ребёнка \(v\) на свой выбор.
  2. Инъекция: вы можете выбрать одну любую здоровую вершину и заразить её.

Этот процесс повторяется каждую секунду до тех пор, пока всё дерево не будет заражено. Необходимо найти минимальное время в секундах, за которое можно заразить всё дерево.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в данном дереве.

Вторая строка каждого набора входных данных содержит \(n - 1\) целое число \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) — предок \(i\)-й вершины в дереве.

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное время в секундах, за которое можно заразить всё дерево.

Примечание

На картинке изображено дерево из первого набора входных данных в каждую секунду.

Вершина покрашена в чёрный, если она не заражена. Вершина покрашена в синий, если она заражена инъекцией в течение последней прошедшей секунды. Вершина покрашена в зелёный, если она заражена распространением в течение последней прошедшей секунды. Вершина покрашена в красный, если она заражена, но не в течение последней прошедшей секунды.

Обратите внимание, что вы можете выбирать, какие именно вершины будут заражены распространением и инъекциями.

E. МинимизатOR

битмаски жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Дан массив \(a\) из \(n\) неотрицательных целых чисел, пронумерованных от \(1\) до \(n\).

Назовём стоимостью массива \(a\) величину, равную \(\displaystyle \min_{i \neq j} a_i | a_j\), где \(|\) обозначает операцию побитового ИЛИ.

Есть \(q\) запросов. Каждый запрос состоит из двух чисел \(l\) и \(r\) (\(l < r\)). Для каждого запроса необходимо вывести стоимость массива \(a_{l}, a_{l + 1}, \ldots, a_{r}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j < r_j \le n\)) — описание \(j\)-го запроса.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел, где \(j\)-е число равно стоимости массива \(a_{l_j}, a_{l_j + 1}, \ldots, a_{r_j}\).

Примечание

В первом наборе входных данных массив \(a\) выглядит так:

\(110_2, 001_2, 011_2, 010_2, 001_2\).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 110_2 | 001_2 = 111_2 = 7\);
  • \([2; 3]\): \(a_2 | a_3 = 001_2 | 011_2 = 011_2 = 3\);
  • \([2; 4]\): \(a_2 | a_3 = a_3 | a_4 = a_2 | a_4 = 011_2 = 3\);
  • \([2; 5]\): \(a_2 | a_5 = 001_2 = 1\).

Во втором наборе входных данных массив \(a\) выглядит так:

\(00_2, 10_2, 01_2, \underbrace{11\ldots 1_2}_{30}\) (\(a_4 = 2^{30} - 1\)).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 10_2 = 2\);
  • \([2; 3]\): \(a_2 | a_3 = 11_2 = 3\);
  • \([1; 3]\): \(a_1 | a_3 = 01_2 = 1\);
  • \([3; 4]\): \(a_3 | a_4 = 01_2 | \underbrace{11\ldots 1_2}_{30} = 2^{30} - 1 = 1073741823\).

A. Сделай его возрастающим

жадные алгоритмы математика Перебор *1300

Дан массив \(a\), состоящий из \(n\) положительных целых чисел, и массив \(b\) размера \(n\). Изначально \(b_i=0\) для каждого \(1 \leq i \leq n\).

За один ход вы можете выбрать целое число \(i\) (\(1 \leq i \leq n\)) и прибавить \(a_i\) к \(b_i\) или вычесть \(a_i\) из \(b_i\). За какое минимальное число ходов можно сделать \(b\) возрастающим (то есть таким, что каждый элемент строго больше всех предыдущих)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 5000\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — минимальное число ходов, за которое можно сделать \(b\) возрастающим.

Примечание

Пример \(1\): можно вычесть \(a_1\) из \(b_1\), и прибавить \(a_3\), \(a_4\), \(a_5\) к \(b_3\), \(b_4\) и \(b_5\) соответственно. В итоге получим массив [\(-1\), \(0\), \(3\), \(4\), \(5\)] за \(4\) хода.

Пример \(2\): можно получить массив [\(-3\), \(-2\), \(-1\), \(0\), \(1\), \(2\), \(3\)] за \(10\) ходов.

B. Социальная дистанция

жадные алгоритмы математика сортировки *900

По кругу расставлены последовательно \(m\) стульев. Стулья пронумерованы от \(0\) до \(m-1\). На эти стулья хотят сесть \(n\) человек. \(i\)-й из них хочет, чтобы и справа, и слева от него было хотя бы \(a[i]\) пустых стула.

Более формально, если \(i\)-й человек сидит на \(j\)-м стуле, то никто не может сидеть на следующих стульях: \((j-a[i]) \bmod m\), \((j-a[i]+1) \bmod m\), ... \((j+a[i]-1) \bmod m\), \((j+a[i]) \bmod m\).

Определите, возможно ли рассадить всех людей при заданных ограничениях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq 10^9\)) — количество людей и стульев соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... \(a_n\) (\(1 \leq a_i \leq 10^9\)) — минимальное количество пустых стульев по обеим сторонам \(i\)-го человека.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно рассадить всех и выполнить ограничения, и «NO» (без кавычек) в ином случае.

Вы можете выводить буквы в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут все считаться положительным ответом)

Примечание

\(1\)-й набор входных данных: \(n>m\), поэтому никак нельзя рассадить всех.

\(2\)-й набор: первый человек может сесть на \(2\)-й стул, а второй человек — на \(0\)-й стул. Оба хотят по крайней мере \(1\) пустой стул по обе стороны от них. Стулья \(1\) и \(3\) свободны, поэтому эта рассадка подходит.

\(3\)-й набор: если второй человек сядет на стул, ему потребуется по \(2\) пустых стула слева и справа от него, поэтому становится невозможно найти место для первого человека, поскольку стульев всего \(5\).

\(4\)-й набор: люди могут сесть на \(1\)-й, \(4\)-й и \(7\)-й стулья соответственно.

C. Чётные и нечётные инкременты

жадные алгоритмы жадные алгоритмы математика реализация *800

Дан массив \(a=[a_1,a_2,\dots,a_n]\), состоящий из \(n\) положительных целых чисел. Вы можете делать с ним два вида операций:

  1. Прибавить \(1\) к каждому элементу с нечётным индексом. То есть произойдут следующие присвоения: \(a_1 := a_1 +1, a_3 := a_3 + 1, a_5 := a_5+1, \dots\).

  2. Прибавить \(1\) к каждому элементу с чётным индексом. То есть произойдут следующие присвоения: \(a_2 := a_2 +1, a_4 := a_4 + 1, a_6 := a_6+1, \dots\).

Определите, возможно ли после какого-либо количества операций сделать так, чтобы после них массив содержал только чётные или только нечётные числа. Другими словами, определите, можете ли вы сделать так, чтобы все элементы массива имели одинаковую четность после какого-либо количества операций.

Обратите внимание, что вы можете выполнять операции обоих типов любое количество раз (в том числе ни одного). Операции разных типов могут выполняться разное количество раз.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит единственное целое число \(n\) (\(2 \leq n \leq 50\)) — длину массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^3\)) — элементы массива.

Обратите внимание, что после выполнения операций элементы массива могут стать больше, чем \(10^3\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите «YES», если после некоторого количества операций возможно сделать так, чтобы массив содержал только чётные или только нечётные числа, и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере мы можем увеличить элементы на чётных позициях, после чего получим массив \([1, 3, 1]\), содержащий только нечётные числа, так что ответ «YES».

Во втором примере можно показать, что после любого количества операций мы не сможем привести все элементы к одной чётности, так что ответ «NO».

В третьем примере все элементы уже одной чётности и ответ «YES».

В четвёртом примере мы можем применить одну операцию и увеличить элементы на нечётных позициях на \(1\), после чего получим массив \([1001, 1, 1001, 1, 1001]\), все элементы которого нечётные, так что ответ «YES».

C. Чётные и нечётные инкременты

жадные алгоритмы жадные алгоритмы математика реализация *800

Дан массив \(a=[a_1,a_2,\dots,a_n]\), состоящий из \(n\) положительных целых чисел. Вы можете делать с ним два вида операций:

  1. Прибавить \(1\) к каждому элементу с нечётным индексом. То есть произойдут следующие присвоения: \(a_1 := a_1 +1, a_3 := a_3 + 1, a_5 := a_5+1, \dots\).

  2. Прибавить \(1\) к каждому элементу с чётным индексом. То есть произойдут следующие присвоения: \(a_2 := a_2 +1, a_4 := a_4 + 1, a_6 := a_6+1, \dots\).

Определите, возможно ли после какого-либо количества операций сделать так, чтобы после них массив содержал только чётные или только нечётные числа. Другими словами, определите, можете ли вы сделать так, чтобы все элементы массива имели одинаковую четность после какого-либо количества операций.

Обратите внимание, что вы можете выполнять операции обоих типов любое количество раз (в том числе ни одного). Операции разных типов могут выполняться разное количество раз.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит единственное целое число \(n\) (\(2 \leq n \leq 50\)) — длину массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^3\)) — элементы массива.

Обратите внимание, что после выполнения операций элементы массива могут стать больше, чем \(10^3\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите «YES», если после некоторого количества операций возможно сделать так, чтобы массив содержал только чётные или только нечётные числа, и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере мы можем увеличить элементы на чётных позициях, после чего получим массив \([1, 3, 1]\), содержащий только нечётные числа, так что ответ «YES».

Во втором примере можно показать, что после любого количества операций мы не сможем привести все элементы к одной чётности, так что ответ «NO».

В третьем примере все элементы уже одной чётности и ответ «YES».

В четвёртом примере мы можем применить одну операцию и увеличить элементы на нечётных позициях на \(1\), после чего получим массив \([1001, 1, 1001, 1, 1001]\), все элементы которого нечётные, так что ответ «YES».

F. Съедая конфеты

Бинарный поиск жадные алгоритмы Структуры данных *1100

Есть \(n\) конфет разложенных слева направо на столе, конфеты пронумерованы слева направо. Вес \(i\)-й конфеты равняется \(w_i\). Алиса и Боб едят конфеты.

Алиса может съесть любое количество конфет слева (она ест их подряд и не может пропускать конфеты).

Боб может съесть любое количество конфет справа (он ест их подряд и не может пропускать конфеты).

Если Алиса съела конфету, то Боб уже не сможет её съесть (и наоборот).

Они хотят поделить конфеты честно. Поэтому суммарные веса съеденных ими конфет должны быть равны. Какое наибольшее суммарное количество конфет они могут съесть в таком случае?

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — количество конфет на столе.

Вторая строка каждого набора содержит \(n\) чисел \(w_1, w_2, \dots, w_n\) (\(1 \leq w_i \leq 10^4\)) — веса конфет от самой левой до самой парвой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите единственное число — максимальное количество, которое могут съесть Алиса и Боб, соблюдая условие.

Примечание

В первом примере Алиса съест одну конфету слева, а Боб съест одну конфету справа. Нет лучшего способа съесть набор конфет одинакового веса. Ответ \(2\), так как они съедят суммарно две конфеты.

Во втором примере Алиса съест первые три конфеты слева (суммарным весом \(7\)), а Боб съест первые три конфеты справа (суммарным весом \(7\)). Они не могут съесть больше конфет, так как все конфеты съедены. Ответ равен \(6\), так как они съели суммарно шесть конфет.

В третьем примере Алиса и Боб не могут съесть наборы конфет одинакового ненулевого веса, поэтому ответ равен \(0\).

В четвертом примере Алиса съест конфеты весом \([7, 3, 20]\), а Боб съест конфеты весом \([10, 8, 11, 1]\), каждый из них съест набор конфет суммарным весом \(30\). Лучшего способа съесть конфеты нет, поэтому ответ \(7\).

H. Максимальный AND

битмаски жадные алгоритмы математика *1300

Пусть \(\mathsf{AND}\) обозначает побитовую операцию И, а \(\mathsf{OR}\) обозначает побитовую операцию ИЛИ.

Вам дан массив \(a\) длины \(n\) и неотрицательное целое число \(k\). Вы можете выполнить не более чем \(k\) операций над массивом следующего типа:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\)) и заменить \(a_i\) на \(a_i\) \(\mathsf{OR}\) \(2^j\), где \(j\) - любое целое число от \(0\) до \(30\) включительно. Другими словами, в операции можно выбрать индекс \(i\) (\(1 \leq i \leq n\)) и установить \(j\)-й бит \(a_i\) в \(1\) (\(0 \leq j \leq 30\)).

Выведите максимально возможное значение \(a_1\) \(\mathsf{AND}\) \(a_2\) \(\mathsf{AND}\) \(\dots\) \(\mathsf{AND}\) \(a_n\) после выполнения не более чем \(k\) операций.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее следует описание наборов.

Первая строка каждого набора содержит целые числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le k \le 10^9\)).

Затем следует единственная строка, содержащая \(n\) целых чисел, описывающих массив \(a\) (\(0 \leq a_i < 2^{31}\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую максимально возможное \(\mathsf{AND}\) значение \(a_1\) \(\mathsf{AND}\) \(a_2\) \(\mathsf{AND}\) \(\dots\) \(\mathsf{AND}\) \(a_n\) после выполнения не более чем \(k\) операций.

Примечание

Для первого набора мы можем установить бит \(1\) (\(2^1\)) последних \(2\)-х элементов с помощью \(2\)-х операций, получив таким образом массив [\(2\), \(3\), \(3\)], значение \(\mathsf{AND}\) которого равно \(2\).

Для второго набора мы не можем выполнить никаких операций, поэтому ответом будет только \(\mathsf{AND}\) всего массива, равное \(4\).

D. Волшебники и дороги

графы жадные алгоритмы Паросочетания разделяй и властвуй Структуры данных *3000

В некоторой стране живут волшебники. Они любят строить города и дороги.

Раньше в стране было k городов, j-ый (1 ≤ j ≤ k) был расположен в точке (xj, yj). Было решено наколдовать еще n - k городов. Причем i-ый (k < i ≤ n) город колдовался в точку с координатами (xi, yi):

  • xi = (a·xi - 1 + bmod (109 + 9)
  • yi = (c·yi - 1 + dmod (109 + 9)

Здесь a, b, c, d — простые числа. Причем a ≠ c, b ≠ d.

После постройки всех n городов, волшебники заметили удивительное свойство. Для любых двух различных городов с номерами i и j: xi ≠ xj и yi ≠ yj.

Города построены, пора строить дороги! Было решено использовать самое сложное (и, конечно же, самое мощное) заклинание для постройки дорог. C использованием этого заклинания, между городами u, v (yu > yv) проводится дорога тогда и только тогда, когда для любого города w, лежащего строго внутри уголка на точках u, v (см. ниже), есть город s, не лежащий в уголке, который находится по x-координате строго между w и u и при этом ys > yv.

Уголком на точках p2(x2, y2), p1(x1, y1) (y2 > y1) называется множество точек (x, y), для которых выполнено хотя бы одно из двух условий:

  • min(x1, x2) ≤ x ≤ max(x1, x2) и y ≥ y1
  • y1 ≤ y ≤ y2 и (x - x2)·(x1 - x2) ≥ 0
На рисунке изображены примеры уголков

Для того, чтобы опробовать заклинание, оно будет применено ко всем городам, лежащим по x-координате в отрезке [L, R]. После постройки дорог руководство страны хочет выбрать как можно больше пар городов, соединенных дорогой, так, что никакой город не лежит в двух или более парах. Вам предлагается для каждого из m предложенных вариантов выбора значений L, R посчитать максимальное количество таких пар после постройки дорог. Обратите внимание, что города, не лежащие в отрезке [L, R] по x-координате, никак не влияют на постройку дорог.

Входные данные

В первой строке через пробел записаны два целых числа n, k (1 ≤ k ≤ n ≤ 105, k ≤ 30). В следующих k строках записаны координаты точек расположения городов с первого по k-ый. В j-й строке записана через пробел пара целых чисел xj, yj (0 ≤ xj, yj < 109 + 9) — координаты j-го города.

В следующей строке через пробел записаны целые числа a, b, c, d (2 ≤ a, b, c, d < 109 + 9). Гарантируется, что эти числа простые, а так же, что a ≠ c, b ≠ d.

Гарантируется, что для любых двух различных городов с номерами i и j, xi ≠ xj и yi ≠ yj.

В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество вариантов постройки дорог. В следующих m строках через пробел записаны пары целых чисел Li, Ri (0 ≤ Li ≤ Ri < 109 + 9) — варианты выбора городов, для постройки дорог.

Выходные данные

Для каждой пары чисел Li, Ri выведите ответ на задачу в отдельной строке. Ответы для пар выводите в том порядке, в котором пары заданы во входных данных.

Примечание

В первом примере дороги соединяют города в цепочку в порядке возрастания x.

Во втором примере оставшиеся 5 городов будут построены в точках (5,  11); (20,  263098); (65,  292514823); (200,  76958738); (605,  622120197).

A. Профессор Слим

жадные алгоритмы реализация сортировки *800

Однажды профессор Слим решил покинуть королевство GUC и переехать в королевство GIU. Чтобы быть принятым в GIU, он должен сначала пройти несложный онлайн-тест. Жители GUC были счастливы расстроены, что профессор уезжает, поэтому они решили взломать систему и поменять задачу в тесте на более сложную. После долгих обсуждений они сошлись на следующей задаче.

Дан массив из \(n\) целых чисел \(a_1,a_2,\ldots,a_n\), где \(a_{i} \neq 0\), проверьте, можно ли сделать этот массив отсортированным, применив следующую операцию несколько (возможно, ноль) раз. Массив называется отсортированным, если его элементы расположены в порядке неубывания.

  1. выберете два индекса \(i\) и \(j\) (\(1 \le i,j \le n\)) такие, что числа \(a_i\) и \(a_j\) различного знака. Другими словами, одно из этих чисел должно быть положительно, а другое отрицательно.
  2. поменяйте местами знаки чисел \(a_{i}\) и \(a_{j}\). Например, если \(a_i=3\), а \(a_j=-2\), то они изменятся на \(a_i=-3\) и \(a_j=2\).

Профессор Слим понял, что задача все еще простая и не стоит его времени, поэтому он предоставил вам возможность решить ее.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — длину массива \(a\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_{i} \le 10^9\), \(a_{i} \neq 0\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если массив может быть отсортирован в порядке неубывания, иначе выведите «NO». Можно выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе нет способа сделать массив отсортированным.

Во втором наборе массив уже отсортирован.

В третьем наборе можно поменять знаки \(1\)-го и \(5\)-го элементов, а затем знаки \(3\)-го и \(6\)-го элементов, после чего массив будет отсортирован.

В четвертом примере нет способа сделать массив отсортированным.

D. Очень подозрительно

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация *1700

Хоссам и его друзья владеют плоскостью, разбитой бесконечной сеткой на правильные шестиугольники, как показано на рисунке ниже. Им нравятся равносторонние треугольники, поэтому они хотят создать на плоскости \(n\) равносторонних треугольников, добавив несколько прямых. Считаться будут только треугольники, внутри которых ничего нет (то есть внутри которых не проходит ни одна прямая и ни одна сторона шестиугольника).

Вы можете добавлять прямые, параллельные сторонам шестиугольников. Вам дано число \(n\), какое минимальное число прямых нужно добавить, чтобы создать хотя бы \(n\) равносторонних треугольников?

Добавление двух красных прямых создает два желтых треугольника.
Входные данные

Первая строка содержит одно цело число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого числа \(n\) (\(1 \le n \le 10^{9}\)) — требуемого количества треугольников.

Выходные данные

Для каждого набора выведите минимальное количество прямых, необходимое для создания \(n\) или больше равносторонних треугольников.

Примечание

В первом и втором примере нужны две прямые. После добавления первой не будет ни одного трекгольника независимо от места создания. После добавления второй можно одновременно создать два треугольника.

В третьем наборе входных данных нужно минимум три прямых, как показано ниже.

C. Dolce Vita

Бинарный поиск жадные алгоритмы математика Перебор *1200

Наступают неспокойные времена, и поэтому вы решили закупиться сахаром про запас. В округе расположены \(n\) магазинов, в которых продают сахар: в \(i\)-м магазине одна пачка сахара стоит \(a_i\), но везде продают только по одной пачке на руки в день. А потому, чтобы купить несколько пачек, придется посетить несколько магазинов.

Есть и другая проблема: цены на сахар растут каждый день: в первый день он стоит \(a_i\), во второй день он стоит \(a_i + 1\), в третий — \(a_i + 2\) и так далее в любом магазине \(i\).

Вы можете тратить на сахар только \(x\) монет каждый день. Другими словами, каждый день вы ходите и покупаете как можно больше пачек сахара суммарной стоимостью не более \(x\). Обратите внимание, что если в какой-то день вы тратите не все монеты, вы не можете оставшиеся монеты использовать в следующие дни.

Рано или поздно, стоимость пачки из любого магазина превысит \(x\), и вы больше не сможете купить ни одной пачки. Вопрос в том, сколько всего пачек вы сможете купить до этого момента?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le x \le 10^9\)) — количество магазинов в округе и ваш ежедневный бюджет.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — первоначальные цены сахара в магазинах.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — суммарное количество пачек сахара, которые вы сможете приобрести, пока цены не превысят ваши возможности.

Примечание

В первом наборе входных данных:

  • День 1: цены равны \([2, 1, 2]\). Вы сможете купить все \(3\) пачки, так как \(2 + 1 + 2 \le 7\).
  • День 2: цены равны \([3, 2, 3]\). Вы не сможете купить все \(3\) пачки, так как \(3 + 2 + 3 > 7\), а потому вы купите только \(2\) пачки.
  • День 3: цены равны \([4, 3, 4]\). Вы сможете купить \(2\) пачки с ценами \(4\) и \(3\).
  • День 4: цены равны \([5, 4, 5]\). Вы больше не сможете купить \(2\) пачки, а потому вы купите только \(1\) пачку.
  • День 5: цены равны \([6, 5, 6]\). Вы сможете купить \(1\) пачку.
  • День 6: цены равны \([7, 6, 7]\). Вы сможете купить \(1\) пачку.
  • День 7: цены равны \([8, 7, 8]\). Вы все еще можете купить \(1\) пачку за цену \(7\).
  • День 8: цены равны \([9, 8, 9]\). Цены слишком высокие, и вы не можете ничего купить.
В результате вы купите \(3 + 2 + 2 + 1 + 1 + 1 + 1 = 11\) пачек.

Во втором наборе, цены слишком высокие с первого дня, и вы не сможете ничего купить.

В третьем наборе, вы можете купить одну пачку только в первый день.

В четвертом наборе, вы можете покупать \(2\) пачки первые \(500\) дней. В день \(501\) цены станут \([501, 501]\), а потому вы сможете покупать только \(1\) пачку следующие \(500\) дней. В день \(1001\) цены станут \([1001, 1001]\) и вы больше ничего не сможете купить. В результате вы купите \(500 \cdot 2 + 500 \cdot 1 = 1500\) пачек.

D. Вставь прогрессию

жадные алгоритмы Конструктив Перебор *1600

Дана последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Также даны \(x\) целых чисел \(1, 2, \dots, x\).

Вас просят вставить каждое из этих дополнительных целых чисел в последовательность \(a\). Каждое число можно вставлять в начало последовательности, в конец последовательности или между любыми элементами последовательности.

Счет полученной последовательности \(a'\) равен сумме абсолютных разностей соседних элементов в ней \(\left(\sum \limits_{i=1}^{n+x-1} |a'_i - a'_{i+1}|\right)\).

Какой наименьший счет может быть у последовательности \(a'\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(x\) (\(1 \le n, x \le 2 \cdot 10^5\)) — длина последовательности и количество дополнительных чисел.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшую сумму абсолютных разностей соседних элементов в последовательности после того, как вы вставите в нее дополнительные числа.

Примечание

Здесь представлены последовательности с наименьшим счетом в примере. Подчеркнутые элементы — это дополнительные числа. Обратите внимание, что существуют и другие последовательности с наименьшим счетом.

  • \(\underline{1}, \underline{2}, \underline{3}, \underline{4}, \underline{5}, 10\)
  • \(\underline{7}, 7, \underline{6}, \underline{4}, 2, \underline{2}, \underline{1}, \underline{3}, \underline{5}, \underline{8}, 10\)
  • \(6, \underline{1}, 1, \underline{2}, 5, 7, 3, 3, 9, 10, 10, 1\)
  • \(1, 3, \underline{1}, 1, 2, \underline{2}, \underline{3}, \underline{4}, \underline{5}, \underline{6}, \underline{7}, \underline{8}, \underline{9}, \underline{10}\)

C. Неравный массив

жадные алгоритмы Конструктив реализация *1100

Вам дан массив \(a\) длины \(n\). Определим равность массива как количество индексов \(1 \le i \le n - 1\) таких, что \(a_i = a_{i + 1}\). Мы можем выполнять следующую операцию:

  • Выберите любые два целых числа \(i\) и \(x\) такие, что \(1 \le i \le n - 1\) и \(1 \le x \le 10^9\). После этого, сделайте \(a_i\) и \(a_{i + 1}\) равными \(x\).

Найдите минимальное количество операций, необходимых для того, чтобы равность массива стала меньше или равна \(1\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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\))  — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество необходимых операций.

Примечание

В первом наборе входных данных мы можем выбрать \(i=2\) и \(x=2\), получив \([1, 2, 2, 1, 1]\). Затем мы можем выбрать \(i=3\) и \(x=3\), получив \([1, 2, 3, 3, 1]\).

Во втором наборе входных данных мы можем выбрать \(i=3\) и \(x=100\), получив \([2, 1, 100, 100, 2]\).

D. Циклический сдвиг

жадные алгоритмы Конструктив реализация *1700

Дан массив \(a\) длины \(n\). Вы можете выполнить следующую операцию любое количество раз:

  • Выберите два индекса \(l\) и \(r\) такие, что \(1 \le l < r \le n\) и \(a_l = a_r\). После этого, присвоим \(a[l \ldots r] = [a_{l+1}, a_{l+2}, \ldots, a_r, a_l]\).

Вам также дан другой массив \(b\) длины \(n\), который является перестановкой \(a\). Определите, можно ли преобразовать массив \(a\) в массив \(b\), применив описанную выше операцию некоторое количество раз.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10 ^ 5\))  — длину массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(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\).

Гарантируется, что \(b\) является перестановкой \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно преобразовать массив \(a\) в \(b\), и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут засчитаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем выбрать \(l=2\) и \(r=5\), получив \([1, 3, 3, 2, 2]\).

Во втором наборов входных данных мы можем выбрать \(l=2\) и \(r=4\), получив \([1, 4, 2, 2, 1]\). Затем мы можем выбрать \(l=1\) и \(r=5\), получив \([4, 2, 2, 1, 1]\).

В третьем наборе входных данных можно доказать, что преобразовать массив \(a\) в \(b\) с помощью данных операций невозможно.

E. блокнот.exe

Бинарный поиск жадные алгоритмы интерактив Конструктив *2200

Это интерактивная задача.

В текстовом редакторе есть \(n\) слов. Длина \(i\)-го слова составляет \(l_i\) (\(1 \leq l_i \leq 2000\)). Массив \(l\) скрыт и известен только интерактору.

Текстовый редактор отображает слова в строках, разделяя каждые два слова в строке хотя бы одним пробелом. Обратите внимание, что строка не обязательно должна заканчиваться пробелом. Будем называть высотой текстового редактора количество использованных строк. При данной ширине текстовый редактор будет отображать слова таким образом, чтобы высота была минимальной.

Более формально, предположим, что текстовый редактор имеет ширину \(w\). Пусть \(a\)  — массив длины \(k+1\), где \(1=a_1 < a_2 < \ldots < a_{k+1}=n+1\). \(a\) является допустимым массивом, если для всех \(1 \leq i \leq k\), \(l_{a_i}+1+l_{a_i+1}+1+\ldots+1+l_{a_{i+1}-1} \leq w\). Тогда высота текстового редактора является минимальным \(k\) по всем допустимым массивам.

Обратите внимание, что если \(w < \max(l_i)\), то текстовый редактор не сможет правильно отобразить все слова и завершится аварийно, а высота текстового редактора будет равна \(0\).

Вы можете задать \(n+30\) запросов. В одном запросе вы указываете ширину \(w\). В ответ интерактор вернет высоту \(h_w\) текстового редактора, если его ширина равна \(w\).

Найдите минимальную площадь текстового редактора, которая является минимальным значением \(w \cdot h_w\) по всем \(w\), для которых \(h_w \neq 0\).

Длины зафиксированы заранее. Другими словами, интерактор не является адаптивным.

Входные данные

Первая и единственная строка ввода содержит единственное целое число \(n\) (\(1 \leq n \leq 2000\))  — количество слов в текстовом редакторе.

Гарантируется, что скрытые длины \(l_i\) удовлетворяют \(1 \leq l_i \leq 2000\).

Протокол взаимодействия

Начните взаимодействие с чтения \(n\).

Чтобы сделать запрос, выведите «? \(w\)» (без кавычек, \(1 \leq w \leq 10^9\)). Затем вы должны прочитать ответ из стандартного ввода, то есть высоту \(h_w\).

Если ваша программа сделала некорректный запрос или исчерпала количество попыток, интерактор немедленно завершит работу программы, а ваша программа получит вердикт Неправильный ответ.

Чтобы дать окончательный ответ, выведите «! \(area\)» (без кавычек). Обратите внимание, что этот ответ не учитывается в лимит \(n+30\) запросов.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

    Взломы

    Первая строка ввода должна содержать одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество слов в текстовом редакторе.

    Вторая строка ввода должна содержать ровно \(n\) разделенных пробелами целых чисел \(l_1,l_2,\ldots,l_n\) (\(1 \leq l_i \leq 2000\)).

Примечание

В первом примере слова  — \(\{\texttt{glory},\texttt{to},\texttt{ukraine},\texttt{and},\texttt{anton},\texttt{trygub}\}\), поэтому \(l=\{5,2,7,3,5,6\}\).

Если \(w=1\), то текстовый редактор не сможет правильно отобразить все слова и завершится аварийно. Высота текстового редактора равна \(h_1=0\), поэтому интерактор вернет \(0\).

Если \(w=9\), то возможный способ отображения слов в текстовом редакторе следующий:

  • \(\texttt{glory__to}\)
  • \(\texttt{ukraine__}\)
  • \(\texttt{and_anton}\)
  • \(\texttt{__trygub_}\)

Высота текстового редактора равна \(h_{9}=4\), поэтому интерактор вернет \(4\).

Если \(w=16\), то возможный способ отображения слов в текстовом редакторе следующий:

  • \(\texttt{glory_to_ukraine}\)
  • \(\texttt{and_anton_trygub}\)

Высота текстового редактора равна \(h_{16}=2\), поэтому интерактор вернет \(2\).

Мы каким-то образом выяснили, что минимальная площадь текстового редактора равна \(32\), поэтому отвечаем её.

F1. Перемешивание массива

графы жадные алгоритмы Конструктив *2000

У oolimry есть массив \(a\) длины \(n\), который ему очень нравится. Сегодня вы изменили его массив на \(b\), перестановку \(a\), чтобы он расстроился.

Поскольку oolimry всего лишь утка, он может выполнять только следующую операцию для восстановления своего массива:

  • Выбрать два целых числа \(i,j\) таких, что \(1 \leq i,j \leq n\).
  • Поменять местами \(b_i\) и \(b_j\).

Печаль массива \(b\)  — это минимальное количество операций, необходимое для преобразования \(b\) в \(a\).

Для данного массива \(a\), найдите любой массив \(b\), который является перестановкой \(a\) и имеет максимальную печаль среди всех перестановок массива \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\))  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — описывающих массив \(b\). Если ответов несколько, вы можете вывести любой.

Примечание

В первом наборе входных данных массив \([1,2]\) имеет печаль \(1\). Мы можем преобразовать \([1,2]\) в \([2,1]\) с помощью одной операции с \((i,j)=(1,2)\).

Во втором наборе входных данных массив \([3,3,2,1]\) имеет печаль \(2\). Мы можем преобразовать \([3,3,2,1]\) в \([1,2,3,3]\) с помощью двух операций с \((i,j)=(1,4)\) и \((i,j)=(2,3)\) соответственно.

H. Зигзаг

жадные алгоритмы Конструктив Структуры данных *2700

У вас есть бинарная строка \(a\) длины \(n\), состоящая только из цифр \(0\) и \(1\).

Вам даны \(q\) запросов. В \(i\)-м запросе даны два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\).

Пусть \(s=a[l,r]\). Вам разрешено выполнять следующую операцию над \(s\):

  1. Выберите два индекса \(x\) и \(y\) такие, что \(1 \le x \le y \le |s|\). Пусть \(t\)  — подстрока \(t = s[x, y]\). Тогда для всех \(1 \le i \le |t| - 1\) должно выполняться условие \(t_i \neq t_{i+1}\). Заметим, что \(x = y\) всегда является допустимой подстрокой.
  2. Удалите подстроку \(s[x, y]\) из \(s\).

Для каждого из \(q\) запросов найдите минимальное количество операций, необходимое для превращения \(s\) в пустую строку.

Напомним, что для строки \(s\), \(s[l,r]\) обозначает подотрезок \(s_l,s_{l+1},\ldots,s_r\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10 ^ 5\))  — длину бинарной строки \(a\) и количество запросов соответственно.

Вторая строка содержит бинарную строку \(a\) длины \(n\) (\(a_i \in \{0, 1\}\)).

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\))  — обозначающие подстроку каждого запроса.

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите минимальное количество операций, необходимых для \(i\)-го запроса.

Примечание

В первом примере,

  1. Подстрока равна \(\texttt{101}\), поэтому мы можем сделать одну операцию, чтобы сделать подстроку пустой.
  2. Подстрока равна \(\texttt{11011}\), поэтому мы можем сделать одну операцию над \(s[2, 4]\), чтобы получить \(\texttt{11}\), а затем использовать еще две операции, чтобы сделать подстроку пустой.
  3. Подстрока  — \(\texttt{011}\), поэтому мы можем сделать одну операцию над \(s[1, 2]\), чтобы получить \(\texttt{1}\), а затем использовать еще одну операцию, чтобы сделать подстроку пустой.

I. PermutationForces

жадные алгоритмы Структуры данных *3000

У вас есть перестановка \(p\) целых чисел от \(1\) до \(n\).

У вас есть сила \(s\) и вы будете выполнять следующую операцию несколько раз:

  • Выберите индекс \(i\) такой, что \(1 \leq i \leq |p|\) и \(|i-p_i| \leq s\).
  • Для всех \(j\) таких, что \(1 \leq j \leq |p|\) и \(p_i<p_j\), заменить \(p_j\) на \(p_j-1\).
  • Удалить \(i\)-й элемент из \(p\). Формально, заменить \(p\) на \([p_1,\ldots,p_{i-1},p_{i+1},\ldots,p_n]\).

Можно показать, что независимо от того, какое число \(i\) вы выбрали, после всех операций \(p\) будет перестановкой целых чисел от \(1\) до \(|p|\).

Вы хотите превратить \(p\) в пустую перестановку. Найдите минимальную силу \(s\), которая позволит вам это сделать.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\))  — длину перестановки \(p\).

Вторая строка ввода содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\))  — элементы перестановки \(p\).

Гарантируется, что все элементы в \(p\) различны.

Выходные данные

Выведите минимальную необходимую силу \(s\).

Примечание

В первом примере минимальное требуемое значение \(s\) равно \(1\).

Вот как мы можем преобразовать \(p\) в пустую перестановку с \(s=1\):

  • В первую операцию можно выбрать только \(i=2\), так как при любом другом значении \(i\) условие \(|i-p_i| \leq s\) не будет выполнено. При \(i=2\), \(p\) изменится на \([2,1]\).
  • Во вторую операцию, если выбрать \(i=1\), то \(p\) изменится на \([1]\).
  • В третью операциб, вы выбираете \(i=1\), тогда \(p\) будет изменено на \([~]\).

Можно показать, что при \(s=0\) невозможно преобразовать \(p\) в пустую перестановку.

A. Хитрое удаление подстроки

жадные алгоритмы игры Строки *800

Алиса и Боб играют в игру со строками. Всего в игре будет \(t\) раундов. В каждом раунде будет строка \(s\), состоящая из строчных латинских букв.

Оба игрока делают ходы по очереди, Алиса ходит первой. Алиса может удалить любую подстроку чётной длины (возможно пустую) и Боб может удалить любую подстроку нечётной длины из \(s\).

Более формально, если была строка \(s = s_1s_2 \ldots s_k\) игрок может выбрать подстроку \(s_ls_{l+1} \ldots s_{r-1}s_r\) длины соответствующей чётности и удалить её. После этого строка станет \(s = s_1 \ldots s_{l-1}s_{r+1} \ldots s_k\).

Когда строка становится пустой, раунд заканчиваются и каждый игрок считает его/её очки за этот раунд. Количество очков игрока равно сумме стоимостей символов, удалённых им/ей. Стоимость \(\texttt{a}\) равна \(1\), стоимость \(\texttt{b}\) равна \(2\), стоимость \(\texttt{c}\) равна \(3\), \(\ldots\), и стоимость \(\texttt{z}\) равна \(26\). Игрок с большим количеством очков побеждает в раунде. Для каждого раунда определите победителя и разницу очков победителя и проигравшего. Считайте, что оба игрока играют оптимально с целью максимизировать свои очки. Можно доказать, что ничья невозможна.

Входные данные

В первой строке входных данных содержится единственное число \(t\) (\(1\leq t\leq 5\cdot 10^4\)) — количество раундов.

Каждая из следующих \(t\) строк содержит единственную строку \(s\) (\(1\leq |s|\leq 2\cdot 10^5\)), состоящую из строчных латинских букв — строку, используемую в раунде. Здесь \(|s|\) обозначает длину строки \(s\).

Гарантируется, что сумма \(|s|\) по всем раундам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого раунда выведите единственную строку, содержащую строку и число. Если Алиса выиграет в раунде, строка должна быть «Alice». Если Боб выигрывает в раунде, строка должна быть «Bob». Число должно быть равно разности очков, если оба игрока играют оптимально.

Примечание

В первом раунде \(\texttt{"aba"}\xrightarrow{\texttt{Alice}}\texttt{"}{\color{red}{\texttt{ab}}}\texttt{a"}\xrightarrow{} \texttt{"a"}\xrightarrow{\texttt{Bob}}\texttt{"}{\color{red}{\texttt{a}}}\texttt{"}\xrightarrow{}\texttt{""}\). Общее количество очков Алисы равно \(1+2=3\). Общее количество очков Боба равно \(1\).

Во втором раунде \(\texttt{"abc"}\xrightarrow{\texttt{Alice}}\texttt{"a}{\color{red}{\texttt{bc}}}\texttt{"}\xrightarrow{} \texttt{"a"}\xrightarrow{\texttt{Bob}}\texttt{"}{\color{red}{\texttt{a}}}\texttt{"}\xrightarrow{}\texttt{""}\). Общее количество очков Алисы равно \(2+3=5\). Общее количество очков Боба равно \(1\).

В третьем раунде \(\texttt{"cba"}\xrightarrow{\texttt{Alice}}\texttt{"}{\color{red}{\texttt{cb}}}\texttt{a"}\xrightarrow{} \texttt{"a"}\xrightarrow{\texttt{Bob}}\texttt{"}{\color{red}{\texttt{a}}}\texttt{"}\xrightarrow{}\texttt{""}\). Общее количество очков Алисы равно \(3+2=5\). Общее количество очков Боба равно \(1\).

В четвёртом раунде \(\texttt{"n"}\xrightarrow{\texttt{Alice}}\texttt{"n"}\xrightarrow{} \texttt{"n"}\xrightarrow{\texttt{Bob}}\texttt{"}{\color{red}{\texttt{n}}}\texttt{"}\xrightarrow{}\texttt{""}\). Общее количество очков Алисы равно \(0\). Общее количество очков Боба равно \(14\).

В пятом раунде \(\texttt{"codeforces"}\xrightarrow{\texttt{Alice}}\texttt{"}{\color{red}{\texttt{codeforces}}}\texttt{"}\xrightarrow{} \texttt{""}\). Общее количество очков Алисы равно \(3+15+4+5+6+15+18+3+5+19=93\). Общее количество очков Боба равно \(0\).

B. Идеально сбалансированная строка?

жадные алгоритмы Перебор Строки *1100

Назовём строку \(s\) идеально сбалансированной, если для всех возможных троек \((t,u,v)\) таких, что \(t\) является непустой подстрокой \(s\), а \(u\) и \(v\) являются символами, присутствующими в \(s\), разница в количествах вхождений \(u\) и \(v\) в \(t\) отличается не более, чем на \(1\).

Например, строки «aba» и «abc» являются идеально сбалансированными, а «abb» нет, потому что для тройки («bb»,'a','b') условие не выполняется.

Вам дана строка \(s\), состоящая только из строчных латинских букв. Ваша задача состоит в том, чтобы определить, является ли \(s\) идеально сбалансированной или нет.

Строка \(b\) называется подстрокой строки \(a\), если \(b\) может быть получена удалением нескольких (возможно \(0\)) символов из начала и нескольких (возможно \(0\)) символов из конца \(a\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 2\cdot 10^4\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит единственную строку \(s\) (\(1\leq |s|\leq 2\cdot 10^5\)), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если \(s\) является идеально сбалансированной, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Пусть \(f_t(c)\) обозначает количество вхождений символа \(c\) в строку \(t\).

Для первого набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)
\(a\)\(1\)\(0\)
\(ab\)\(1\)\(1\)
\(aba\)\(2\)\(1\)
\(b\)\(0\)\(1\)
\(ba\)\(1\)\(1\)
Можно увидеть, что для любой подстроки \(t\) в \(s\), разница между \(f_t(a)\) и \(f_t(b)\) не превышает \(1\). Значит, строка \(s\) идеально сбалансирована.

Для второго набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)
\(a\)\(1\)\(0\)
\(ab\)\(1\)\(1\)
\(abb\)\(1\)\(2\)
\(b\)\(0\)\(1\)
\(bb\)\(0\)\(2\)
Можно увидеть, что для подстроки \(t=bb\), разница в количествах вхождений \(f_t(a)\) и \(f_t(b)\) равна \(2\), что больше \(1\). Значит, строка \(s\) не идеально сбалансирована.

Для третьего набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)\(f_t(c)\)
\(a\)\(1\)\(0\)\(0\)
\(ab\)\(1\)\(1\)\(0\)
\(abc\)\(1\)\(1\)\(1\)
\(b\)\(0\)\(1\)\(0\)
\(bc\)\(0\)\(1\)\(1\)
\(c\)\(0\)\(0\)\(1\)

Можно увидеть, что для любой подстроки \(t\) в \(s\) и любых двух символов \(u,v\in\{a,b,c\}\), разница между \(f_t(u)\) и \(f_t(v)\) не превышает \(1\). Значит, строка \(s\) идеально сбалансирована.

F. Дороги против вора

битмаски жадные алгоритмы интерактив Конструктив математика разделяй и властвуй *2400

Это интерактивная задача.

В городе есть \(n^2\) зданий, разделенных на сетку из \(n\) строк и \(n\) столбцов. Вам нужно построить дорогу произвольной длины \(D(A,B)\) между каждой парой соседних по стороне зданий \(A\) и \(B\). Из-за бюджетных и юридических ограничений длина каждой дороги должна быть положительным целым числом, а общая длина всех дорог не должна превышать \(48\,000\).

В городе есть вор, который начнет с самого верхнего и самого левого здания (в первом ряду и первой колонке) и будет бродить по городу, время от времени крадя артефакты из некоторых зданий. Он может перемещаться из одного здания в другое соседнее здание, путешествуя по дороге, которая их соединяет.

Вы не можете отследить, какие здания он посещает и по какому пути он идет, чтобы добраться до них. Но в городе есть один следящий механизм. Трекер может хранить одно целое число \(x\), которое изначально равно \(0\). Каждый раз, когда вор перемещается из здания \(A\) в соседнее здание \(B\) по дороге длиной \(D(A,B)\), трекер изменяет \(x\) на \(x\oplus D(A,B)\). Каждый раз, когда вор ворует из здания, трекер сообщает значение \(x\), хранящееся в нем, и сбрасывает его обратно на \(0\).

Заранее известно, что вор обворует ровно \(k\) зданий, но значения, возвращаемые трекером, вы узнаете только после того, как кражи действительно произойдут. Ваша задача заключается в том, чтобы выбрать длины дорог таким образом, чтобы независимо от того, какой стратегии или маршрута придерживается вор, вы сможете точно сказать расположение всех зданий, где произошли кражи, по значениям, возвращаемым трекером.

Протокол взаимодействия

Сначала считайте единственную строку, содержащую два целых числа \(n\) \((2\leq n\leq 32)\) and \(k\) \((1\leq k\leq 1024)\) — количество строк и количество краж соответственно.

Давайте обозначим \(j\)-е здание в \(i\)-й строке как \(B_{i,j}\).

Затем выведите \(n\) строк, каждая из которых содержит \(n-1\) целое число. \(j\)-е число в \(i\)-й строке должно быть значением \(D(B_{i,j},B_{i,j+1})\).

Затем выведите \(n-1\) строку, каждая из которых содержит \(n\) целых чисел. \(j\)-е число в \(i\)-й строке должно быть значением \(D(B_{i,j},B_{i+1,j})\).

Помните, что суммарная длина дорог не должна превышать \(48\,000\).

Затем ответьте на \(k\) вопросов. Сначала считайте значение \(x\), возвращаемое трекером. Потом выведите два целых числа, обозначающих номер строки и номер столбца здания, где произошла кража. После этого вы сможете ответить на следующий запрос (если такой есть).

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

В примере \(n=2\) and \(k=4\).

Вы выбираете построить дороги следующих длин:

Вор действует следующим образом:

  1. Начать в \(B_{1,1}\).
  2. Переместиться вправо в \(B_{1,2}\).
  3. Переместиться вниз в \(B_{2,2}\).
  4. Переместиться влево в \(B_{2,1}\).
  5. Переместиться вверх в \(B_{1,1}\).
  6. Переместиться вправо в \(B_{1,2}\).
  7. Украсть из \(B_{1,2}\).
  8. Переместиться влево в \(B_{1,1}\).
  9. Украсть из \(B_{1,1}\).
  10. Переместиться вниз в \(B_{2,1}\).
  11. Переместиться вправо в \(B_{2,2}\).
  12. Переместиться вверх в \(B_{1,2}\).
  13. Украсть из \(B_{1,2}\).
  14. Переместиться влево в \(B_{1,1}\).
  15. Переместиться вниз в \(B_{2,1}\).
  16. Украсть из \(B_{2,1}\).

Трекер отвечает следующим образом:

  1. Изначально \(x=0\).
  2. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  3. Изменить \(x\) на \(x\oplus 4=1\oplus4=5\).
  4. Изменить \(x\) на \(x\oplus 8=5\oplus8=13\).
  5. Изменить \(x\) на \(x\oplus 2=13\oplus2=15\).
  6. Изменить \(x\) на \(x\oplus 1=15\oplus1=14\).
  7. Вернуть \(x=14\) и обнулить \(x=0\).
  8. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  9. Вернуть \(x=1\) и обнулить \(x=0\).
  10. Изменить \(x\) на \(x\oplus 2=0\oplus2=2\).
  11. Изменить \(x\) на \(x\oplus 8=2\oplus8=10\).
  12. Изменить \(x\) на \(x\oplus 4=10\oplus4=14\).
  13. Вернуть \(x=14\) и обнулить \(x=0\).
  14. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  15. Изменить \(x\) на \(x\oplus 2=1\oplus2=3\).
  16. Вернуть \(x=3\) и обнулить \(x=0\).

E. Уничтожение стены

Бинарный поиск жадные алгоритмы Конструктив математика Перебор *2000

Монокарп играет в стратегическую компьютерную игру Rage of Empires II: Definitive Edition. Сейчас он собирается атаковать своего оппонента в игре, но вот незадача — противник успел построить стену, и войска Монокарпа не могут попасть в лагерь противника!

Стена состоит из \(n\) секций, расположенных в ряд и пронумерованных слева направо, начиная с единицы. Прочность \(i\)-й секции изначально равна \(a_i\). Если прочность какой-то секции станет равной \(0\) или станет отрицательной, то эта секция будет считаться разрушенной.

Для успешной атаки Монокарп должен разрушить хотя бы две секции стены (любые две: возможно, соседние, но не обязательно). Для этого собирается использовать специальное осадное орудие — онагр. Когда онагр стреляет по секции стены, он наносит \(2\) единицы урона этой секции и по \(1\) единице урона соседним секциям. Иными словами, если онагр стреляет по секции \(x\), прочность секции \(x\) уменьшается на \(2\), а прочности секций \(x - 1\) и \(x + 1\) (если они существуют) уменьшаются на \(1\) каждая.

Монокарп может стрелять из онагра по любым секциям любое количество раз, в том числе можно стрелять по уже разрушенной секции.

Монокарп хочет посчитать минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены. Помогите ему!

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество секций в стене.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) равно изначальной прочности \(i\)-й секции стены.

Выходные данные

Выведите целое число — минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены.

Примечание

В первом примере можно разрушить \(2\)-ю и \(4\)-ю секции стены за \(10\) выстрелов, например, совершив все \(10\) выстрелов в третью секцию. После этого прочности секций будут равны \([20, 0, 10, 0, 20]\). Существует и другой способ. Можно сначала выстрелить \(5\) раз во \(2\)-ю секцию и затем еще \(5\) раз в \(4\)-ю секцию. После этого прочности секций будут равны \([15, 0, 20, 0, 15]\).

Во втором примере достаточно одного выстрела по \(2\)-й секции. После этого \(1\)-я и \(3\)-я секции будут разрушены.

В третьем примере можно, например, выстрелить два раза во \(2\)-ю секцию (после этого прочности секций станут равны \([5, 2, 4, 8, 5, 8]\)), а затем выстрелить два раза в \(3\)-ю секцию (после этого прочности секций станут равны \([5, 0, 0, 6, 5, 8]\)). Таким образом, после четырех выстрелов будут разрушены \(2\)-я и \(3\)-я секции.

F. Упорядочивание рабочего стола

жадные алгоритмы реализация Структуры данных *1800

Ваш друг Иван попросил вас помочь упорядочить его рабочий стол. Рабочий стол может быть представлен как прямоугольная матрица размера \(n \times m\), состоящая из символов '.' (пустая клетка рабочего стола) и '*' (иконка).

Рабочий стол называется хорошим, если все его иконки находятся на каком-то префиксе столбцов и, возможно, префиксе следующего столбца (и не существует иконок за пределами данной фигуры). Другими словами, какое-то количество первых столбцов будет заполнено иконками, а также, возможно, какое-то количество первых клеток следующего (после последнего полного столбца) столбца будет также заполнено иконками (и все иконки на рабочем столе будут принадлежать этой фигуре). Это выглядит довольно похоже на расположение иконок на рабочем столе в реальной жизни.

За один ход вы можете взять одну иконку и передвинуть ее в любую пустую клетку рабочего стола.

Иван любит добавлять иконки на свой рабочий стол, а также удалять их, поэтому он просит вас ответить на \(q\) запросов: чему равно минимальное количество ходов, необходимое для того, чтобы сделать рабочий стол хорошим после добавления/удаления одной иконки?

Заметьте, что запросы остаются навсегда и меняют состояние рабочего стола.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000; 1 \le q \le 2 \cdot 10^5\)) — количество строк в рабочем столе, количество столбцов в рабочем столе и количество запросов, соответственно.

Следующие \(n\) строк содержат описание рабочего стола. В \(i\)-й из них находится \(m\) символов '.' и '*' — описание \(i\)-й строки рабочего стола.

Следующие \(q\) строк описывают запросы. В \(i\)-й из них находятся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n; 1 \le y_i \le m\)) — позиция клетки, которая меняет свое состояние (если эта клетка содержала иконку, то эта иконка удаляется, иначе в этой клетке появляется иконка).

Выходные данные

Выведите \(q\) целых чисел. \(i\)-е из них должно быть равно минимальному количеству ходов, необходимому для того, чтобы сделать рабочий стол хорошим после применения первых \(i\) запросов.

A. Еда для животных

жадные алгоритмы математика *800

В магазине для животных в продаже есть:

  • \(a\) пачек корма для собак;
  • \(b\) пачек корма для кошек;
  • \(c\) пачек универсального корма для животных (такой корм подходит и собакам и кошкам).

У Поликарпа \(x\) собак и \(y\) кошек. Возможно ли, что в магазине он сможет купить корм для всех своих животных? Каждая его собака и каждая его кошка должна получить одну пачку подходящего для неё корма.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее заданы \(t\) строк, каждая содержит описание одного набора входных данных. Каждое описание состоит из пяти целых чисел \(a, b, c, x\) и \(y\) (\(0 \le a,b,c,x,y \le 10^8\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если для каждой из \(x\) собак и для каждой из \(y\) кошек можно купить подходящий корм;
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

B. Сделай возрастающую

жадные алгоритмы реализация *900

Заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Над ними можно совершать следующую операцию:

  • выбрать произвольный элемент \(a_i\) (\(1 \le i \le n\)) и поделить его на \(2\) (округляем вниз). Другими словами, можно заменить любой выбранный элемент \(a_i\) на значение \(\left \lfloor \frac{a_i}{2}\right\rfloor\) (где \(\left \lfloor x \right\rfloor\) — округление вниз вещественного числа \(x\)).

Выведите минимальное количество операций, которое необходимо совершить, чтобы последовательность чисел стала строго возрастающей (то есть, чтобы было выполнено условие \(a_1 \lt a_2 \lt \dots \lt a_n\)). Или определите, что такую последовательность получить невозможно. Обратите внимание на то, что элементы нельзя менять местами. Единственная возможная операция описана выше.

Например, пусть \(n = 3\) и задана последовательность чисел \([3, 6, 5]\). Тогда достаточно совершить над ней две операции:

  • записать вместо числа \(a_2=6\) число \(\left \lfloor \frac{6}{2}\right\rfloor = 3\) и получить последовательность \([3, 3, 5]\);
  • затем записать вместо числа \(a_1=3\) число \(\left \lfloor \frac{3}{2}\right\rfloor = 1\) и получить последовательность \([1, 3, 5]\).

Полученная последовательность является строго возрастающей, так как \(1 \lt 3 \lt 5\).

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 30\)).

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^9\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите единственное число — минимальное количество операций, которое нужно совершить над последовательностью, чтобы она стала строго возрастающей. Если строго возрастающую последовательность невозможно получить, то выведите «-1».

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных получить строго возрастающую последовательность невозможно.

В третьем наборе входных данных последовательность уже является строго возрастающей.

E. Замени на предыдущий, минимизируй

жадные алгоритмы снм Строки *1500

Дана строка \(s\), состоящая из строчных латинских букв.

Можно применять следующую операцию:

  • выбрать один символ (от 'a' до 'z'), который хотя бы один раз встречается в строке. И все такие символы в строке заменить на предыдущий в алфавитном порядке по циклу. Например, все 'c' заменить на 'b' или все 'a' заменить на 'z'.

Задано число \(k\) — максимальное количество операций, которое можно совершить. Найдите минимальную лексикографически строку, которую можно получить, совершив не более \(k\) операций.

Строка \(a=a_1a_2 \dots a_n\) лексикографически меньше строки \(b = b_1b_2 \dots b_n\), если существует такой индекс \(k\) (\(1 \le k \le n\)), что \(a_1=b_1\), \(a_2=b_2\), ..., \(a_{k-1}=b_{k-1}\), но \(a_k < b_k\).

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого наборов содержится два числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 10^9\)) — размер строки \(s\) и максимальное количество операций, которое можно применить к строке \(s\).

Во второй строке каждого набора записана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальную строку, которую можно получить из строки \(s\), применив не более чем \(k\) операций.

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\)

B. Равенство конфет

жадные алгоритмы математика сортировки *800

Есть \(n\) коробок конфет, \(i\)-я коробка содержит \(a_i\) конфет.

У вас также есть \(n\) друзей, каждому из которых вы решили подарить коробку конфет. Вы не хотите, чтобы кто-то из друзей расстраивался, поэтому решили съесть несколько (возможно, ноль) конфет из каждой коробки так, чтобы во всех коробках было одинаковое количество конфет. Обратите внимание, что вы можете съесть разное количество конфет из разных коробок, и вы не можете добавлять конфеты ни в одну из коробок.

Какое минимальное количество конфет нужно съесть, чтобы выполнить требования?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 50\)) — количество коробок конфет, которые у вас есть.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^7\)) — количество конфет в каждой коробке.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество конфет, которые вам нужно съесть, чтобы выполнить требования.

Примечание

В первом наборе вы можете съесть \(1\) конфету из второй коробки, \(2\) конфеты из третьей коробки, \(3\) конфеты из четвертой коробки и \(4\) конфеты из пятой коробки. Теперь распределение конфет по коробкам выглядит так: \([1, 1, 1, 1, 1]\). Вы съели всего \(0 + 1 + 2 + 3 + 4 = 10\) конфет, поэтому ответ равен \(10\).

Лучший ответ для второго набора получается, если уменьшить количество конфет во всех коробках до \(5\). Так, вы съедите \(995 + 995 + 0 + 995 + 995 + 995 = 4975\) конфет.

C. Самые похожие слова

жадные алгоритмы математика Перебор реализация реализация Строки *800

Вам даны \(n\) слов одинаковой длины \(m\), состоящие из строчных букв латинского алфавита, \(i\)-е слово обозначается \(s_i\).

За один ход вы можете выбрать любую позицию в любом отдельном слове и заменить букву в этой позиции на предыдущую или следующую букву в алфавитном порядке. Например:

  • вы можете заменить 'e' на 'd' или на 'f';
  • 'a' может быть заменена только на 'b';
  • 'z' может быть заменена только на 'y'.

Разница между двумя словами — это минимальное число ходов, необходимое для того, чтобы сделать их равными. Например, разница между «best» и «cost» составляет \(1 + 10 + 0 + 0 = 11\).

Найдите минимальную разницу между \(s_i\) и \(s_j\) такую, что \((i < j)\). Другими словами, найдите минимальную разницу по всем возможным парам из \(n\) слов.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит \(2\) целых числа \(n\) и \(m\) (\(2 \leq n \leq 50\), \(1 \leq m \leq 8\)) — количество слов и их длина соответственно.

Затем следуют \(n\) строк, \(i\)-я из которых содержит слово \(s_i\) длины \(m\), состоящее из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную разница среди всех возможных пар заданных строк.

Примечание

Для второго набора входных данных можно показать, что наилучшей парой является («abb», «bef»), которая имеет разницу, равную \(8\), что можно получить следующим образом: заменить первый символ первой строки на 'b' за один ход, заменить второй символ второй строки на 'b' за \(3\) хода и заменить третий символ второй строки на 'b' за \(4\) хода, что в сумме дает \(1 + 3 + 4 = 8\) ходов.

В третьем наборе существует только одна возможная пара, и можно показать, что минимальное количество ходов, необходимое для того, чтобы строки стали равными, равно \(35\).

В четвертом наборе есть пара строк, которые уже равны, поэтому ответ равен \(0\).

D. X-сумма

жадные алгоритмы Перебор реализация *1000

Дедушка Тимура подарил ему шахматную доску, чтобы он попрактиковался. Эта доска \(a\) состоит из \(n\) строк и \(m\) столбцов. На каждой клетке написано неотрицательное целое число.

Задача Тимура поставить слона так, чтобы сумма на клетках, атакованных им, была максимальна. Слон атакует во всех направлениях по диагонали. Расстояние, на которое атакует слон, не ограничено. Обратите внимание, что клетка, в которой стоит слон, также считается атакованной. Помогите ему найти максимальную сумму, которую он может получить.

Входные данные

Первая строка входных данных содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют описания самих наборов.

Первая строка каждого набора содержит два числа \(n\) и \(m\) (\(1 \le n \le 200\), \(1 \leq m \leq 200\)).

Следующие \(n\) строк содержат по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки \(a_{ij}\) — это число, записанное в \(j\)-й клетке \(i\)-й строки \((0\leq a_{ij} \leq 10^6)\)

Гарантируется, что сумма \(n\cdot m\) по всем наборам не превосходит \(4\cdot10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальную сумму по всем возможным размещениям слона.

Примечание

В первом примере лучшая сумма достигается в этой позиции:

E. Запросы на поедание конфет

Бинарный поиск жадные алгоритмы сортировки *1100

У Тимура есть \(n\) конфет. В \(i\)-й конфете количество сахара равно \(a_i\). Так, съев \(i\)-ю конфету, Тимур потребляет количество сахара, равное \(a_i\).

Тимур задаст вам \(q\) запросов о своих конфетах. Для \(j\)-го запроса вы должны ответить, какое минимальное количество конфет ему нужно съесть, чтобы потребить количество сахара, большее или равное \(x_j\). Выведите -1, если невозможно получить такое количество. Другими словами, нужно вывести минимально возможное \(k\) такое, что, съев \(k\) конфет, Тимур получит количество сахара не менее \(x_j\), или сказать, что такого \(k\) не существует.

Обратите внимание, что он не может съесть одну и ту же конфету дважды, а запросы не зависят друг от друга (Тимур может использовать одну и ту же конфету в разных запросах).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\))  — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит \(2\) целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 1.5\cdot10^5\)) — количество конфет, которые есть у Тимура и количество запросов соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^4\)) — количество сахара в каждой конфете соответственно.

Затем следуют \(q\) строк.

Каждая из \(q\) содержит единственное целое число \(x_j\) (\(1 \leq x_j \leq 2 \cdot 10^9\)) — количество сахара, которое хочет получить Тимур.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(1.5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. В \(j\)-й строке выведите количество конфет, которое нужно съесть Тимуру, чтобы получить количество сахара, большее или равное \(x_j\). Выведите -1, если получить такое количество невозможно.

Примечание

В первом наборе входных данных примера:

  • В первом запросе Тимур может съесть любую конфету, и он наберет нужное количество.
  • Во втором запросе Тимур может получить количество не менее \(10\), съев \(7\)-ю и \(8\)-ю конфету, таким образом потребив количество сахара, равное \(14\).
  • На третий запрос нет возможного ответа.
  • В четвертом запросе Тимур может получить количество как минимум \(14\), съев \(7\)-ю и \(8\)-ю конфету, таким образом потребив количество сахара, равное \(14\).

Во втором наборе входных данных примера:

  • Для единственного запроса второго набора входных данных мы можем выбрать третью конфету, из которой Тимур получает количество сахара равное \(3\). Также можно получить тот же ответ, выбрав четвертую конфету.

F. Самый длинный страйк

жадные алгоритмы реализация сортировки Структуры данных *1300

Дан массив \(a\) длины \(n\) и целое число \(k\), вам нужно найти два любых числа \(l\) и \(r\) (\(l \leq r\)) таких, что:

  • Для каждого \(x\) \((l \leq x \leq r)\), \(x\) содержится в \(a\) хотя бы \(k\) раз (т.е. \(k\) или более элементов массива равны \(x\)).
  • Значение \(r-l\) максимально среди возможных.

Если не существует подходящих чисел, выведите -1.

Например, если \(a=[11, 11, 12, 13, 13, 14, 14]\) и \(k=2\), то:

  • для \(l=12\), \(r=14\) первое условие не выполнено, так как \(12\) содержится менее \(k=2\) раз.
  • для \(l=13\), \(r=14\) первое условие выполнено, так как \(13\) содержится хотя бы \(k=2\) раз в \(a\) и \(14\) содержится хотя бы \(k=2\) раз в \(a\).
  • для \(l=11\), \(r=11\) первое условие выполнено, так как \(11\) содержится хотя бы \(k=2\) раз в \(a\).

Пара \(l\) и \(r\) для которой выполнено первое условие и \(r-l\) максимально — это пара \(l = 13\), \(r = 14\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит целые числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \leq k \leq n\)) — длина массива \(a\) и минимальное количество раз, которое должно встретиться каждое число в диапазоне \([l, r]\), соответственно.

Затем следует единственная строка, состоящая из \(n\) целых чисел — элементов массива \(a\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) числа, \(l\) и \(r\) которые удовлетворяют условиям, или «-1» если таких не существует.

Если ответов может быть несколько, выведите любой.

C. Tokitsukaze и две красочные ленты

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1900

У Tokitsukaze есть две красочные ленты. Существует \(n\) различных цветов, пронумерованных от \(1\) до \(n\), и каждый цвет появляется ровно один раз на каждой из двух лент. Обозначим цвет \(i\)-й позиции первой ленты как \(ca_i\), а цвет \(i\)-й позиции второй ленты как \(cb_i\).

Теперь Tokitsukaze хочет выбрать для каждого цвета некоторое целочисленное значение от \(1\) до \(n\), различные для всех цветов. После этого она запишет во все позиции на каждой ленте значение соответствующего цвета. Обозначим число, записанное в \(i\)-й позиции первой ленты как \(numa_i\), а число в \(i\)-й позиции второй ленты как \(numb_i\).

В примере на рисунке выше, если предположить, что красный цвет получит значение \(x\) (\(1 \leq x \leq n\)), то так как он появляется на \(1\)-й позиции первой ленты и на \(3\)-й позиции второй ленты, то \(numa_1=numb_3=x\).

Обратите внимание, что все цвета \(i\) от \(1\) до \(n\) будут иметь различные значения, и один и тот же цвет, встречающийся в обеих лентах, будет иметь одинаковое значение.

После выбора значений цветов красота двух лент рассчитывается как \(\)\sum_{i=1}^{n}|numa_i-numb_i|.\(\)

Пожалуйста, помогите Tokitsukaze найти самую высокую возможную красоту лент.

Входные данные

Первая строка содержит единственное положительное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Дальше следует описание наборов входных данных:

Первая строка содержит единственное целое число \(n\) (\(1\leq n \leq 10^5\)) — количество цветов.

Вторая строка содержит \(n\) целых чисел \(ca_1, ca_2, \ldots, ca_n\) (\(1 \leq ca_i \leq n\)) — цвет каждой позиции первой ленты. Гарантируется, что \(ca\) является перестановкой.

Третья строка содержит \(n\) целых чисел \(cb_1, cb_2, \ldots, cb_n\) (\(1 \leq cb_i \leq n\)) — цвет каждой позиции второй ленты. Гарантируется, что \(cb\) является перестановкой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшую возможную красоту.

Примечание

Оптимальное решение для первого набора входных данных показано на следующем рисунке:

Красота равна \(\left|4-3 \right|+\left|3-5 \right|+\left|2-4 \right|+\left|5-2 \right|+\left|1-6 \right|+\left|6-1 \right|=18\).

Оптимальное решение для второго набора входных данных показано на следующем рисунке:

Красота равна \(\left|2-2 \right|+\left|1-6 \right|+\left|3-3 \right|+\left|6-1 \right|+\left|4-4 \right|+\left|5-5 \right|=10\).

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\) изначально хорошая, поэтому никаких действий не требуется.

A. AvtoBus

жадные алгоритмы математика Перебор теория чисел *900

Наступила весна, и руководство автобусного парка AvtoBus дало распоряжение поменять у всех автобусов зимние шины на летние.

Вы владеете небольшой фирмой, занимающейся обслуживанием автобусов, и только что вам поступил долгожданный заказ на замену \(n\) шин. Вы знаете, что автобусный парк владеет автобусами двух типов: с двумя осями (у таких автобусов \(4\) колеса) и с тремя осями (у таких автобусов \(6\) колес).

Вы не знаете, сколькими автобусами какого типа владеет парк AvtoBus, поэтому вам стало интересно, сколько автобусов может быть в парке. Вам нужно определить, какое минимальное и какое максимальное количество автобусов может быть в парке, зная, что суммарное количество колес у всех автобусов равно \(n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке описания набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 10^{18}\)) — суммарное количество колес у всех автобусов.

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке в следующем формате.

В единственной строке выведите два целых числа \(x\) и \(y\) (\(1 \le x \le y\)) — минимальное и максимальное возможное количество автобусов, которыми владеет парк.

В случае, если для данного \(n\) не существует подходящего количества автобусов, выведите в качестве ответа число \(-1\).

Примечание

В первом примере известно, что суммарное количество колес у всех автобусов равно \(4\). Это значит, что в автобусном парке есть ровно один автобус с двумя осями.

Во втором примере не трудно показать, что не существует такого количества автобусов, чтобы их суммарное количество колес было равно \(7\).

В третьем примере суммарное количество колес у всех автобусов равно \(24\). Возможны следующие варианты:

  • Четыре автобуса с тремя осями.
  • Три автобуса с двумя осями и два автобуса с тремя осями.
  • Шесть автобусов с двумя осями.

Таким образом, минимальное количество автобусов равно \(4\), а максимальное — \(6\).

C. Двоичная строка

Бинарный поиск жадные алгоритмы Строки *1600

Дана строка \(s\), состоящая из символов 0 и/или 1.

Вы должны удалить несколько (возможно, ноль) символов из начала строки и несколько (возможно, ноль) символов с конца. Получившаяся строка может оказаться пустой. Стоимость удаления — это максимум из двух величин:

  • количество символов 0, оставшихся в строке;
  • количество символов 1, удаленных из строки.

Чему равна минимальная стоимость удаления, которую можно достигнуть?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из единственной строки \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящей из символов 0 и/или 1.

Сумма длин \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную возможную стоимость удаления.

Примечание

Рассмотрим наборы входных данных из примера:

  1. в первом наборе можно удалить два символа из начала и один символ с конца. Только один 1 был удален, только один 0 остался, поэтому стоимость равна \(1\);
  2. во втором наборе можно удалить три символа из начала и шесть символов с конца. Два символа 0 останутся, будут удалены три символа 1, поэтому стоимость равна \(3\);
  3. в третьем наборе входных данных оптимально удалить четыре символа из начала строки;
  4. в четвертом наборе входных данных оптимально удалить всю строку;
  5. в пятом наборе входных данных оптимально не удалять ни один символ.

D. Прогулка с собакой

жадные алгоритмы математика Перебор *2400

Вы гуляете со своей собакой и сейчас дошли до набережной. Набережная может быть представлена как бесконечная прямая. Изначально вы находитесь в точке \(0\) со своей собакой.

Вы решили предоставить немного свободы своей собаке, поэтому вы отвязали ее от поводка и дали ей немного побегать. Также вы смотрели, что собака делает, поэтому у вас есть некоторые записи с информацией о ее беге. В течение \(i\)-й минуты позиция собаки изменялась относительно ее предыдущей позиции на значение \(a_i\) (это значит, что собака пробежала \(a_i\) метров в течение \(i\)-й минуты). Если \(a_i\) положительно, собака пробежала \(a_i\) метров направо, иначе (если \(a_i\) отрицательно) она пробежала \(a_i\) метров налево.

В некоторые минуты вы переписывались в мессенджере со своим другом, поэтому у вас нет записей о передвижениях вашей собаки в эти минуты. Эти значения \(a_i\) равны нулю.

Вы хотите, чтобы ваша собака вернулась к вам в конце прогулки, поэтому последняя точка назначения собаки после \(n\) минут должна быть равна \(0\).

Вам стало интересно: чему равно максимально возможное количество различных целочисленных точек на прямой, которые могла посетить ваша собака, если вы замените каждый \(0\) на какое-то целое число от \(-k\) до \(k\) (и ваша собака обязана вернуться в \(0\) после прогулки)? Собака посещает целочисленную точку, если она пробегает мимо нее или встает в ней в конце любой минуты. Точка \(0\) всегда является посещенной, потому что она изначально находится в ней.

Если собака не может вернуться в точку \(0\) после \(n\) минут вне зависимости от того, как вы заполните пропуски, выведите -1.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3000; 1 \le k \le 10^9\)) — количество минут и максимально возможная скорость вашей собаки в минуты с отсутствующими записями.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)), где \(a_i\) равно количеству метров, которые ваша собака пробежала в течение \(i\)-й минуты (влево, если \(a_i\) отрицательно и направо, если оно положительно). Если \(a_i = 0\), то это значение неизвестно и может быть заменено на любое целое число из отрезка \([-k; k]\).

Выходные данные

Если собака не может вернуться в точку \(0\) после \(n\) минут вне зависимости от того, как вы заполните пропуски, выведите -1. Иначе выведите одно целое число — максимальное количество различных целочисленных точек, которые ваша собака могла бы посетить, если бы вы заполнили пропуски оптимально, и собака вернулась бы в \(0\) в конце прогулки.

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\)).
Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество ходов, необходимое для того, чтобы оставить ровно одну фигуру на доске.

A. Игра с карточками

жадные алгоритмы игры *800

Алиса и Боб играют в игру. У Алисы есть \(n\) карточек с числами, на \(i\)-й из них написано число \(a_i\). У Боба есть \(m\) карточек с числами, на \(j\)-й из них написано число \(b_j\).

Игра происходит по ходам. На первом ходу первый игрок выбирает любую из своих карточек и выкладывает ее на стол. На втором ходу второй игрок выбирает любую из своих карточек, число на которой больше числа на карточке, выложенной на первом ходу, и выкладывает ее на стол. На третьем ходу первый игрок выбирает любую из своих карточек, число на которой больше числа на карточке, выложенной на втором ходу, и выкладывает ее на стол, и так далее — игроки по очереди выбирают карточку из своих и выкладывают ее на стол, при этом каждый раз число на новой карточке должно быть больше числа на карточке, выбранной противником на предыдущем ходу.

Если какой-то игрок не может сделать ход, то он проигрывает.

Например, пусть у Алисы \(4\) карточки, числа на них равны \([10, 5, 3, 8]\). У Боба \(3\) карточки, числа на них равны \([6, 11, 6]\). Игра может идти следующим образом:

  • Алиса может выбрать любую карточку. Она выбирает карточку с числом \(5\) и кладет ее на стол.
  • Боб может выбрать любую карточку с числом больше \(5\). Он выбирает карточку с числом \(6\) и кладет ее на стол.
  • Алиса может выбрать любую карточку с числом больше \(6\). Она выбирает карточку с числом \(10\) и кладет ее на стол.
  • Боб может выбрать любую карточку с числом больше \(10\). Он выбирает карточку с числом \(11\) и кладет ее на стол.
  • Алиса может выбрать любую карточку с числом больше \(11\), но у нее нет таких карточек, поэтому она проигрывает.

Алиса и Боб играют в игру оптимально (то есть если кто-то из них может победить независимо от того, как будет играть противник, то этот игрок обязательно выигрывает).

Вы должны ответить на два вопроса:

  • кто победит, если первый ход делает Алиса?
  • кто победит, если первый ход делает Боб?
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из четырех строк.

В первой строке набора входных данных задано одно целое число \(n\) (\(1 \le n \le 50\)) — количество карточек у Алисы.

Во второй строке набора входных данных заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 50\)) — числа, записанные на карточках Алисы.

В третьей строке набора входных данных задано одно целое число \(m\) (\(1 \le m \le 50\)) — количество карточек у Боба.

В четвертой строке набора входных данных заданы \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 50\)) — числа, записанные на карточках Боба.

Выходные данные

Для каждого набора входных данных выведите две строки. В первой строке выведите Alice, если в случае, когда Алиса делает первый ход, она выигрывает; в противном случае выведите Bob. Во второй строке в аналогичном формате выведите, кто выигрывает, если первый ход делает Боб.

Примечание

Разберем первый набор входных данных в примере из условия.

У Алисы одна карточка с числом \(6\), у Боба есть две карточки с числами \([6, 8]\).

Если Алиса делает первый ход, то она должна выложить на стол карточку \(6\). Боб должен в ответ выложить на стол карточку с числом \(8\). У Алисы нет карточек, которые она может выложить на стол, поэтому она проигрывает.

Если Боб делает первый ход, то независимо от того, какую карточку он выложит на стол, Алиса не сможет сделать ответный ход, поэтому она проиграет.

A. Палиндромные индексы

жадные алгоритмы Строки *800

Вам дана строка \(s\) длины \(n\), которая является палиндромом.

Вы должны посчитать количество индексов \(i\) \((1 \le i \le n)\) таких, что строка после удаления \(s_i\) из \(s\) остается палиндромом.

Например, рассмотрим \(s\) = «aba»

  1. Если мы удалим \(s_1\) из \(s\), то строка станет «ba», что не является палиндромом.
  2. Если мы удалим \(s_2\) из \(s\), строка станет «aa», что является палиндромом.
  3. Если мы удалим \(s_3\) из \(s\), строка станет «ab», что не является палиндромом.

Палиндром  — это строка, которая слева направо читается так же, как справа налево. Например, «abba», «a», «fef» являются палиндромами, а «codeforces», «acd», «xy»  — нет.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) \((1 \leq t \leq 10^3)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \leq n \leq 10^5)\)  — длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\), состоящую из строчных английских букв. Гарантируется, что \(s\) является палиндромом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — количество индексов \(i\) \((1 \le i \le n)\) таких, что строка после удаления \(s_i\) из \(s\) остается палиндромом.

Примечание

Первый набора входных данных описан в условии.

Во втором наборе входных данных индексы \(i\), которые приводят к палиндрому после удаления \(s_i\), это \(3, 4, 5, 6\). Следовательно, ответ  — \(4\).

В третьем наборе входных данных удаление любого из индексов приводит к «d», что является палиндромом. Следовательно, ответ равен \(2\).

C. LIS или перевернутая LIS?

жадные алгоритмы Конструктив математика реализация *1400

Вам дан массив \(a\) из \(n\) целых положительных чисел.

Пусть \(\text{LIS}(a)\) обозначает длину самой длинной строго возрастающей подпоследовательности \(a\). Например,

  • \(\text{LIS}([2, \underline{1}, 1, \underline{3}])\) = \(2\).
  • \(\text{LIS}([\underline{3}, \underline{5}, \underline{10}, \underline{20}])\) = \(4\).
  • \(\text{LIS}([3, \underline{1}, \underline{2}, \underline{4}])\) = \(3\).

Мы определяем массив \(a'\) как массив, полученный после разворота массива \(a\), т.е. \(a' = [a_n, a_{n-1}, \ldots , a_1]\).

Красота массива \(a\) определяется как \(min(\text{LIS}(a),\text{LIS}(a'))\).

Ваша задача  — определить максимально возможную красоту массива \(a\), если вы можете произвольно переставить местами элементы массива \(a\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(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\) \((1 \leq a_i \leq 10^9)\)  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — максимально возможную красоту \(a\) после перестановки его элементов произвольным способом.

Примечание

В первом наборе входных данных \(a\) = \([6, 6, 6]\) и \(a'\) = \([6, 6, 6]\). \(\text{LIS}(a) = \text{LIS}(a')\) = \(1\). Следовательно, красота равна \(min(1, 1) = 1\).

Во втором наборе входных данных \(a\) может быть перестроено в \([2, 5, 4, 5, 4, 2]\). Тогда \(a'\) = \([2, 4, 5, 4, 5, 2]\). \(\text{LIS}(a) = \text{LIS}(a') = 3\). Следовательно, красота равна \(3\), и можно показать, что это максимально возможная красота.

В третьем наборе входных данных \(a\) может быть перестроено в \([1, 2, 3, 2]\). Тогда \(a'\) = \([2, 3, 2, 1]\). \(\text{LIS}(a) = 3\), \(\text{LIS}(a') = 2\). Следовательно, красота равна \(min(3, 2) = 2\) и можно показать, что \(2\)  — это максимально возможная красота.

E. Неупорядоченные обмены

графы Деревья жадные алгоритмы Конструктив математика поиск в глубину и подобное сортировки *2700

У Алисы есть перестановка \(p\) чисел от \(1\) до \(n\). Алиса может поменять местами пару \((x, y)\), что означает поменять местами элементы в позициях \(x\) и \(y\) в \(p\) (то есть поменять местами \(p_x\) и \(p_y\)). Алиса недавно изучила свой первый алгоритм сортировки, поэтому она решила отсортировать свою перестановку за минимальное количество возможных обменов. Она записала на листе бумаги все обмены в том порядке, в котором она их выполняла для сортировки перестановки.

Например,

  • \([(2, 3), (1, 3)]\) является правильной последовательностью обменов Алисы для перестановки \(p = [3, 1, 2]\), в то время как \([(1, 3), (2, 3)]\) не является, потому что не сортирует перестановку. Обратите внимание, что мы не можем отсортировать перестановку менее чем за \(2\) обмена.
  • \([(1, 2), (2, 3), (2, 4), (2, 3)]\) не может быть последовательностью обменов Алисы для \(p = [2, 1, 4, 3]\), даже если она сортирует перестановку, потому что \(p\) можно отсортировать за \(2\) обмена, например, используя последовательность \([(4, 3), (1, 2)]\).

К сожалению, Боб переставил местами обмены в последовательности, выписанной Алисой.

Вам дана перестановка Алисы \(p\) и обмены, сделанные Алисой в произвольном порядке. Можете ли вы восстановить правильную последовательность обменов, которая сортирует перестановку \(p\)? Поскольку Алиса написала правильные обмены до того, как Боб их перемешал, гарантируется, что существует некоторый порядок обменов, который сортирует перестановку.

Входные данные

Первая строка содержит \(2\) целых числа \(n\) и \(m\) \((2 \le n \le 2 \cdot 10^5, 1 \le m \le n - 1)\)  — размер перестановки и минимальное количество обменов, необходимое для сортировки перестановки.

Следующая строка содержит \(n\) целых чисел \(p_1, p_2, ..., p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы \(p\). Гарантируется, что \(p\) образует перестановку.

Далее следуют \(m\) строк. В \(i\)-й из следующих \(m\) строк содержатся два целых числа \(x_i\) и \(y_i\)  — обозначающих \(i\)-й обмен \((x_i, y_i)\).

Гарантируется, что можно отсортировать \(p\) с этими \(m\) обменами и что нет способа отсортировать \(p\) с менее чем \(m\) обменами.

Выходные данные

Выведите перестановку \(m\) целых чисел  — правильный порядок обменов, выписанный Алисой, который сортирует перестановку \(p\). Для лучшего понимания обратитесь к объяснению примера.

В случае нескольких возможных ответов выведите любой.

Примечание

В первом примере \(p = [2, 3, 4, 1]\), \(m = 3\) и заданы обмены \([(1, 4), (2, 1), (1, 3)]\).

Существует только один правильный порядок обмена, а именно \([2, 3, 1]\).

  1. Сначала мы выполняем обмен \(2\) из входных данных, т.е. \((2, 1)\), \(p\) становится \([3, 2, 4, 1]\).
  2. Затем мы выполняем обмен \(3\) из входных данных, т.е. \((1, 3)\), \(p\) становится \([4, 2, 3, 1]\).
  3. Наконец, мы выполняем обмен \(1\) из входных данных, т.е. \((1, 4)\) и \(p\) становится \([1, 2, 3, 4]\), что является отсортированным.

Во втором примере \(p = [6, 5, 1, 3, 2, 4]\), \(m = 4\) и заданные обмены \([(3, 1), (2, 5), (6, 3), (6, 4)]\).

Один из возможных правильных порядков обмена  — \([4, 2, 1, 3]\).

  1. Выполните обмен \(4\) из входных данных, т.е. \((6, 4)\), \(p\) становится \([6, 5, 1, 4, 2, 3]\).
  2. Выполните обмен \(2\) из входных данных, т.е. \((2, 5)\), \(p\) становится \([6, 2, 1, 4, 5, 3]\).
  3. Выполните обмен \(1\) из входных данных, т.е. \((3, 1)\), \(p\) становится \([1, 2, 6, 4, 5, 3]\).
  4. Выполните обмен \(3\) из входных данных, т.е. \((6, 3)\) и \(p\) становится \([1, 2, 3, 4, 5, 6]\), что является отсортированным.

Возможны и другие ответы, например, \([1, 2, 4, 3]\).

F. Поток минимальной стоимости?

графы жадные алгоритмы Потоки сортировки Структуры данных *2700

Вам даны два массива \(a\) и \(b\) целых чисел (\(b_i \neq 0\) и \(|b_i| \leq 10^9\)). Массив \(a\) отсортирован в неубывающем порядке.

Стоимость подмассива \(a[l:r]\) определяется следующим образом:

  • Если \( \sum\limits_{j = l}^{r} b_j \neq 0\), то стоимость не определена.

  • Иначе:

    • Постройте двудольный поточный граф с \(r-l+1\) вершинами, помеченными от \(l\) до \(r\), причем все вершины с \(b_i \lt 0\) расположены слева, а с \(b_i \gt 0\)  — справа. Для каждых \(i, j\) таких, что \(l \le i, j \le r\), \(b_i<0\) и \(b_j>0\), нарисуйте ребро от \(i\) к \(j\) с бесконечной пропускной способностью и стоимостью единицы потока равной \(|a_i-a_j|\).
    • Добавьте еще две вершины: источник \(S\) и сток \(T\).
    • Для каждого \(i\) такого, что \(l \le i \le r\) и \(b_i<0\), добавьте ребро от \(S\) к \(i\) со стоимостью \(0\) и пропускной способностью \(|b_i|\).
    • Для каждого \(i\) такого, что \(l \le i \le r\) и \(b_i>0\), добавьте ребро от \(i\) к \(T\) со стоимостью \(0\) и пропускной способностью \(|b_i|\).
    • Стоимость подмассива определяется как минимальная стоимость максимального потока из \(S\) в \(T\).

Вам даны \(q\) запросов в виде двух целых чисел \(l\) и \(r\). Вы должны вычислить стоимость подмассива \(a[l:r]\) для каждого запроса, по модулю \(10^9 + 7\).

Если вы не знаете, что означает минимальная стоимость максимального потока, обратитесь сюда.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) \((2 \leq n \leq 2\cdot 10^5, 1 \leq q \leq 2\cdot10^5)\)  — длину массивов \(a\), \(b\) и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2 \ldots a_n\) (\(0 \leq a_1 \le a_2 \ldots \le a_n \leq 10^9)\)  — массив \(a\). Гарантируется, что \(a\) отсортирован в неубывающем порядке.

Следующая строка содержит \(n\) целых чисел \(b_1,b_2 \ldots b_n\) \((-10^9\leq b_i \leq 10^9, b_i \neq 0)\)  — массив \(b\).

В \(i\)-й из следующих \(q\) строк содержится два целых числа \(l_i,r_i\) \((1\leq l_i \leq r_i \leq n)\). Гарантируется, что \( \sum\limits_{j = l_i}^{r_i} b_j = 0\).

Выходные данные

Для каждого запроса \(l_i\), \(r_i\)  — выведите стоимость подмассива \(a[l_i:r_i]\) по модулю \(10^9 + 7\).

Примечание

В первом запросе, максимально возможный поток составляет \(1\), т.е. одна единица из источника в \(2\), затем одна единица из \(2\) в \(3\), затем одна единица из \(3\) в сток. Стоимость потока равна \(0 \cdot 1 + |2 - 4| \cdot 1 + 0 \cdot 1 = 2\).

Во втором запросе, максимально возможный поток снова составляет \(1\), т.е. от источника к \(7\), от \(7\) к \(6\) и от \(6\) к стоку со стоимостью \(0 \cdot |10 - 10| \cdot 1 + 0 \cdot 1 = 0\).

В третьем запросе, граф показан слева с пропускной способностью, указанной вне скобок, и стоимостью, указанной в скобках. Изображение справа показывает поток через каждое ребро в оптимальной конфигурации.

Максимальный поток составляет \(3\) при стоимости \(0 \cdot 3 + 1 \cdot 1 + 4 \cdot 2 + 0 \cdot 1 + 0 \cdot 2 = 9\).

В четвертом запросе, сеть потока выглядит следующим образом:

Минимальная стоимость максимального потока достигается следующим образом:

Максимальный поток в этой сети равен 4, а минимальная стоимость такого потока равна 15.

C. Перестановка столбцов

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно каждому участнику проекта crowdforces, Тётя Люсине — чуть ли не самый активный человек на земле. Её голова всё время забита какими-то новыми on-ramp задачами. Конечно, даже ей не всегда удаётся придумать что-то хорошее, и в этот раз у неё получилась таска со сказкой, а именно — про таблицы. Ни один ревьювер потом не смог решить эту задачу, а вы сможете?

Дана таблица с \(n\) строками и \(m\) столбцами, где в каждой ячейке написано целое положительное число. Назовём таблицу хорошей, если последовательность чисел в каждой строке является отсортированной в порядке неубывания. Иными словами, для каждого \(1 \le i \le n\) и \(2 \le j \le m\) выполняется следующее условие: \(a_{i,j} \ge a_{i, j-1}\).

Необходимо ровно один раз выбрать столбцы с номерами \(i\) и \(j\) (не обязательно различными), \(1 \le i, j \le m\), и поменять их местами.

Необходимо определить, можно ли после этого получить хорошую таблицу, и вывести соответствующие столбцы, если это возможно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов таблицы соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки равен \(a_{i,j}\) — это число, записанное в \(j\)-й ячейке \(i\)-й строки (\(1 \le a_{i,j} \le 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Если есть несколько правильных ответов, вы можете вывести любой из них.

Выходные данные

Если после перестановки невозможно получить хорошую таблицу, то выведите одно число \(-1\).

В противном случае выведите \(2\) числа — номера столбцов, которые необходимо переставить, чтобы получить хорошую таблицу.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных таблица уже является хорошей, поэтому мы можем, например, переставить первый столбец с самим собой.

Во втором наборе входных данных нельзя сделать данную таблицу хорошей.

В третьем наборе входных данных необходимо поменять местами первый и второй столбец, тогда таблица станет хорошей.

D. Ловушки

жадные алгоритмы Конструктив сортировки *1700

Как известно, в мире всегда есть недобросовестные люди. К сожалению, иногда такие люди делают ревью, и самый умный человек на земле (естественно, Тётя Люсине) придумала хитрейший способ с ними бороться: ханипоты! Но Тётя Люсине пошла ещё дальше: она замаскировала все ханипоты под «ловушки»! Теперь вам, как самому лучшему ревьюверу, нужно через них пробраться.

Вам нужно преодолеть \(n\) ловушек, пронумерованных от \(1\) до \(n\). Вы будете проходить через ловушки по очереди. \(i\)-я ловушка наносит вам \(a_i\) базового урона.

Вместо того, чтобы проходить через ловушку, вы можете перепрыгнуть ее. Всего вы можете перепрыгнуть не более \(k\) ловушек. В случае, если вы перепрыгиваете ловушку, вы не получаете от неё урона. Однако если вы перепрыгиваете какую-то ловушку, то это увеличивает урон каждой следующей ловушки на \(1\) (это бонусный урон).

Обратите внимание, что если вы перепрыгиваете ловушку, то вы не получаете от неё урона (ни базовый, ни бонусный), а что также бонусные уроны от прыжков складываются. Например, если вы проходите через \(i\)-ю ловушку с базовым уроном \(a_i\), а до этого вы перепрыгнули \(3\) другие ловушки, то вы получите от неё \((a_i + 3)\) урона.

Определите, какое минимальный суммарный урон вы можете получить, если разрешается перепрыгнуть не больше \(k\) любых ловушек.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\)) — количество ловушек и максимальное количество ловушек, которые вы можете перепрыгнуть.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — базовые уроны ловушек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальный суммарный урон, который можно получить, если можно перепрыгнуть не больше \(k\) любых ловушек.

Примечание

В первом наборе входных данных можно перепрыгнуть все ловушки и получить \(0\) урона.

Во втором наборе входных данных есть \(5\) способов перепрыгнуть ловушки:

  1. Не перепрыгивать никакие ловушки.

    Суммарный урон: \(5 + 10 + 11 + 5 = 31\).

  2. Перепрыгнуть \(1\)-ю ловушку.

    Суммарный урон: \(\underline{0} + (10 + 1) + (11 + 1) + (5 + 1) = 29\).

  3. Перепрыгнуть \(2\)-ю ловушку.

    Суммарный урон: \(5 + \underline{0} + (11 + 1) + (5 + 1) = 23\).

  4. Перепрыгнуть \(3\)-ю ловушку.

    Суммарный урон: \(5 + 10 + \underline{0} + (5 + 1) = 21\).

  5. Перепрыгнуть \(4\)-ю ловушку.

    Суммарный урон: \(5 + 10 + 11 + \underline{0} = 26\).

Чтобы получить минимальный урон, необходимо перепрыгнуть \(3\)-ю ловушку, тогда ответ будет \(21\).

В третьем наборе входных данных оптимально перепрыгнуть через ловушки с номерами \(1\), \(3\), \(4\), \(5\), \(7\):

Суммарный урон: \(0 + (2 + 1) + 0 + 0 + 0 + (2 + 4) + 0 = 9\).

E. MEX против DIFF

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных *2100

У Тёти Люсине, как и у всех гениальных людей, имеются свои странности. Сегодня в качестве развлечения она решила посмотреть на противостояние двух могущественных функций. В зависимости от результата она решит, добавлять ли эти функции в CrowdScript.

Дан массив \(a\) из \(n\) неотрицательных целых чисел. За одну операцию вы можете заменить любое число в массиве на любое неотрицательное целое число.

Назовём стоимостью массива \(\operatorname{DIFF}(a) - \operatorname{MEX}(a)\), где \(\operatorname{MEX}\) множества чисел — это минимальное целое неотрицательное число, которого нет в множестве, а \(\operatorname{DIFF}\) — количество различных чисел в массиве.

Например, \(\operatorname{MEX}(\{1, 2, 3\}) = 0\), \(\operatorname{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Вам необходимо определить, какую минимальную стоимость массива \(a\) можно получить, если разрешено сделать не больше \(k\) операций.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(0 \le k \le 10^5\)) — размер массива \(a\) и максимальное количество операций, которое можно сделать.

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальная стоимость, которую можно получить, сделав не больше \(k\) операций.

Примечание

В первом наборе входных данных не требуется делать какие-либо операции, чтобы минимизировать \(\operatorname{DIFF} - \operatorname{MEX}\).

Во втором наборе входных данных можно заменить \(5\) на \(1\). После этого массив \(a\) будет \([0,\, 2,\, 4,\, 1]\), \(\operatorname{DIFF} = 4\), \(\operatorname{MEX} = \operatorname{MEX}(\{0, 1, 2, 4\}) = 3\), поэтому ответ равен \(1\).

В третьем наборе входных данных один из возможных массивов \(a\) будет \([4,\, 13,\, 0,\, 0,\, 13,\, 1,\, 2]\), \(\operatorname{DIFF} = 5\), \(\operatorname{MEX} = 3\).

В четвертом наборе входных данных один из возможных массивов \(a\) будет \([1,\, 2,\, 3,\, 0,\, 0,\, 0]\).

A. Циклический локальный минимакс

жадные алгоритмы Конструктив сортировки *1100

Вам дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Можно ли расположить их на окружности так, чтобы каждое число было строго больше обоих своих соседей или строго меньше обоих своих соседей?

Другими словами, определите, существует ли перестановка \(b_1, b_2, \ldots, b_n\) целых чисел \(a_1, a_2, \ldots, a_n\) такая, что для каждого \(i\) от \(1\) до \(n\) выполняется хотя бы одно из следующих условий:

  • \(b_{i-1} < b_i > b_{i+1}\).
  • \(b_{i-1} > b_i < b_{i+1}\)

Чтобы выражения выше имели смысл для \(i=1\) и \(i=n\), мы определяем \(b_0=b_n\) и \(b_{n+1}=b_1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 3\cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\))  — количество чисел.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если невозможно расположить числа на окружности таким образом, выведите \(\texttt{NO}\).

В противном случае выведите \(\texttt{YES}\). Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\), которые являются перестановкой \(a_1, a_2, \ldots, a_n\) и удовлетворяют условиям из утверждения.

Примечание

Можно показать, что для первого и третьего наборов входных данных такой расстановки не существует.

Во втором наборе входных данных подходит расстановка \([1, 8, 4, 9]\), в которой \(1\) и \(4\) меньше своих соседей, а \(8, 9\) больше.

В четвертом наборе входных данных работает расстановка \([1, 11, 1, 111, 1, 1111]\), в которой три элемента, равные \(1\), меньше своих соседей, а остальные элементы больше.

B. Лингвистика

жадные алгоритмы реализация сортировки Строки *2000

Алина обнаружила странный язык, который содержит всего \(4\) слова: \(\texttt{A}\), \(\texttt{B}\), \(\texttt{AB}\), \(\texttt{BA}\). Оказалось, что в этом языке нет пробелов: предложение записывается путем объединения (конкатенации) его слов в одну строку.

Алина нашла одно такое предложение \(s\) и ей интересно: возможно ли, что оно состоит ровно из \(a\) слов \(\texttt{A}\), \(b\) слов \(\texttt{B}\), \(c\) слов \(\texttt{AB}\) и \(d\) слов \(\texttt{BA}\)?

Другими словами, определите, можно ли объединить (конкатенировать) эти слова \(a+b+c+d\) в некотором порядке так, чтобы получилась строка \(s\). Каждое из слов \(a+b+c+d\) должно быть использовано в конкатенации ровно один раз, но вы можете выбрать порядок, в котором они будут конкатенироваться.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(a\), \(b\), \(c\), \(d\) (\(0\le a,b,c,d\le 2\cdot 10^5\)) — количество раз, которое слова \(\texttt{A}\), \(\texttt{B}\), \(\texttt{AB}\), \(\texttt{BA}\) соответственно должны быть использованы в предложении.

Вторая строка содержит строку \(s\) (\(s\) состоит только из символов \(\texttt{A}\) и \(\texttt{B}\), \(1\le |s| \le 2\cdot 10^5\), \(|s|=a+b+2c+2d\))  — предложение. Обратите внимание, что условие \(|s|=a+b+2c+2d\) (здесь \(|s|\) обозначает длину строки \(s\)) эквивалентно тому, что \(s\) имеет длину, равную длине конкатенации слов \(a+b+c+d\).

Сумма длин \(s\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если возможно, что предложение \(s\) состоит ровно из \(a\) слов \(\texttt{A}\), \(b\) слов \(\texttt{B}\), \(c\) слов \(\texttt{AB}\) и \(d\) слов \(\texttt{BA}\), и \(\texttt{NO}\) в противном случае. Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных предложение \(s\)  — это \(\texttt{B}\). Очевидно, что оно не может состоять из одного слова \(\texttt{A}\), поэтому ответ  — \(\texttt{NO}\).

Во втором наборе входных данных предложение \(s\)  — \(\texttt{AB}\), и возможно, что оно состоит из одного слова \(\texttt{AB}\), поэтому ответ  — \(\texttt{YES}\).

В третьем наборе входных данных предложение \(s\)  — \(\texttt{ABAB}\), и возможно, что оно состоит из одного слова \(\texttt{A}\), одного слова \(\texttt{B}\) и одного слова \(\texttt{BA}\), так как \(\texttt{A} + \texttt{BA} + \texttt{B} = \texttt{ABAB}\).

В четвертом наборе входных данных предложение \(s\)  — \(\texttt{ABAAB}\), и возможно, что оно состоит из одного слова \(\texttt{A}\), одного слова \(\texttt{AB}\) и одного слова \(\texttt{BA}\), так как \(\texttt{A} + \texttt{BA} + \texttt{AB} = \texttt{ABAAB}\).

В пятом наборе входных данных предложение \(s\)  — \(\texttt{BAABBABBAA}\), и возможно, что оно состоит из одного слова \(\texttt{A}\), одного слова \(\texttt{B}\), двух слов \(\texttt{AB}\) и двух слов \(\texttt{BA}\), так как \(\texttt{BA} + \texttt{AB} + \texttt{B} + \texttt{AB} + \texttt{BA} + \texttt{A}= \texttt{BAABBABBAA}\).

C. Привнеси баланс

жадные алгоритмы Конструктив Перебор *2600

У Алины есть скобочная последовательность \(s\) длины \(2n\), состоящая из \(n\) открывающих скобок '(' и \(n\) закрывающих скобок ')'. Поскольку ей нравится баланс, она хочет превратить эту последовательность скобок в сбалансированную скобочную последовательность.

За одну операцию она может развернуть любую подстроку \(s\).

Какое наименьшее количество операций ей потребуется, чтобы превратить \(s\) в сбалансированную скобочную последовательность? Можно показать, что это всегда можно сделать за не более чем \(n\) операций.

Напомним, что скобочная последовательность называется сбалансированной, если ее можно превратить в правильное математическое выражение, добавив символы + и 1. Например, последовательности (())(), () и (()(())) являются сбалансированными, а )(, (() и (())(  — нет.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(2n\), состоящую из \(n\) открывающих и \(n\) закрывающих скобок.

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(k\) \((0 \le k \le n)\)  — наименьшее количество необходимых операций.

В \(i\)-й из следующих \(k\) строк должны содержаться два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le 2n\)), указывающие на то, что в \(i\)-й операции Алина развернет подстроку \(s_ls_{l+1} \ldots s_{r-1}s_r\). Здесь нумерация начинается с \(1\).

Если существует несколько последовательностей операций с наименьшей длиной, которые преобразуют последовательность в сбалансированную, вы можете вывести любую из них.

Примечание

В первом наборе входных данных строка уже сбалансирована.

Во втором наборе входных данных строка будет преобразована следующим образом: ())(()))( \(\to\) ()()()())( \(\to\) ()()()()(), где последняя строка сбалансирована.

В третьем наборе входных данных строка будет преобразована в ((()))((())), которая является сбалансированой.

D2. Вес перестановки (сложная версия)

жадные алгоритмы Конструктив *3500

Это сложная версия задачи. Разница между простой и сложной версиями в том, что в этой версии вы должны вывести лексикографически минимальную перестановку с наименьшим весом.

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\).

Определим вес перестановки \(q_1, q_2, \ldots, q_n\) целых чисел от \(1\) до \(n\) как \(\)|q_1 - p_{q_{2}}| + |q_2 - p_{q_{3}}| + \ldots + |q_{n-1} - p_{q_{n}}| + |q_n - p_{q_{1}}|\(\)

Вы хотите, чтобы ваша перестановка была как можно легче. Среди перестановок \(q\) с наименьшим возможным весом найдите лексикографически минимальную.

Перестановка \(a_1, a_2, \ldots, a_n\) называется лексикографически меньшей, чем перестановка \(b_1, b_2, \ldots, b_n\), если существует некоторое \(1 \le i \le n\) такое, что \(a_j = b_j\) для всех \(1 \le j < i\) и \(a_i<b_i\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 200\))  — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Сумма \(n\) по всем наборам входных данных не превышает \(400\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) различны)  — одну из перестановок с наименьшим весом.

Примечание

В первом наборе входных данных есть две перестановки длины \(2\): \((1, 2)\) и \((2, 1)\). Перестановка \((1, 2)\) имеет вес \(|1 - p_2| + |2 - p_1| = 0\), а перестановка \((2, 1)\) имеет тот же вес: \(|2 - p_1| + |1 - p_2| = 0\). В этой версии мы должны вывести лексикографически меньшую из них  — \((1, 2)\).

Во втором наборе входных данных вес перестановки \((1, 3, 4, 2)\) равен \(|1 - p_3| + |3 - p_4| + |4 - p_2| + |2 - p_1| = |1 - 1| + |3 - 4| + |4 - 3| + |2 - 2| = 2\). Перестановок с меньшими весами не существует.

В третьем наборе входных данных вес перестановки \((1, 3, 4, 2, 5)\) равен \(|1 - p_3| + |3 - p_4| + |4 - p_2| + |2 - p_5| + |5 - p_1| = |1 - 3| + |3 - 2| + |4 - 4| + |2 - 1| + |5 - 5| = 4\). Перестановок с меньшими весами не существует.

E. Лучшая задача о LIS

жадные алгоритмы Структуры данных *3500

Оказывается, это ровно \(100\)-я моя задача, которая появляется в каком-то соревновании по программированию. Значит, она должна быть особенной! А что может быть более особенным, чем очередная задача о LIS...

Вам дана перестановка \(p_1, p_2, \ldots, p_{2n+1}\) целых чисел от \(1\) до \(2n+1\). Вам нужно обработать \(q\) обновлений, где \(i\)-е обновление заключается в обмене местами \(p_{u_i}, p_{v_i}\).

После каждого обновления найдите любой циклический сдвиг \(p\) с \(LIS \le n\), или определите, что такого сдвига не существует. (Подробности см. в разделе выходных данных).

Здесь \(LIS(a)\) обозначает длину самой длинной строго возрастающей подпоследовательности \(a\).

Взломы в этой задаче отключены. Не спрашивайте почему.

Входные данные

Первая строка содержит два целых числа \(n, q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)).

Вторая строка содержит \(2n+1\) целых чисел \(p_1, p_2, \ldots, p_{2n+1}\) (\(1 \le p_i \le 2n+1\), все \(p_i\) различны)  — элементы \(p\).

В \(i\)-й из следующих \(q\) строк содержится по два целых числа \(u_i, v_i\) (\(1 \le u_i, v_i \le 2n+1\), \(u_i \neq v_i\))  — обозначающие, что нужно поменять местами элементы \(p_{u_i}, p_{v_i}\) в \(i\)-м обновлении.

Выходные данные

После каждого обновления выведите любое \(k\) \((0 \le k \le 2n)\), такое, что длина самой длинной возрастающей подпоследовательности \((p_{k+1}, p_{k+2}, \ldots, p_{2n+1}, p_1, \ldots, p_k)\) не превышает \(n\), или \(-1\), если таких \(k\) нет.

Примечание

После первого обновления наша перестановка становится равна \((5, 2, 3, 4, 1)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После второго обновления наша перестановка становится равна \((1, 2, 3, 4, 5)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После третьего обновления наша перестановка становится равна \((1, 2, 3, 5, 4)\). Ее сдвиг на \(2\) равен \((3, 5, 4, 1, 2)\), и его \(LIS = 2\).

После четвертого обновления наша перестановка становится равна \((1, 2, 3, 4, 5)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После пятого обновления наша перестановка становится равна \((4, 2, 3, 1, 5)\). Ее сдвиг на \(4\) равен \((5, 4, 2, 3, 1)\), и его \(LIS = 2\).

После пятого обновления наша перестановка становится равна \((4, 5, 3, 1, 2)\). Ее сдвиг на \(0\) равен \((4, 5, 3, 1, 2)\), и его \(LIS = 2\).

A. Всё везде кроме одного

жадные алгоритмы *800

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). После просмотра замечательного фильма «Всё везде и сразу» вы придумали следующую операцию.

За одну операцию вы выбираете любые \(n-1\) элемента массива и заменяете каждое из них на их среднее арифметическое (которое не обязательно должно быть целым числом). Например, из массива \([1, 2, 3, 1]\) можно получить массив \([2, 2, 2, 1]\), если выбрать первые три элемента, или \([\frac{4}{3}, \frac{4}{3}, 3, \frac{4}{3}]\), если выбрать все элементы, кроме третьего.

Можно ли сделать все элементы массива равными после выполнения конечного числа таких операций?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 200\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 50\))  — количество чисел.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\)).

Выходные данные

Для каждого набора входных данных, если возможно сделать все элементы равными после некоторого количества операций, выведите \(\texttt{YES}\). В противном случае, выведите \(\texttt{NO}\).

Вы можете выводить \(\texttt{YES}\) и \(\texttt{NO}\) в любом регистре (например, строки \(\texttt{yEs}\), \(\texttt{yes}\), и \(\texttt{Yes}\) будут засчитаны как положительный ответ).

Примечание

В первом наборе входных данных все элементы уже равны.

Во втором наборе входных данных можно выбрать все элементы, кроме третьего, их среднее арифметическое равно \(\frac{1 + 2 + 4 + 5}{4} = 3\), поэтому массив станет \([3, 3, 3, 3, 3]\).

Можно показать, что невозможно сделать все числа равными в третьем и четвертом наборах входных данных.

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\), поэтому он нечетный.

A. Зачарованный лес

жадные алгоритмы Перебор *1600

Marisa приходит собирать грибы в зачарованный лес.

Зачарованный лес может быть представлен \(n\) точками на оси \(X\), пронумерованными от \(1\) до \(n\). Прежде чем Marisa начала собирать грибы, ее подруга Patchouli использовала магию, чтобы узнать изначальное количество грибов в каждой точке, представляемое массивом \(a_1,a_2,\ldots,a_n\).

Marisa может начать в любой точке леса на минуте \(0\). Каждую минуту по заданном порядку происходит следующее:

  • Она перемещается из точки \(x\) в \(y\) (\(|x-y|\le 1\), возможно, \(y=x\)).
  • Она собирает все грибы в точке \(y\).
  • В каждой точке леса появляется новый гриб.

Обратите внимание, что она не может собирать грибы в минуту \(0\).

Теперь Marisa хочет узнать максимальное количество грибов, которое она сможет собрать за \(k\) минут.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание этих наборов.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10 ^ 5\), \(1\le k \le 10^9\)) — количество позиций с грибами и время, которое есть у Marisa, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)) — изначальное количество грибов в точках \(1,2,\ldots,n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество грибов, которое Marisa может собрать за \(k\) минут.

Примечание

В первом наборе входных данных Marisa может начать с \(x=2\). В первую минуту она ходит на \(x=1\) и собирает \(5\) грибов. Количество грибов будет \([1,7,2,3,4]\). На второй минуте она передвигается на \(x=2\) и собирает \(7\) грибов. Количество грибов будет \([2,1,3,4,5]\). За \(2\) минуты Marisa собрала \(12\) грибов.

Можно показать, что собрать больше \(12\) грибов невозможно.

Во втором наборе входных данных один из ее возможных путей движения:

\(2 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 5\)

Можно показать, что собрать больше \(37\) грибов невозможно.

B. Железнодорожная система

графы жадные алгоритмы интерактив Конструктив сортировки *1700

Это интерактивная задача.

Под непосредственным наблюдением Kanako и Moriya железнодорожная система Gensokyo наконец-то завершена. GSKR (Gensokyo Railways) состоит из \(n\) станций с \(m\) двунаправленными дорожками, соединяющими их. \(i\)-я дорожка имеет длину \(l_i\) (\(1\le l_i\le 10^6\)). Из-за бюджетных ограничений железнодорожная система может быть не связной, хотя между двумя станциями может быть более одного пути.

Значение железнодорожной системы определяется как общая длина всех ее дорожек. Максимальная (или минимальная) мощность железнодорожной системы определяется как максимальное (или минимальное) значение среди всех полных остовных лесов.

Полный остовный лес графа — это остовный лес с той же связностью, что и данный граф.

У Kanako есть симулятор, способный обрабатывать не более \(2m\) запросов. На вход симулятора подается строка \(s\) длины \(m\), состоящая из символов 0 и/или 1. Симулятор оставит \(i\)-ю дорожку, если \(s_i=\) 1. Затем устройство сообщит Kanako максимальную мощность системы в смоделированном состоянии.

Kanako хочет узнать минимальную мощность системы со всеми дорожками с помощью симулятора.

Структура железнодорожной системы определяется заранее. Другими словами, интерактор не адаптивен.

Входные данные

Первая и единственная строка ввода содержит два целых числа \(n,m\) (\(2 \leq n \leq 200\), \(1\le m \le 500\)) — количество станций и путей.

Протокол взаимодействия

Начните взаимодействие, прочитав \(n,m\).

Чтобы сделать запрос, выведите «? \(s\)» (без кавычек, \(s\) — это строка длины \(m\), состоящая из символов 0 и/или 1 ). Затем вы должны прочитать наш ответ из стандартного ввода — максимальная мощность системы в смоделированном состоянии.

Если ваша программа сделала недопустимый запрос или закончились попытки, интерактор немедленно завершится, и ваша программа получит вердикт Неверный ответ.

Чтобы дать окончательный ответ, выведите «! \(L\)» (без кавычек, \(L\) — это минимальная мощность системы со всеми дорожками). Обратите внимание, что предоставление этого ответа не считается как один из \(2m\) запросов.

После печати запроса не забудьте вывести конец строки и очистить вывод. В противном случае вы получите превышение лимита бездействия. Для этого используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Паскале;
  • stdout.flush() в Python;
  • см. документацию для других языков.

Взломы

Первая строка ввода должна содержать два целых числа \(n,m\) (\(2 \leq n \leq 200\), \(1\le m \le 500\)) — количество станций и путей.

Следующие \(m\) строк должны содержать ровно \(3\) целых чисел через пробел \(u_i\), \(v_i\), \(l_i\) (\(1\le u_i,v_i \le n\), \(u_i\ne v_i\), \(1 \leq l_i \leq 10^6\)) — вершины ребра и длина \(i\)-й дорожки.

Примечание

Пример из условия, в котором \(l_i=i\):

C. Sanae и гигантский робот

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2500

Sanae сделала гигантского робота — Hisoutensoku, но с ним что-то не так. Что еще хуже, Sanae, кажется, не может понять, как его остановить, и она вынуждена исправлять это на лету.

Состояние робота можно представить массивом целых чисел длины \(n\). Изначально робот находится в состоянии \(a\). Она хочет превратить его в состояние \(b\).

Как отличный программист, Sanae владеет искусством копирования и вставки. За одну операцию она может выбрать некоторый отрезок из заданных отрезков, скопировать этот отрезок из \(b\) и вставить его в то же место робота, заменив исходное состояние на этих позициях. Однако она должна следить за тем, чтобы сумма \(a\) не менялась после каждой операции копирования на случай, если робот выйдет из строя. Формально Sanae может выбрать отрезок \([l,r]\) и сделать \(a_i = b_i\) (\(l\le i\le r\)), если \(\sum\limits_{i=1}^n a_i\) не изменится после применения операции.

Определите, может ли Sanae успешно перевести робота из начального состояния \(a\) в желаемое состояние \(b\) с помощью любых (возможно, ноль) операций.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n\leq 2\cdot 10^5\), \(1 \leq m\leq 2\cdot 10^5\)) — длина \(a\), \(b\) и количество отрезков.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное состояние \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \leq b_i \leq 10^9\)) — искомое состояние \(b\).

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(l_i,r_i\) (\(1 \leq l_i < r_i \leq n\)) — отрезки, которые Sanae может скопировать и вставить.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого теста выведите «YES» (без кавычек), если \(a\) можно превратить в \(b\), или «NO» (без кавычек) в противном случае.

Вы можете вывести «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» являются правильным ответом).

Примечание

В первом наборе входных данных один из возможных способов превратить \(a\) в \(b\):

Сначала выберите \([1,3]\). После операции \(a=[3,2,5,2,3]\).

Затем выберите \([2,5]\). После операции \(a=[3,2,5,4,1]=b\).

Во втором наборе входных данных можно показать, что невозможно превратить \(a\) в \(b\).

E. Стань больше

жадные алгоритмы Комбинаторика Конструктив математика теория чисел *3500

У Shinmyoumaru есть молоток, который может увеличивать или уменьшать предметы. Она проверяет это на последовательности \(a\) и числе \(v\), начальное значение которого равно \(1\). Она хочет получить \(v = \gcd\limits_{i\ne j}\{a_i\cdot a_j\}\), используя не более \(10^5\) операций (\(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}\)обозначает \(\gcd\) всех произведений двух различных элементов последовательности \(a\)).

В каждой операции она выбирает подпоследовательность \(b\) последовательности \(a\) и выполняет одно из следующих действий.

  • Увеличить: \(v = v \cdot \mathrm{lcm}(b)\)
  • Уменьшить: \(v = \frac{v}{\mathrm{lcm}(b)}\)

Обратите внимание, что ей не нужно гарантировать, чтобы \(v\) являлось целым числом, то есть \(v\) не обязательно должно быть кратным \(\mathrm{lcm}(b)\) при выполнении операции уменьшать.

Кроме того, она хочет гарантировать, чтобы суммарная длина \(b\), выбранных для операций, не превышала \(10^6\). Найдите возможную последовательность действий для нее. Вам не нужно ничего минимизировать.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2\leq n\leq 10^5\)) — размер последовательности \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\cdots,a_n\) (\(1\leq a_i\leq 10^6\)) — последовательность \(a\).

Можно показать, что ответ существует.

Выходные данные

Первая строка содержит целое неотрицательное число \(k\) (\(0\leq k\leq 10^5\)) — количество операций.

Следующие \(k\) строк содержат несколько целых чисел. В каждой строке первые два целых числа \(f\) (\(f\in\{0,1\}\)) и \(p\) (\(1\le p\le n\)) обозначают выбранный вами вариант (\(0\) для увеличения и \(1\) для уменьшения) и длину \(b\). Остальные целые числа \(p\) в строке \(i_1,i_2,\ldots,i_p\) (\(1\le i_1<i_2<\ldots<i_p\le n\)) представляют собой индексы подпоследовательности. Формально \(b_j=a_{i_j}\).

Примечание

В первом наборе входных данных \(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}=\gcd\{60,90,150\}=30\).

Выполните \(v = v\cdot \operatorname{lcm}\{a_1,a_2,a_3\}=30\).

Во втором наборе входных данных \(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}=8\).

Выполните \(v = v\cdot \operatorname{lcm}\{a_4\}=16\).

Затем выполните \(v = \frac{v}{\operatorname{lcm}\{a_1\}}=8\).

B. Волшебный талисман Patchouli

битмаски жадные алгоритмы Конструктив сортировки *800

Patchouli является магическим талисманом. Изначально у него \(n\) магических жетонов. Их магическая сила может быть представлена положительными целыми числами \(a_1, a_2, \ldots, a_n\).

Patchouli может выполнять следующие две операции с жетонами.

  • Слияние: Patchouli выбирает два жетона, убирает их и создает новый жетон с магической силой, равной сумме двух выбранных жетонов.
  • Сокращение: Patchouli выбирает жетон с четным значением магической силы \(x\), удаляет его и создает новый жетон с магической силой, равной \(\frac{x}{2}\).

Жетоны наиболее эффективны, когда они имеют нечетное значение магической силы. Пожалуйста, помогите Patchouli найти минимальное количество операций, необходимых ему, чтобы все жетоны имели нечетное значение магической силы.

Входные данные

Первая строка содержит единственное целое число \(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 10^9\)) — изначальная магическая сила \(n\) жетонов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое нужно Patchouli, чтобы все жетоны имели нечетное значение магической силы.

Можно показать, что при заданных ограничениях требуемая последовательность операций существует.

Примечание

В первом наборе входных данных \(a\) изначально состоит только из нечетных чисел.

Во втором наборе входных данных выберите жетоны с магической силой \(1\) и \(2\) и выполните слияние. Теперь \(a=[1,3]\), оба нечетные числа.

В третьем наборе входных данных сначала выберите жетоны с магической силой \(2\) и \(8\) и выполните слияние. Теперь \(a=[4,10]\). Дальше выберите жетон с магической силой \(10\) и выполните сокращение. Теперь \(a=[4,5]\). Выберите жетоны с магической силой \(4\) и \(5\) и выполните слияние. Теперь \(a=[9]\), а \(9\) — нечетное число.

Можно показать, что вы не можете получить все магические силы нечетными числами менее чем за \(3\) хода, поэтому ответ равен \(3\).

C. Управление историей

жадные алгоритмы Конструктив Строки *1700

Keine обладает способностью управлять историей.

История Gensokyo представляет собой строку \(s\) начальной длины \(1\). Чтобы исправить хаос, вызванный Yukari, ей нужно выполнить следующие операции \(n\) раз, в \(i\)-й раз:

  • Она выбирает непустую подстроку \(t_{2i-1}\) из \(s\).
  • Она заменяет \(t_{2i-1}\) на непустую строку, \(t_{2i}\). Обратите внимание, что длины строк \(t_{2i-1}\) и \(t_{2i}\) могут различаться.

Обратите внимание, что если \(t_{2i-1}\) встречается более одного раза в \(s\), ровно одно из них будет заменено.

Например, пусть \(s=\)«marisa», \(t_{2i-1}=\)«a» и \(t_{2i}=\)«z». После операции \(s\) становится «mzrisa» или «marisz».

После \(n\) операций Keine получил окончательную строку и последовательность операций \(t\) длины \(2n\). Keine думал, что уже решил задачу, но появился Yukari и перемешал порядок \(t\). Что еще хуже, Keine забыл изначальную историю.

Помогите Keine найти изначальную историю Gensokyo!

Напомним, что подстрока — это последовательность последовательных символов строки. Например, для строки «abc» ее подстроки: «ab», «c», «bc» и некоторые другие . Но следующие строки не являются его подстрокой: «ac», «cba», «acb».

Взломы

Вы не можете делать взломы в этой задаче.

Входные данные

Первая строка содержит единственное целое число \(T\) (\(1 \leq T \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n < 10 ^ 5\)) — количество операций.

Следующие \(2n\) строк содержат одну непустую строку \(t_{i}\)\(i\)-ю строку перетасованной последовательности \(t\).

Следующая строка содержит одну непустую строку \(s\) — итоговую строку.

Гарантируется, что суммарная длина заданных строк (включая \(t_i\) и \(s\)) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\). Все заданные строки состоят только из строчных латинских букв.

Гарантируется, что исходная строка существует. Можно показать, что исходная строка уникальна.

Выходные данные

Для каждого теста выведите исходную строку в одной строке.

Примечание

В первом наборе входных данных изначально \(s\) равно «a».

  • В первой операции Keine выбирает «a» и заменяет его на «ab». \(s\) становится «ab».
  • Во второй операции Keine выбирает «b» и заменяет его на «cd». \(s\) становится «acd».

Таким образом, последняя строка будет «acd», а \(t=[\)«a», «ab», «b» , «cd»\(]\) перед перемешиванием.

Во втором наборе входных данных изначально \(s\) равно «z».

  • В первой операции Keine выбирает «z» и заменяет его на «aa». \(s\) становится «aa».
  • Во второй операции Keine выбирает «a» и заменяет его на «ran». \(s\) становится «aran».
  • В третьей операции Keine выбирает «a» и заменяет его на «yakumo». \(s\) становится «yakumoran».

Таким образом, последняя строка будет «yakumoran», а \(t=[\)«z», «aa», «a» , «ran», «a», «yakumo»\(]\) перед перемешиванием.

A. Минимизируй строку

жадные алгоритмы Перебор реализация сортировки *800

Кузнецов любит искусство, поэзию и музыку. И строки, состоящие из строчных латинских букв.

Недавно Кузнецов нашел две строки \(a\) и \(b\) длины \(n\) и \(m\) соответственно. Они состоят из строчных английских букв и ни один символ не содержится одновременно в обеих строках.

Пусть еще одна строка \(c\) изначально пуста. Кузнецов может делать следующие два типа операций:

  • Выбрать любой символ из строки \(a\), удалить его из строки \(a\) и добавить в конец строки \(c\).
  • Выбрать любой символ из строки \(b\), удалить его из строки \(b\) и добавить в конец строки \(c\).

Однако Кузнецов не может сделать более \(k\) операций одного типа подряд. Кузнецов должен выполнять операции до того момента, как строка \(a\) либо строка \(b\) станет пустой. Какое лексикографически наименьшее значение \(c\) возможное после того, как Кузнецов закончит выполнение операций?

Строка \(x\) лексикографически меньше строки \(y\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(x\) является префиксом \(y\), но \(x \neq y\);
  • в первой позиции, где \(x\) и \(y\) различаются, в строке \(x\) находится буква, которая стоит в алфавите раньше, чем соответствующая буква в \(y\).
Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\))  — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано три целых числа \(n\), \(m\) и \(k\) (\(1\leq n,m,k \leq 100\)) — параметры из условия.

Во второй строке каждого набора задана строка \(a\) длины \(n\).

Во третьей строке каждого набора задана строка \(b\) длины \(m\).

Строки состоят из строчных букв латинского алфавита. Гарантируется, что ни одна буква не встречается одновременно в строках \(a\) и \(b\).

Выходные данные

Для каждого набора входных данных выведите одну строку \(c\) — ответ на задачу.

Примечание

В первом наборе входных данных оптимально взять две буквы «a» из строки \(a\) и добавить их к строке \(c\). Теперь запрещается выполнять операцию со строкой \(a\), следовательно, необходимо взять один символ «b» из строки \(b\). Следуя этой логике, мы получаем, что \(c\) становится «aabaabaa» в момент, когда строка \(a\) становится пуста.

Во втором наборе входных данных оптимально взять как можно больше «a» из строки \(a\), а затем взять как можно больше «b» из строки \(b\). В конце мы берем два символа «c» из строки \(a\), делая ее пустой.

B. Странная перестановка

жадные алгоритмы Структуры данных *900

Монокарп — маленький мальчик, который живет в Байтландии и любит программировать.

Недавно он нашел перестановку длины \(n\). Он должен придумать странную перестановку. Это должна быть новая перестановка, отличающаяся от старой в каждой позиции.

Более формально, если старая перестановка равна \(p_1,p_2,\ldots,p_n\), а новая — \(q_1,q_2,\ldots,q_n\), то должно выполняться \(\)p_1\neq q_1, p_2\neq q_2, \ldots ,p_n\neq q_n.\(\)

Монокарп боится лексикографически больших перестановок. Не могли бы вы помочь ему найти лексикографически минимальную странную перестановку?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 200\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1\leq n\leq 1000\)) — длина перестановки.

Во второй строке каждого набора задано \(n\) различных положительных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)). Гарантируется, что \(p\) является перестановкой, т. е. \(p_i \neq p_j\) для всех \(i \neq j\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых положительных чисел — лексикографически минимальную странную перестановку. Если такой перестановки не существует, выведите вместо нее \(-1\).

Примечание

В первом наборе входных данных всевозможными странными перестановками являются \([2,3,1]\) и \([3,1,2]\). Лексикографически меньшая из них равна \([2,3,1]\).

Во втором наборе входных данных \([1,2,3,4,5]\)  — это лексикографически минимально возможная перестановка, и она является странной.

В третьем наборе входных данных возможные странные перестановки: \([1,2,4,3]\), \([1,4,2,3]\), \([1,4,3,2]\), \([3,1,4,2]\), \([3,2,4,1]\), \([3,4,2,1]\), \([4,1,2,3]\), \([4,1,3,2]\) и \([4,3,2,1]\). Минимальная из них  — \([1,2,4,3]\).

B. Замены цифр

жадные алгоритмы *1100

Задано целое число a, состоящее из n цифр. Также задана последовательность цифр s длины m. Цифра в позиции j (1 ≤ j ≤ m) последовательности s обозначает, что можно выбрать произвольную позицию i (1 ≤ i ≤ n) и заменить цифру в числе a в этой позиции на sj. Каждый элемент в последовательности s может участвовать не более чем в одной операции замены.

Ваша задача произвести такую последовательность замен, чтобы заданное число a стало как можно больше. Разрешено использовать не все элементы из s.

Входные данные

В первой строке содержится целое положительное число a. Его длина n положительна и не превосходит 105. Вторая строка содержит последовательность цифр s. Ее длина m положительна и не превосходит 105. Цифры в последовательности записаны одна за другой без каких-либо разделителей.

Заданное число a не содержит лидирующих нулей.

Выходные данные

Выведите максимальное значение, которое можно получить из a после серии замен. Разрешено использовать не все элементы из s. Выведенное число не должно содержать лидирующих нулей.

A. Выведите пьедестал (логотип Codeforces?)

жадные алгоритмы Конструктив *800

Дано число \(n\) — количество доступных блоков. Необходимо использовать все блоки, чтобы построить пьедестал.

Пьедестал состоит из \(3\)-х платформ для \(2\)-го, \(1\)-го и \(3\)-го мест соответственно. При этом платформа для \(1\)-го места должна быть строго выше, чем для \(2\)-го места, а платформа для \(2\)-го места должна быть строго выше, чем для \(3\)-го. А также, высота каждой платформы должна быть больше нуля (то есть каждая платформа должна содержать хотя бы один блок).

Пример пьедестала из \(n=11\) блоков: высота второго места равна \(4\) блокам, высота первого места равна \(5\) блокам, высота третьего места равна \(2\) блокам.

Среди всех возможных пьедесталов из \(n\) блоков выведите такой, что высота платформы для \(1\)-го места минимальна. Если таких несколько, выведите любой из них.

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В каждом наборе входных данных содержится единственное целое число \(n\) (\(6 \le n \le 10^5\)) — суммарное количество блоков для пьедестала. Необходимо использовать все \(n\) блоков.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(3\) числа \(h_2, h_1, h_3\) — высоты платформ для \(2\)-го, \(1\)-го и \(3\)-го мест на пьедестале, состоящем из \(n\) блоков (\(h_1+h_2+h_3=n\), \(0 < h_3 < h_2 < h_1\)).

Среди всех возможных пьедесталов выведите тот, для которого значение \(h_1\) минимально. Если таких несколько, выведите любой из них.

Примечание

В первом наборе входных данных мы не можем получить высоту платформы для первого места меньше \(5\), так как если высота платформы для первого места не больше \(4\), то мы можем использовать максимум \(4 + 3 + 2 = 9\) блоков. А должны использовать \(11 = 4 + 5 + 2\) блоков. Поэтому ответ 4 5 2 подходит.

Во втором наборе единственный подходящий ответ: 2 3 1.

B. Декременты массива

жадные алгоритмы реализация *800

У Кристины есть два массива \(a\) и \(b\), содержащие по \(n\) неотрицательных целых чисел. Она может произвольное количество раз совершить над массивом \(a\) следующую операцию:

  • Вычесть единицу из каждого ненулевого элемента массива, то есть заменить значение каждого элемента \(a_i\) такого, что \(a_i > 0\), на значение \(a_i - 1\) (\(1 \le i \le n\)). Если \(a_i\) был равен \(0\), то его значение не изменяется.

Определите, может ли Кристина за некоторое число операций (возможно, нулевое) получить массив \(b\) из массива \(a\)? Другими словами, можно ли сделать так, чтобы после некоторого числа операций для каждого \(1 \le i \le n\) было выполнено \(a_i = b_i\)?

Например, пусть \(n = 4\), \(a = [3, 5, 4, 1]\) и \(b = [1, 3, 2, 0]\). В этом случае можно применить операцию два раза:

  • после первого применения операции получим \(a = [2, 4, 3, 0]\);
  • после второго применения операции получим \(a = [1, 3, 2, 0]\).

Таким образом, за две операции можно получить массив \(b\) из массива \(a\).

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 5 \cdot 10^4\)).

Во второй строке каждого набора входных данных записано ровно \(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\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных в тесте не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если при помощи совершения некоторого числа операций можно получить массив \(b\) из массива \(a\);
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных достаточно один раз применить операцию к массиву \(a\).

В третьем наборе входных данных получить массив \(b\) из массива \(a\) невозможно.

C. Восстановление длительности выполнения заданий

жадные алгоритмы реализация Структуры данных *800

Недавно Поликарп выполнил \(n\) последовательно пришедших заданий.

Для каждого выполненного задания известно время \(s_i\), когда оно было дано, никакие два задания не были даны в одно и то же время. Также дано время \(f_i\), когда задание было выполнено. Для каждого задания есть неизвестная величина \(d_i\) (\(d_i>0\)) — длительность выполнения задания.

Известно, что задания были выполнены в том порядке, в котором пришли. Поликарп выполнял задания следующим образом:

  • Как только пришло самое первое задание, Поликарп сразу начал его выполнять.
  • Если приходило новое задание, пока Поликарп еще не закончил выполнять предыдущее, он ставил новое задание в конец очереди.
  • Когда Поликарп заканчивал выполнять очередное задание и очередь была не пуста, он сразу брал из головы очереди новое задание (если очередь пуста — он просто ожидал следующего задания).

Найдите \(d_i\) (длительность выполнения) каждого задания.

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел \(s_1 < s_2 < \dots < s_n\) (\(0 \le s_i \le 10^9\)).

В третьей строке каждого набора входных данных записано ровно \(n\) целых чисел \(f_1 < f_2 < \dots < f_n\) (\(s_i < f_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных выведите \(n\) положительных целых чисел \(d_1, d_2, \dots, d_n\) — длительности выполнения каждого задания.

Примечание

Первый набор входных данных:

В начале очередь пуста: \([ ]\). И туда сразу приходит первое задание. В момент времени \(2\) Поликарп заканчивает делать первое задание, соответственно, длительность выполнения первого задания — \(2\). Очередь пуста, поэтому Поликарп просто ждёт.

В момент времени \(3\) приходит второе задание. А в момент времени \(7\) приходит третье задание, и теперь очередь выглядит так: \([7]\).

В момент времени \(10\) Поликарп заканчивает делать второе задание, в итоге длительность выполнения второго задания — \(7\).

И в момент времени \(10\) Поликарп сразу начинает делать третье задание и заканчивает в момент времени \(11\). В итоге длительность выполнения третьего задания — \(1\).

Пример первого набора входных данных.

E. Максимизация цен

Бинарный поиск жадные алгоритмы математика *1500

В магазин привезли партию из \(n\) товаров (\(n\) — чётное число), \(i\)-й из которых имеет вес \(a_i\). Перед продажей товары нужно расфасовать по упаковкам. После фасовки будет выполнено следующее:

  • всего получится \(\frac{n}{2}\) упаковок, в каждой упаковке лежит ровно два товара;
  • вес упаковки, в которой лежат товары с индексами \(i\) и \(j\) (\(1 \le i, j \le n\)) будет равен \(a_i + a_j\).

При этом стоимость упаковки веса \(x\) всегда равна \(\left \lfloor\frac{x}{k}\right\rfloor\) бурлей (округление вниз), где \(k\) — фиксированная и заданная величина.

Распределите товары по упаковкам так, чтобы выручка с их продажи была максимальна. Другими словами, составьте такие \(\frac{n}{2}\) пар из заданных товаров, чтобы сумма величин \(\left \lfloor\frac{x_i}{k} \right \rfloor\), где \(x_i\) — вес упаковки с номером \(i\) (\(1 \le i \le \frac{n}{2}\)), была максимальна.

Например, пусть \(n = 6, k = 3\), веса товаров \(a = [3, 2, 7, 1, 4, 8]\). Объединим их в следующие упаковки.

  • В первую упаковку положим третий и шестой товар. Её вес будет равен \(a_3 + a_6 = 7 + 8 = 15\). Стоимость упаковки составит \(\left \lfloor\frac{15}{3}\right\rfloor = 5\) бурлей.
  • Во вторую упаковку положим первый и пятый товар, вес составит \(a_1 + a_5 = 3 + 4 = 7\). Стоимость упаковки составит \(\left \lfloor\frac{7}{3}\right\rfloor = 2\) бурля.
  • В третью упаковку положим второй и четвертый товар, вес составит \(a_2 + a_4 = 2 + 1 = 3\). Стоимость упаковки составит \(\left \lfloor\frac{3}{3}\right\rfloor = 1\) бурль.

При таком распределении итоговая стоимость всех упаковок составит \(5 + 2 + 1 = 8\) бурлей.

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) (\(2 \le n \le 2\cdot10^5\)) и \(k\) (\(1 \le k \le 1000\)). Число \(n\) — чётное.

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите единственное число — максимально возможную суммарную стоимость всех упаковок.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данный можно получить суммарную стоимость, равную \(4\), если в первую упаковку положить первый и второй товар, а во вторую — третий и четвертый.

В третьем наборе входных данных стоимость каждого товара равна \(0\), поэтому суммарная стоимость будет также равна \(0\).

G. Посчитай поезда

Бинарный поиск жадные алгоритмы сортировки Структуры данных *2000

На рельсах стоит \(n\) автономных вагончиков. Вагончики пронумерованы слева направо от \(1\) до \(n\). Вагончики между собой не сцеплены. При этом вагончики движутся влево, так что вагончик с номером \(1\) движется впереди всех.

У \(i\)-го вагончика есть свой двигатель, который может разогнать вагончик до \(a_i\) км/ч, но при этом, вагончик не может ехать быстрее, чем вагончик перед ним. Для пояснения смотрите пример.

Все вагончики одновременно начинают двигаться влево, при этом, естественно образуются поезда. Будем называть поездом — подряд движущиеся вагончики, имеющие одинаковую скорость.

Например, у нас есть \(n=5\) вагончиков и массив \(a = [10, 13, 5, 2, 6]\). Тогда итоговые скорости вагончиков будут равны: \([10, 10, 5, 2, 2]\). Соответственно, будет образовано \(3\) поезда.

Также приходят сообщения о том, что какой-то двигатель был испорчен:

  • cообщение «k d» означает, что скорость \(k\)-го вагончика уменьшилась на \(d\) (то есть произошло изменение максимальной скорости вагончика \(a_k = a_k - d\)).

Сообщения приходят последовательно, при обработке очередного сообщения учитываются изменения от всех предыдущих сообщений.

После каждого сообщения определите количество образовавшихся поездов.

Входные данные

В первой строке входных данных записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Первая строка каждого набора пустая.

Во второй строке набора входных данных заданы два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)) — количество вагончиков и количество сообщений по замедлению вагончика, соответственно.

В третьей строке даны \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — число \(a_i\) означает, что вагончик с номером \(i\) может развивать скорость до \(a_i\) км/ч.

В следующих \(m\) строках содержится два целых числа \(k_j\) и \(d_j\) (\(1 \le k_j \le n\), \(0 \le d_j \le a_{k_j}\)) — это сообщение о том, что скорость вагончика с номером \(k_j\) уменьшилась на \(d_j\). Другими словами, произошло изменение его максимальной скорости \(a_{k_j} = a_{k_j} - d_j\). Обратите внимание, что в любой момент времени скорость каждого вагончика неотрицательна. Иными словами, \(a_i \ge s_i\), где \(s_i\) — это сумма таких \(d_j\), что \(k_j=i\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(10^5\). Аналогично гарантируется, что сумма значений \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Выведите \(t\) строк. В каждой строке выведите ответ для соответствующего набора входных данных.

Для каждого набора входных данных выведите \(m\) чисел: количество образовавшихся поездов после каждого сообщения.

Примечание

Для первого набора входных данных:

  • Изначально массив \(a = [6, 2, 3, 7]\).
  • После первого сообщения массив \(a = [6, 2, 1, 7]\). Соответственно скорости вагончиков равны: \([6, 2, 1, 1]\) и будет образовано \(3\) поезда.
  • После второго сообщения массив \(a = [6, 2, 1, 0]\). Соответственно скорости вагончиков равны: \([6, 2, 1, 0]\) и будет образовано \(4\) поезда.

Для второго набора входных данных:

  • Изначально массив \(a = [10, 13, 5, 2, 6]\).
  • После первого сообщения массив \(a = [10, 9, 5, 2, 6]\). Соответственно скорости вагончиков равны: \([10, 9, 5, 2, 2]\) и будет образовано \(4\) поезда.
  • После второго сообщения массив \(a = [10, 9, 5, 2, 4]\). Соответственно скорости вагончиков равны: \([10, 9, 5, 2, 2]\) и будет образовано \(4\) поезда.
  • После третьего сообщения массив \(a = [5, 9, 5, 2, 4]\). Соответственно скорости вагончиков равны: \([5, 5, 5, 2, 2]\) и будет образовано \(2\) поезда.
  • После четвёртого сообщения массив \(a = [5, 9, 3, 2, 4]\). Соответственно скорости вагончиков равны: \([5, 5, 3, 2, 2]\) и будет образовано \(3\) поезда.

A. Нет нечетности!

жадные алгоритмы математика Перебор *800

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Найдите минимальное количество элементов, которое нужно удалить из последовательности, чтобы после удаления сумма любых \(2\) соседних элементов была четна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2,\dots,a_n\) (\(1\leq a_i\leq10^9\)) — элементы последовательности.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которое нужно удалить из последовательности, чтобы сумма никаких \(2\) последовательных элементов не была четна.

Примечание

В первом примере после удаления \(3\) последовательность становится равна \([2,4,6,8]\). Пары соседних элементов в этой последовательности — \(\{[2, 4], [4, 6], [6, 8]\}\). Теперь каждая пара соседних элементов дает четную сумму. Поэтому достаточно удалить \(1\) элемент, чтобы удовлетворить условию.

B. Обмен обувью

жадные алгоритмы Конструктив реализация *1000

Группе студентов наскучило носить одну и ту же обувь каждый день, поэтому они решили обменяться обувью. В этой задаче пара обуви неразделима и понимается как один объект.

В группе \(n\) студентов, и вам дан массив \(s\) в неубывающем порядке, где \(s_i\) — размер обуви \(i\)-го студента. Обмен обувью называется корректным, если никто не получит свою обувь, и каждый студент получит обувь не меньшего размера, чем его собственная.

Вам нужно вывести перестановку \(p\) целых чисел \(\{1,2,\ldots,n\}\), описывающую корректный обмен обувью: \(i\)-й студент получит обувь \(p_i\)-го студента (\(p_i \ne i\)). Если решения не существует, выведите \(-1\).

Перестановкой называется массив, состоящий из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, а \([1,2,2]\) — не перестановка (\(2\) встречается дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1\leq n\leq10^5\)) — количество студентов.

Вторая строка содержит \(n\) целых чисел \(s_1, s_2,\ldots,s_n\) (\(1\leq s_i\leq10^9\); для всех \(1\le i<n\) выполняется \(s_i\le s_{i+1}\)) — размеры обуви.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате.

Если корректного обмена не существует, выведите \(-1\).

Если корректный ответ существует, выведите \(n\) целых чисел: перестановку \(p\) чисел \(1,2,\ldots,n\), описывающую корректный обмен обувью, где \(i\)-й студент получит обувь \(p_i\)-го студента. Если существуют несколько решений, выведите любое.

Примечание

В первом примере любая перестановка \(p\) чисел \(1,\ldots,n\), где \(p_i\ne i\), описывает корректный обмен, так как у всех одинаковый размер обуви, и все могут носить обувь любого.

Во втором примере можно показать, что нет корректного обмена обувью.

C. Сумма подстрок

жадные алгоритмы Конструктив математика Перебор Строки *1400

Вам дана бинарная строка \(s\) длины \(n\).

Пусть \(d_i\) — число, в десятичной системе счисления записываемое как \(s_i s_{i+1}\) (возможно, с ведущим нулем). Определим \(f(s)\) как сумму всех корректных значений \(d_i\). Иными словами, \(f(s) = \sum\limits_{i=1}^{n-1} d_i\).

Например, для строки \(s = 1011\):

  • \(d_1 = 10\) (десять);
  • \(d_2 = 01\) (один);
  • \(d_3 = 11\) (одиннадцать);
  • \(f(s) = 10 + 01 + 11 = 22\).

За одну операцию вы можете поменять местами любые два соседних символа строки. Найдите минимально возможное значение \(f(s)\), которое может быть получено после не более чем \(k\) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(0 \le k \le 10^9\)) — длину строки и максимальное допустимое число операций.

Вторая строка содержит бинарную строку \(s\) длины \(n\), состоящую только из нулей и единиц.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможное значение \(f(s)\) после не более чем \(k\) операций.

Примечание
  • В первом примере делать операции нельзя, поэтому оптимальный ответ — сама строка \(s\). \(f(s) = f(1010) = 10 + 01 + 10 = 21\).
  • Во втором примере одно из оптимальных решений — строка «0011000». Для данной строки значение \(f\) равно \(22\).
  • В третьем примере одно из оптимальных решений — строка «00011». Для данной строки значение \(f\) равно \(12\).

E. Число групп отрезков

графы жадные алгоритмы поиск в глубину и подобное снм сортировки Структуры данных *2300

Вам дано \(n\) цветных отрезков на числовой оси. Каждый отрезок либо красный, либо синий. Отрезок \(i\) описывается тройкой чисел \((c_i, l_i, r_i)\). Отрезок содержит все точки на отрезке \([l_i, r_i]\), включая концы, а его цвет описывается значением \(c_i\):

  • если \(c_i = 0\), то это красный отрезок;
  • если \(c_i = 1\), то это синий отрезок.

Скажем, что два отрезка различных цветов соединены, если они имеют хотя бы одну общую точку. Два отрезка принадлежат одной группе отрезков, если они соединены непосредственно или через цепочку соединенных непосредственно отрезок. Найдите число различных групп отрезков.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество отрезков.

Каждая из следующих \(n\) строк содержит три целых числа \(c_i, l_i, r_i\) (\(0 \leq c_i \leq 1, 0 \leq l_i \leq r_i \leq 10^9\)), описывающие \(i\)-й отрезок.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — количество групп отрезков.

Примечание

В первом примере \(5\) отрезков. Отрезки \(1\) и \(2\) соединены, так как они различных цветов и имеют общую точку. Также отрезки \(2\) и \(3\) соединены, и отрезки \(4\) и \(5\) соединены. Таким образом, есть две группы: одна содержит отрезки \(\{1, 2, 3\}\), другая содержит отрезки \(\{4, 5\}\).

B. Все различные

жадные алгоритмы сортировки *800

У Sho есть массив \(a\) состоящий из \(n\) целых чисел. За одну операцию Sho может выбрать два различных индекса \(i\) и \(j\), после чего удалить из массива элементы \(a_i\) и \(a_j\).

Например, для массива \([2, 3, 4, 2, 5]\) Sho может выбрать индексы \(1\) и \(3\) и удалить соответствующие элементы из массива. После этой операции массив будет выглядеть так: \([3, 2, 5]\). Заметьте, что после любой операции длина массива уменьшится на два.

После нескольких операций у Sho остался массив, содержащий только различные числа. Также, он применил операции таким образом, что длина оставшегося массива максимальна из всех возможных.

Более формально, после всех операций массив Sho удовлетворяет двум следующим критериям:

  • В массиве не существует таких пар индексов, что \(i < j\) и \(a_i = a_j\).
  • Длина массива \(a\) максимальна.
Выведите длину оставшегося у Sho массива.
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого набора данных содержит единственное число \(n\) (\(1 \leq n \leq 50\)) — длину начального массива.

Вторая строка каждого набора данных содержит \(n\) целых чисел \(a_i\) (\(1 \leq a_i \leq 10^4\)) — элементы начального массива.

Выходные данные

Для каждого набора данных выведите единственное число — длину оставшегося массива. Помните, что в оставшемся массиве все элементы различны, а его длина максимальна.

Примечание

В первом наборе данных Sho может сделать следующие операции:

  1. Выбрать индексы \(1\) и \(5\). Тогда массив станет \([2, 2, 2, 3, 3, 3] \rightarrow [2, 2, 3, 3]\).
  2. Выбрать индексы \(1\) и \(4\). Тогда массив станет \([2, 2, 3, 3] \rightarrow [2, 3]\).
Финальный массив имеет длину \(2\), так что ответом является \(2\). Можно доказать, что Sho не может получить массив большей длины.

Во втором наборе данных Sho может сделать следующие операции:

  1. Выбрать индексы \(3\) и \(4\). Тогда массив станет \([9, 1, 9, 9, 1] \rightarrow [9, 1, 1]\).
  2. Выбрать индексы \(1\) и \(3\). Тогда массив станет \([9, 1, 1] \rightarrow [1]\).
Финальный массив имеет длину \(1\), так что ответом является \(1\). Можно доказать, что Sho не может получить массив большей длины.

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\) будет приемлемым.

A. Ориентированное увеличение

жадные алгоритмы *1300

У нас есть массив длиной \(n\). Изначально каждый элемент равен \(0\), а на первом элементе находится указатель.

Мы можем выполнять следующие два вида операций любое количество раз (возможно, нулевое) в любом порядке:

  1. Если указатель находится не на последнем элементе, увеличьте элемент, на котором находится указатель, на \(1\). Затем переместите его на следующий элемент.
  2. Если указатель не находится на первом элементе, уменьшите элемент, на котором находится указатель, на \(1\). Затем переместите его на предыдущий элемент.

Но есть одно дополнительное правило. После того, как мы закончим, указатель должен находиться на первом элементе.

Вам дан массив \(a\). Определите, можно ли получить \(a\) после некоторых операций или нет.

Входные данные

Первая строка содержит одно целое число \(t\) \((1\le t\le 1000)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если после некоторых операций можно получить \(a\), и «No» (без кавычек) в противном случае.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yEs», «yes», «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем получить массив после некоторых операций, но указатель не будет находиться на первом элементе.

Один из способов получения массива во втором наборе входных данных показан ниже.

\(\langle \underline{0}, 0, 0, 0\rangle \to \langle 1, \underline{0}, 0, 0 \rangle \to \langle \underline{1}, -1, 0, 0\rangle \to \langle 2, \underline{-1}, 0, 0\rangle \to \langle 2, 0, \underline{0}, 0\rangle \to \langle 2, \underline{0}, -1, 0\rangle \to \langle \underline{2}, -1, -1, 0\rangle\)

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\).

C. Keshi ищет AmShZ

графы жадные алгоритмы кратчайшие пути *2300

AmShZ приехал в Италию из Ирана на концерт Тома Йорка. В Италии есть \(n\) городов с номерами от \(1\) до \(n\) и \(m\) ориентированных дорог с номерами от \(1\) до \(m\). Изначально Keshi находится в городе \(1\) и хочет добраться к дому AmShZ в городе \(n\). Поскольку Keshi не знает карту Италии, AmShZ помогает ему встретиться как можно скорее.

В начале каждого дня AmShZ может отправить Keshi одно из следующих двух сообщений:

  • AmShZ отправляет Keshi номер одной дороги, обозначая её как блокированную дорогу. Тогда Keshi поймет, что он никогда не должен пользоваться этой дорогой и останется в своем текущем городе на весь день.
  • AmShZ говорит Keshi двигаться. Затем Keshi случайным образом выберет один из городов, до которых можно добраться из его текущего города, и переедет туда. (Город \(B\) достижим из города \(A\), если есть исходящая дорога из города \(A\) в город \(B\), которая еще не заблокирована). Если таких городов нет, Keshi останется в своем текущем городе.

    Заметим, что AmShZ всегда знает текущее местоположение Keshi.

AmShZ и Keshi хотят найти наименьшее возможное целое число \(d\), при котором они могут быть уверены, что увидят друг друга через не более чем \(d\) дней. Помогите им найти \(d\).

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) \((2 \le n \le 2 \cdot 10^5, 1 \le m \le 2 \cdot 10^5)\)  — количество городов и дорог соответственно.

В \(i\)-й строке из следующих \(m\) строк содержится два целых числа \(v_i\) и \(u_i\) \((1 \le v_i , u_i \le n,v_i \neq u_i)\), обозначающих ориентированную дорогу, идущую из города \(v_i\) в город \(u_i\).

Гарантируется, что существует хотя бы один маршрут из города \(1\) в город \(n\). Обратите внимание, что между парой городов может быть более одной дороги в каждом направлении.

Выходные данные

Выведите наименьшее возможное целое число \(d\), при котором они могут быть уверены, что увидят друг друга через не более чем \(d\) дней.

Примечание

В первом примере достаточно, чтобы AmShZ отправил сообщение второго типа.

Во втором примере, в первый день, AmShZ блокирует первую дорогу. Поэтому единственным городом, до которого можно добраться из города \(1\), будет город \(4\). Следовательно, на второй день AmShZ может сказать Keshi двигаться, и Keshi прибудет в дом AmShZ.

AmShZ также может сказать Keshi двигаться в течение двух дней.

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.

E. Крайние максимумы

жадные алгоритмы Структуры данных *3400

У Yeri есть массив из \(n + 2\) неотрицательных целых чисел: \(a_0, a_1, ..., a_n, a_{n + 1}\).

Мы знаем, что \(a_0 = a_{n + 1} = 0\).

Она хочет сделать все элементы \(a\) равными нулю за минимальное количество операций.

За одну операцию она может сделать одно из следующих действий:

  • Выбрать самый левый максимальный элемент и изменить его на максимальный из элементов слева от него.
  • Выбрать самый правый максимальный элемент и изменить его на максимальный из элементов справа от него.

Помогите ей найти минимальное количество операций, необходимых для того, чтобы все элементы \(a\) стали равны нулю.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Выходные данные

Выведите одно целое число  — минимальное количество операций, необходимых для того, чтобы все элементы \(a\) стали равны нулю.

Примечание

В первом примере вы получите \(\langle 1, \underline{1}, 2, 4, 0, 2 \rangle\) при выполнении первой операции и \(\langle 1, 4, 2, \underline{2}, 0, 2 \rangle\) при выполнении второй операции.

Один из способов достижения нашей цели показан ниже. (Подчеркивания показывают последнее изменение). \(\langle 1, 4, 2, 4, 0, 2 \rangle \to \langle 1, 4, 2, \underline{2}, 0, 2 \rangle \to \langle 1, \underline{1}, 2, 2, 0, 2 \rangle \to \langle 1, 1, 2, 2, 0, \underline{0} \rangle \to \langle 1, 1, 2, \underline{0}, 0, 0 \rangle \to \langle 1, 1, \underline{0}, 0, 0, 0 \rangle \to \langle \underline{0}, 1, 0, 0, 0, 0 \rangle \to \langle 0, \underline{0}, 0, 0, 0, 0 \rangle \)

В третьем примере каждый элемент уже равен нулю, поэтому никаких операций не требуется.

F. Я могу ошибаться

Бинарный поиск жадные алгоритмы *3400

Вам дана бинарная строка \(S\) длины \(n\), индексированная от \(1\) до \(n\). Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)). Пусть \(cnt_0\) это количество вхождений 0 в \(S[l \ldots r]\), а \(cnt_1\) это количество вхождений 1 в \(S[l \ldots r]\). Вы можете заплатить \(|cnt_0 - cnt_1| + 1\) монет и отсортировать \(S[l \ldots r]\). (Как \(S[l \ldots r]\) мы обозначаем подстроку \(S\), начинающуюся в позиции \(l\) и заканчивающуюся в позиции \(r\)).

    Например, если \(S = \) 11001, мы можем выполнить операцию над \(S[2 \ldots 4]\) за \(|2 - 1| + 1 = 2\) монеты и получить \(S = \) 10011 в качестве новой строки.

Найдите минимальное общее количество монет, необходимое для сортировки \(S\) в возрастающем порядке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данныхв.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер \(S\).

Вторая строка каждого набора входных данных содержит бинарную строку \(S\) из \(n\) символов \(S_1S_2 \ldots S_n\). (\(S_i = \) 0 или \(S_i = \) 1 для каждого \(1 \le i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное общее количество монет, необходимое для сортировки \(S\) в возрастающем порядке.

Примечание

В первом наборе входных данных \(S\) уже отсортирована.

Во втором наборе входных данных достаточно применить операцию с \(l = 1, r = 2\).

В третьем наборе входных данных достаточно применить операцию с \(l = 1, r = 2\).

A. Жуть

жадные алгоритмы реализация *800

Определим дисбаланс бинарной строки \(T\) как абсолютную разницу между количеством нулей и единиц в ней. (например, \(T=\) 010001 содержит \(4\) нулей и \(2\) единиц, поэтому дисбаланс \(T\) равен \(|4-2| = 2\)).

Определим жуткость некоторой бинарной строки \(S\) как максимальный дисбаланс среди всех ее префиксов (например, жуткость \(S=\) 01001 равна \(2\), потому что дисбаланс префикса \(S[1 \ldots 4]\) равен \(2\), а остальные префиксы имеют дисбаланс меньше или равный \(2\)).

Для данных двух целых чисел \(a\) и \(b\), постройте бинарную строку, состоящую из \(a\) нулей и \(b\) единиц, с минимально возможной жуткостью.

Входные данные

Первая строка содержит одно целое число \(t\) \((1\le t\le 1000)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\( 1 \le a, b \le 100\))  — количество нулей и единиц соответственно.

Выходные данные

Для каждого набора входных данных выведите бинарную строку, состоящую из \(a\) нулей и \(b\) единиц с минимально возможной жуткостью. Если ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных дисбаланс \(S[1 \ldots 1]\) равен \(1\), а дисбаланс \(S[1 \ldots 2]\) равен \(0\).

Во втором наборе входных данных минимально возможная жуткость равна \(1\), а один из других ответов 101.

В третьем наборе входных данных минимально возможная жуткость составляет \(3\), а один из других ответов 0001100.

B. Параноидальная строка

жадные алгоритмы Конструктив *1200

Назовем бинарную строку \(T\) длины \(m\), индексированную от \(1\) до \(m\) параноидальной, если мы можем получить строку длины \(1\), выполнив следующие два вида операций \(m-1\) раз в любом порядке:

  • Выберите любую подстроку \(T\), которая равна 01, и замените ее на 1.
  • Выберите любую подстроку \(T\), которая равна 10, а затем замените ее на 0.

    Например, если \(T = \) 001, мы можем выбрать подстроку \([T_2T_3]\) и выполнить первую операцию. Таким образом, мы получим \(T = \) 01 в качестве новой строки.

Вам дана бинарная строка \(S\) длины \(n\), индексированная от \(1\) до \(n\). Найдите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(S[l \ldots r]\) (подстрока \(S\) от \(l\) до \(r\)) является параноидальной строкой.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(S\).

Вторая строка каждого набора входных данных содержит бинарную строку \(S\) из \(n\) символов \(S_1S_2 \ldots S_n\). (\(S_i = \) 0 или \(S_i = \) 1 для каждого \(1 \le i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(S[l \ldots r]\) (подстрока \(S\) от \(l\) до \(r\)) является параноидальной строкой.

Примечание

В первом примере \(S\) уже имеет длину \(1\) и нет нужды ни в каких операциях.

Во втором примере все подстроки \(S\) являются параноидальными. Для всей строки достаточно выполнить первую операцию.

В третьем примере все подстроки \(S\) являются параноидальными, кроме \([S_2S_3]\), потому что мы не можем выполнить над ней никаких операций, и \([S_1S_2S_3]\) (всей строки).

B. Игра по кругу

жадные алгоритмы игры *1000

Майк и Джо играют в игру с камнями. У них есть \(n\) кучек камней размерами \(a_1, a_2, \ldots, a_n\). Эти кучки расположены по кругу.

Игра проходит следующим образом. Игроки по очереди удаляют некоторое положительное число камней из кучек по часовой стрелке, начиная с кучки \(1\). Формально, если игрок в свой ход убрал камни из кучки \(i\), то другой игрок в следующий ход убирает камни из кучки \(((i\bmod n) + 1)\).

Если игрок не может убрать ни одного камня в свой ход (потому что кучка пуста), он проигрывает. Майк ходит первым.

Если Майк и Джо играют оптимально, кто выиграет?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\))  — количество кучек.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\))  — размеры кучек.

Выходные данные

Для каждого набора входных данных выведите победителя игры, либо «Mike», либо «Joe», в отдельной строке (без кавычек).

Примечание

В первом наборе входных данных Майк просто берет все \(37\) камней на своем первом ходу.

Во втором наборе входных данных Джо может просто копировать ходы Майка каждый раз. Поскольку Майк ходил первым, он возьмет \(0\) с первой кучки за один ход до того, как это сделает Джо с второй кучки.

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\).

A. НИТ делает orz

битмаски жадные алгоритмы *800

Чтобы развлечь своих поклонников, гражданин НИТ решил дать им задачу, связанную с \(\operatorname{or} z\). А вы сможете её решить?

Дан массив \(a\) в 1-индексации, состоящий из \(n\) целых чисел, а также целое число \(z\). Вы можете проделать следующую операцию любое количество (возможно, ноль) раз:

  • Выбрать целое \(i\), такое что \(1\le i\le n\). Затем одновременно присвоить \(a_i\) значение \((a_i\operatorname{or} z)\) и присвоить \(z\) значение \((a_i\operatorname{and} z)\). Другими словами, если \(x\) и \(y\) — текущие значения \(a_i\) и \(z\) соответственно, то нужно положить \(a_i\) равным \((x\operatorname{or}y)\), а \(z\) положить равным \((x\operatorname{and}y)\).

Здесь \(\operatorname{or}\) и \(\operatorname{and}\) обозначают операции побитового ИЛИ и побитового И соответственно.

Найдите максимально возможное значение максимального элемента в \(a\) после некоторого (возможно, нулевого) количества операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит два целых числа: \(n\) и \(z\) (\(1\le n\le 2000\), \(0\le z<2^{30}\)).

Вторая строка набора входных данных содержит \(n\) целых чисел: \(a_1\),\(a_2\),\(\ldots\),\(a_n\) (\(0\le a_i<2^{30}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу.

Примечание

В первом наборе входных данных одной из оптимальных последовательностей действий является следующая:

  • Выполнить операцию для \(i=1\). Теперь \(a_1\) становится равным \((3\operatorname{or}3)=3\), а \(z\) становится равным \((3\operatorname{and}3)=3\).
  • Выполнить операцию для \(i=2\). Теперь \(a_2\) становится равным \((4\operatorname{or}3)=7\), а \(z\) становится равным \((4\operatorname{and}3)=0\).
  • Выполнить операцию для \(i=1\). Теперь \(a_1\) становится равным \((3\operatorname{or}0)=3\), а \(z\) становится равным \((3\operatorname{and}0)=0\).

После этих операций последовательность \(a\) становится равной \([3,7]\), и максимальное значение в ней равно \(7\). Можно доказать, что максимальное значение в \(a\) не может превосходить \(7\) ни при какой последовательности операций, так что ответ равен \(7\).

В четвёртом наборе входных данных одной из оптимальных последовательностей действий является следующая:

  • Выполнить операцию для \(i=1\). Теперь \(a_1\) становится равным \((7\operatorname{or}7)=7\), а \(z\) становится равным \((7\operatorname{and}7)=7\).
  • Выполнить операцию для \(i=3\). Теперь \(a_3\) становится равным \((30\operatorname{or}7)=31\), а \(z\) становится равным \((30\operatorname{and}7)=6\).
  • Выполнить операцию для \(i=5\). Теперь \(a_5\) становится равным \((27\operatorname{or}6)=31\), а \(z\) становится равным \((27\operatorname{and}6)=2\).

B. НИТ уничтожает вселенную

жадные алгоритмы *900

Для набора целых чисел \(S\) определим \(\operatorname{mex}(S)\) как наименьшее неотрицательное целое число, которое не встречается в \(S\).

Гражданин НИТ решил уничтожить вселенную. К сожалению, он не настолько могуществен, как Танос, так что для достижения своей цели ему придётся щёлкнуть пальцами несколько раз.

Вселенная может быть представлена массивом \(a\) длины \(n\) в 1-индексации. Когда НИТ щёлкает пальцами, он осуществляет следующую операцию над массивом:

  • Он выбирает целые числа \(l\) и \(r\), такие что \(1\le l\le r\le n\). Пусть \(w=\operatorname{mex}(\{a_l,a_{l+1},\dots,a_r\})\). Тогда для всех \(l\le i\le r\) нужно заменить \(a_i\) на \(w\).

Будем говорить, что вселенная уничтожена, если и только если \(a_i=0\) для всех \(1\le i\le n\).

Найдите наименьшее количество действий, необходимое НИТу для уничтожения вселенной. Другими словами, найдите наименьшее число операций, в результате которых все элементы массива станут равны \(0\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)).

Вторая строка набора входных данных содержит \(n\) целых чисел: \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(0\le a_i\le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу.

Примечание

В первом наборе входных данных все элементы массива изначально равны \(0\), так что достаточно сделать \(0\) операций.

Во втором наборе входных данных одним из оптимальных решений будет выбор одной операции с \(l=2\), \(r=5\).

В третьем наборе входных данных одним из оптимальных решений будет выбор двух операций с параметрами \(l=4\), \(r=4\) и \(l=2\), \(r=6\) соответственно.

В четвёртом наборе входных данных одним из оптимальных решений будет выбор одной операции с \(l=1\), \(r=1\).

C. Fishingprince играет с массивом

жадные алгоритмы Конструктив математика реализация *1400

Fishingprince играет с массивом чисел \([a_1,a_2,\dots,a_n]\). Также у него есть волшебное число \(m\).

Он может производить с массивом следующие операции:

  • Выбрать \(1\le i\le n\), такое что \(a_i\) делится на \(m\) (то есть существует такое целое \(t\), что \(m \cdot t = a_i\)). Затем заменить \(a_i\) на \(m\) копий числа \(\frac{a_i}{m}\). Порядок остальных элементов при этом не изменяется. Например, если \(m=2\), \(a=[2,3]\) и \(i=1\), то \(a\) станет равным \([1,1,3]\).
  • Выбрать \(1\le i\le n-m+1\), такое что \(a_i=a_{i+1}=\dots=a_{i+m-1}\). Затем заменить эти \(m\) элементов одним числом \(m \cdot a_i\). Порядок остальных элементов при этом не изменяется. Например, если \(m=2\), \(a=[3,2,2,3]\) и \(i=2\), то \(a\) станет равным \([3,4,3]\).

Обратите внимание, что длина массива может изменяться в процессе выполнения операций. Значение \(n\), используемое выше, всегда определяется как текущая длина массива (и может отличаться от \(n\), заданного во входных данных).

У Fishingprince'а есть ещё один массив, \([b_1,b_2,\dots,b_k]\). Определите, может ли он превратить массив \(a\) в массив \(b\) за несколько (возможно, ноль) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит два целых числа: \(n\) и \(m\) (\(1\le n\le 5\cdot 10^4\), \(2\le m\le 10^9\)).

Вторая строка набора входных данных содержит \(n\) целых чисел: \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)).

Третья строка набора входных данных содержит одно целое число \(k\) (\(1\le k\le 5\cdot 10^4\)).

Четвёртая строка набора входных данных содержит \(k\) целых чисел: \(b_1,b_2,\ldots,b_k\) (\(1\le b_i\le 10^9\)).

Гарантируется, что сумма значений \(n+k\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите Yes, если существует способ преобразовать \(a\) в \(b\), и No иначе. Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно применить операцию второго типа для \(i=2\): \([1,\color{red}{2,2},4,2]\to [1,\color{red}{4},4,2]\).

Во втором наборе входных данных можно:

  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{2,2},8,2,2]\to [1,\color{red}{4},8,2,2]\).
  • выполнить операцию второго типа для \(i=4\): \([1,4,8,\color{red}{2,2}]\to [1,4,8,\color{red}{4}]\).
  • выполнить операцию первого типа для \(i=3\): \([1,4,\color{red}{8},4]\to [1,4,\color{red}{4,4},4]\).
  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{4,4},4,4]\to [1,\color{red}{8},4,4]\).
  • выполнить операцию второго типа для \(i=3\): \([1,8,\color{red}{4,4}]\to [1,8,\color{red}{8}]\).
  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{8,8}]\to [1,\color{red}{16}]\).

D. Граф перестановки

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути разделяй и властвуй Структуры данных *1900

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Дана перестановка \([a_1,a_2,\dots,a_n]\) чисел \(1,2,\dots,n\). Для целых \(i\),\(j\), таких что \(1\le i<j\le n\), определим \(\operatorname{mn}(i,j)\) как \(\min\limits_{k=i}^j a_k\), а \(\operatorname{mx}(i,j)\) как \(\max\limits_{k=i}^j a_k\).

Построим неориентированный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\). Для каждой пары \(1\le i<j\le n\), если одновременно \(\operatorname{mn}(i,j)=a_i\) и \(\operatorname{mx}(i,j)=a_j\), или одновременно \(\operatorname{mn}(i,j)=a_j\) и \(\operatorname{mx}(i,j)=a_i\), то между вершинами \(i\) и \(j\) проводится неориентированное ребро длины \(1\).

Найдите в этом графе длину кратчайшего пути от вершины \(1\) до вершины \(n\). Можно доказать, что в таком графе вершины \(1\) и \(n\) всегда будут соединены каким-либо путём, так что кратчайший путь всегда существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5\cdot 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2.5\cdot 10^5\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1\),\(a_2\),\(\ldots\),\(a_n\) (\(1\le a_i\le n\)). Гарантируется, что \(a\) является перестановкой чисел \(1\),\(2\),\(\dots\),\(n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину кратчайшего пути от \(1\) до \(n\).

Примечание

Ниже приведены построенные графы, отвечающие наборам входных данных.

граф в наборе 1
граф в наборе 2
граф в наборе 3
граф в наборе 4
граф в наборе 5

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\}\).

A. Прогулка по аллее

жадные алгоритмы реализация *800

Вы прогуливаетесь по аллее, находящейся недалеко от вашего дома. На аллее в ряд стоит \(n+1\) лавочек, пронумерованных от \(1\) до \(n+1\) слева направо. Дистанция между лавочками \(i\) и \(i+1\) равна \(a_i\) метров.

Изначально у вас есть \(m\) единиц энергии. Для того чтобы пройти \(1\) метр дистанции, вы тратите \(1\) единицу энергии. Вы не можете идти, если у вас нет энергии. Также вы можете восстанавливать вашу энергию, когда сидите на лавочках (и это единственный способ восстановить энергию). Когда вы сидите, вы восстанавливаете любое целое количество энергии, которое хотите (если вы сидите дольше, вы восстанавливаете больше энергии). Заметьте, что количество вашей энергии может превышать \(m\).

Ваша задача — найти минимальное количество энергии, которое вам необходимо восстановить (сидя на лавочках) для того, чтобы достичь лавочки \(n+1\), начиная у лавочки \(1\) (и закончить вашу прогулку).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\); \(1 \le m \le 10^4\)).

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) равно дистанции между лавочками \(i\) и \(i+1\).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество энергии, которое вам необходимо восстановить (сидя на лавочках) для того, чтобы достичь лавочки \(n+1\), начиная у лавочки \(1\) (и закончить вашу прогулку) в соответствующем наборе тестовых данных.

Примечание

В первом наборе тестовых данных примера вы можете дойти до лавочки \(2\), потратив \(1\) единицу энергии, затем восстановить \(2\) единицы энергии на второй лавочке, дойти до лавочки \(3\), потратив \(2\) единицы энергии, восстановить \(1\) единицу энергии и дойти до лавочки \(4\).

В третьем наборе тестовых данных примера у вас уже достаточно энергии для того, чтобы дойти до лавочки \(6\), не отдыхая на лавочках вообще.

B. Промоакция

жадные алгоритмы сортировки *900

В магазине продаются \(n\) товаров, цена \(i\)-го товара равна \(p_i\). Руководство магазина собирается провести акцию: если в чеке не менее \(x\) товаров, \(y\) самых дешевых из них будут проданы бесплатно.

Руководство ещё не определилось с точными значениями \(x\) и \(y\). Поэтому они просят вас обработать \(q\) запросов: для заданных значений \(x\) и \(y\) определить максимальную суммарную стоимость товаров, которые клиент может получить бесплатно, совершив одну покупку.

Обратите внимание, что запросы являются независимыми, т. е. они никак не влияют на ассортимент магазина.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество товаров в магазине и количество запросов, соответственно.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le 10^6\)), где \(p_i\) — цена \(i\)-го товара.

Следующие \(q\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le y_i \le x_i \le n\)) — значения параметров \(x\) и \(y\) в \(i\)-м запросе.

Выходные данные

Для каждого запроса выведите одно целое число — максимальная суммарная стоимость товаров, которые можно получить бесплатно за одну покупку (один чек).

Примечание

В первом запросе из примера можно купить три товара стоимостью \(5, 3, 5\), два самых дешевых из них имеют стоимость \(3 + 5 = 8\).

Во втором запросе можно купить два товара стоимостью \(5\) и \(5\), самый дешевый из них имеет стоимость \(5\).

В третьем запросе необходимо купить все товары для участия в акции, три самых дешевых из них имеют стоимость \(1 + 2 + 3 = 6\).

C. Любимая задача awoo

Бинарный поиск жадные алгоритмы Конструктив реализация Строки Структуры данных *1400

Заданы две строки \(s\) и \(t\), обе длины \(n\). Каждый символ в обеих строках — 'a', 'b' или 'c'.

За один ход разрешается совершить одно из следующих действий:

  • выбрать вхождение «ab» в \(s\) и заменить его на «ba»;
  • выбрать вхождение «bc» в \(s\) и заменить его на «cb».

Разрешается совершить произвольное количество ходов (включая ноль). Можно ли сделать строку \(s\) равной строке \(t\)?

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина строк \(s\) и \(t\).

Во второй строке записана строка \(s\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

В третьей строке записана строка \(t\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно сделать строку \(s\) равной строке \(t\), совершив произвольное количество ходов (возможно, ноль). В противном случае выведите «NO».

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]\).

B. Песочные вершины

жадные алгоритмы Конструктив реализация *800

Перед вами \(n\) кучек песка, и в \(i\)-й кучке ровно \(a_i\) песчинок. Назовем \(i\)-ю кучку слишком высокой, если \(1 < i < n\), и \(a_i > a_{i-1} + a_{i+1}\). Иными словами кучка слишком высокая, если в ней больше песка, чем в двух соседних вместе. (Обратите внимание, что кучки по краям не могут быть слишком высокими.)

Вам дано целое число \(k\). За одну операцию вы можете выбрать \(k\) последовательных кучек и добавить к каждой из них одну песчинку. Формально, выберите \(1 \leq l,r \leq n\) такие, что \(r-l+1=k\). Затем для всех \(l \leq i \leq r\) обновите \(a_i \gets a_i+1\).

Какое максимальное количество кучек одновременно может быть слишком высокими после нескольких (возможно, нуля) операций?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(3 \leq n \leq 2 \cdot 10^5\); \(1 \leq k \leq n\)) — количество кучек песка и размер операции, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — размеры кучек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество кучек, которые одновременно могут быть слишком высокими после нескольких (возможно, нуля) операций.

Примечание

В первом примере можно выполнить следующие три операции:

  • Добавить одну песчинку в кучки \(1\) и \(2\): \([\color{red}{3}, \color{red}{10}, 2, 4, 1]\).
  • Добавить одну песчинку в кучки \(4\) и \(5\): \([3, 10, 2, \color{red}{5}, \color{red}{2}]\).
  • Добавить одну песчинку в кучки \(3\) и \(4\): \([3, 10, \color{red}{3}, \color{red}{6}, 2]\).
После этого кучки \(2\) и \(4\) слишком высокие, поэтому ответ в данном случае равен \(2\). Можно показать, что нельзя сделать более \(2\) кучек слишком высокими.

Во втором примере любая операция увеличивает все кучки на \(1\), поэтому количество слишком высоких кучек всегда будет \(0\).

В третьем примере можно увеличивать любую кучку на \(1\). Можно показать, что максимальное количество слишком высоких кучек равно \(1\).

E. PermutationForces II

Деревья жадные алгоритмы Комбинаторика Перебор сортировки *2300

Вам дана перестановка \(a\) длины \(n\). Напомним, что перестановкой называется массив из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке.

Ваша сила равна \(s\). Вы можете выполнить \(n\) операций с перестановкой \(a\). \(i\)-я операция состоит в следующем:

  • Выберите два значения \(x\) и \(y\) такие, что \(i \leq x \leq y \leq \min(i+s,n)\), и поменяйте местами числа \(x\) и \(y\) в перестановке \(a\). Обратите внимание, что вы можете выбрать \(x=y\), в таком случае обмена не произойдет.

Вы хотите превратить \(a\) в другую перестановку \(b\) после \(n\) операций. Однако некоторые элементы \(b\) отсутствуют и заменены на \(-1\). Вычислите количество способов заменить каждую \(-1\) в \(b\) на некоторое целое число от \(1\) до \(n\) так, чтобы \(b\) была перестановкой, и можно было превратить \(a\) в \(b\) силой \(s\).

Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(s\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq s \leq n\)) — размер перестановки и ваша сила, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы \(a\). Все элементы \(a\) различны.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\) или \(b_i = -1\)) — элементы \(b\). Все элементы \(b\), не равные \(-1\), различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов достроить перестановку \(b\) так, чтобы можно было превратить \(a\) в \(b\) силой \(s\), по модулю \(998\,244\,353\).

Примечание

В первом примере \(a=[2,1,3]\). Существуют два способа заменить \(-1\), чтобы \(b\) стала перестановкой: \([3,1,2]\) и \([3,2,1]\). Перестановку \(a\) можно превратить в \([3,1,2]\) силой \(1\) следующим образом: \(\)[2,1,3] \xrightarrow[x=1,\,y=1]{} [2,1,3] \xrightarrow[x=2,\,y=3]{} [3,1,2] \xrightarrow[x=3,\,y=3]{} [3,1,2].\(\) Можно показать, что невозможно превратить \([2,1,3]\) в \([3,2,1]\) силой \(1\). Поэтому только одна перестановка \(b\) подходит, поэтому ответ \(1\).

Во втором примере \(a\) и \(b\) такие же, как в предыдущем примере, но теперь у нас сила \(2\). Перестановку \(a\) можно превратить в \([3,2,1]\) силой \(2\) следующим образом: \(\)[2,1,3] \xrightarrow[x=1,\,y=3]{} [2,3,1] \xrightarrow[x=2,\,y=3]{} [3,2,1] \xrightarrow[x=3,\,y=3]{} [3,2,1].\(\) Можно также превратить \(a\) в \([3,1,2]\) используя силу \(1\) как раньше, поэтому ответ \(2\).

В третьем примере есть только одна перестановка \(b\). Можно показать, что невозможно превратить \(a\) в \(b\), поэтому ответ \(0\).

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\).

B. Иерархия

жадные алгоритмы кратчайшие пути поиск в глубину и подобное снм *1500

В фирму Никиты набрали n человек. Теперь ему нужно построить древовидную иерархию отношений «начальник-подчинённый» в этой фирме (то есть у каждого человека, кроме одного, должен быть ровно один начальник). Дано m заявлений вида «человек ai готов стать начальником человека bi за дополнительную плату ci». Для каждого человека известно его значение квалификации qj, и для каждого заявления выполняется условие qai > qbi.

Помогите Никите определить минимальную стоимость создания иерархии, либо выяснить, что это невозможно.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 1000) — число сотрудников компании. В следующей строке содержится n чисел qj (0 ≤ qj ≤ 106) записанных через пробел — значения квалификации сотрудников. В следующей строке содержится число m (0 ≤ m ≤ 10000) — количество поданных заявлений. Следующие m строк содержат сами заявления, каждое из которых задаётся тремя числами, записанными через пробел: ai, bi и ci (1 ≤ ai, bi ≤ n, 0 ≤ ci ≤ 106). Заявления могут повторяться, то есть один и тот же сотрудник мог предложить стать начальником другому сотруднику за разные цены. Для каждого заявления qai > qbi.

Выходные данные

В единственной строке выходных данных выведите минимальную стоимость создания иерархии или -1, если создать иерархию невозможно.

Примечание

В первом примере один из возможных вариантов составления иерархии — взять заявления под номерами 1, 2 и 4, которые в сумме дадут стоимость 11. Во втором примере составить иерархию невозможно, поэтому ответ -1.

A. Оптимальный путь

жадные алгоритмы Конструктив математика *800

Дана таблица \(a\) размера \(n \times m\). Будем считать, что строки таблицы пронумерованы сверху вниз от \(1\) до \(n\), а столбцы — слева направо от \(1\) до \(m\). Тогда клетку, находящуюся в строке \(i\) и столбце \(j\), будем обозначать \((i, j)\). В клетке \((i, j)\) записано число \((i - 1) \cdot m + j\), то есть \(a_{ij} = (i - 1) \cdot m + j\).

Черепашка изначально находится в клетке \((1, 1)\) и хочет попасть в клетку \((n, m)\). За один шаг из клетки \((i, j)\) она может попасть в клетку \((i + 1, j)\) или \((i, j + 1)\), если она существует. Путь — это набор клеток, такой что для двух соседних клеток в пути верно следующее: из первой клетки можно попасть во вторую за один шаг. Стоимостью пути называется сумма чисел, записанных в клетках пути.

Например, при \(n = 2\) и \(m = 3\) таблица будет выглядеть как на картинке выше. Черепашка может пройти по такому пути: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3)\). Стоимость такого пути будет равна \(a_{11} + a_{12} + a_{13} + a_{23} = 12\). С другой стороны, пути \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 1)\) и \((1, 1) \rightarrow (1, 3)\) являются некорректными, так как в первом случае нельзя сделать переход \((2, 2) \rightarrow (2, 1)\), а во втором случае \((1, 1) \rightarrow (1, 3)\).

Вам нужно сказать черепашке минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\). Обратите внимание, что клетки \((1, 1)\) и \((n, m)\) являются частью пути.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^4\)) — размеры таблицы \(a\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\).

Примечание

В первом наборе входных данных единственный возможный путь проходит только по клетке \((1, 1)\).

Путь минимальной стоимости из второго набора выходных данных показан в условии.

В четвертом и пятом наборах входных данных существует единственный путь из \((1, 1)\) в \((n, m)\). Оба пути проходят по всем клеткам таблицы.

A. Оптимальный путь

жадные алгоритмы Конструктив математика *800

Дана таблица \(a\) размера \(n \times m\). Будем считать, что строки таблицы пронумерованы сверху вниз от \(1\) до \(n\), а столбцы — слева направо от \(1\) до \(m\). Тогда клетку, находящуюся в строке \(i\) и столбце \(j\), будем обозначать \((i, j)\). В клетке \((i, j)\) записано число \((i - 1) \cdot m + j\), то есть \(a_{ij} = (i - 1) \cdot m + j\).

Черепашка изначально находится в клетке \((1, 1)\) и хочет попасть в клетку \((n, m)\). За один шаг из клетки \((i, j)\) она может попасть в клетку \((i + 1, j)\) или \((i, j + 1)\), если она существует. Путь — это набор клеток, такой что для двух соседних клеток в пути верно следующее: из первой клетки можно попасть во вторую за один шаг. Стоимостью пути называется сумма чисел, записанных в клетках пути.

Например, при \(n = 2\) и \(m = 3\) таблица будет выглядеть как на картинке выше. Черепашка может пройти по такому пути: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3)\). Стоимость такого пути будет равна \(a_{11} + a_{12} + a_{13} + a_{23} = 12\). С другой стороны, пути \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 1)\) и \((1, 1) \rightarrow (1, 3)\) являются некорректными, так как в первом случае нельзя сделать переход \((2, 2) \rightarrow (2, 1)\), а во втором случае \((1, 1) \rightarrow (1, 3)\).

Вам нужно сказать черепашке минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\). Обратите внимание, что клетки \((1, 1)\) и \((n, m)\) являются частью пути.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^4\)) — размеры таблицы \(a\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\).

Примечание

В первом наборе входных данных единственный возможный путь проходит только по клетке \((1, 1)\).

Путь минимальной стоимости из второго набора выходных данных показан в условии.

В четвертом и пятом наборах входных данных существует единственный путь из \((1, 1)\) в \((n, m)\). Оба пути проходят по всем клеткам таблицы.

C. Помогаем природе

жадные алгоритмы Конструктив Структуры данных *1700

Маленький Леон живет в лесу. Недавно он заметил, что некоторые деревья возле его любимой тропинки засыхают, а другие наоборот слишком увлажнены. Леон очень любит свой лес, поэтому решил научиться контролировать уровень влажности почвы, чтобы спасти деревья.

Возле тропинки растут \(n\) деревьев, текущие уровни влажности которых заданы массивом \(a_1, a_2, \dots, a_n\). Леон научился трем способностям, которые помогут ему осушать и поливать почву.

  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(1, 2, \dots, i\) на \(1\).
  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(i, i + 1, \dots, n\) на \(1\).
  • Увеличить уровень влажности всех деревьев на \(1\).

Леон хочет узнать минимальное число действий, которое необходимо совершить, чтобы каждое дерево имело уровень влажности равный \(0\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных вводится одно целое число \(n\) (\(1 \leq n \leq 200\,000\)).

Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — изначальные уровни влажности деревьев.

Сумма значений \(n\) по всем наборам тестовых данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число действий. Можно показать, что ответ всегда существует.

Примечание

В первом наборе входных данных достаточно \(2\) раза применить операцию прибавления \(1\) ко всему массиву.

Во втором наборе входных данных можно \(4\) раза применить операцию вычитания на префиксе длины \(3\) и получить массив \(6, 0, 3\).

После этого \(6\) раз применить операцию вычитания на префиксе длины \(1\) и \(3\) раза операцию вычитания на суффиксе длины \(1\). Итого, количество действий составит \(4 + 6 + 3 = 13\). Можно показать, что меньшим количеством действий обойтись нельзя, поэтому \(13\) — это ответ.

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\).

B. Перестановка

жадные алгоритмы *800

Напомним, что перестановка длины \(n\) — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз.

Для фиксированного целого положительного числа \(d\) назовем ценой перестановки \(p\) длины \(n\) количество таких индексов \(i\) \((1 \le i < n)\), что \(p_i \cdot d = p_{i + 1}\).

Например, если \(d = 3\), а \(p = [5, 2, 6, 7, 1, 3, 4]\), то цена такой перестановки равна \(2\), т.к. \(p_2 \cdot 3 = p_3\) и \(p_5 \cdot 3 = p_6\).

Ваша задача — для заданного \(n\) найти перестановку длины \(n\) и значение \(d\), что цена перестановки максимально возможная (среди всех способов выбрать перестановку и значение \(d\)). Если оптимальных ответов несколько — выведите любой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Cумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите значение \(d\), а второй строке \(n\) целых чисел — саму перестановку. Если оптимальных ответов несколько — выведите любой.

C. Организация расписания

Бинарный поиск жадные алгоритмы реализация *1400

Есть \(n\) работников и \(m\) заданий. Работники пронумерованы от \(1\) до \(n\). У каждого задания \(i\) есть значение \(a_i\) — номер работника, который специализируется на этом задании.

Каждое задание должен выполнить один из работников. Если работник специализируется на задании, то он выполняет его за \(1\) час. Иначе он тратит на него \(2\) часа.

Работники работают параллельно и независимо друг от друга. Каждый работник может одновременно работать только над одним заданием.

Назначьте работника на каждое задание так, чтобы все задания были завершены как можно раньше. Работа начинается в момент времени \(0\). К какому минимальному времени все задания могут быть завершены?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le m \le 2 \cdot 10^5\)) — количество работников и количество заданий.

Во второй строке записаны \(m\) целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le n\)) — номер работника, специализирующегося на \(i\)-м задании.

Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — минимальное время, к которому все задания могут быть завершены.

Примечание

В первом наборе первый работник работает над заданиями \(1\) и \(3\), а второй — над заданиями \(2\) и \(4\). Так как они оба специализируются на соответствующих заданиях, они их выполняют по \(1\) часу. Оба они выполняют \(2\) задания за \(2\) часа. Поэтому все задания оказываются выполнены за \(2\) часа.

Во втором наборе оптимально дать первому работнику задания \(1, 2\) и \(3\), а второму — задание \(4\). Первый работник потратит \(3\) часа, второй — \(2\) часа (так как он не специализируется на взятом задании).

В третьем наборе каждый работник может работать над заданием, на котором он специализируется. Так они выполнят все задания за \(1\) час.

D. Восстановление перестановки

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1900

У Монокарпа была перестановка \(a\) состоящая из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Монокарп составил массив целых чисел \(b\) размера \(n\), где \(b_i = \left\lfloor \frac{i}{a_i} \right\rfloor\). Например, если перестановка \(a\) равна \([2, 1, 4, 3]\), то массив \(b\) равен \(\left[ \left\lfloor \frac{1}{2} \right\rfloor, \left\lfloor \frac{2}{1} \right\rfloor, \left\lfloor \frac{3}{4} \right\rfloor, \left\lfloor \frac{4}{3} \right\rfloor \right] = [0, 2, 0, 1]\).

К сожалению, Монокарп потерял свою перестановку, поэтому он хочет восстановить ее. Ваша задача — найти перестановку \(a\), которая соответствует заданному массиву \(b\). Если таких перестановок несколько — выведите любую. Гарантируется, что хотя бы одна подходящая перестановка существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i \le n\)).

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\);
  • существует хотя бы одна перестановка \(a\), по которой описанным в условии процессом можно получить заданный массив \(b\).
Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку \(a\), которая соответствует заданному массиву \(b\). Если таких перестановок несколько — выведите любую.

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\) в данном наборе тестовых данных.

B. Поликарп пишет строку по памяти

жадные алгоритмы *800

У Поликарпа плохая память. Каждый день он может помнить не более \(3\) различных букв.

Поликарп хочет написать непустую строку \(s\), состоящую из строчных латинских букв, потратив на это минимальное количество дней. За сколько дней он справится?

Изначально Поликарп имеет пустую строку и может добавлять символы только в конец этой строки.

Например, если Поликарп хочет написать строку lollipops, то сделает это за \(2\) дня:

  • в первый день Поликарп запомнит буквы l, o, i и напишет lolli;
  • во второй день Поликарп запомнит буквы p, o, s, допишет к получившейся строке pops и получит строку lollipops.

Если Поликарп хочет написать строку stringology, то сделает это за \(4\) дня:

  • в первый день будет написана часть str;
  • во второй день будет написана часть ing;
  • в третий день будет написана часть olog;
  • в четвертый день будет написана часть y.

Для заданной строки \(s\) выведите минимальное количество дней, которое потребуется Поликарпу, чтобы написать ее.

Входные данные

В первой строке входных данных записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из непустой строки \(s\), состоящей из строчных латинских букв (длина строки \(s\) не превышает \(2 \cdot 10^5\)) — строка, которую хочет построить Поликарп.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество дней, которое понадобится Поликарпу, чтобы написать по памяти строку \(s\).

C. Поезд и запросы

жадные алгоритмы Структуры данных *1100

Вдоль железной дороги расположены станции, пронумерованные от \(1\) до \(10^9\). Скорый поезд всегда едет по маршруту, состоящему из \(n\) станций \(u_1, u_2, \dots, u_n\), где (\(1 \le u_i \le 10^9\)). Поезд едет по маршруту слева направо. Он начинает свой путь на станции \(u_1\), затем останавливается на станции \(u_2\), затем на \(u_3\) и так далее. Станция \(u_n\) — конечная.

Допустимо, что поезд посетит одну станцию более одного раза. То есть среди чисел \(u_1, u_2, \dots, u_n\) могут быть дубликаты.

Вам даны \(k\) запросов, каждый из которых содержит два различных целых числа \(a_j\) и \(b_j\) (\(1 \le a_j, b_j \le 10^9\)). Для каждого запроса необходимо определить, можно ли доехать на поезде от станции с номером \(a_j\) до станции с номером \(b_j\).

Например, пусть маршрут поезда состоит из \(6\) станций с номерами [\(3, 7, 1, 5, 1, 4\)] и даны \(3\) следующих запроса:

  • \(a_1 = 3\), \(b_1 = 5\)

    Доехать от станции \(3\) до станции \(5\) можно, проехав по участку маршрута, состоящего из станций [\(3, 7, 1, 5\)]. Ответ: YES.

  • \(a_2 = 1\), \(b_2 = 7\)

    Доехать от станции \(1\) до станции \(7\) нельзя, так как поезд не может ехать в обратном направлении. Ответ: NO.

  • \(a_3 = 3\), \(b_3 = 10\)

    Доехать от станции \(3\) до станции \(10\) нельзя, так как станция \(10\) не входит в маршрут поезда. Ответ: NO.

Входные данные

В первой строке записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора пустая.

Во второй строке каждого набора входных данных содержится два целых числа: \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le k \le 2 \cdot 10^5\)) — количество станций, из которых состоит маршрут поезда и количество запросов соответственно.

В третьей строке каждого набора входных данных записано ровно \(n\) целых чисел \(u_1, u_2, \dots, u_n\) (\(1 \le u_i \le 10^9\)). Числа \(u_1, u_2, \dots, u_n\) необязательно различны.

В следующих \(k\) строках содержатся два различных целых числа \(a_j\) и \(b_j\) (\(1 \le a_j, b_j \le 10^9\)), описывающие запрос с номером \(j\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превышает \(2 \cdot 10^5\). Аналогично гарантируется, что сумма значений \(k\) по всем наборам входных данных в тесте также не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса в каждом наборе входных данных в отдельной строке выведите:

  • YES, если на поезде можно доехать от станции \(a_j\) до станции \(b_j\).
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

D. Недешёвая строка

жадные алгоритмы *1000

Пусть \(s\) — строка из строчных латинских букв. Eё цена — это сумма номеров букв, которые в неё входят. Например, цена строки abca равна \(1+2+3+1=7\).

Задана строка \(w\) и число \(p\). Удалите из \(w\) наименьшее количество букв, чтобы её цена стала меньше или равна чем \(p\) и выведите получившуюся строку. Обратите внимание, что получившаяся строка может быть пустой. Удалять можно произвольные буквы, они не обязаны идти подряд. Если цена заданной строки \(w\) меньше или равна \(p\), то ничего удалять не надо и необходимо вывести \(w\).

Обратите внимание, что при удалении буквы из \(w\) порядок остальных букв сохраняется. Например, при удалении буквы e из строки test получится tst.

Входные данные

В первой строке входных данных задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк.

Первая из них это строка \(w\), она непустая и состоит из строчных латинских букв. Её длина не превосходит \(2\cdot10^5\).

Вторая строка содержит целое число \(p\) (\(1 \le p \le 5\,200\,000\)).

Гарантируется, что сумма длин строк \(w\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите ровно \(t\) строк, \(i\)-я из них должна содержать ответ на \(i\)-й набор входных данных. Выведите наиболее длинную строку, которая получена из \(w\) удалением букв такую, что её цена меньше или равна \(p\). Если ответов несколько, то выведите любой из них.

Обратите внимание, что пустая строка — это один из возможных ответов. В таком случае просто выведите пустую строку в выходные данные.

F. Уравняй мультимножества

жадные алгоритмы Конструктив математика Структуры данных теория чисел *1700

Мультимножество — это такой набор чисел, в котором могут быть равные элементы, а порядок чисел не имеет значение. Два мультимножества равны, когда каждое значение встречается в них одинаковое количество раз. Например, мультимножества \(\{2,2,4\}\) и \(\{2,4,2\}\) равны, но мультимножества \(\{1,2,2\}\) и \(\{1,1,2\}\) — нет.

Вам даны два мультимножества \(a\) и \(b\), каждое состоит из \(n\) целых чисел.

За одну операцию можно любой элемент мультимножества \(b\) увеличить в два раза или уменьшить в два раза (с округлением вниз). Другими словами, вам доступна одна из следующих операций для элемента \(x\) из мультимножества \(b\):

  • либо заменить \(x\) на \(x \cdot 2\),
  • либо заменить \(x\) на \(\lfloor \frac{x}{2} \rfloor\) (округление вниз).

Обратите внимание, что изменять элементы мультимножества \(a\) нельзя.

Проверьте, можно ли за произвольное количество операций (возможно, \(0\)) сделать так, чтобы мультимножество \(b\) стало равно мультимножеству \(a\).

Например, если \(n = 4\), \(a = \{4, 24, 5, 2\}\), \(b = \{4, 1, 6, 11\}\), то ответ положительный. Можно действовать следующим образом:

  • Заменим \(1\) на \(1 \cdot 2 = 2\). Получим \(b = \{4, 2, 6, 11\}\).
  • Заменим \(11\) на \(\lfloor \frac{11}{2} \rfloor = 5\). Получим \(b = \{4, 2, 6, 5\}\).
  • Заменим \(6\) на \(6 \cdot 2 = 12\). Получим \(b = \{4, 2, 12, 5\}\).
  • Заменим \(12\) на \(12 \cdot 2 = 24\). Получим \(b = \{4, 2, 24, 5\}\).
  • получили равные мультимножества \(a = \{4, 24, 5, 2\}\) и \(b = \{4, 2, 24, 5\}\).
Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк.

В первой строке набора задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в мультимножествах \(a\) и \(b\).

Во второй строке даны \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le 10^9\)) — элементы набора \(a\). Обратите внимание, что среди элементов могут быть равные.

В третьей строке даны \(n\) целых чисел: \(b_1, b_2, \dots, b_n\) (\(1 \le b_1 \le b_2 \le \dots \le b_n \le 10^9\)) — элементы набора \(b\). Обратите внимание, что среди элементов могут быть равные.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если можно сделать так, чтобы мультимножество \(b\) стало равно \(a\),
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере невозможно получить значение \(31\) из чисел мультимножества \(b\) доступными операциями.

В третьем примере можно действовать следующим образом:

  • Заменим \(2\) на \(2 \cdot 2 = 4\). Получим \(b = \{4, 14, 14, 26, 42\}\).
  • Заменим \(14\) на \(\lfloor \frac{14}{2} \rfloor = 7\). Получим \(b = \{4, 7, 14, 26, 42\}\).
  • Заменим \(26\) на \(\lfloor \frac{26}{2} \rfloor = 13\). Получим \(b = \{4, 7, 14, 13, 42\}\).
  • Заменим \(42\) на \(\lfloor \frac{42}{2} \rfloor = 21\). Получим \(b = \{4, 7, 14, 13, 21\}\).
  • Заменим \(21\) на \(\lfloor \frac{21}{2} \rfloor = 10\). Получим \(b = \{4, 7, 14, 13, 10\}\).
  • получили равные мультимножества \(a = \{4, 7, 10, 13, 14\}\) и \(b = \{4, 7, 14, 13, 10\}\).

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\) монет. Можно доказать, что получить больше монет невозможно.

A. Две 0-1 последовательности

жадные алгоритмы Конструктив *800

У AquaMoon есть две бинарные последовательности \(a\) и \(b\), содержащие только \(0\) и/или \(1\). Она может выполнить две следующие операции любое количество раз (\(a_1\) — первый элемент \(a\), \(a_2\) — второй элемент \(a\) и т. д.):

  • Операция 1: если \(a\) содержит хотя бы два элемента, замените \(a_2\) на \(\operatorname{min}(a_1,a_2)\) и удалите первый элемент \(a\).
  • Операция 2: если \(a\) содержит хотя бы два элемента, замените \(a_2\) на \(\operatorname{max}(a_1,a_2)\) и удалите первый элемент \(a\).

Обратите внимание, что после удаления первого элемента \(a\) бывший \(a_2\) становится первым элементом \(a\), бывший \(a_3\) становится вторым элементом \(a\) и так далее, а длина \(a\) уменьшается на единицу.

Определите, может ли AquaMoon сделать \(a\) равным \(b\) с помощью этих операций.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 2\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \leq n,m \leq 50\), \(m \leq n\)) — длины \(a\) и \(b\) соответственно.

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\), состоящую только из символов \(0\) и \(1\).

Третья строка каждого набора входных данных содержит строку \(b\) длины \(m\), состоящую только из символов \(0\) и \(1\).

Выходные данные

Выведите «YES», если AquaMoon может изменить \(a\) на \(b\), используя эти операции; в противном случае выведите «NO».

Вы можете печатать каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как правильный ответ).

Примечание

В первом наборе входных данных вы можете использовать Операцию 2 четыре раза, чтобы сделать \(a\) равным \(b\).

Во втором наборе входных данных вы можете использовать Операцию 1 четыре раза, чтобы сделать \(a\) равным \(b\).

В третьем наборе входных данных можно доказать, что как бы мы ни использовали операции, невозможно сделать \(a\) равным \(b\).

В четвертом наборе входных данных можно доказать, что как бы мы ни использовали операции, невозможно сделать \(a\) равным \(b\).

В пятом наборе входных данных вы можете использовать Операцию 2 три раза, чтобы \(a\) стало равным \(10101\), поэтому первый элемент \(a\) станет равен первому элементу \(b\), но можно доказать, что независимо от того, как действовать, элементы \(a\) со второго по пятый не могут быть такими же как в \(b\).

B. Люк гурман

жадные алгоритмы Перебор реализация *1000

Люк любит поесть. Перед ним \(n\) стопок еды, выстроенных по прямой линии. В \(i\)-й стопке находится \(a_i\) единиц еды.

Люк будет идти от \(1\)-й стопки к \(n\)-й стопке, и он хочет съесть каждую стопку еды, не возвращаясь назад. Когда Люк достигает \(i\)-й стопки, он может съесть ее тогда и только тогда, когда \(|v - a_i| \leq x\), где \(x\) — фиксированное целое число, а \(v\) — пищевое желание Люка.

Прежде чем Люк начнет ходить, он может установить \(v\) в любое целое число. Кроме того, для каждого \(i\) (\(1 \leq i \leq n\)) Люк может изменить свое пищевой желание на любое целое число до того, как он съест \(i\)-ю стопку.

Найдите минимальное количество изменений, необходимое для того, чтобы съесть каждую стопку еды.

Обратите внимание, что первоначальный выбор \(v\) не считается изменением.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Для каждого набора входных данных первая строка содержит два целых числа: \(n, x\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq x \leq 10^9\)) — количество стопок, и максимальная разница между размером стопки и пищевым желанием Люка, при которой Люк может съесть стопку.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots , a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — минимальное количество необходимых изменений.

Примечание

В первом наборе входных данных Люк может установить \(v\) в \(5\) до того, как он начнет ходить. И он может идти прямо, чтобы съесть каждую стопку еды, не меняя \(v\).

Во втором наборе входных данных Люк может установить \(v\) в \(3\) до того, как он начнет ходить. И он может поменять \(v\) на \(10\), прежде чем съест вторую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

В четвертом наборе входных данных Люк может установить \(v\) в \(3\) до того, как начнет ходить. И он может поменять \(v\) на \(8\) до того, как съест шестую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

В пятом наборе входных данных Люк может установить \(v\) в \(4\) до того, как начнет ходить. И он может поменять \(v\) на \(6\) до того, как съест четвертую стопку. Тогда он может поменять \(v\) на \(12\) до того, как съест седьмую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

C. Вирус

жадные алгоритмы реализация сортировки *1200

На круге находятся \(n\) домов с номерами от \(1\) до \(n\). Для каждого \(1 \leq i \leq n - 1\) дом \(i\) и дом \(i + 1\) являются соседями; кроме того, дом \(n\) и дом \(1\) также являются соседями.

Изначально \(m\) из этих \(n\) домов заражены смертельным вирусом. Каждое утро Cirno может выбрать незараженный дом и навсегда защитить его от заражения.

Каждый день по порядку происходят следующие вещи:

  • Cirno выбирает незараженный дом и защищает его навсегда.
  • Заражаются все незараженные и незащищенные дома, у которых есть хотя бы один зараженный сосед.

Cirno хочет остановить распространение вируса. Найдите минимальное количество домов, которые в итоге будут заражены, если вы оптимально выберете дома для защиты.

Обратите внимание, что каждый день Cirno всегда выбирает дом для защиты до распространения вируса. Также защищенный дом не будет никогда заражен.

Входные данные

Вход состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных состоит из двух целых положительных чисел \(n, m\) (\(5 \leq n \leq 10^9\), \(1 \leq m \leq \min(n, 10^5)\)) — количество домов в круге и количество домов, которые изначально заражены.

Вторая строка каждого набора входных данных состоит из \(m\) различных положительных целых чисел \(a_1, a_2, \cdots , a_m\) (\(1 \leq a_i \leq n\)) — индексы первоначально зараженных домов.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — минимальное количество зараженных домов в итоге.

Примечание

В первом наборе входных данных получить ответ можно следующим образом:

В начале первого дня заражены дома \(3\), \(6\), \(8\). Выберите дом \(2\) для защиты.

В начале второго дня заражены дома \(3\), \(4\), \(5\), \(6\), \(7\), \(8\), \(9\). Выберите дом \(10\) для защиты.

В начале третьего дня зараженных домов больше нет.

Во втором наборе входных данных получить ответ можно следующим образом:

В начале первого дня заражены дома \(2\), \(5\). Выберите дом \(1\) для защиты.

В начале второго дня заражены дома \(2\), \(3\), \(4\), \(5\), \(6\). Не осталось незащищенных и незараженных домов.

A. Фотограф Марк

жадные алгоритмы сортировки *800

Марка попросили сфотографировать группу из \(2n\) человек, \(i\)-й из них имеет рост \(h_i\).

Для этого он выстроил этих людей в два ряда: передний и задний, каждый из которых состоит из \(n\) человек. На фотографии все люди хорошо видны, если рост \(j\)-го человека в дальнем ряду как минимум на \(x\) больше, чем рост \(j\)-го человека в ближнем ряду для каждого \(j\) от \(1\) до \(n\) включительно.

Помогите Марку определить, возможно ли расставить людей описанным выше способом.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

Первая строка каждого набора содержит два положительных целых числа \(n\) и \(x\) (\(1\leq n\leq 100\), \(1\leq x\leq 10^3\)) — количество людей в каждом ряду и минимальную разницу в росте, которую хочет получить Марк.

Вторая строка каждого набора содержит \(2n\) положительных целых чисел \(h_1,h_2,\ldots,h_{2n}\) (\(1\leq h_i\leq 10^3\)) — рост каждого из людей.

Обратите внимание, что сумма значений \(n\) по всем наборам входных данных в тесте никак не ограничена.

Выходные данные

Для каждого набора входных данных выведите «YES», если Марк может расставить людей в два ряда требуемым образом. В противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как правильный ответ).

Примечание

В первом наборе входных данных из примера один из возможных требуемых порядков имеет следующий вид: третий, пятый и шестой человек должны встать в дальний ряд, а второй, первый и четвёртый — в ближний ряд. В этом случае расположение будет выглядеть так:

Дальний ряд\(9\)\(12\)\(16\)
Ближний ряд\(3\)\(1\)\(10\)

Оно соответствует требованиям, так как:

  • \(h_3-h_2 = 9-3 \geq 6\),
  • \(h_5-h_1 = 12-1\geq 6\), and
  • \(h_6-h_4 = 16-10\geq 6\).

Для второго набора входных данных может быть показано, что требуемого расположения людей не существует.

В третьем наборе входных данных единственный подходящий способ расположения следующий: второй человек стоит в дальнем ряду, а первый в ближнем.

B. Марк-уборщик

жадные алгоритмы Конструктив реализация *900

Марк убирает ряд из \(n\) комнат, \(i\)-я комната имеет неотрицательный уровень запыленности \(a_i\). У него есть волшебная чистящая машина, которая может выполнять следующую трехэтапную операцию:

  • Марк выбирает два таких индекса \(i<j\), что уровни пыли \(a_i\), \(a_{i+1}\), \(\dots\), \(a_{j-1}\) строго больше \(0\).
  • Машина изменяет \(a_i\) на новое значение \(a_i-1\).
  • Машина изменяет \(a_j\) на новое значение \(a_j+1\).

Цель Марка — сделать \(a_1 = a_2 = \ldots = a_{n-1} = 0\), тогда он сможет перейти к уборке комнаты \(n\). Требуется определить минимальное количество операций, необходимых для достижения его цели.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\)) — количество комнат.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0\leq a_i\leq 10^9\)) — уровень пыли в каждой из комнат.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — минимальное количество операций. Можно доказать, что существует последовательность операций, удовлетворяющая требованию задачи.

Примечание

В первом наборе входных данных примера возможна следующая последовательность операций:

  • выбрать \(i=1\) и \(j=2\), получить массив \([1,1,0]\);
  • выбрать \(i=1\) и \(j=3\), получить массив \([0,1,1]\);
  • выбрать \(i=2\) и \(j=3\), получить массив \([0,0,2]\).

После этого \(a_1=a_2=0\).

Во втором наборе входных данных примера возможна следующая последовательность операций:

  • выбрать \(i=4\) и \(j=5\), получить массив \([0,2,0,1,1]\).
  • выбрать \(i=2\) и \(j=3\), получить массив \([0,1,1,1,1]\).
  • выбрать \(i=2\) и \(j=5\), получить массив \([0,0,1,1,2]\).
  • выбрать \(i=3\) и \(j=5\), получить массив \([0,0,0,1,3]\).
  • выбрать \(i=4\) и \(j=5\), получить массив \([0,0,0,0,4]\).

После пятой операции массив удовлетворяет требованиям задачи.

D. Марк и лампочки

жадные алгоритмы Комбинаторика Конструктив математика сортировки *1800

Марк только что купил светильник из \(n\) лампочек. Состояние лампочек можно описать бинарной строкой \(s = s_1s_2\dots s_n\), где \(s_i=\texttt{1}\) означает, что \(i\)-я лампочка включена, а \(s_i=\texttt{0}\) означает, что \(i\)-я лампочка выключена.

К сожалению, лампочки сломаны, и Марк может выполнять единственную операцию, чтобы изменять состояние лампочек:

  • выбрать индекс \(i\) из чисел \(2,3,\dots,n-1\) такой, что \(s_{i-1}\ne s_{i+1}\);
  • переключить \(s_i\): если \(s_i\) равно \(\texttt{0}\), установить для \(s_i\) значение \(\texttt{1}\), и наоборот.

Марк хочет, чтобы состояние лампочек описывалось другой бинарной строкой \(t\). Помогите Марку определить минимальное количество операций, чтобы достичь это состояние.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1\leq q\leq 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(3\leq n\leq 2\cdot 10^5\)) — количество лампочек.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — начальное состояние лампочек.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\) — итоговое состояние лампочек.

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую минимальное количество операций, которые должен выполнить Марк, чтобы преобразовать состояние лампочек из \(s\) в \(t\). Если такой последовательности операций не существует, выведите \(-1\).

Примечание

В первом наборе входных данных примера одна из последовательностей операций, обеспечивающая минимальное количество операций, следующая:

  • выбрать \(i=3\), заменив \(\texttt{01}\color{red}{\texttt{0}}\texttt{0}\) на \(\texttt{01}\color{red}{\texttt{1}}\texttt{0}\);
  • выбрать \(i=2\), заменив \(\texttt{0}\color{red}{\texttt{1}}\texttt{10}\) на \(\texttt{0}\color{red}{\texttt{0}}\texttt{10}\).

Во втором наборе входных данных искомой последовательности операций не существует, потому что нельзя изменить ни первый, ни последний символ \(s\).

В третьем наборе входных данных, хотя первые символы \(s\) и \(t\) совпадают и последние символы \(s\) и \(t\) одинаковы, можно показать, что не существует последовательности операций, которая удовлетворяет условию.

В четвертом наборе входных данных одна из последовательностей, обеспечивающая минимальное количество операций, выглядит следующим образом:

  • выбрать \(i=3\), заменив \(\texttt{00}\color{red}{\texttt{0}}\texttt{101}\) на \(\texttt{00}\color{red}{\texttt{1}}\texttt{101}\);
  • выбрать \(i=2\), заменив \(\texttt{0}\color{red}{\texttt{0}}\texttt{1101}\) на \(\texttt{0}\color{red}{\texttt{1}}\texttt{1101}\);
  • выбрать \(i=4\), заменив \(\texttt{011}\color{red}{\texttt{1}}\texttt{01}\) на \(\texttt{011}\color{red}{\texttt{0}}\texttt{01}\);
  • выбрать \(i=5\), заменив \(\texttt{0110}\color{red}{\texttt{0}}\texttt{1}\) на \(\texttt{0110}\color{red}{\texttt{1}}\texttt{1}\);
  • выбрать \(i=3\), заменив \(\texttt{01}\color{red}{\texttt{1}}\texttt{011}\) на \(\texttt{01}\color{red}{\texttt{0}}\texttt{011}\).

E. Марк и профессор Коро

Бинарный поиск битмаски жадные алгоритмы Комбинаторика Перебор Структуры данных *2300

После просмотра одного аниме перед сном Марку снится, что он стоит в старом классе с меловой доской, на которой записана последовательность из \(n\) положительных целых чисел \(a_1, a_2,\dots,a_n\).

Затем в класс заходит профессор Коро. Он может выполнять следующую операцию:

  • выбрать целое число \(x\) которое присутствует на доске хотя бы \(2\) раза,
  • стереть эти \(2\) вхождения,
  • записать число \(x+1\) на доску.

После чего профессор Коро задает марку вопрос: «Какое максимально возможное число может появиться на доске после некоторого количества таких операций?»

Марк быстро отвечает на этот вопрос, но он всё ещё медленнее профессора Коро. Поэтому профессор Коро решает задать Марку дополнительные вопросы. Он будет менять изначальную последовательность чисел на доске \(q\) раз. Каждый раз он будет выбирать положительные целые числа \(k\) и \(l\), затем менять \(a_k\) на \(l\). После каждого такого изменения он будет спрашивать у Марка ответ на тот же самый вопрос.

Помогите Марку ответить на вопросы быстрее профессора Коро!

Обратите внимание, что изменения начальной последовательности на доске сохраняются. Изменения, внесенные в последовательность \(a\), будут так же применяться при обработке следующих изменений.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(2\leq n\leq 2\cdot 10^5\), \(1\leq q\leq 2\cdot 10^5\)) — длина последовательности \(a\) и количество изменений соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1\leq a_i\leq 2\cdot 10^5\)).

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(k\) и \(l\) (\(1\leq k\leq n\), \(1\leq l\leq 2\cdot 10^5\)), означающие изменение \(a_k\) на значение \(l\).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число — ответ после \(i\)-го изменения.

Примечание

В первом примере программа должна обработать \(4\) изменения.

После первого обновления последовательность на доске выглядит как \([2,3,2,4,5]\). Одна из возможных последовательностей операций, достигающих числа \(6\), такая:

  • Изначально, на доске числа \([2,3,2,4,5]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,5,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([4,5,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([5,\color{red}{5}]\).
  • Удаляем два вхождения числа \(5\) и записываем \(6\), получая \([\color{red}{6}]\).

Затем, во время второго изменения, массив станет равным \([2,3,2,4,3]\). В этот раз Марк не может достичь числа \(6\). Однако одна из последовательностей операций, приводящая к числу \(5\), такая:

  • Изначально, на доске числа \([2,3,2,4,3]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,3,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([3,4,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([3,\color{red}{5}]\).

Во время третьего изменения массив станет равным \([2,3,2,1,3]\). Один из возможных вариантов достичь числа \(4\) такой:

  • Изначально, на доске числа \([2,3,2,1,3]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([2,2,1,\color{red}{4}]\).

A. Очередная задача на минимизацию строки

2-sat жадные алгоритмы Конструктив Строки строковые суфф. структуры *800

У вас есть последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из целых чисел от \(1\) до \(m\). Также у вас есть строка \(s\), состоящая из \(m\) латинских букв «B».

Вы примените \(n\) операций к этой строке.

  • На \(i\)-й (\(1 \le i \le n\)) операции вы можете заменить \(a_i\)либо \((m + 1 - a_i)\)-й символ строки \(s\) на «A». Можно заменять символ на одной и той же позиции несколько раз.

Найдите лексикографически минимальную строку, которую Вы можете получить после выполнения всех операций.

Строка \(x\) лексикографически меньше строки \(y\) такой же длины, если и только если в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(y\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два числа \(n\) и \(m\) (\(1 \le n, m \le 50\)) — длина последовательности \(a\) и длина строки \(s\).

Во второй строке даны \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)) — последовательность \(a\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(m\) — лексикографически минимальную строку, которую можно получить. Каждый символ строки должен быть заглавной латинской буквой «A» или заглавной латинской буквой «B».

Примечание

В первом наборе входных данных последовательность \(a = [1, 1, 3, 1]\). Одно из возможных решений следующее.

  • На \(1\)-й операции вы можете заменить \(1\)-й символ строки \(s\) на A. После этого \(s\) становится равной ABBBB.
  • На \(2\)-й операции вы можете заменить \(5\)-й символ строки \(s\) на A (так как \(m+1-a_2=5\)). После этого \(s\) становится равной ABBBA.
  • На \(3\)-й операции вы можете заменить \(3\)-й символ строки \(s\) на A. После этого \(s\) становится равной ABABA.
  • На \(4\)-й операции вы можете заменить \(1\)-й символ строки \(s\) на A. После этого \(s\) остаётся равной ABABA.
Вы получите строку ABABA. Можно показать, что нельзя получить лексикографически меньшую строку.

Во втором наборе входных данных вы сделаете только одну операцию. Вы можете заменить \(2\)-й либо \(4\)-й символ строки \(s\) на A. Вы можете получить строки BABBB и BBBAB после операции. Строка BABBB является лексикографически наименьшей из этих строк.

В третьем наборе входных данных вы можете получить только строку A.

В четвёртом наборе входных данных вы можете заменить \(1\)-й и \(2\)-й символы строки \(s\) на A, чтобы получить строку AABB.

В пятом наборе входных данных вы можете заменить \(1\)-й и \(3\)-й символы строки \(s\) на A, чтобы получить строку ABABBBB.

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]\).

D1. Нарезка морковки (простая версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор теория чисел *1700

Это простая версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(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 3000\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 3000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(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]\).

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]\).

E. Qpwoeirut и вершины

Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное разделяй и властвуй снм Структуры данных *2300

Вам дан связный неориентированный граф из \(n\) вершин и \(m\) рёбер. Вершины графа пронумерованы целыми числами от \(1\) до \(n\), а рёбра графа пронумерованы целыми числами от \(1\) до \(m\).

Вам предстоит ответить на \(q\) запросов, каждый из которых состоит из двух чисел \(l\) и \(r\). Ответом на запрос является наименьшее неотрицательное число \(k\), для которого выполняется следующее условие:

  • для всех пар чисел \((a, b)\) таких, что \(l\le a\le b\le r\), вершины \(a\) и \(b\) достижимы друг из друга по пути, проходящему только по первым \(k\) рёбрам (то есть в пути могут встречаться только рёбра \(1, 2, \ldots, k\)).
Входные данные

В первой строке задано одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три числа \(n\), \(m\) и \(q\) (\(2\le n\le 10^5\), \(1\le m, q\le 2\cdot 10^5\)) — количество вершин, рёбер и запросов соответственно.

В каждой из следующих \(m\) строк дано по два числа \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le n\)) — концы \(i\)-го ребра.

Гарантируется, что заданный граф связный и в нём нет кратных рёбер и петель.

В каждой из следующих \(q\) строк дано по два числа \(l\) и \(r\) (\(1\le l\le r\le n\)) — описания запросов.

Гарантируется, что сумма \(n\) во всем наборам входных данных не превосходит \(10^5\), сумма \(m\) во всем наборам входных данных не превосходит \(2\cdot 10^5\), сумма \(q\) во всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел — ответы на запросы.

Примечание
Граф из первого набора входных данных. Около ребра записан его номер.

В первом наборе входных данных граф состоит из \(2\) вершин и одного ребра между вершинами \(1\) и \(2\).

В первом запросе \(l=1\) и \(r=1\). Вершина достижима сама из себя без использования рёбер, поэтому ответ на этот запрос равен \(0\).

Во втором запросе \(l=1\) и \(r=2\). Вершины \(1\) и \(2\) достижимы друг из друга по пути \(1 \longleftrightarrow 2\), состоящему только из первого ребра. В то же время невозможно добраться из вершины \(1\) до вершины \(2\), используя только первые \(0\) рёбер. Поэтому ответ на запрос равен \(1\).

Граф из второго набора входных данных. Около рёбер записаны их номера.

Во втором наборе входных данных граф состоит из \(5\) вершин и \(5\) рёбер.

В первом запросе \(l=1\) и \(r=4\). Чтобы выполнить требуемое условие, достаточно использовать первые \(3\) ребра:

  • Вершины \(1\) и \(2\) достижимы друг из друга по пути \(1 \longleftrightarrow 2\) (состоящему из ребра \(1\)).
  • Вершины \(1\) и \(3\) достижимы друг из друга по пути \(1 \longleftrightarrow 3\) (состоящему из ребра \(2\)).
  • Вершины \(1\) и \(4\) достижимы друг из друга по пути \(1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(1\) и \(3\)).
  • Вершины \(2\) и \(3\) достижимы друг из друга по пути \(2 \longleftrightarrow 1 \longleftrightarrow 3\) (состоящему из рёбер \(1\) и \(2\)).
  • Вершины \(2\) и \(4\) достижимы друг из друга по пути \(2 \longleftrightarrow 4\) (состоящему из ребра \(3\)).
  • Вершины \(3\) и \(4\) достижимы друг из друга по пути \(3 \longleftrightarrow 1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(2\), \(1\) и \(3\)).

Невозможно выполнить требуемое условие, используя меньше \(3\) первых рёбер. Например, при использовании \(2\) рёбер, невозможно добраться из вершины \(1\) в вершину \(4\). Поэтому ответ на запрос равен \(3\).

Во втором запросе \(l=3\) и \(r=4\). Вершины \(3\) и \(4\) достижимы друг из друга по пути \(3 \longleftrightarrow 1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(2\), \(1\) и \(3\)). При использовании меньшего числа первых рёбер вершины \(3\) и \(4\) не будут достижимы друг из друга.

A. Дореми и её IQ

Бинарный поиск жадные алгоритмы Конструктив реализация *1600

Дореми попросили протестировать \(n\) контестов. Контест \(i\) может быть протестирован только в день \(i\). Сложность контеста \(i\) равна \(a_i\). В начале показатель IQ Дореми равен \(q\). В день \(i\) Дореми решает, протестирует ли она контест \(i\) или нет. Она может протестировать контест только в случае, если её текущий показатель IQ строго больше \(0\).

Если Дореми решает протестировать контест \(i\) в день \(i\), то происходит следующее:

  • если \(a_i>q\), то Дореми чувствует себя недостаточно умной, поэтому \(q\) уменьшается на \(1\);
  • иначе ничего не изменяется.
При решении не тестировать контест ничего не происходит.

Дореми хочет протестировать как можно больше контестов. Помогите Дореми найти оптимальное решение.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных в тесте. Далее следует описание наборов.

Первая строка каждого набора содержит целые числа \(n\) и \(q\) (\(1 \le n \le 10^5\), \(1 \le q \le 10^9\)) — число контестов и показатель IQ Дореми в начале.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\cdots,a_n\) (\(1 \le a_i \le 10^9\)) — сложность каждого контеста.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите бинарную строку \(s\), где \(s_i=1\) если Дореми должна протестировать контест \(i\), и \(s_i=0\) иначе. Число единиц в строке должно быть максимально возможным, и при этом она не должна тестировать контест, когда её показатель IQ меньше либо равен нулю.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных Дореми тестирует единственный имеющийся контест. Её показатель IQ не уменьшается.

Во втором наборе входных данных Дореми тестирует оба имеющихся контеста. Её показатель IQ уменьшается на \(1\) после тестирования контеста \(2\).

В третьем наборе входных данных Дореми тестирует контесты \(1\) и \(2\). Её показатель IQ уменьшается до \(0\) после тестирования контеста \(2\), поэтому она не может протестировать контест \(3\).

C. Деревья поиска в глубину

графы Деревья жадные алгоритмы поиск в глубину и подобное снм сортировки *2400

Вам дан связный неориентированный граф из \(n\) вершин и \(m\) рёбер. Вес \(i\)-го ребра равен \(i\).

Ниже представлен некорректный алгоритм поиска минимального остовного дерева:


vis := массив длины n
s := множество рёбер

function dfs(u):
vis[u] := true
пройтись по каждому ребру (u, v) в порядке увеличения весов
if vis[v] = false
добавить ребро (u, v) в множество (s)
dfs(v)

function findMST(u):
установить все элементы (vis) в false
очистить множество (s)
dfs(u)
return множество (s)

Любой из вызовов функций findMST(1), findMST(2), ..., findMST(n) возвращает вам остовное дерево графа. Определите, какие из этих деревьев являются минимальными остовными деревьями.

Входные данные

Первая строка входных данных содержит два целых числа \(n\), \(m\) (\(2\le n\le 10^5\), \(n-1\le m\le 2\cdot 10^5\)) — количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le n\), \(u_i\ne v_i\)), описывающих неориентированное ребро \((u_i,v_i)\) в графе, \(i\)-е ребро во входных данных имеет вес \(i\).

Гарантируется, что граф связный и между любой парой вершин существует не более одного ребра.

Выходные данные

Выведите строку \(s\), состоящую из нулей и единиц, где \(s_i=1\), если findMST(i) возвращает минимальное остовное дерево, и \(s_i = 0\) иначе.

Примечание

Ниже показан граф из первого примера:

В этом графе существует только одно минимальное остовное дерево, состоящее из ребер \((1,2),(3,5),(1,3),(2,4)\), имеющих суммарный вес \(1+2+3+5=11\).

Ниже описана часть вычислений при вызове findMST(1):

  • реинициализируем массив vis и множество ребер s;
  • вызываем dfs(1);
  • vis[1] := true;
  • итерируемся по ребрам \((1,2),(1,3)\);
  • добавляем ребро \((1,2)\) во множество s, вызываем dfs(2):
    • vis[2] := true;
    • итерируемся по ребрам \((2,1),(2,3),(2,4)\);
    • так как vis[1] = true, игнорируем ребро \((2,1)\);
    • добавляем ребро \((2,3)\) во множество s, вызываем dfs(3):
      • ...

В конце алгоритма будут выбраны ребра \((1,2),(2,3),(3,5),(2,4)\) с суммарным весом \(1+4+2+5=12>11\), поэтому findMST(1) находит не минимальное остовное дерево.

Можно показать, что остальные остовные деревья являются минимальными, поэтому ответ 01111.

A. Разностные операции

жадные алгоритмы математика *800

Вам дан массив \(a\), состоящий из \(n\) целых положительных чисел.

Вы можете выполнить следующую операцию любое количество раз (возможно, нулевое):

  • выбрать индекс \(i\) (\(2 \le i \le n\)) и заменить \(a_i\) на \(a_i - a_{i-1}\).

Можно ли сделать так, чтобы выполнялось \(a_i=0\) для всех \(2\le i\le n\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных в тесте. Далее следует описание наборов.

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно заменить \(a_i\) на \(0\) для всех \(2 \le i \le n\), и «NO» (без кавычек) в противном случае.

Вы можете выводить буквы в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных исходный массив — \([5,10]\). Вы можете выполнить \(2\) операции, чтобы достичь цели:

  1. Выбрать \(i=2\), и массив станет равен \([5,5]\).
  2. Выбрать \(i=2\), и массив станет равен \([5,0]\).

Во втором наборе входных данных исходный массив — это \([1,2,3]\). Вы можете выполнить \(4\) операции, чтобы достичь цели:

  1. Выбрать \(i=3\), и массив станет равен \([1,2,1]\).
  2. Выбрать \(i=2\), и массив станет равен \([1,1,1]\).
  3. Выбрать \(i=3\), и массив станет равен \([1,1,0]\).
  4. Выбрать \(i=2\), и массив станет равен \([1,0,0]\).

В третьем наборе входных данных вы можете последовательно выбрать следующие индексы: \(4\), \(3\), \(2\).

A. Три двери

жадные алгоритмы математика Перебор реализация *800

Перед вами три двери, пронумерованные от \(1\) до \(3\) слева направо. На каждой двери висит замок, который может быть открыть только ключом, на котором написано то же число, что и на двери.

Есть три ключа — по одному от каждой двери. Два из них спрятаны за дверьми так, что за каждой дверью не более одного ключа. То есть за двумя дверьми лежит по одному ключу, за одной дверью ключа нет. Чтобы получить ключ, спрятанный за дверью, надо сначала открыть эту дверь. Оставшийся ключ у вас в руках.

Можете ли вы открыть все двери?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 18\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(x\) (\(1 \le x \le 3\)) — номер на ключе у вас в руках.

Во второй строке записаны три целых числа \(a, b\) и \(c\) (\(0 \le a, b, c \le 3\)) — номер на ключе за каждой дверью. Если за дверью нет ключа, то номер равен \(0\).

Значения \(1, 2\) и \(3\) встречаются ровно по одному разу \(x, a, b\) и \(c\).

Выходные данные

На каждый набор входных данных выведите «YES», если можно открыть все двери. Иначе выведите «NO».

C. Восстанови ПСП

жадные алгоритмы Конструктив реализация Строки *1800

Скобочная последовательность — это строка, содержащая только символы «(» и «)». Правильная скобочная последовательность (или, коротко говоря, ПСП) — это скобочная последовательность, которая может быть преобразована в правильное арифметическое выражение путем вставки символов «1» и «+» между исходными символами последовательности. Например:

  • скобочные последовательности «()()» и «(())» являются правильными (возможные выражения: «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» не являются правильными.

В начале была некоторая ПСП. Некоторые скобки заменили на знаки вопроса. Верно ли, что существует единственный способ заменить знаки вопроса на скобки так, чтобы получилась ПСП?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записана ПСП с некоторыми скобками замененными на знаки вопроса. Каждый символ — это '(', ')' или '?'. Из данной последовательности можно восстановить хотя бы одну ПСП.

Суммарная длина последовательностей по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если способ заменить знаки вопроса на скобки так, чтобы получилась ПСП, единственный. Если существует больше одного способа, то выведите «NO».

Примечание

В первом наборе входных данных единственная возможная оригинальная ПСП — это «(())».

Во втором наборе существует несколько способов восстановить ПСП.

В третьем и четвертом наборах единственная возможная ПСП — это «()».

В пятом наборе оригинальная ПСП может быть «((()()))» или «(())()()».

D. Роророробот

Бинарный поиск жадные алгоритмы математика Структуры данных *1700

Дано поле, состоящее из \(n\) строк и \(m\) столбцов. Строки пронумерованы от \(1\) до \(n\) снизу вверх. Столбцы пронумерованы от \(1\) до \(m\) слева направо. В \(i\)-м столбце нижние \(a_i\) ячеек заблокированы (ячейки в строках \(1, 2, \dots, a_i\)), оставшиеся \(n - a_i\) ячеек разблокированы.

Робот ходит по этому полю. Ему можно посылать команды — двигаться вверх, вправо, вниз или влево. Если робот пытается перейти в заблокированную ячейку или за границы поля, то он взрывается.

Однако, робот сломан — он выполняет каждую команду \(k\) раз. То есть, если вы говорите ему двигаться вверх, например, то он перейдет вверх \(k\) раз (на \(k\) ячеек). Нельзя посылать команды, пока робот выполняет текущую.

Приходят \(q\) запросов о роботе. Каждый запрос определяется начальной клеткой, конечной клеткой и значением \(k\). Можно ли послать роботу произвольное количество команд (возможно, ноль) так, что он достигнет конечную клетку из начальной с учетом того, что каждая команда выполняется \(k\) раз?

Робот должен остановиться в конечной ячейке. Если он проходит через конечную клетку во время выполнения команд, то это не считается.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\); \(1 \le m \le 2 \cdot 10^5\)) — количество строк и столбцов на поле.

Во второй строке записаны \(m\) целых чисел \(a_1, a_2, \dots, a_m\) (\(0 \le a_i \le n\)) — количество заблокированных ячеек внизу \(i\)-го столбца.

В третьей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк записаны пять чисел \(x_s, y_s, x_f, y_f\) и \(k\) (\(a[y_s] < x_s \le n\); \(1 \le y_s \le m\); \(a[y_f] < x_f \le n\); \(1 \le y_f \le m\); \(1 \le k \le 10^9\)) — строка и столбец начальной ячейки, строка и столбец конечной ячейки и количество раз, которое выполняется каждая команда. Начальная и конечная клетки разблокированы.

Выходные данные

На каждый запрос выведите «YES», если можно послать роботу произвольное количество команд (возможно, ноль) так, что он достигнет конечную клетку из начальной с учетом того, что каждая команда выполняется \(k\) раз. Иначе выведите «NO».

E. XOR дерево

битмаски Деревья жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2400

Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\).

Напомним, что простой путь — это путь, посещающий каждую вершину не более одного раза. Назовем весом пути побитовое исключающее ИЛИ значений записанных на его вершинах. Скажем, что дерево хорошее, если в нем не существует ни одного простого пути с весом \(0\).

Вы можете применить следующую операцию произвольное количество раз (возможно, ноль): выбрать вершину дерева и заменить значение записанное на ней на произвольное положительное целое число. Какое минимальное количество раз необходимо применить данную операцию, чтобы дерево стало хорошим?

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин.

Во второй строке задано \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i < 2^{30}\)) — числа, записанные на вершинах дерева.

Затем следует \(n - 1\) строка, каждая из которых содержит два числа \(x\) и \(y\) (\(1 \le x, y \le n; x \ne y\)), обозначающие ребро между вершиной \(x\) и вершиной \(y\). Гарантируется, что эти ребра задают дерево.

Выходные данные

Выведите одно целое число — минимальное количество раз, которое необходимо применить операцию, чтобы дерево стало хорошим.

Примечание

В первом примере можно заменить значение на вершине \(1\) на \(13\), а значение на вершине \(4\) — на \(42\).

A. Покраска рисунка

жадные алгоритмы Конструктив математика *1500

Рисунок можно представить в виде таблицы \(n\times m\) (\(n\) строк, \(m\) столбцов), при этом каждая из \(n \cdot m\) клеток будет покрашена в один из цветов. У вас есть \(k\) красок различных цветов. Количество каждой краски ограниченно, а именно, вы можете покрасить не более \(a_i\) клеток в \(i\)-й цвет.

Рисунок называется красивым, если у каждой клетки не менее \(3\) тороидных соседних клеток имеют такой же цвет.

Две клетки являются тороидными соседями, если они имеют общую сторону на торе. Другими словами, для некоторых целых чисел \(1 \leq x_1,x_2 \leq n\) и \(1 \leq y_1,y_2 \leq m\) клетка в \(x_1\)-й строке \(y_1\)-м столбце является тороидным соседом клетки в \(x_2\)-й строке и \(y_2\)-м столбце, если выполняется одно из следующих двух условий:

  • \(x_1-x_2 \equiv \pm1 \pmod{n}\) и \(y_1=y_2\), или
  • \(y_1-y_2 \equiv \pm1 \pmod{m}\) и \(x_1=x_2\).

Обратите внимание, что у каждой клетки ровно \(4\) тороидных соседа. Например, если \(n=3\), а \(m=4\), то тороидными соседями клетки \((1, 2)\) (клетки в первой строке втором столбце) являются клетки \((3, 2)\), \((2, 2)\), \((1, 3)\), \((1, 1)\). Они выделены серым на рисунке ниже:

Серым выделены тороидные соседи клетки \((1, 2)\).

Можно ли покрасить все клетки таблицы имеющимися красками и получить красивый рисунок?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(3 \leq n,m \leq 10^9\), \(1 \leq k \leq 10^5\)) — количество строк и столбцов, а также количество красок.

Вторая строка содержит \(k\) целых чисел \(a_1,a_2,\dots, a_k\) (\(1 \leq a_i \leq 10^9\)), где \(a_i\) — максимальное количество клеток, которое можно покрасить в \(i\)-й цвет.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если можно создать красивый рисунок. Иначе выведите «No» (без кавычек).

Примечание

В первом примере одно из возможных решений следующее:

В третьем примере можно покрасить все клетки в \(1\)-й цвет.

B. Дождь

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных *2100

Вы владеете полем, который можно представить как бесконечную числовую прямую, все позиции на которой отмечены целыми числами.

В следующие \(n\) дней будет идти дождь. В \(i\)-й день центр дождя будет располагаться в точке \(x_i\), а интенсивность дождя будет равна \(p_i\). Из-за дождей будет собираться дождевая вода; пусть \(a_j\) будет обозначать объем воды, накопившийся в точке \(j\). Изначально \(a_j\) равно \(0\), после дождя в \(i\)-й день это значение увеличится на \(\max(0,p_i-|x_i-j|)\).

Поле затопит, если в некоторый момент будет существовать точка \(j\), в которой накопится \(a_j>m\) воды.

Вы можете использовать заклинание и отменить дождь в ровно один из дней, т. е. установить \(p_i=0\). Для каждого \(i\) от \(1\) до \(n\) определите, если вы отмените дождь в \(i\)-й день, верно ли, что затопления не случится?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 10^9\)) — количество дней и максимальный объем воды, который может находиться в одной точке, не вызывая затопления.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(p_i\) (\(1 \leq x_i,p_i \leq 10^9\)) — положение центра и интенсивность дождя в \(i\)-й день.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) должен быть равен 1, если в случае отмены дождя в \(i\)-й день затопления не случится, и 0, если в случае отмены дождя в \(i\)-й день затопление произойдет.

Примечание

В первом наборе входных данных, если не использовать заклинание, собравшаяся вода будет выглядеть следующим образом:

Если отменить дождь в третий день, затопление будет предотвращено, и собравшаяся вода будет выглядеть следующим образом:

Во втором примере изначально нет затопления, поэтому можно отменить дождь в любой день.

В третьем примере нет способа избежать затопления.

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\).

A. Чудесная перестановка

жадные алгоритмы реализация *800

God's Blessing on This PermutationForces!
A Random Pebble

Дана перестановка \(p_1,p_2,\ldots,p_n\) длины \(n\) и целое положительное число \(k \le n\).

За одну операцию вы можете выбрать два целых числа \(i\) и \(j\) (\(1 \le i < j \le n\)) и поменять местами \(p_i\) и \(p_j\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать сумму \(p_1 + p_2 + \ldots + p_k\) минимально возможной.

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1 \le p_i \le n\)). Гарантируется, что данные числа образуют перестановку длины \(n\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать сумму \(p_1 + p_2 + \ldots + p_k\) минимально возможной.

Примечание

В первом наборе входных данных сумма \(p_1 + p_2 + \ldots + p_k\) изначально равна \(2\), но минимально возможное значение равно \(1\). Его можно достичь, поменяв местами \(p_1\) и \(p_3\), тогда результирующая перестановка будет равна \([1, 3, 2]\).

Во втором наборе входных данных сумма уже минимально возможная, поэтому ответ — \(0\).

B. Жалкая перестановка

жадные алгоритмы Конструктив теория чисел *800

I wonder, does the falling rain
Forever yearn for it's disdain?
Effluvium of the Mind

Вам дано целое положительное число \(n\).

Найдите любую перестановку \(p\) длины \(n\) такую, что сумма \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\) максимальна.

Здесь \(\operatorname{lcm}(x, y)\) означает наименьшее общее кратное (НОК) двух чисел \(x\) и \(y\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит натуральное число \(n\) (\(1 \le n \le 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(p_1\), \(p_2\), \(\ldots\), \(p_n\) — перестановку с максимально возможным значением \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\).

Если существуют несколько решений, выведите любое из них.

Примечание

Для \(n = 1\), существует только одна перестановка, поэтому ответ — \([1]\).

Для \(n = 2\), существует две перестановки:

  • \([1, 2]\) — сумма равна \(\operatorname{lcm}(1,1) + \operatorname{lcm}(2, 2) = 1 + 2 = 3\).
  • \([2, 1]\) — сумма равна \(\operatorname{lcm}(1,2) + \operatorname{lcm}(2, 1) = 2 + 2 = 4\).

C. Нуль-сортировка

жадные алгоритмы сортировки *1100

An array is sorted if it has no inversions
A Young Boy

Вам дан массив из \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\).

За одну операцию вы можете выполнить следующие действия:

  1. Выбрать любое число \(x\).
  2. Для всех \(i\) таких, что \(a_i = x\), выполнить \(a_i := 0\) (присвоить \(0\) значению \(a_i\)).

Найдите минимальное количество операций, необходимых для того, что отсортировать массив в неубывающем порядке.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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 n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, необходимых для того, чтобы отсортировать массив в неубывающем порядке.

Примечание

В первом наборе входных данных вы можете выбрать \(x = 3\) при применении операции, тогда итоговый массив будет равен \([0, 0, 2]\).

Во втором наборе входных данных, вы можете выбрать \(x = 1\) при применении первой операции и \(x = 3\) при применении второй операции, тогда итоговый массив будет равен \([0, 0, 0, 0]\).

D. Пустой граф

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2000

 — Do you have a wish?
 — I want people to stop gifting each other arrays.
O_o and Another Young Boy

Массив из \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) упал на вас с небес вместе с целым положительным числом \(k \le n\).

Вы можете применить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(1 \le i \le n\) и целое число \(1 \le x \le 10^9\). Затем выполнить \(a_i := x\) (присвоить \(x\) значению \(a_i\)).

Затем вы строите полный неориентированный взвешенный граф с \(n\) вершинами, пронумерованными целыми числами от \(1\) до \(n\), где ребро \((l, r)\) (\(1 \le l < r \le n\)) имеет вес \(\min(a_{l},a_{l+1},\ldots,a_{r})\).

Вам необходимо найти максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Диаметр неориентированного взвешенного графа равен \(\max\limits_{1 \le u < v \le n}{\operatorname{d}(u, v)}\), где \(\operatorname{d}(u, v)\) является длиной кратчайшего пути между вершинами \(u\) и \(v\) данного графа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le n\)).

Вторая строка каждого набора входных данных содержит \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Примечание

В первом наборе входных данных один из оптимальных итоговых массивов — \([2,4,5]\).

Граф, полученный из данного массива:

\(\operatorname{d}(1, 2) = \operatorname{d}(1, 3) = 2\) и \(\operatorname{d}(2, 3) = 4\), поэтому диаметр графа равен \(\max(2,2,4) = 4\).

A. Задача коммивояжера

геометрия жадные алгоритмы реализация *800

Вы живете на бесконечной плоскости с введенными декартовыми координатами. За один шаг вы можете пойти в одну из четырех соседних точек (налево, направо, наверх или вниз).

Более формально, если вы стоите в точке \((x, y)\), вы можете:

  • пойти налево и переместиться в точку \((x - 1, y)\), или
  • пойти направо и переместиться в точку \((x + 1, y)\), или
  • пойти наверх и переместиться в точку \((x, y + 1)\), или
  • пойти вниз и переместиться в точку \((x, y - 1)\).

На плоскости расположены \(n\) коробок. \(i\)-я из этих коробок находится в точке с координатами \((x_i,y_i)\). Гарантируется, что коробки находятся либо на оси \(x\), либо на оси \(y\), то есть \(x_i=0\), или \(y_i=0\).

Вы можете подобрать коробку если находитесь в одной точке с ней. Найдите минимальное число шагов, необходимое, чтобы собрать все коробки, при условии что вы начинаете и заканчиваете в точке \((0,0)\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Вторая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество коробок.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-100 \le x_i, y_i \le 100\)) — координаты \(i\)-й коробки. Гарантируется, что или \(x_i=0\), или \(y_i=0\).

Обратите внимание, что сумма значений \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное необходимое число шагов.

Примечание

В первом примере одна из оптимальных последовательностей шагов показана ниже.

\(\)(0,0) \to (1,0) \to (1,1) \to (1, 2) \to (0,2) \to (-1,2) \to (-1,1) \to (-1,0) \to (-1,-1) \to (-1,-2) \to (0,-2) \to (0,-1) \to (0,0)\(\)

Во втором примере одна из оптимальных последовательностей шагов показана на рисунке ниже.

\(\)(0,0) \to (0,1) \to (0,2) \to (-1, 2) \to (-2,2) \to (-3,2) \to (-3,1) \to (-3,0) \to (-3,-1) \to (-2,-1) \to (-1,-1) \to (0,-1) \to (0,0)\(\)

В третьем примере можно собрать все коробки не делая шагов.

D. Отсчет турнира

жадные алгоритмы интерактив Конструктив Теория вероятностей теория чисел *1800

Это интерактивная задача.

Недавно состоялся турнир с \(2^n\) участниками. Сначала \(1\)-й участник соревновался со \(2\)-м, \(3\)-й с \(4\)-м и так далее. После этого победитель первого матча соревновался с победителем второго и так далее. Турнир завершился, когда остался только один участник, этот участник стал победителем. Такая схема проведения турнира называется «олимпийской системой».

Вы не знаете результатов, но хотите определить победителя турнира. За один запрос вы можете выбрать два целых числа \(a\) и \(b\) — номера двух участников. Жюри ответит \(1\), если \(a\) выиграл больше матчей, чем \(b\); \(2\), если \(b\) выиграл больше матчей, чем \(a\); или \(0\), если они выиграли поровну матчей.

Найдите победителя турнира за не более чем \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) запросов. Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа.

Обратите внимание, что турнир уже прошел, а значит результаты уже зафиксированы и не зависят от ваших запросов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2^{14}\)) — количество наборов входных данных.

Каждый набор входных данных начинается с целого числа \(n\) (\(1 \leq n \leq 17\)).

Гарантируется, что сумма значений \(2^n\) по всем наборам входных данных не превосходит \(2^{17}\).

Протокол взаимодействия

Взаимодействие в каждом наборе входных данных начинается со считывания целого числа \(n\).

Чтобы сделать запрос, выведите «? a b» (\(1 \leq a, b \leq 2^n\)) без кавычек. После этого считайте одно целое число — ответ на запрос. Вы можете сделать не более \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) таких запросов в каждом наборе входных данных.

Если вы считали \(-1\) вместо корректного ответа на запрос или вместо корректного значения \(n\), это означает, что ваша программа сделала некорректный запрос, превысила число запросов или неправильно решила предыдущий набор входных данных. В таком случае ваша программа должна немедленно завершиться, вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы готовы дать ответ, выведите «! x» (\(1 \leq x \leq 2^n\)) без кавычек — номер победителя турнира. Вывод этого ответа не учитывается в ограничении на количество запросов. После этого ваша программа должна сразу перейти к решению следующего набора входных данных. После решения всех наборов входных данных ваша программа должна завершиться.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Hacks

Чтобы сделать взлом, используйте следующий формат теста.

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2^{14}\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 17\)).

Вторая строка каждого набора входных данных содержит \(2^n\) целых чисел на одной строке — количество выигранных матчей для каждого участника. Количество выигранных матчей должно соответствовать некоторому корректному турниру.

Сумма значений \(2^n\) не должна превышать \(2^{17}\).

Примечание

Турнир в первом примере показан ниже. Количество выигранных матчей равно \([1,0,0,2,0,1,3,0]\).

В этом примере победителем является \(7\)-й участник.

E. Обмен крестом

2-sat жадные алгоритмы матрицы снм Структуры данных *2400

Вам дана квадратная матрица \(A\) размера \(n \times n\), элементы которой — целые числа. Обозначим элемент на пересечении \(i\)-й строки и \(j\)-го столбца за \(A_{i,j}\).

Вы можете выполнять некоторые операции над матрицей. На каждой операции вы выбираете индекс \(k\), а затем для всех \(i\) (\(1 \leq i \leq n\)) меняете местами \(A_{i, k}\) и \(A_{k, i}\). Обратите внимание, что элемент \(A_{k, k}\) не меняется.

Например, для \(n = 4\) и \(k = 3\) матрица будет преобразована следующим образом:

Операция \(k = 3\) меняет местами синюю строку и зеленый столбец.

Вы можете выполнять эту операцию произвольное количество раз. Найдите лексикографически минимальную матрицу\(^\dagger\), которую вы можете получить после выполнения произвольного числа операций.

\({}^\dagger\) Для двух матриц \(A\) и \(B\) размера \(n \times n\) положим \(a_{(i-1) \cdot n + j} = A_{i,j}\) и \(b_{(i-1) \cdot n + j} = B_{i,j}\). Тогда матрица \(A\) лексикографически меньше матрицы \(B\), если существует индекс \(i\) (\(1 \leq i \leq n^2\)) такой, что \(a_i < b_i\) и для всех индексов \(j\) таких, что \(1 \leq j < i\), выполняется \(a_j = b_j\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — размер матрицы.

\(i\)-я из следующих \(n\) строк содержит \(n\) целых чисел \(A_{i, 1}, A_{i, 2}, \dots, A_{i, n}\) (\(1 \le A_{i, j} \le 10^9\)) — описание матрицы \(A\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(n\) чисел — лексикографически минимальную матрицу.

Примечание

На каждом рисунке ниже преобразование матрицы меняет местами синюю строку и зеленый столбец.

В первом наборе входных данных можно выполнить \(1\) операцию с \(k = 3\). Матрица будет преобразована следующим образом:

Во втором наборе можно выполнить \(2\) операции с \(k = 1\) и \(k = 3\):

B. Удали префикс

жадные алгоритмы реализация Структуры данных *800

Поликарпу подарили некоторую последовательность целых чисел \(a\) длины \(n\) (\(1 \le a_i \le n\)). Последовательность может порадовать Поликарпа, только если она состоит из различных чисел. Для того чтобы сделать свою последовательность такой, Поликарп собирается сделать некоторое (возможно, нулевое) количество ходов.

За один ход он может:

  • удалить первый (крайний левый) элемент последовательности.

Например, за один ход из последовательности \([3, 1, 4, 3]\) получится последовательность \([1, 4, 3]\), которая состоит из различных чисел.

Определите, какое минимальное количество ходов ему надо сделать, чтобы в оставшейся последовательности все элементы были различны. Иными словами, найдите длину наименьшего префикса заданной последовательности \(a\), после удаления которого все значения в последовательности будут уникальны.

Входные данные

В первой строке входных данных записано единственное целое число \(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 n\)) — элементы заданной последовательности \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке — минимальное количество элементов, которые надо удалить из начала последовательности, чтобы все оставшиеся элементы оказались различны.

Примечание

Ниже перечислены последовательности, которые останутся после удаления префиксов:

  • \([1, 4, 3]\);
  • \([1]\);
  • \([1]\);
  • \([6, 5, 4, 3, 2, 1]\);
  • \([2, 1]\).

Легко увидеть, что все оставшиеся последовательности содержат только различные элементы. В каждом наборе входных данных был удалён самый короткий из подходящих префиксов.

C. Минимальное разнообразное число

жадные алгоритмы *800

Найдите минимальное число с заданной суммой цифр \(s\) такое, что все цифры в нем различны.

Например, если \(s=20\), то ответ равен \(389\). Это минимальное число, в котором все цифры различны, а сумма цифр равна \(20\) (\(3+8+9=20\)).

Для заданного \(s\) выведите искомое число.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 45\)) — количество наборов входных данных в тесте.

Каждый набор данных задаётся строкой, которая содержит целое число \(s\) (\(1 \le s \le 45\)).

Выходные данные

Выведите \(t\) целых чисел — ответы на заданные наборы входных данных.

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\). Пары можно выводить в любом порядке.

Если вариантов ответа несколько, выведите любой из них.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных невозможно сделать все буквы текста красными.

A. Хмурогруз

жадные алгоритмы Конструктив математика *800

Сережа пошел с Марго в магазин «Хмурогруз», который можно представить как матрицу из \(n\) рядов и \(m\) столбцов.

За \(1\) единицу энергии Сережа и Марго могут перейти в соседнюю по стороне клетку. Для ускорения процесса Марго захватила с собой порталы, и в каждой клетке, через которую она проходит, она оставляет один портал (если его там еще нет). Если кто-либо (Сережа или Марго) находится в клетке с порталом, то за \(1\) единицу энергии он может телепортироваться в любую другую клетку с порталом, включая ту, из которой Марго начала.

Они решили разделиться: Сереже надо попасть из верхней левой клетки (клетка с координатами \((1, 1)\)) в нижнюю правую (клетка с координатами \((n, m)\)), а Марго из нижней левой (клетка с координатами \((n, 1)\)) в верхнюю правую (клетка с координатами \((1, m)\)).

За какое минимальное суммарное количество энергии у них это получится сделать?

Обратите внимание, что они могут выбирать время для своих движений. Время не влияет на энергию.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка набора входных данных содержит два целых числа: \(n\) и \(m\) (\(1 \le n, m \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных они могут придерживаться следующего плана:

  1. Марго (красный кружок) идет в клетку \((7, 3)\). Затем она направляется в клетку \((1, 3)\), и Сережа (синий кружок) тоже идет туда.
  2. Сережа пользуется порталом в этой клетке (клетки с порталами отмечены серым) и попадает в клетку \((7, 3)\). Затем он идет в свой пункт назначения — клетку \((7, 5)\).
  3. Марго также направляется к концу своего маршрута и попадает в клетку \((1, 5)\).

Суммарная затраченная энергия \((2 + 6) + (2 + 1 + 2) + (2)= 15\), что является ответом.

B. Красивый массив

жадные алгоритмы Конструктив математика *1000

Сережа называет красотой массива \(a\) длины \(n\), состоящего из целых неотрицательных чисел, следующее: \(\)\sum\limits_{i = 1}^{n} \left \lfloor \frac{a_{i}}{k} \right \rfloor,\(\) что означает, что мы делим каждое число нацело на \(k\), округляем вниз и складываем полученные значения.

Сережа сказал Марго число \(k\) и попросил ее найти такой массив \(a\) длины \(n\), состоящий из целых неотрицательных чисел, что его красота равна \(b\) и сумма его элементов равна \(s\). Помогите Марго — найдите любой массив, который подходит под эти условия.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит четыре целых числа \(n\), \(k\), \(b\), \(s\) (\(1 \leq n \leq 10^{5}\), \(1 \leq k \leq 10^{9}\), \(0 \leq b \leq 10^{9}\), \(0 \leq s \leq 10^{18}\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если такого массива \(a\) не существует. Иначе выведите \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_{i} \leq 10^{18}\)) — ответ на задачу.

Примечание

В первом, втором, пятом и шестом наборах входных данных можно показать, что ответа не существует.

В третьем наборе входных данных подходит массив \(a = [0, 0, 19]\). Сумма элементов в нем равна 19, а его красота равна \(\left ( \left \lfloor \frac{0}{6} \right \rfloor + \left \lfloor \frac{0}{6} \right \rfloor + \left \lfloor \frac{19}{6} \right \rfloor \right ) = (0 + 0 + 3) = 3\).

В четвертом наборе входных данных подходит массив \(a = [0, 3, 3, 3, 29]\). Сумма элементов в нем равна \(38\), а его красота равна \((0 + 0 + 0 + 0 + 7) = 7\).

D. 2+ стула

2-sat битмаски графы жадные алгоритмы *1900

У куратора из Омеги есть массив целых чисел \(a\) длины \(n\), и он может сказать вам только число \(n\) и \(q\) утверждений про массив, каждое из которых записывается как \(i, j, x\), что означает, что \(a_i \mid a_j = x\), где \(|\) обозначает операцию побитового ИЛИ.

Найдите массив \(a\), если про него также известно, что он лексикографически минимален среди всех массивов, которые удовлетворяют условиям.

Массив \(a\) лексикографически меньше массива \(b\) такой же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент меньше, чем соответствующий элемент в \(b\).
Входные данные

В первой строке вводятся два целых числа \(n\) и \(q\) (\(1 \le n \le 10^5\), \(0 \le q \le 2 \cdot 10^5\)).

В каждой из следующих \(q\) строк содержится три целых числа \(i\), \(j\) и \(x\) (\(1 \le i, j \le n\), \(0 \le x < 2^{30}\)) — утверждения про массив.

Гарантируется, что всегда существует такой массив, для которого выполняются все \(q\) условий.

Выходные данные

На одной строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — массив \(a\).

Примечание

В первом примере под условия подходят следующие массивы:

  • \([0, 3, 2, 2]\),
  • \([2, 1, 0, 0]\),
  • \([2, 1, 0, 2]\),
  • \([2, 1, 2, 0]\),
  • \([2, 1, 2, 2]\),
  • \([2, 3, 0, 0]\),
  • \([2, 3, 0, 2]\),
  • \([2, 3, 2, 0]\),
  • \([2, 3, 2, 2]\).

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 единиц времени.

A. 2-3 ходы

жадные алгоритмы математика *800

Вы стоите в точке \(0\) на координатной прямой. Ваша задача — достичь точки \(n\). За одну минуту вы можете переместиться на \(2\) или на \(3\) налево или направо (то есть если ваша текущая позиция равна \(x\), она может стать \(x-3\), \(x-2\), \(x+2\) или \(x+3\)). Заметьте, что новая позиция может стать отрицательной.

Ваша задача — найти минимальное количество минут, необходимое для того, чтобы попасть из точки \(0\) в точку \(n\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) строк, описывающих наборы.

В \(i\)-й из этих строк находится одно целое число \(n\) (\(1 \le n \le 10^9\)) — цель \(i\)-го набора тестовых данных.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество минут, необходимое для того, чтобы попасть из точки \(0\) в точку \(n\) в соответствующем наборе тестовых данных.

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\).

Выходные данные

На каждый набор входных данных выведите одно целое число — минимальное количество секунд, которые могут потребоваться роботу, чтобы посетить все клетки, не входя ни в какую клетку дважды или больше.

C. Мадока и формальное условие

жадные алгоритмы *1300

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\). За одну операцию можно сделать \(a_i := a_i + 1\), если \(i < n\) и \(a_i \leq a_{i + 1}\), либо \(i = n\) и \(a_i \leq a_1\).

Нужно проверить, может ли за какое-то количество операций (возможно, ноль) массив \(a_1, a_2, \ldots, a_n\) стать равным массиву \(b_1, b_2, \ldots, b_n\). Два массива \(a\) и \(b\) длины \(n\) называются равными, если \(a_i = b_i\) для всех целых чисел \(i\) от \(1\) до \(n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 4 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных записано единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) – длина массива.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) – элементы массива \(a\).

В третьей строке каждого набора входных данных записаны \(n\) целых чисел \(b_1, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) – элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если можно получить массив \(b\), иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных массив \(a\) уже равен массиву \(b\).

Во втором наборе входных данных нельзя получить массив \(b\), потому что для этого нам нужно уменьшить \(a_1\).

В пятом наборе входных данных мы можем применять по порядку операции к элементам с индексами \(4, 3, 3,2,2,2,1,1,1,1\), после чего получить массив \([5,5,5,5,5]\). После этого можно применить по порядку операции к элементам с индексами \(5,4,4,3,1\) и уже получить массив \([6,5,6,7,6]\).

D. Мадока и коррупционная схема

жадные алгоритмы Комбинаторика Конструктив математика *1900

Мадоке решили доверить организацию крупного турнира по компьютерной игре «OSU»!

В данном турнире матчи проходят по «олимпийской системе». Другими словами, в турнире участвуют \(2^n\) участников, пронумерованных целыми числами от \(1\) до \(2^n\). Всего в турнире происходит \(n\) раундов. В \(i\)-м раунде проходят \(2^{n - i}\) матчей между двумя игроками (один из которых правый, другой левый), после которых победители проходят дальше по турнирной сетке, а проигравшие участники выбывают из турнира. При этом относительный порядок в следующем раунде не меняется. А победитель в турнире — последний оставшийся участник.

Но чем меньше номер участника, тем больше он заплатит Мадоке в случае победы, поэтому Мадока хочет, чтобы победил участник с наименьшим номером. Для этого она может как угодно расставить участников в первом раунде, а также для каждого матча определить кто победит — участник слева или справа.

Но Мадока знает, что спонсоры турнира могут не более \(k\) раз поменять победителя в матчах. (То есть если до изменения побеждал участник слева, то после изменения будет побеждать участник справа, а если побеждал участник справа, то после изменения будет побеждать участник слева).

Так, на первом изображении показана турнирная сетка, которую сделала Мадока, где красные линии показывают, кто должен победить в матче. А на втором показана турнирная сетка, после одного измения исхода матча спонсорами (матч между игроками \(1\) и \(3\)).

Выведите минимально возможный номер победителя в турнире, который Мадока может гарантированно получить вне зависимости от изменений спонсоров. Но так как ответ может быть очень большим выведите его по модулю \(10^9 + 7\). Обратите внимание, нам нужно минимизировать ответ, а только потом взять его по модулю.

Входные данные

В первой и единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5, 1 \le k \le \min(2^n - 1, 10^9)\)) — количество раундов в турнире и количество исходов, которые спонсоры могут изменить.

Выходные данные

Выведите ровно одно целое число — минимальный номер победителя по модулю \(10^9 + 7\)

Примечание

В первом примере проходит всего один матч между игроками \(1\) и \(2\), поэтому спонсоры всегда смогут сделать так, чтобы выигрывал игрок \(2\).

Схема турнира из второго примера изображена на картинке в условии.

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\) секунды.

B. Фибоначчиевы строки

жадные алгоритмы математика реализация теория чисел *2000

Во всех школах Бурятии в \(1\) классе всем рассказывают теорию фибоначчиевых строк.

«Блок — это подотрезок строки, все буквы которого одинаковы, а слева и справа он ограничен концами строки или отличными от букв в блоке буквами. Строка называется фибоначчиевой, если при разбиении её на блоки их длины в порядке следования в строке составляют последовательность чисел Фибоначчи (\(f_0 = f_1 = 1\), \(f_i = f_{i-2} + f_{i-1}\)), начиная с нулевого члена последовательности. Строка называется полуфибоначчиевой, если хотя бы одна из перестановок её букв является фибоначчиевой строкой.»

Бурёнка решила поступать в Бурятский государственный университет, но на вступительном экзамене ей дали непростую задачу. Ей дали строку, состоящую из букв бурятского алфавита (в котором ровно \(k\) букв), и спросили, является ли данная ей строка полуфибоначчиевой. Так как строка могла быть очень длинной, ей сообщили только число вхождений каждой буквы алфавита (\(c_i\) для \(i\)-й буквы) в эту строку. К сожалению, Бурёнка уже не помнит теорию фибоначчиевых строк, поэтому без вашей помощи она не поступит в университет.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(k\) (\(1 \leq k \leq 100\)) — количество букв в алфавите.

Вторая строка каждого набора входных данных содержит \(k\) целых чисел \(c_1, c_2, \ldots, c_k\) (\(1 \leq c_i \leq 10^9\)) — число вхождений каждой из букв в строку.

Выходные данные

Для каждого набора входных данных выведите строку «YES», если соответствующая строка является полуфибоначчиевой, и «NO», если не является.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных строка из одного символа является полуфибоначчиевой, являясь сама по себе фибоначчиевой строкой.

Во втором наборе входных данных строка из двух различных символов является фибоначчиевой.

В третьем наборе входных данных строка «abb» (пусть первая буква — a, вторая — b) не является полуфибоначчиевой строкой, так как все перестановки её букв («abb», «bab» и «bba») не являются фибоначчиевыми строками.

В четвёртом наборе входных данных две перестановки букв строки «abaccac» (первая буква — a, вторая — b, третья — c) являются фибоначчиевыми строками — «abaaccc» и «cbccaaa».

C. Тоня и Бурёнка-179

жадные алгоритмы математика Структуры данных теория чисел *2400

Тоне на день рождения подарили массив \(a\) длины \(n\), записанный на открытке. По какой-то причине открытка оказалась циклическим массивом, поэтому индекс элемента, находящегося строго справа от \(n\)-го, равен \(1\). Тоня захотел получше изучить её, поэтому он купил робота «Бурёнка-179».

Программа для «Бурёнки» задается парой чисел \((s, k)\), \(1 \leq s \leq n\), \(1 \leq k \leq n-1\). Обратите внимание, что \(k\) не может быть равно \(n\). Изначально Тоня ставит робота в позицию \(s\) массива. После этого «Бурёнка» сделает ровно \(n\) шагов по массиву. Если в начале очередного шага «Бурёнка» стоит в позиции \(i\), то происходит следующее:

  1. К полезности программы добавляется число \(a_{i}\).
  2. «Бурёнка» перемещается на \(k\) позиций вправо (выполняется \(i := i + k\), если \(i\) станет больше \(n\), то \(i := i - n\)).

Помогите Тоне найти максимальную возможную полезность программы для «Бурёнки», если изначальная полезность любой программы равна \(0\).

Кроме того, друг Тони Илюша \(q\) раз просит изменить массив. Каждое изменение состоит в присваивании \(a_p := x\) для некоторых чисел \(p\) и \(x\). Вам необходимо найти максимальную возможную полезность программы после каждого из таких изменений.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \le q \le 2 \cdot 10^5\)).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

В следующих \(q\) строках находятся описания изменений, каждое из которых состоит из двух целых чисел \(p\) и \(x\) (\(1 \leq p \leq n\), \(1 \leq x \leq 10^9\)), означающих, что необходимо выполнить \(a_p := x\).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем тестам не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимальную полезность программы изначально и после каждого запроса.

Примечание

В первом наборе входных данных изначально и после каждого запроса ответ достигается при \(s = 1\), \(k = 1\) или \(s = 2\), \(k = 1\).

Во втором наборе входных данных изначально ответ достигается при \(s = 1\), \(k = 2\) или \(s = 3\), \(k = 2\). После первого запроса ответ достигается при \(s = 2\), \(k = 2\) или \(s = 4\), \(k = 2\).

D. Перестановка для Бурёнки

Деревья жадные алгоритмы математика Паросочетания Структуры данных *3300

Назовем массив \(a\) чистым, если в нем все элементы попарно различны. Например, массив \([1, 7, 9]\) — чистый, а \([1, 3, 3, 7]\) — нет, ведь \(3\) встречается в нем дважды.

Чистый массив \(b\) похож на чистый массив \(c\), если их длина \(n\) одинакова, и для всех пар индексов \(l\), \(r\) таких, что \(1 \le l \le r \le n\), выполняется \(\)\operatorname{argmax}([b_l, b_{l + 1}, \ldots, b_r]) = \operatorname{argmax}([c_l, c_{l + 1}, \ldots, c_r]),\(\) где \(\operatorname{argmax}(x)\) — индекс наибольшего элемента в \(x\) (уникального для чистых массивов). Например, \(\operatorname{argmax}([3, 4, 2]) = 2\), \(\operatorname{argmax}([1337, 179, 57]) = 1\).

Недавно Тоня узнал, что Бурёнке очень нравится перестановка \(p\) длины \(n\). Тоня решил обрадовать Бурёнку и подарить ей массив \(a\), похожий на \(p\). Он уже зафиксировал некоторые элементы \(a\), но ровно \(k\) элементов отсутствуют (в этих позициях сейчас \(a_i = 0\)). Гарантируется, что \(k \ge 2\). Кроме того, у Тони есть множество \(S\) из \(k - 1\) числа.

Тоня понял, что для того, чтобы заполнить пропуски в массиве \(a\) ему не хватает одного числа, поэтому он решил купить его. У него есть \(q\) вариантов покупки. Тоня считает, что число \(d\) подходит ему, если можно заполнить пропуски в \(a\) числами из \(S\) и числом \(d\) так, чтобы \(a\) стал чистым массивом, похожим на \(p\). Для каждого варианта покупки числа \(d\) выведите, подходит ли Тоне это число или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — длина перестановки и количество вариантов покупки.

Во второй строке каждого набора входных данных содержатся \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — перестановка, которая нравится Бурёнке.

В третьей строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — элементы массива, где \(0\) означает место, которое нужно заполнить. Гарантируется, что существуют два индекса \(i, j\) \((1 \le i, j \le n, i \ne j)\) такие, что \(a_i = 0, a_j = 0\) из чего следует, что \(k \geq 2\).

В четвертой строке каждого набора входных данных содержится \(k - 1\) число \(s_1, s_2, \ldots, s_{k-1}\) (\(1 \le s_i \le 10^6\)) — числа, которые есть у Тони во множестве \(S\).

Каждая из следующих \(q\) строк содержит одно целое число \(d\) (\(1 \le d \le 10^6\)) – число, которое планирует купить Тоня.

Гарантируется, что для каждого данного \(d\) существует способ заполнить пропуски в \(a\) числами из \(S\) и числом \(d\) так, чтобы получить чистый массив.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем тестам не превосходят \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. Для каждого значения \(d\) выведите «YES», если существует способ заполнить массив \(a\), сделав его похожим на \(p\), и «NO» в противном случае.

Примечание

В первом наборе входных данных для \(d = 9\) можно получить \(a = [5, 9, 7, 6]\), можно доказать, что такое \(a\) похоже на \(p\), для \(d=1\) и \(d=4\) можно доказать, что ответа не существует.

Во втором наборе входных данных для \(d = 1\) можно получить \(a = [1, 5, 10, 9, 3]\), для \(d = 8\) можно получить \(a = [3, 5, 10, 9, 8]\), можно доказать, что для \(d = 11\) ответа не существует.

B. Интересная сумма

жадные алгоритмы математика Перебор сортировки Структуры данных *800

Дан массив \(a\) длины \(n\). Вы можете выбрать любой подотрезок \(a_l, a_{l + 1}, \ldots, a_r\) массива длины, не совпадающий со всем массивом, то есть, для которого \(1 \le l \le r \le n\) и \(r - l + 1 < n\). Красотой выбранного подоторезка назовем значение

\(\)\max(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) - \min(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) + \max(a_{l}, \ldots, a_{r}) - \min(a_{l}, \ldots, a_{r}).\(\)

Найдите максимальную красоту подотрезка среди всех возможных допустимых подотрезков массива (за исключением всего массива).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) \((4 \leq n \leq 10^5)\) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_{i} \leq 10^9\)) — элементы данного массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — искомое максимальное значение красоты.

Примечание

В первом тесте из условия оптимально выбрать отрезок \(l = 7\), \(r = 8\). Красота этого отрезка равна \((6 - 1) + (5 - 1) = 9\).

Во втором тесте из условия оптимально выбрать отрезок \(l = 2\), \(r = 4\). Красота этого отрезка равна \((100 - 2) + (200 - 1) = 297\).

C. Уголки

жадные алгоритмы реализация *1200

Вам дана таблица из \(n\) строк и \(m\) столбцов, в каждой клетке которой записано число \(0\) или число \(1\).

Уголком будем называть любой квадратик \(2 \times 2\) без одной угловой клетки. Вы хотите добиться того, что в таблице не останется ни одной единицы. За одну операцию вы можете выбрать любой уголок, который содержит хотя бы одну \(1\), и заменить все числа в уголке на нули.

Вам очень нравится ваша таблица, поэтому вы хотите определить, какое максимальное количество операций вы можете сделать перед тем, как в таблице останутся лишь нули.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 500\)) — размеры таблицы.

В каждой из следующих \(n\) строк бинарная строка длины \(m\) — описание таблицы.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(1000\).

Выходные данные

Для каждого набора входных данных выведите единственное число — искомое максимальное количество операций.

Примечание

В первом тестовом случае одним из возможных способов оптимально выполнить операции является следующий (жирным шрифтом выделяется треугольник, на котором была выполнена операция):

  • Матрица до выполнения каких либо операций:
    101
    111
    011
    110
  • Матрица после выполнения \(1\) операции:
    100
    101
    011
    110
  • Матрица после выполнения \(2\) операций:
    100
    100
    011
    110
  • Матрица после выполнения \(3\) операций:
    100
    100
    010
    110
  • Матрица после выполнения \(4\) операций:
    100
    000
    010
    110
  • Матрица после выполнения \(5\) операций:
    100
    000
    010
    100
  • Матрица после выполнения \(6\) операций:
    100
    000
    000
    100
  • Матрица после выполнения \(7\) операций:
    000
    000
    000
    100
  • Матрица после выполнения \(8\) операций:
    000
    000
    000
    000

В третьем тестовом случае из примера мы не можем выполнить ни одной операции, так как в изначальной таблице нет единиц.

В четвертом тестовом случае из примера вне зависимости от выбора первого уголка у нас всегда останется единственная единичка. Поэтому всего мы применим \(2\) операции.

E. Миша и раскраски

жадные алгоритмы Конструктив математика реализация Структуры данных *2700

Недавно Миша нашел квадратную матрицу \(n \times n\), где в клетке на пересечении строки \(i\) и столбца \(j\) записано число \(a_{i, j}\). После этого Миша решил немного изменить матрицу, чтобы количество различных чисел в ней стало ровно \(k\). Для этого он может любое число раз (возможно, ноль) применить следующую операцию:

  1. выбрать любую квадратную подматрицу (выбираются \((x_1,y_1)\), \((x_2,y_2)\), такие что \(x_1 \leq x_2\), \(y_1 \leq y_2\), \(x_2 - x_1 = y_2 - y_1\), тогда подматрицей называется множество клеток с координатами \((x, y)\), такими что \(x_1 \leq x \leq x_2\), \(y_1 \leq y \leq y_2\)),
  2. выбрать число \(k\), где \(1 \leq k \leq n^2\),
  3. заменить все числа в выбранной подматрице на \(k\).

Пожалуйста, найдите минимальное количество операций, которые нужны, чтобы Миша достиг своей цели.

Входные данные

В первой строке находятся числа \(n\) и \(k\) (\(1 \leq n \leq 500, 1 \leq k \leq n^2\))— размер матрицы и требуемое количество различных чисел .

Далее следуют \(n\) строк. \(i\)-я из них содержит \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\) (\(1 \leq a_{i,j} \leq n^2\)) — элементы \(i\)-й строки матрицы.

Выходные данные

Выведите одно число — искомое минимальное число операций.

Примечание

В первом примере ответ \(1\), так как можно заменить число в правом нижнем углу таблички на \(1\). Получится такая матрица:

111
112
341

Во втором примере ответ \(2\). Можно сначала заменить все значения матрицы на \(1\), а потом заменить число в любой клетке на \(2\). Получится такая матрица:

111
111
112

A. Изображение

жадные алгоритмы реализация *800

У вас есть файл с изображением размера \(2 \times 2\), состоящего из \(4\) пикселей. Каждый пиксель может иметь один из \(26\) различных цветов, обозначаемых строчными буквами латинского алфавита.

Вы хотите перекрасить некоторые пиксели изображения таким образом, чтобы все \(4\) пикселя имели одинаковый цвет. За один ход вы можете выбрать не более двух пикселей одного цвета и покрасить их в какой-то другой цвет (если вы выбираете какие-то два пикселя, они должны быть покрашены в один и тот же цвет).

Чему равно минимальное количество ходов, которое вам необходимо сделать, чтобы достичь цели?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных.

Каждый набор тестовых данных состоит из двух строк. Каждая из этих строк содержит две строчные буквы латинского алфавита без каких-либо разделителей, обозначающих ряд пикселей в изображении.

Выходные данные

Для каждого набора тестовых данных выведите одно число — минимальное количество ходов, необходимое для того, чтобы все \(4\) пикселя изображения имели одинаковый цвет.

Примечание

Давайте проанализируем наборы тестовых данных из примера.

В первом наборе вы можете покрасить левый нижний пиксель и правый верхний пиксель (которые имеют одинаковый цвет) в цвет r, таким образом все пиксели будут иметь этот цвет.

Во втором наборе тестовых данных достаточно двух ходов:

  • покрасить оба верхних пикселя, которые имеют одинаковый цвет c, в цвет b;
  • покрасить левый нижний пиксель в цвет b.

В третьем наборе тестовых данных все пиксели уже имеют одинаковый цвет.

В четвертом наборе тестовых данных вы можете оставить один любой пиксель неизменным и покрасить три остальных пикселя в его цвет за три хода.

В пятом наборе тестовых данных вы можете покрасить оба верхних пикселя в цвет x.

C. Мин-макс преобразование массива

Бинарный поиск жадные алгоритмы *1400

Вам задан отсортированный массив \(a_1, a_2, \dots, a_n\). Вы решили получить из него массив \(b_1, b_2, \dots, b_n\) следующим образом:

  1. Создайте массив \(d\), состоящий из \(n\) произвольных неотрицательных целых чисел.
  2. Присвойте \(b_i = a_i + d_i\) для каждого \(b_i\).
  3. Отсортируйте массив \(b\) в порядке неубывания.

Вам задан полученный в результате массив \(b\). Посчитайте для каждого \(i\), какое минимально и максимально возможное значение \(d_i\) вы можете выбрать так, чтобы было возможно получить массив \(b\).

Заметим, что минимальные (максимальные) \(d_i\) считаются независимо друг от друга, т. е. могут быть получены из разных подходящих массивов \(d\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массивов \(a\), \(b\) и \(d\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\); \(a_i \le a_{i+1}\)) — массив \(a\) в порядке неубывания.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\); \(b_i \le b_{i+1}\)) — массив \(b\) в порядке неубывания.

Дополнительные ограничения на входные данные:

  • существует хотя бы один способ выбрать массив \(d\), состоящий из неотрицательных целых чисел, чтобы получить массив \(b\) из \(a\);
  • сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите две строки. Во-первых, выведите \(n\) целых чисел \(d_1^{min}, d_2^{min}, \dots, d_n^{min}\), где \(d_i^{min}\) — минимально возможное значение, которое можно прибавить к \(a_i\).

Во-вторых, выведите \(n\) целых чисел \(d_1^{max}, d_2^{max}, \dots, d_n^{max}\), где \(d_i^{max}\) — максимально возможное значение, которое можно добавить к \(a_i\).

Все \(d_i^{min}\) и \(d_i^{max}\) считаются независимо друг от друга. Другими словами, для каждого \(i\), \(d_i^{min}\) — это просто минимальное значение среди всех возможных \(d_i\).

Примечание

В первом наборе входных данных, для получения \(d_1^{min} = 5\) можно выбрать, например, \(d = [5, 10, 6]\). Тогда \(b\) \(=\) \([2+5,3+10,5+6]\) \(=\) \([7,13,11]\) \(=\) \([7,11,13]\).

Для \(d_2^{min} = 4\) можно выбрать \(d\) \(=\) \([9, 4, 8]\). Тогда \(b\) \(=\) \([2+9,3+4,5+8]\) \(=\) \([11,7,13]\) \(=\) \([7,11,13]\).

D. Максимальное И

битмаски жадные алгоритмы поиск в глубину и подобное разделяй и властвуй сортировки *1800

Вам даны два массива \(a\) и \(b\), состоящие из \(n\) целых чисел каждый.

Определим функцию \(f(a, b)\) следующим образом:

  • определим массив \(c\) размера \(n\), где \(c_i = a_i \oplus b_i\) (\(\oplus\) обозначает операцию побитового исключающего ИЛИ);
  • значением функции является \(c_1 \mathbin{\&} c_2 \mathbin{\&} \cdots \mathbin{\&} c_n\) (т.е. побитовое И всех элементов массива \(c\)).

Найдите максимальное значение функции \(f(a, b)\), если вы можете переупорядочить элементы массива \(b\) произвольным образом (также можно оставить первоначальный порядок).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — размеры массивов \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < 2^{30}\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < 2^{30}\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение функции \(f(a, b)\), если вы можете переупорядочить элементы массива \(b\) произвольным образом.

D. Ряд

жадные алгоритмы сортировки *1100

В ряд вдоль одной линии стоят \(n\) человек, каждый смотрит либо влево, либо вправо.

Каждый человек посчитал количество людей, которое он видит (то есть количество человек в направлении его взгляда). Назовём величиной ряда сумму посчитанных значений.

Например, если люди стоят следующим образом: LRRLL, где L обозначает человека в направлении «влево», а R обозначает человека в направлении «вправо», то посчитанные значения равны \([0, 3, 2, 3, 4]\), а величина ряда равна \(0+3+2+3+4=12\).

Вам задано начальное расположение людей вдоль линии. Для каждого \(k\) от \(1\) до \(n\), определите максимальную возможную величину ряда, если вы можете изменить направление не более чем у \(k\) человек.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — количество человек в ряду.

Следующая строка состоит из \(n\) символов, каждый из которых либо L, либо R — строка описывает направления для всех людей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Обратите внимание, что ответ для некоторых наборов входных данных может не поместиться в 32-битный тип данных, поэтому вы должны использовать 64-битный тип данных из вашего языка программирования (например, long long в C++).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — для всех \(k\) от \(1\) до \(n\) выведите максимальное значение ряда, если можно изменить направление не более чем \(k\) человек в ряду.

Примечание

В первом наборе входных данных примера:

  • \(k=1\): изменим направление \(1\)-го человека, чтобы достичь состояния RLR. В этом случае величина ряда равна \(2+1+0=3\).
  • \(k=2\): изменим направление \(2\)-х человек, чтобы ряд принял вид RLL. В этом случае величина ряда будет равна \(2+1+2=5\).
  • \(k=3\): изменим направление \(2\)-х человек, чтобы ряд принял вид RLL. В этом случае величина ряда будет равна \(2+1+2=5\) (обратите внимание, что можно менять направление \(k\) или меньше людей).

Во втором наборе входных данных примера для каждого \(k\) от \(1\) до \(5\) достаточно только лишь менять направление одного первого человека (чтобы ряд принял вид RRRLL).

G. Чётный-нечётный XOR

битмаски жадные алгоритмы Конструктив *1500

Дано целое число \(n\), найдите любой массив \(a\), состоящий из \(n\) различных неотрицательных целых чисел, меньших \(2^{31}\), такой, что побитовый XOR элементов на нечетных позициях равен побитовому XOR элементов на четных позициях.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 629\)) — количество наборов входных данных.

Затем следуют \(t\) строк, каждая содержит одно целое число \(n\) \((3 \leq n \leq 2\cdot10^5)\) — длина массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) различных целых чисел, которые удовлетворяют условиям.

Если ответов несколько, выведите любой.

Примечание

В первом наборе входных данных XOR на нечетных позициях равен \(4 \oplus 1 \oplus 0 \oplus 7 = 2\) и XOR на четных позициях \(2 \oplus 5 \oplus 6 \oplus 3= 2\).

B. Basketball Together

Бинарный поиск жадные алгоритмы сортировки *1000

A basketball competition is held where the number of players in a team does not have a maximum or minimum limit (not necessarily \(5\) players in one team for each match). There are \(N\) candidate players in the competition that will be trained by Pak Chanek, the best basketball coach on earth. The \(i\)-th candidate player has a power of \(P_i\).

Pak Chanek will form zero or more teams from the \(N\) candidate players on the condition that each candidate player may only join in at most one team. Each of Pak Chanek's teams will be sent to compete once with an enemy team that has a power of \(D\). In each match, the team sent is said to defeat the enemy team if the sum of powers from the formed players is strictly greater than \(D\).

One of Pak Chanek's skills is that when a team that has been formed plays in a match, he can change the power of each player in the team to be equal to the biggest player power from the team.

Determine the maximum number of wins that can be achieved by Pak Chanek.

Input

The first line contains two integers \(N\) and \(D\) (\(1 \le N \le 10^5\), \(1 \le D \le 10^9\)) — the number of candidate players and the power of the enemy team.

The second line contains \(N\) integers \(P_1, P_2, \ldots, P_N\) (\(1 \le P_i \le 10^9\)) — the powers of all candidate players.

Output

A line containing an integer representing the maximum number of wins that can be achieved by Pak Chanek.

Note

The \(1\)-st team formed is a team containing players \(4\) and \(6\). The power of each player in the team becomes \(100\). So the total power of the team is \(100 + 100 = 200 > 180\).

The \(2\)-nd team formed is a team containing players \(1\), \(2\), and \(5\). The power of each player in the team becomes \(90\). So the total power of the team is \(90 + 90 + 90 = 270 > 180\).

A. Mainak и массив

жадные алгоритмы математика *900

У Mainak есть массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Он сделает следующую операцию с данным массивом ровно один раз:

  • Выбрать подотрезок массива и циклически сдвинуть его на любую величину.
Формально, он может сделать следующее ровно один раз:
  • Выбрать целые числа \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и любое целое неотрицательное число \(k\).
  • Повторить \(k\) раз: установить \(a_l=a_{l+1}, a_{l+1}=a_{l+2}, \ldots, a_{r-1}=a_r, a_r=a_l\) (все изменения происходят одновременно).

Mainak хочет максимизировать значение \((a_n - a_1)\) после применения ровно одной такой операции. Определите максимальное значение \((a_n - a_1)\), которое он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 2000\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 999\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное значение \((a_n - a_1)\), которое Mainak может получить.

Примечание
  • В первом наборе входных данных мы можем сдвинуть подмассив с индекса \(3\) до индекса \(6\) на \(2\) (т.е.. выбрать \(l = 3\), \(r = 6\) и \(k = 2\)), чтобы получить оптимальный массив: \(\)[1, 3, \underline{9, 11, 5, 7}] \longrightarrow [1, 3, \underline{5, 7, 9, 11}]\(\) Тогда ответ равен \(a_n - a_1 = 11 - 1 = 10\).
  • Во втором наборе входных данных оптимально сдвинуть подмассив, начинающийся и заканчивающийся в индексе \(1\), на величину \(2\).
  • В четвёртом наборе входных данных оптимально сдвинуть подмассив с индекса \(1\) до индекса \(4\) на величину \(3\). Тогда ответ равен \(8 - 1 = 7\).

C. Правильная скобочная последовательность Jatayu

графы жадные алгоритмы снм Структуры данных *1300

Прошлым летом Feluda подарил Lalmohan-Babu правильную скобочную последовательность \(s\) длины \(2 n\).

Topshe скучал во время летних каникул, и поэтому решил нарисовать неориентированный граф из \(2 n\) вершин, используя правильную скобочную последовательность \(s\). Для каждых двух различных вершин \(i\) и \(j\) (\(1 \le i < j \le 2 n\)) Topshe рисует ребро между этими двумя вершинами тогда и только тогда, когда подотрезок \(s[i \ldots j]\) образует правильную скобочную последовательность.

Определите количество компонент связности в графе Topshe.

Смотрите определения подчёркнутых терминов в Примечании.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество открывающих скобок в строке \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(2 n\) — правильная скобочная последовательность, состоящая из \(n\) открывающих скобок «(» и \(n\) закрывающих скобок «)».

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество компонент связности в графе Topshe.

Примечание

Объяснение примера:

В первом наборе входных данных, граф, построенный из скобочной последовательности (), является просто графом, содержащим вершины \(1\) и \(2\), соединёнными единственным ребром.

Во втором наборе входных данных, граф, построенный из скобочной последовательности ()(()) будет следующим (содержит две компоненты связности):

Определения подчёркнутых терминов:

  • Последовательность скобок является правильной, если её можно превратить в корректное математическое выражение путём добавления символов \(+\) и \(1\). Например, последовательности (())(), () и (()(())) являются правильными, а )(, (() и (()))( не являются.
  • Подотрезок \(s[l \ldots r]\) обозначает последовательность \([s_l, s_{l + 1}, \ldots, s_r]\).
  • Компонента связности является множеством вершин \(X\) таким, что для каждых двух вершин из этого множества существует хотя бы один путь в графе, соединяющий эти вершины, но добавление любой другой вершины в \(X\) нарушает это правило.

F. Опоздать на работу (отправка решений запрещена)

жадные алгоритмы кратчайшие пути расписания Структуры данных *2900

Эта задача была скопирована автором с другой платформы. Codeforces категорически осуждает такое действие, поэтому дальнейшие посылки по этой задаче не будут приняты.

Debajyoti предстоит очень важная встреча, и он уже очень опаздывает. Harsh, его водитель, должен как можно быстрее доставить Debajyoti к месту встречи.

Harsh должен забрать Debajyoti из его дома и отвезите его к месту назначения, чтобы Debajyoti успел вовремя посетить встречу. Прямая дорога с \(n\) светофорами соединяет дом и место проведения интервью. Светофоры пронумерованы по порядку от \(1\) до \(n\).

Каждый светофор зацикливается через \(t\) секунд. \(i\)-й светофор горит \(\color{green}{\text{зелёным}}\) (в этом случае Harsh может проехать светофор) первые \(g_i\) секунд, и \(\color{red}{\text{красным}}\) (в этом случае Harsh должен дождаться включения \(\color{green}{\text{зелёного}}\)) оставшиеся \((t−g_i)\) секунд, после чего схема повторяется. Цикл каждого светофора повторяется бесконечно, и изначально, \(i\)-й светофор находится на секунде \(c_i\) в своём цикле (светофор с \(c_i=0\) только что включил \(\color{green}{\text{зелёный}}\)). В случае, если Harsh приближается к светофору в то же время, когда он меняет цвет, он будет подчиняться новому цвету. Формально, \(i\)-й светофор горит \(\color{green}{\text{зелёным}}\) в отрезок времени \([0,g_i)\) и \(\color{red}{\text{красным}}\) в отрезок времени \([g_i,t)\) (после чего цикл повторяется). \(i\)-й светофор изначально находится на \(c_i\)-й секунде своего цикла.

От \(i\)-го светофора ровно \(d_i\) секунд требуются, чтобы доехать до следующего светофора (то есть до \((i+1)\)-го светофора). Дом Debajyoti расположен прямо перед первым светофором, и Debajyoti попадает на интервью как только он проезжает \(n\)-й светофор. Другими словами, не требуется времени, чтобы доехать до первого светофора из дома Debajyoti или добраться до центра интервью от \(n\)-го светофора.

Harsh не знает, сколько времени потребуется Debajyoti, чтобы собраться. В ожидании он задается вопросом, какое минимально возможное количество времени ему может понадобиться провести за рулем, если он начнет движение в момент прибытия Debajyoti, которое может быть любым от \(0\) до \(\infty\) секунд от данного момента. Можете ли вы сказать Harsh минимально возможное количество времени, которое ему нужно провести в дороге?

Обратите внимание, что Harsh может начинать или останавливать движение только в целочисленные моменты времени.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(t\) (\(2 \le n \le 2 \cdot 10^5\), \(2 \le t \le 10^9\)) — количество светофоров и длину цикла светфоров соответственно.

Далее следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(g_i\) и \(c_i\) (\(1 \le g_i < t\), \(0 \le c_i < t\)), описывающие \(i\)-й светофор.

Следующая строка содержит \(n−1\) целых чисел \(d_1, d_2, \ldots, d_{n-1}\) (\(0 \le d_i \le 10^9\)) — время, нужное чтобы доехать от \(i\)-го до \((i+1)\)-го светофора.

Выходные данные

Выведите единственное целое число — минимально возможное количество времени, которое Harsh может провести в дороге.

Примечание

В первом примере мы можем сделать следующее:

  • Изначально, \(5\) светофоров находятся на следующих секундах в цикле: \(\{2,3,6,2,0\}\).
  • Оптимальное время для Harsh, чтобы начать, если Debajyoti приедет через \(1\) секунду. Заметьте, что эта \(1\) секунда не будет учитываться в финальном ответе.
  • Светофоры сейчас находятся в состоянии \(\{3,4,7,3,1\}\), поэтому Harsh может проехать от \(1\)-го светофора до \(2\)-го светофора, что требует \(1\) секунду для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{4,5,8,4,2\}\), поэтому Harsh может продолжить движение без остановки до \(3\)-го светофора, что требует \(2\) секунды для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{6,7,0,6,4\}\), поэтому Harsh продолжит движение до \(4\)-го светофора, что требует \(3\) секунды для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{9,0,3,9,7\}\). Harsh должен подождать \(1\) секунду, чтобы \(4\)-й светофор загорелся зелёным прежде чем доехать до \(5\)-го светофора, что требует \(4\) секунды для передвижения.
  • Светофоры сейчас находятся в состоянии \(\{4,5,8,4,2\}\), поэтому Harsh может продолжить передвижение без остановки до места встречи. Общее время, которое Harsh провел за рулем, равно \(1+2+3+1+4=11\) секунд.

В втором примере мы можем сделать следующее:

  • Изначально \(6\) светофоров находятся на следующих секундах в цикле: \(\{3,5,0,8,7,6\}\).
  • Оптимальным для Harsh будет начать, если Debajyoti приедет после \(1\) секунды. Заметьте, что эта \(1\) секунда не будет учитываться в финальном ответе.
  • Светофоры сейчас находятся в состоянии \(\{4,6,1,0,8,7\}\), поэтому Harsh может проехать \(1\)-го светофора до \(2\)-го, что требует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{4,6,1,0,8,7\}\). Harsh должен подождать \(3\) секунды, чтобы \(2\)-й светофор загорелся зелёным, прежде чем поехать до \(3\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры сейчас находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(4\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(5\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(6\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до места назначения без остановки. Общее время, которое Harsh проведёт в дороге равно \(0+3+0+0+0=3\) секунды.

G. Некая волшебная вечеринка

жадные алгоритмы Комбинаторика сортировки Структуры данных *3300

На вечеринке есть \(n\) человек. \(i\)-й человек имеет уровень счастья \(a_i\).

У каждого человека есть определенный тип личности, который можно представить в виде двоичного целого числа \(b\). Если \(b = 0\), то счастье человека будет увеличиваться, если он рассказывает историю кому-то со строго меньшим счастьем, чем у него. Если \(b = 1\), то счастье человека будет увеличиваться, если он рассказывает историю кому-то со строго большим счастьем, чем у него.

Давайте определим порядок выступления как порядок людей слева направо. Теперь происходит следующий процесс. Мы идем слева направо. Текущий человек говорит рассказывает историю всем остальным людям. Заметьте, что все уровни счастья остаются неизменными во время этого. После того, как человек закончил, он подсчитывает количество людей, которым он рассказывал историю и которые имеют строго меньший/больший уровень счастья, чем он, в соответствии с его типом личности, и его счастье увеличивается на это значение. Заметьте, что увеличивается уровень счастья только текущего человека.

Как организатор вечеринки, вы не хотите, чтобы кто-то ушел грустным. Следовательно, вы хотите подсчитать количество порядков выступления, чтобы в конце процесса все \(n\) человек имели равные уровни счастья.

Два порядка выступления считаются разными, если существует хотя бы один человек, не занимающий одинаковое положение в двух порядках выступления.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество людей.

Вторая строка содержит последовательность из \(n\) целых чисел \(a_1,a_2,...,a_n\) (\(1 \leq a_i \leq 2n\))  — уровни счастья.

Третья строка содержит последовательность из \(n\) двоичных чисел \(b_1,b_2,...,b_n\) (\(b_i \in \{0,1\}\))  — типы личности.

Выходные данные

Выведите количество различных допустимых последовательностей выступлений. Так как это число может быть большим, выведите его по модулю \(998244353\).

Примечание

Здесь объяснение для первого примера. Одним из корректных порядков выступлений является \([2,1,4,3]\) (здесь, мы написали индексы каждого человека). Каждый шаг показывает текущие уровни счастья и результаты.

Шаг \(1\): \([1,2,4,4]\) \(\rightarrow\) Человек \(2\) рассказывает историю остальным. Так как его тип личности равен \(1\), его счастье увеличится на \(2\), так как люди \(3\) и \(4\) имеют строго большие уровни счастья.

Шаг \(2\): \([1,4,4,4]\) \(\rightarrow\) Человек \(1\) рассказывает историю остальным. Так как его тип личности равен \(1\), его счастье увеличится на \(3\), так как люди \(2\), \(3\) и \(4\) имеют строго большие уровни счастья.

Шаг \(3\): \([4,4,4,4]\) \(\rightarrow\) Человек \(4\) рассказывает историю остальным. Так кае его тип личности равен \(0\), его счастье увеличится на \(0\), так как ни у кого нет строго меньшего уровня счастья.

Шаг \(4\): \([4,4,4,4]\) \(\rightarrow\) Человек \(3\) рассказывает историю остальным. Так как его тип личности равен \(0\), его счастье увеличится на \(0\), так как ни у кого нет строго меньшего уровня счастья.

В итоге, у всех одинаковый уровень счастья.

Заметьте, что \([2,1,3,4]\) также является корректным порядком для примера.

Можно показать, что не существует корректных порядков во втором примере.

A. Разноцветные шары: перезагрузка

жадные алгоритмы Перебор реализация сортировки *800

Название — это отсылка на самый первый Educational Round нашего авторского коллектива, Educational Round 18.

Есть мешок, в котором лежат разноцветные шары. Всего есть \(n\) различных цветов шаров, пронумерованные от \(1\) до \(n\). В мешке лежат \(\mathit{cnt}_i\) шаров цвета \(i\). Суммарное количество шаров в мешке нечетное (т. е. \(\mathit{cnt}_1 + \mathit{cnt}_2 + \dots + \mathit{cnt}_n\) нечетное).

За один ход можно выбрать два шара разных цветов и вынуть их из мешка.

В какой-то момент все оставшиеся в мешке шары станут одного цвета. Тогда вы больше не можете делать ходы.

Найдите любой возможный цвет оставшихся шаров.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 20\)) — количество цветов.

Во второй строке записаны \(n\) целых чисел \(\mathit{cnt}_1, \mathit{cnt}_2, \dots, \mathit{cnt}_n\) (\(1 \le \mathit{cnt}_i \le 100\)) — количество шаров каждого цвета в мешке.

Суммарное количество шаров в мешке нечетное (т. е. \(\mathit{cnt}_1 + \mathit{cnt}_2 + \dots + \mathit{cnt}_n\) нечетное).

Выходные данные

На каждый набор входных данных выведите одно целое число — любой возможный цвет оставшихся шаров после того как вы сделали какие-либо ходы и больше не можете делать ходы.

Примечание

В первом наборе входных данных ваш первый и единственный ход может быть одним из следующих:

  • возьмем шары с цветами \(1\) и \(2\);
  • возьмем шары с цветами \(1\) и \(3\);
  • возьмем шары с цветами \(2\) и \(3\).

После хода останется ровно один шар. Его цвет может быть \(3, 2\) или \(1\) в зависимости от хода.

Во втором наборе не получится сделать ход вообще — есть всего один цвет шаров. Этот цвет \(1\).

В третьем примере можно удалять один шар цвета \(1\) и один шар цвета \(2\), пока не закончатся шары цвета \(1\). В конце останутся три шара цвета \(2\).

B. Лучшая перестановка

жадные алгоритмы Конструктив *800

Определим значение перестановки \(p\) состоящей из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз) следующим образом:

  • изначально переменная \(x\) равна \(0\);
  • если \(x < p_1\), то прибавить \(p_1\) к \(x\) (присвоить \(x = x + p_1\)), в противном случае присвоить \(x\) равным \(0\);
  • если \(x < p_2\), то прибавить \(p_2\) к \(x\) (присвоить \(x = x + p_2\)), в противном случае присвоить \(x\) равным \(0\);
  • ...
  • если \(x < p_n\), то прибавить \(p_n\) к \(x\) (присвоить \(x = x + p_n\)), в противном случае присвоить \(x\) равным \(0\);
  • значение перестановки равно \(x\) в конце этого процесса.

Например, для \(p = [4, 5, 1, 2, 3, 6]\), значение \(x\) меняется следующим образом: \(0, 4, 9, 0, 2, 5, 11\), таким образом, значение перестановки равно \(11\).

Вам дано целое число \(n\). Найдите перестановку \(p\) размера \(n\) с максимально возможным значением среди всех перестановок размера \(n\). Если таких перестановок несколько, выведите любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 97\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(n\) (\(4 \le n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку \(p\) размера \(n\) с максимально возможным значением среди всех перестановок размера \(n\).

C. Цифровой логарифм

жадные алгоритмы сортировки Структуры данных *1400

Определим \(f(x)\) для положительного числа \(x\) как длину десятичного представления \(x\) без лидирующих нулей. Мне нравится называть это цифровым логарифмом. Похоже на цифровой корень, если вы с таким знакомы.

Даны два массива \(a\) и \(b\), каждый содержит по \(n\) целых положительных чисел. За одну операцию вы можете сделать следующее:

  1. выбрать целое число \(i\) от \(1\) до \(n\);
  2. присвоить либо \(f(a_i)\) вместо \(a_i\), либо \(f(b_i)\) вместо \(b_i\).

Два массива называются похожими друг на друга, если можно переупорядочить элементы в них обоих так, чтобы они стали равны (т. е. \(a_i = b_i\) для всех \(i\) от \(1\) до \(n\)).

Какое наименьшее количество операций надо сделать, чтобы \(a\) и \(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\) (\(1 \le a_i < 10^9\)).

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_j < 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите наименьшее количество операций, которые надо сделать, чтобы \(a\) и \(b\) стали похожими друг на друга.

Примечание

В первом наборе входных данных можно применить цифровой логарифм к \(b_1\) дважды.

Во втором наборе входных данных массивы уже похожи друг на друга.

В третьем наборе входных данных можно применить цифровой логарифм сначала к \(a_1\), затем к \(b_2\).

E. Красно-черный перец

жадные алгоритмы математика Перебор Структуры данных теория чисел *2300

Монокарп собирается устроить вечеринку для своих друзей. Он приготовил \(n\) блюд и уже собирается их подать. Сначала он должен добавить в них молотый перец — иначе блюда будут совсем безвкусными.

У \(i\)-го блюда есть два значения \(a_i\) и \(b_i\) — его вкусность, если добавить красный или черный перец, соответственно. Монокарп не будет добавлять оба перца ни в какое блюдо, не будет добавлять перец несколько раз и не оставит ни одно блюдо без перца.

До того как добавить перец, Монокарп должен купить этот самый перец в магазине. У него есть неподалеку \(m\) магазинов. В \(j\)-м из них продаются упаковки красного перца, которых хватает на \(x_j\) порций, и упаковки черного перца, которых хватает на \(y_j\) порций.

Монокарп идет ровно в один магазин, покупает несколько (возможно, ноль) упаковок каждого перца таким образом, чтобы добавить в каждое блюдо перец ровно один раз и чтобы перца не осталось. Более формально, если он покупает \(x\) упаковок красного перца и \(y\) упаковок черного перца, то \(x\) и \(y\) должны быть неотрицательными, а \(x \cdot x_j + y \cdot y_j\) должно быть равно \(n\).

Для каждого магазина определите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки описанным образом, то выведите -1.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество блюд.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — вкусность \(i\)-го блюда, если добавить красный или черный перец, соответственно.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество магазинов.

В \(j\)-й из следующих \(m\) строк записаны два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — количество порций, на которое хватает упаковки красного и черного перца в \(j\)-м магазине, соответственно.

Выходные данные

Выведите \(m\) целых чисел. Для каждого магазина выведите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки так, чтобы в каждое блюдо добавить перец один раз и чтобы перца не осталось, то выведите -1.

Примечание

Рассмотрим первый пример.

В первом магазина Монокарп может купить только \(0\) упаковок красного перца и \(1\) упаковку черного перца. Если добавить черный перец во все блюда, то получится \(10 + 50 + 2 = 62\).

Во втором магазине Монокарп может купить любое количество упаковок красного и черного перца: \(0\) и \(3\), \(1\) и \(2\), \(2\) и \(1\) или \(3\) и \(0\). Лучшим выбором оказывается либо \(1\) и \(2\), либо \(2\) и \(1\). Монокарп может добавить черный перец в первое блюдо, красный перец во второе блюдо и любой перец в третье блюдо, сумма равна \(10 + 100 + 2 = 112\).

В третьем магазине Монокарп может купить только \(1\) упаковку красного перца и \(0\) упаковок черного перца. Если добавить красный перец во все блюда, то получится \(5 + 100 + 2 = 107\).

В четвертом магазине Монокарп может купить только четное суммарное количество упаковок. Так как \(n\) нечетное, невозможно купить ровно \(n\) упаковок. Поэтому ответ равен \(-1\).

F. Рыбаки

жадные алгоритмы Паросочетания Потоки *3100

С рыбалки вернулось \(n\) рыбаков. \(i\)-й рыбак поймал рыбу размера \(a_i\).

Рыбаки выберут какой-то порядок, в котором они будут рассказывать, какого размера они поймали рыбу (порядок — это просто перестановка размера \(n\)). Рыбаки не совсем честны, и во время рассказа могут «увеличить» размер пойманной рыбы.

Формально, пусть рыбаки рассказывают про пойманную ими рыбу в порядке \([p_1, p_2, p_3, \dots, p_n]\). Пусть \(b_i\) — размер рыбы, названный \(i\)-м рыбаком в выбранном порядке. Значения \(b_i\) считаются следующим образом:

  • первый рыбак в выбранном порядке просто честно называет размер пойманной рыбы, то есть \(b_1 = a_{p_1}\);
  • каждый следующий рыбак хочет назвать минимальное значение, которое будет строго больше значения, названного предыдущим рыбаком, а также делится на размер пойманной этим рыбаком рыбы. То есть для \(i > 1\) значение \(b_i\) равно минимальному целому числу, которое одновременно строго больше \(b_{i-1}\) и делится на \(a_{p_i}\).

Например, пусть \(n = 7\), \(a = [1, 8, 2, 3, 2, 2, 3]\). Если выбранный порядок рыбаков \(p = [1, 6, 7, 5, 3, 2, 4]\), тогда:

  • \(b_1 = a_{p_1} = 1\);
  • \(b_2\) — минимальное целое число, которое делится на \(2\) и превосходит \(1\), то есть \(2\);
  • \(b_3\) — минимальное целое число, которое делится на \(3\) и превосходит \(2\), то есть \(3\);
  • \(b_4\) — минимальное целое число, которое делится на \(2\) и превосходит \(3\), то есть \(4\);
  • \(b_5\) — минимальное целое число, которое делится на \(2\) и превосходит \(4\), то есть \(6\);
  • \(b_6\) — минимальное целое число, которое делится на \(8\) и превосходит \(6\), то есть \(8\);
  • \(b_7\) — минимальное целое число, которое делится на \(3\) и превосходит \(8\), то есть \(9\).

Вы хотите выбрать такой порядок, в котором рыбаки будут называть размер пойманной рыбы, чтобы минимизировать значение \(\sum\limits_{i=1}^{n} b_i\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 1000\)) — количество рыбаков.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)).

Выходные данные

Выведите одно целое число — минимально возможное значение \(\sum\limits_{i=1}^{n} b_i\), если выбрать порядок рыбаков оптимально.

B. Расшифруй строку

жадные алгоритмы Строки *800

У Поликарпа есть строка \(s\), состоящая из строчных латинских букв.

Он кодирует её, используя следующий алгоритм.

Он идёт по буквам строки \(s\) слева направо и для каждой буквы Поликарп рассматривает её номер в алфавите:

  • если номер буквы — однозначное число (меньше \(10\)), то он просто выписывает его;
  • если номер буквы — двузначное число (больше или равен \(10\)), то он выписывает его и дополнительно приписывает справа цифру 0.

Например, если строка \(s\) равна code, то Поликарп будет кодировать её следующим образом:

  • 'c' — это \(3\)-я буква алфавита. Следовательно, Поликарп дописывает к коду 3 (код становится равен 3);
  • 'o' — это \(15\)-я буква алфавита. Следовательно, Поликарп дописывает к коду 15 и ещё 0 (код становится равен 3150);
  • 'd' — это \(4\)-я буква алфавита. Следовательно, Поликарп дописывает к коду 4 (код становится равен 31504);
  • 'e' — это \(5\)-я буква алфавита. Следовательно, Поликарп дописывает к коду 5 (код становится равен 315045).

Таким образом, Поликарп код строки code равен 315045.

Вам дана строка \(t\), полученная в результате кодирования строки \(s\). Ваша задача — декодировать её (получить по \(t\) исходную строку \(s\)).

Входные данные

Первая строка входных данных содержит целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длина заданного кода.

Вторая строка описания каждого набора входных данных содержит строку \(t\) длины \(n\) — заданный код. Гарантируется, что существует такая строка из строчных букв латинского алфавита, в результате кодирования которой получается строка \(t\).

Выходные данные

Для каждого набора входных данных выведите искомую строку \(s\) — строку, в результате кодирования которой будет получена строка \(t\). Гарантируется, что такая строка всегда существует. Можно показать, что такая строка всегда уникальна.

Примечание

Первый набор входных данных примера разобран в условии.

Во втором наборе примера ответ равен aj. В самом деле, номер буквы a равен \(1\), следовательно к коду будет дописано 1. Номер буквы j равен \(10\), следовательно к коду будет дописано 100. В результате код равен 1100.

Во третьем наборе входных данных нет нулей, а значит номера всех букв меньше \(10\) и кодируются одной цифрой. Исходная строка равна abacaba.

В четвёртом наборе входных данных строка \(s\) равна ll. Буква l имеет номер \(12\) и кодируется как 120. Таким образом, код ll в самом деле равен 120120.

D. Друзья и ресторан

жадные алгоритмы сортировки *1200

Компания из \(n\) друзей решила сходить в ресторан. Каждый из друзей планирует сделать заказ на \(x_i\) бурлей, а всего у него есть \(y_i\) бурлей (\(1 \le i \le n\)).

Компания решила разбить посещение ресторана на несколько дней. Каждый день в ресторан отправляется некоторая группа из хотя бы двух друзей. Каждый из друзей посещает ресторан не более одного раза (то есть эти группы не пересекаются). Эти группы должны удовлетворять условию: суммарный бюджет каждой группы должен быть не меньше суммы, которую собираются потратить друзья из группы в ресторане. Другими словами, сумма всех значений \(x_i\) в группе не должна превышать сумму значений \(y_i\) в группе.

Какое максимальное количество дней друзья могут посещать ресторан?

Например, пусть есть \(n = 6\) друзей, для которых \(x\) = [\(8, 3, 9, 2, 4, 5\)], а \(y\) = [\(5, 3, 1, 4, 5, 10\)]. Тогда:

  • Первый и шестой друзья могут пойти в ресторан в первый день. Они потратят в ресторане \(8+5=13\) бурлей, а их суммарный бюджет составляет \(5+10=15\) бурлей. Так как \(15 \ge 13\), то они в самом деле могут образовать группу.
  • Друзья с номерами \(2, 4, 5\) могут образовать вторую группу. Они потратят в ресторане \(3+2+4=9\) бурлей, а их общий бюджет составит \(3+4+5=12\) бурлей (\(12 \ge 9\)).

Можно показать, что образовать большее число групп так, чтобы в каждой группе было хотя бы два друга и можно было оплатить счёт, они не смогут.

Таким образом, максимальное количество групп, на которое могут разбиться друзья равно \(2\). Друзья будут посещать ресторан максимум два дня. Отметим, что \(3\)-й из друзей не посетит ресторан вообще.

Выведите максимальное количество дней посещения ресторана по заданным \(n\), \(x\) и \(y\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество друзей.

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)). Значение \(x_i\) соответствует количеству бурлей, которое друг под номером \(i\) планирует потратить в ресторане.

В третьей строке каждого набора входных данных записано ровно \(n\) целых чисел \(y_1, y_2, \dots, y_n\) (\(1 \le y_i \le 10^9\)). Значение \(y_i\) соответствует количеству бурлей, которое есть у друга под номером \(i\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество дней посещения ресторана. Если друзья не могут образовать даже одну группу для посещения, то выведите 0.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных примера друзья не могут образовать хотя бы одну группу из двух или более человек.

В третьем наборе входных данных один из способов посещать ресторан в течение одного дня — отправиться группой из всех трёх друзей (\(1+3+10 \ge 2+3+7\)). Заметим, что возможности разбиться на две группы у них нет.

D. Наместничество

графы жадные алгоритмы Конструктив реализация *2500

В Троичном королевстве ровно n = 3k городов. Все они расположены на побережье реки Триссисипи, которая протекает через все королевство. Некоторые из городов расположены по одну сторону реки, а все остальные — по другую.

Между некоторыми городами построены мосты. Каждый мост соединяет два города, расположенные по разные стороны реки. Между любыми двумя городами имеется не более одного моста.

Недавно взошедший на престол король Тристан Третий занят распределением своих наместников между городами. Всего имеется k наместников и король хочет поручить каждому из них управлять ровно тремя городами. Однако никакому из наместников нельзя поручать управление городами, которые соединены мостом — ради своей выгоды наместник может установить слишком высокую пошлину на проезд по мосту, что плохо скажется на репутации короля.

Помогите королю Тристану Третьему распределить наместников между городами, если это возможно.

Входные данные

В первой строке даны два целых числа n и m — количество городов и мостов (3 ≤ n < 105, n = 3k, 0 ≤ m ≤ 105). В следующих m строках описаны мосты. i-ая строка содержит два целых числа ai и bi — номера городов, которые соединяет i-ый мост (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ i ≤ m).

Гарантируется, что никакой мост не соединяет город сам с собой, а также, что между любыми двумя городами не более одного моста.

Выходные данные

Если нужным образом распределить наместников нельзя, то в единственной строке выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), а во второй — какой наместник должен управлять каждым из городов. i-ое число должно означать номер наместника (от 1 до k), который должен управлять i-ым городом из входных данных — всего n чисел.

Если возможных решений несколько — выведите любое.

A. Планеты

жадные алгоритмы сортировки Структуры данных *800

Однажды вогоны захотели построить новую гиперпространственную магистраль в удалённой системе из \(n\) планет. Планета номер \(i\) в этой системе находится на орбите \(a_i\), на одной орбите может находиться несколько планет. К сожалению, все эти планеты мешают строительству и должны быть уничтожены.

У вогонов есть для уничтожения две машины.

  1. Первая машина за раз может уничтожить любую планету за \(1\) триганский пу.
  2. Вторая машина за раз может уничтожить все планеты на одной орбите этой системы за \(c\) триганских пу.

Вогоны могут использовать каждую машину сколько угодно раз.

Вогоны очень жадные, поэтому они хотят уничтожить все планеты, затратив при этом минимально возможное количество средств. Помогите им подсчитать минимальную стоимость этого проекта.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Каждый набор входных данных состоит из двух строк.

В первой строке заданы два целых числа \(n\) и \(c\) (\(1 \le n, c \le 100\)) — количество планет и стоимость использования второй машины.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) это номер орбиты \(i\)-й планеты.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную стоимость уничтожения всех планет.

Примечание

В первом наборе входных данных стоимость использования обеих машин одинакова, поэтому можно всегда пользоваться второй машиной и уничтожить все планеты, находящиеся на орбите \(1\), все планеты, находящиеся на орбите \(2\), все планеты, находящиеся на орбите \(4\), все планеты, находящиеся на орбите \(5\).

Во втором наборе входных данных выгодно с помощью второй машины за \(2\) триганских пу уничтожить все планеты находящиеся на орбите \(2\), затем уничтожить с помощью первой машины оставшиеся две планеты.

В третьем наборе входных данных можно воспользоваться первой машиной дважды или второй один раз.

В четвертом наборе входных данных выгодно два раза воспользоваться первой машиной.

B. Собрание на прямой

Бинарный поиск геометрия жадные алгоритмы математика реализация Тернарный поиск *1600

\(n\) людей живут на координатной прямой, \(i\)-й человек живет в точке \(x_i\) (\(1 \le i \le n\)). Они хотят выбрать точку \(x_0\) для встречи. \(i\)-й человек потратит \(|x_i - x_0|\) минут, чтобы добраться до места встречи. Также \(i\)-му человеку требуется \(t_i\) минут чтобы одеться, поэтому суммарно ему нужно \(t_i + |x_i - x_0|\) минут чтобы добраться до места встречи.

Здесь \(|y|\) обозначает модуль числа \(y\).

Эти люди просят вас выбрать позицию \(x_0\), которая минимизирует время, через которое все \(n\) людей доберутся до места встречи.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из трех строк.

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество людей.

Во второй строке заданы \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i \le 10^{8}\)) — позиции людей.

В третьей строке заданы \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(0 \le t_i \le 10^{8}\)), где \(t_i\) это время, которое нужно \(i\)-му человеку, чтобы одеться.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число — оптимальная позиция \(x_0\). Можно показать, что существует единственная оптимальная позиция \(x_0\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{−6}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a−b|}{max(1,|b|)} \le 10^{−6}\).

Примечание
  • В \(1\)-м наборе входных данных есть только один человек, поэтому целесообразно выбрать место встречи в его позиции. Тогда он доберется до него за \(3\) минуты, которые нужны ему, чтобы одеться.
  • Во \(2\)-м наборе входных данных есть \(2\) человека, которым не нужно время, чтобы одеться. Чтобы добраться до позиции \(2\), каждому из них потребуется по одной минуте.
  • В \(5\)-м наборе входных данных \(1\)-му человеку нужно \(4\) минуты, чтобы добраться до позиции \(1\) (\(4\) минуты, чтобы одеться, и \(0\) минут на сам путь); \(2\)-му человеку нужно \(2\) минуты, чтобы добраться до позиции \(1\) (\(1\) минута, чтобы одеться, и \(1\) минута на сам путь); \(3\)-му человеку нужно \(4\) минуты, чтобы добраться до позиции \(1\) (\(2\) минуты, чтобы одеться, и \(2\) минуты на сам путь).

C. Минимальная запись

жадные алгоритмы математика сортировки Структуры данных *1200

У вас есть строка \(s\), состоящая из цифр от \(0\) до \(9\) включительно. Вы можете произвести над ней следующую операцию любое (возможно нулевое) количество раз:

  • Вы можете выбрать позицию \(i\) и удалить цифру \(d\) на \(i\)-й позиции. Затем нужно вставить цифру \(\min{(d + 1, 9)}\) в любую позицию (в начало, в конец или между любыми двумя соседними цифрами).

Какую лексикографически минимальную строку вы можете получить после этих операций?

Строка \(a\) лексикографически меньше строки \(b\) той же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится цифра меньшая, чем соответствующая цифра в \(b\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из одной строки, содержащей строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)) — строка из цифр. Обратите внимание, что \(s\) это просто строка, состоящая из цифр, поэтому ведущие нули разрешены.

Гарантируется, что сумма длин строки \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите единственную строку — лексикографически минимальную строку, которую можно получить.

Примечание

В первом наборе входных данных:

  • Удалим \(8\) и поместим в конец строки \(9\). Получается строка \(04299\).
  • Удалим \(4\) и поместим на \(3\)-ю позицию строки \(5\). Получается строка \(02599\).

Во втором и третьем наборах входных данных не нужно ничего делать.

A. Джо нужны деньги

жадные алгоритмы математика *800

Джо нужны деньги. Его друг Чендлер хотел бы дать Джо их, но не может сделать это в открытую, так как Джо слишком гордый. А потому Чендлер решил схитрить и предложил Джо сыграть в игру.

В этой игре Чендлер задает Джо массив \(a_1, a_2, \dots, a_n\) (\(n \geq 2\)) из положительных целых чисел (\(a_i \ge 1\)).

Джо может применять к заданному массиву следующую операцию произвольное количество раз:

  1. Выбери две позиции \(i\) и \(j\) (\(1 \le i < j \le n)\).
  2. Выбери два целых числа \(x\) и \(y\) (\(x, y \ge 1\)) таких, что \(x \cdot y = a_i \cdot a_j\).
  3. Замени \(a_i\) на \(x\) и \(a_j\) на \(y\).

В конце Джо получит количество денег, равное сумме элементов массива.

Определите наибольшее количество денег \(\mathrm{ans}\), которое он может получить, но выведите \(2022 \cdot \mathrm{ans}\). Почему ответ, умноженный на \(2022\)? Потому что мы больше никогда его не увидим!

Гарантируется, что произведение всех чисел заданного массива \(a\) не превосходит \(10^{12}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 4000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \leq n \leq 50\)) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)) — сам массив.

Гарантируется, что произведение всех \(a_i\) не превосходит \(10^{12}\) (т. е. \(a_1 \cdot a_2 \cdot \ldots \cdot a_n \le 10^{12}\)).

Выходные данные

Для каждого набора данных выведите максимальное количество денег, которое может получить Джо, умноженное на \(2022\).

Примечание

В первом наборе входных данных Джо может проделать следующие операции:

  1. Он выбирает \(i = 1\) и \(j = 2\) (получая произведение \(a[i] \cdot a[j] = 6\)), выбирает \(x = 6\) и \(y = 1\) и присваивает \(a[i] = 6\) и \(a[j] = 1\). \(\)[2, 3, 2] \xrightarrow[x = 6,\; y = 1]{i = 1,\; j = 2} [6, 1, 2]\(\)
  2. Он выбирает \(i = 1\) и \(j = 3\) (получая произведение \(a[i] \cdot a[j] = 12\)), выбирает \(x = 12\) и \(y = 1\) и присваивает \(a[i] = 12\) и \(a[j] = 1\). \(\)[6, 1, 2] \xrightarrow[x = 12,\; y = 1]{i = 1,\; j = 3} [12, 1, 1]\(\)
Сумма станет равна \(14\) и будет максимально возможной. Ответ же равен \(2022 \cdot 14 = 28308\).

B. Уничтожение демодогов

жадные алгоритмы математика *1100

Демодоги из Изнанки снова напали на Хоукинс. Оди хочет добраться до Майка и заодно уничтожить как можно больше демодогов по пути.

Хоукинс можно представить как клеточное поле \(n \times n\). Количество демодогов в клетке в \(i\)-й строке и \(j\)-м столбце равно \(i \cdot j\). Оди находится в позиции \((1, 1)\) и хочет достигнуть клетки \((n, n)\), где она найдет Майка.

Она может двигаться либо вправо (из \((i, j)\) в \((i, j + 1)\)), либо вниз (из \((i, j)\) в \((i + 1, j)\)). Она не может выходить за пределы поля, так как на его границах расположены двери в Изнанку.

Определите максимальное количество демодогов \(\mathrm{ans}\), которые Оди сможет уничтожить по пути, считая, что она уничтожает всех демодогов в клетках, которые посещает (включая стартовую и финишную).

Выведите \(2022 \cdot \mathrm{ans}\) по модулю \(10^9 + 7\). По модулю \(10^9 + 7\) потому, что результат может быть слишком большим, а умноженный на \(2022\) потому, что мы больше никогда его не увидим!

(Заметьте, вы сначала умножаете на \(2022\) и только потом берете остаток.)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой и единственной строке каждого набора входных данных задано одно целое число \(n\) (\(2 \leq n \leq 10^9\)) — размер поля.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество демодогов, которое может быть уничтожено, умноженное на \(2022\) и по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных при любом выбранном пути количество демодогов будет равно \(7\), а потому и ответ равен \(2022 \cdot 7 = 14154\).

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\), что является оптимальным ответом.

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}\).

C1. Шейх (простая версия)

Бинарный поиск битмаски жадные алгоритмы *1800

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(q = 1\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Стоимостью подотрезка массива \([l, r]\), \(1 \leq l \leq r \leq n\), назовем величину \(f(l, r) = \operatorname{sum}(l, r) - \operatorname{xor}(l, r)\), где \(\operatorname{sum}(l, r) = a_l + a_{l+1} + \ldots + a_r\), а \(\operatorname{xor}(l, r) = a_l \oplus a_{l+1} \oplus \ldots \oplus a_r\) (\(\oplus\) обозначает побитовое исключающее ИЛИ).

У вас будет \(q = 1\) запрос. Каждый запрос задается парой чисел \(L_i\), \(R_i\), где \(1 \leq L_i \leq R_i \leq n\). Вам нужно найти подотрезок \([l, r]\), \(L_i \leq l \leq r \leq R_i\) с максимальным значением \(f(l, r)\). Если подходящих ответов несколько, то среди них нужно найти подотрезок с минимальной длиной, то есть минимальным значением \(r - l + 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 10^5\), \(q = 1\)) — длину массива и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

\(i\)-я из следующих \(q\) строк каждого набора входных данных содержит два целых числа \(L_i\) и \(R_i\) (\(1 \leq L_i \leq R_i \leq n\)) — границы, в которых нужно найти отрезок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Гарантируется, что \(L_1 = 1\) и \(R_1 = n\).

Выходные данные

Для каждого набора входных данных выведите \(q\) пар чисел \(L_i \leq l \leq r \leq R_i\), таких что значение \(f(l, r)\) максимально, а среди таких длина \(r - l + 1\) минимальна. Если существует несколько правильных ответов, выведите любой из них.

Примечание

В первом наборе входных данных \(f(1, 1) = 0 - 0 = 0\).

Во втором наборе входных данных \(f(1, 1) = 5 - 5 = 0\), \(f(2, 2) = 10 - 10 = 0\). Заметим, что \(f(1, 2) = (10 + 5) - (10 \oplus 5) = 0\), но нам среди максимальных значений \(f(l, r)\) нужно найти подотрезок с минимальной длиной. Поэтому правильными ответами будут только отрезки \([1, 1]\) и \([2, 2]\).

В четвертом наборе входных данных \(f(2, 3) = (12 + 8) - (12 \oplus 8) = 16\).

В пятом наборе входных данных есть два правильных ответа, так как \(f(2, 3) = f(3, 4)\) и их длины равны.

C2. Шейх (сложная версия)

Бинарный поиск битмаски жадные алгоритмы Перебор реализация *2100

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(q = n\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Стоимостью подотрезка массива \([l, r]\), \(1 \leq l \leq r \leq n\), назовем величину \(f(l, r) = \operatorname{sum}(l, r) - \operatorname{xor}(l, r)\), где \(\operatorname{sum}(l, r) = a_l + a_{l+1} + \ldots + a_r\), а \(\operatorname{xor}(l, r) = a_l \oplus a_{l+1} \oplus \ldots \oplus a_r\) (\(\oplus\) обозначает побитовое исключающее ИЛИ).

У вас будет \(q\) запросов. Каждый запрос задается парой чисел \(L_i\), \(R_i\), где \(1 \leq L_i \leq R_i \leq n\). Вам нужно найти подотрезок \([l, r]\), \(L_i \leq l \leq r \leq R_i\) с максимальным значением \(f(l, r)\). Если ответов несколько, то среди них нужно найти подотрезок с минимальной длиной, то есть минимальным значением \(r - l + 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 10^5\), \(q = n\)) — длину массива и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

\(i\)-я из следующих \(q\) строк каждого набора входных данных содержит два целых числа \(L_i\) и \(R_i\) (\(1 \leq L_i \leq R_i \leq n\)) — границы, в которых нужно найти отрезок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Гарантируется, что \(L_1 = 1\) и \(R_1 = n\).

Выходные данные

Для каждого набора входных данных выведите \(q\) пар чисел \(L_i \leq l \leq r \leq R_i\), таких что значение \(f(l, r)\) максимально, а среди таких длина \(r - l + 1\) минимальна. Если существует несколько правильных ответов, выведите любой из них.

Примечание

Во всех наборах входных данных рассматривается первый запрос.

В первом наборе входных данных \(f(1, 1) = 0 - 0 = 0\).

Во втором наборе входных данных \(f(1, 1) = 5 - 5 = 0\), \(f(2, 2) = 10 - 10 = 0\). Заметим, что \(f(1, 2) = (10 + 5) - (10 \oplus 5) = 0\), но нам среди максимальных значений \(f(l, r)\) нужно найти подотрезок с минимальной длиной. Поэтому правильными ответами будут только отрезки \([1, 1]\) и \([2, 2]\).

В четвертом наборе входных данных \(f(2, 3) = (12 + 8) - (12 \oplus 8) = 16\).

В пятом наборе входных данных есть два правильных ответа, так как \(f(2, 3) = f(3, 4)\) и их длины равны.

A. Последовательная сумма

жадные алгоритмы сортировки *800

Вам дан массив \(a\) с \(n\) целыми числами. Вы можете выполнить следующую операцию не более \(k\) раз:

  • Выберите два индекса \(i\) и \(j\), в которых \(i \,\bmod\, k = j \,\bmod\, k\). (\(1 \le i < j \le n\)).
  • Поменяйте местами \(a_i\) и \(a_j\).

После выполнения всех операций вы должны выбрать \(k\) последовательных элементов, и сумма этих \(k\) элементов станет вашим счетом. Найдите максимальное количество очков, которое вы можете получить.

Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — длина массива и число в условии выше.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — сам массив.

Выходные данные

Для каждого набора входных данных выведите максимальное количество баллов, которое вы можете получить, по одному в каждой строке.

Примечание

В первом примере мы можем получить счет \(11\), если выберем \(a_1, a_2\) без выполнения операций.

В третьем примере, если мы поменяем местами \(a_1\) и \(a_4\), а потом выберем \(a_3, a_4, a_5\), то мы получим счет \(15\).

D1. Ноль-один (простая версия)

жадные алгоритмы Конструктив математика *1400

Это простая версия задачи. В этой версии выполняется \(n \le 3000\), \(x \ge 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 600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк. Первая строка каждого набора входных данных содержит три целых числа \(n\), \(x\) и \(y\) (\(5 \le n \le 3000\), \(1 \le y \le x \le 10^9\)) — длину строк и стоимость операций.

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Третья строка каждого набора входных данных содержит строку \(b\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, если нет способа сделать \(a\) равным \(b\), выведите \(-1\). В противном случае выведите минимальную стоимость, чтобы \(a\) равнялось \(b\).

Примечание

В первом примере можно выбрать индексы \(2\) и \(3\), стоимость операции будет равна \(8\).

Во втором примере невозможно сделать \(a\) равным \(b\) при помощи этой операции.

В третьем примере мы можем выполнить следующие операции.

  • Выберите индексы \(3\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0101011.
  • Выберите индексы \(4\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0100001.

Общая стоимость \(6\).

В четвертом примере строки изначально равны, поэтому оптимально не выполнять никаких операции.

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\).

В шестом примере строки изначально равны, поэтому оптимально не выполнять никаких операции.

A. Выбор трех палочек

жадные алгоритмы Перебор сортировки *800

У вас есть \(n\) палочек с положительными целочисленными длинами \(a_1, a_2, \ldots, a_n\).

Вы можете выполнить следующую операцию произвольное число раз (возможно, ноль):

  • выберите одну палочку, затем увеличьте или уменьшите ее длину на \(1\). После каждой операции длины всех палочек должны остаться положительными.

Какое минимальное число операций необходимо, чтобы вы могли выбрать три палочки из данных \(n\) и сложить их, не ломая, в равносторонний треугольник?

Равносторонним треугольником называется треугольник, у которого все три стороны равны.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 300\)) — количество палочек.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — длины палочек.

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(300\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально необходимое число операций.

Примечание

В первом примере можно увеличить длину первой палочки на \(1\), затем уменьшить длину третьей палочки на \(1\). Всего вы сделаете \(2\) операции, и сможете взять три палочки, чтобы собрать равносторонний треугольник с длиной стороны \(2\).

In the fourth test case, you can decrease the length of the seventh stick by \(1\). An equilateral triangle of side length \(1\) can be selected and formed by the second, fourth, and seventh sticks.

C. Удаление наименьшего кратного

жадные алгоритмы математика *1200

У вас есть множество \(S\), состоящее из \(n\) наименьших положительных целых чисел: \(1, 2, \ldots, n\).

Вы можете выполнить следующую операцию на \(S\) несколько раз (возможно, ноль):

  • Выберите положительное целое число \(k\) такое, что \(1 \le k \le n\), и в множестве \(S\) есть хотя бы одно число, кратное \(k\). Затем удалите наименьшее кратное \(k\) число из \(S\). Стоимость такой операции равна \(k\).

Вам дано множество \(T\), являющееся подмножеством \(S\). Найдите минимальную возможную суммарную стоимость операций, необходимых, чтобы множество \(S\) превратить в \(T\). Можно показать, что это всегда возможно сделать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка содержит бинарную строку длины \(n\), описывающую множество \(T\). \(i\)-й символ строки равен '1', если и только если число \(i\) является элементом \(T\), и '0' иначе.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную общую стоимость операций, превращающих \(S\) в \(T\).

Примечание

В первом наборе входных данных не нужно выполнять никаких операций, так как \(S\) уже равно \(T\), т. е. множеству \(\{1, 2, 3, 4, 5, 6\}\).

Во втором наборе изначально \(S = \{1, 2, 3, 4, 5, 6, 7\}\), а \(T = \{1, 2, 4, 7\}\). Нужно выполнить следующие операции:

  1. Выберите \(k=3\), удалите \(3\) из \(S\).
  2. Выберите \(k=3\), удалите \(6\) из \(S\).
  3. Выберите \(k=5\), удалите \(5\) из \(S\).

Общая стоимость равна \(3+3+5 = 11\). Можно показать, что это минимально возможная стоимость.

В третьем примере изначально \(S = \{1, 2, 3, 4\}\), а \(T = \{\}\) (пустое множество). Можно выполнить \(4\) операции с \(k=1\), чтобы удалить \(1\), \(2\), \(3\) и \(4\).

В четвертом примере изначально \(S = \{1, 2, 3, 4\}\), а \(T = \{3\}\). Можно выполнить две операции с \(k=1\) для удаления \(1\) и \(2\), а затем выполнить одну операцию с \(k=2\) для удаления \(4\).

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\).

Так как здоровье вашего слайма всегда оставалось неотрицательным, вы выиграли.

A. Рабочая неделя

жадные алгоритмы Конструктив математика *800

Ваша рабочая неделя состоит из \(n\) дней, пронумерованных от \(1\) до \(n\), после дня \(n\) снова идет день \(1\). И \(3\) из этих дней — выходные, одним из которых является последний день, день \(n\). Когда будут два остальных дня — вам предстоит выбрать.

Выбирая дни отдыха, вы преследуете две цели:

  • Никакие два выходных дня не должны идти друг за другом. Обратите внимание, что вы не можете сделать день \(1\) выходным, потому что он следует за днем \(n\).
  • Рабочие отрезки, оказавшиеся между выходными должны быть наименее похожи друг на друга. Более конкретно, если отрезки имеют длину \(l_1\), \(l_2\) и \(l_3\) дней, вы хотите максимизировать \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|)\).

Выведите максимальное значение выражения \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|)\), которое может быть получено.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Единственная строка каждого набора содержит одно целое число \(n\) (\(6 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное значение, которое может быть получено.

Примечание

На изображении ниже можно видеть решения из примера для первых двух наборов данных. Выбранные выходные изображены фиолетовым. Рабочие отрезки подчеркнуты зеленым.

В \(1\) наборе данных единственными вариантами для выходных являются дни \(2\), \(3\) и \(4\) (потому что дни \(1\) и \(5\) соседние с днем \(n\)). Поэтому единственная возможность расположить их, чтобы они не стали соседями — это выбрать дни \(2\) и \(4\). Таким образом \(l_1 = l_2 = l_3 = 1\), а ответ \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|) = 0\).

Для \(2\) набора данных изображен один из способов выбора выходных. Рабочие отрезки имеют длины \(2\), \(1\) и \(4\) дней. Таким образом, минимальной разницей является \(1 = \min(1, 3, 2) = \min(|2 - 1|, |1 - 4|, |4 - 2|)\). Можно показать, что нет возможности сделать это число больше.

B. Чай с мандаринами

жадные алгоритмы математика *900

Есть \(n\) кусочков от шкурки мандарина, \(i\)-й из них имеет некоторый размер \(a_i\). За одно действие можно любой кусок размера \(x\) порвать на два кусочка с положительными целочисленными размерами \(y\) и \(z\) такими, что \(y + z = x\).

Хочется, чтобы размеры любых двух кусочков отличались строго меньше чем в два раза. Другими словами, не должно быть двух кусочков размеров \(x\) и \(y\) таких, что \(2x \le y\). Какого минимального количества действий достаточно для выполнения этого условия?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Затем следует одна строка, в которой содержится \(n\) целых чисел \(a_1 \le a_2 \le \ldots \le a_n\) (\(1 \le a_i \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую минимальное количество действий.

Примечание

В первом наборе входных данных у нас изначально имеется кусочек размера \(1\), поэтому в конце все кусочки должны иметь именно размер \(1\). Итоговое количество действий: \(0 + 1 + 2 + 3 + 4 = 10\).

Во втором наборе у нас всего один кусок, поэтому ничего делать не требуется и ответ: \(0\) действий.

В третьем наборе один из возможных вариантов разрезов: \(600,\ 900,\ (600 | 700),\ (1000 | 1000),\ (1000 | 1000 | 550)\). Этот вариант можно увидеть на изображении ниже. Максимальный кусок имеет размер \(1000\) и менее чем в \(2\) раза превосходит минимальный размером \(550\). Произведено \(4\) действия, можно показать, что это минимальное количество действий.

C. Сдвиг по фазе

графы жадные алгоритмы поиск в глубину и подобное реализация снм Строки *1400

Была строка \(s\), которую захотели зашифровать. Для этого взяли все \(26\) строчных латинских букв, расположили их в некотором порядке по кругу, после чего заменили каждую букву в \(s\) на ту, что является следующей по часовой стрелке, получив таким образом строку \(t\).

Вам дали строку \(t\). Определите лексикографически минимальную строку \(s\), из которой могла быть получена данная строка \(t\).

Строка \(a\) лексикографически меньше строки \(b\) такой же длины, если и только если:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки \(t\).

Следующая строка содержит строку \(t\) длины \(n\), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку — лексикографически минимальную строку \(s\), из которой могла получиться \(t\).

Примечание

В первом наборе входных данных мы не могли иметь строку «a», поскольку тогда буква a переходила бы сама в себя, что невозможно. В качестве ответа нам подходит лексикографически вторая строка «b».

Во втором наборе нам не подходит «aa», поскольку a переходила бы в себя, и не подходит «ab», поскольку круг переходов замкнулся бы на \(2\) буквах, а он должен состоять из всех \(26\). Следующая строка «ac» нам подходит.

Ниже приведены схемы для первых трех наборов входных данных. В круге пропущены неучаствующие буквы, их можно расставить произвольно в пропуски.

E. Планирование дома

жадные алгоритмы Конструктив Паросочетания Структуры данных *2400

В вашем городке есть \(n\) домов, расположенных на числовой прямой в точках \(h_1, h_2, \ldots, h_n\). Вы хотите построить себе новый дом и рассматриваете два варианта, где его разместить: точки \(p_1\) и \(p_2\).

Так как вы любите ходить в гости, вы заблаговременно вычислили для обеих точек расстояния до уже существующих домов. Более формально, вы вычислили два массива \(d_1\), \(d_2\): \(d_{i, j} = \left|p_i - h_j\right|\), где \(|x|\) обозначает модуль числа \(x\).

Спустя долгое время бездействия вы забыли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\). Но в вашем дневнике нашлись два массива — \(d_1\), \(d_2\), в подлинности которых вы сомневаетесь. Также значения внутри каждого из массивов могли перемешаться, поэтому значения на одинаковых позициях массивов \(d_1\) и \(d_2\) могут соответствовать разным домам. Обратите внимание, что значения из одного массива не могли попасть в другой, иными словами, все значения в массиве \(d_1\) соответствуют расстоянию от \(p_1\) до домов, а в массиве \(d_2\) — от \(p_2\) до домов.

Обратите внимание, что расположения домов \(h_i\) и рассматриваемых вариантов \(p_j\) могли совпадать. Например, корректными являются расположения \(h = \{1, 0, 3, 3\}\), \(p = \{1, 1\}\), которым могли соответствовать уже перемешанные \(d_1 = \{0, 2, 1, 2\}\), \(d_2 = \{2, 2, 1, 0\}\).

Проверьте, существуют ли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\), для которых бы найденные массивы расстояний были корректными. Если такое возможно, найдите подходящее расположение домов и мест строительства.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину массивов \(d_1\), \(d_2\).

Следующие две строки содержат по \(n\) целых чисел: массивы \(d_1\) и \(d_2\) (\(0 \le d_{i, j} \le 10^9\)) соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одну строку «NO», если ответа не существует.

Иначе выведите три строки. Первая строка должна содержать «YES». Вторая строка должна содержать \(n\) целых чисел \(h_1, h_2, \ldots, h_n\). Третья строка должна содержать два целых числа \(p_1\), \(p_2\).

Должно выполняться \(0 \le h_i, p_1, p_2 \le 2 \cdot 10^9\). Можно показать, что если существует ответ, то он существует и при заданных ограничениях.

Если решений несколько, выведите любое.

Примечание

На изображении ниже можно видеть решения из примера. Планируемые дома изображены яркими цветами: розовым и фиолетовым. Существующие дома - тусклыми.

В \(1\) наборе данных первый планируемый дом расположен в точке \(0\), второй - в точке \(10\). Существующий дом расположен в точке \(5\) и находится на расстоянии \(5\) от обеих планируемых домов.

Можно показать, что не существует решения для \(2\) набора данных.

В \(3\) наборе данных планируемые дома расположены в точках \(33\) и \(69\).

Обратите внимание, что в \(4\) тесте оба плана расположены в точке \(1\), где в то же время находится и один из существующих домов, что является корректным расположением.

A. Превратить A в B

жадные алгоритмы Перебор сортировки *800

Вам даны два массива \(a\) и \(b\) длины \(n\), каждый элемент массивов — либо \(0\), либо \(1\).

Вы можете выполнять операции \(2\) типов.

  • Выбрать индекс \(i\) и изменить \(a_i\) на \(1-a_i\).
  • Переупорядочить массив \(a\) произвольным образом.

Найдите минимальное количество операций, необходимое для того, чтобы массив \(a\) стал равен массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 400\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) равно \(0\) или \(1\)) — массив \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(b_i\) равно \(0\) или \(1\)) — массив \(b\).

Выходные данные

Для каждого набора входных данных выведите минимальное число операций для превращения \(a\) в \(b\).

Примечание

В первом примере нужна только одна операция: изменить \(a_1\) на \(1-a_1\). После этого \(a = [0, 0, 1]\), что равно \(b\).

Во втором примере один из оптимальных способов — сначала изменить \(a_3\) на \(1 - a_3\), затем переупорядочить \(a\).

В третьем примере операции не требуются.

В четвертом примере оптимально переупорядочить \(a\), чтобы получился массив \([0, 1, 1, 0]\).

D. Одинаковые бинарные подпоследовательности

геометрия жадные алгоритмы Конструктив реализация Строки *2200

У Эврула есть бинарная строка \(s\) длины \(2n\). Бинарная строка — это строка, состоящая только из символов \(0\) и \(1\). Он хочет разбить \(s\) на две непересекающиеся одинаковые подпоследовательности. Для этого ему нужна ваша помощь.

Вы можете выполнить следующую операцию один раз.

  • Выберите любую подпоследовательность (возможно пустую) символов \(s\) и циклически сдвиньте ее направо на одну позицию.

Другими словами, выберите последовательность индексов \(b_1, b_2, \ldots, b_m\), где \(1 \le b_1 < b_2 < \ldots < b_m \le 2n\). После этого одновременно присвойте \(\)s_{b_1} := s_{b_m},\(\) \(\)s_{b_2} := s_{b_1},\(\) \(\)\ldots,\(\) \(\)s_{b_m} := s_{b_{m-1}}.\(\)

Можете ли вы разбить \(s\) на две непересекающиеся одинаковые подпоследовательности после того, как выполните указанную операцию ровно один раз?

Разбиением \(s\) на две непересекающиеся одинаковые подпоследовательности \(s^p\) и \(s^q\) называются два возрастающих массива индексов \(p_1, p_2, \ldots, p_n\) и \(q_1, q_2, \ldots, q_n\) такие, что каждое целое число от \(1\) до \(2n\) встречается \(p\) и \(q\) ровно один раз, при этом \(s^p = s_{p_1} s_{p_2} \ldots s_{p_n}\), \(s^q = s_{q_1} s_{q_2} \ldots s_{q_n}\), и \(s^p = s^q\).

Если невозможно выполнить операцию и разбиение, выведите \(-1\). Если можно выполнить операцию и разбить \(s\) на две непересекающиеся подпоследовательности \(s^p\) и \(s^q\) так, чтобы \(s^p = s^q\), выведите индексы подпоследовательности \(b\) и индексы \(s^p\), т. е. значения \(p_1, p_2, \ldots, p_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), где \(2n\) — длина строки.

Вторая строка содержит бинарную строку \(s\) длины \(2n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных следуйте следующему формату.

Если решения не существует, выведите \(-1\).

Иначе:

  • В первой строке выведите целое число \(m\) (\(0 \leq m \leq 2n\)) и затем \(m\) различных индексов в возрастающем порядке \(b_1\), \(b_2\), ..., \(b_m\).
  • Во второй строке выведите \(n\) различных индексов в возрастающем порядке \(p_1\), \(p_2\), ..., \(p_n\).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере \(b\) пустая, поэтому строка \(s\) не меняется. Выберем \(s^p = s_1 s_2 = \mathtt{10}\), тогда \(s^q = s_3s_4 = \mathtt{10}\).

Во втором примере \(b=[3,5]\). Изначально \(s_3=\mathtt{0}\), и \(s_5=\mathtt{1}\). После выполнения операции мы одновременно присваиваем \(s_3=\mathtt{1}\) и \(s_5=\mathtt{0}\).

Поэтому \(s\) становится 101000 после выполнения операции.

Возьмем символы на позициях \([1,2,5]\) в \(s^p\), получим \(s_1=\mathtt{100}\). Символы на позициях \([3,4,6]\) будут в \(s^q\), получим \(s^q=100\). Это решение, потому что \(s^p=s^q\).

В четвертом примере можно показать, что невозможно выполнить разбиение строки после любой операции.

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\).

A. Эла распределяет книги

жадные алгоритмы реализация Строки *900

Эла очень любит читать, как и ее новые коллеги по DTL! В первый же день её работы в DTL коллега попросил её распределить книги по отсекам на книжной полке.

\(n\) книг должны быть распределены по \(k\) отсекам на книжной полке (\(n\) нацело делится на \(k\)). Каждой книге можно сопоставить одну строчную латинскую букву от 'a' до 'y' включительно, которая является начальной буквой в названии книги.

Эла должна положить ровно \(\frac{n}{k}\) книг в каждый отсек. Отсеки пронумерованы от \(1\) до \(k\). Положив книги, для каждого отсека она возьмет ровно одну букву — MEX мультимножества букв, соответствующих книгам в этом отсеке, и затем объединит полученные буквы в одну строку. Первая буква итоговой строки — это буква MEX мультимножества букв в первом отсеке, вторая буква итоговой строки — это буква MEX мультимножества букв во втором отсеке, и так далее. Обратите внимание, что в ограничениях этой задачи MEX всегда может быть определен для любого мультимножества букв, соответствующих книгам, потому что 'z' не может являться начальной буквой в названиях книг.

Какую лексикографически наибольшую результирующую строку может получить Эла?

Строка \(a\) лексикографически больше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(b\) является префиксом \(a\), но \(b \ne a\);
  • в первой позиции, где \(a\) и \(b\) различаются, в строке \(a\) стоит буква, которая представлена в алфавите позже, чем соответствующая буква в \(b\).

MEX мультимножества букв – это первая в алфавите буква, которая не входит в это мультимножество. Например, если мультимножество букв содержит \(7\) букв 'b', 'a', 'b', 'c', 'e', 'c', 'f', то MEX этого мультимножества будет 'd', поскольку 'd' не содержится в мультимножестве, и все буквы, предшествующие 'd' в алфавите, а именно 'a', 'b' и 'c', содержатся в мультимножестве.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 200\); \(1 \le k \le n\)). Гарантируется, что \(n\) нацело делится на \(k\).

Вторая строка каждого набора входных данных содержит строку из \(n\) строчных латинских букв от 'a' до 'y' включительно. Каждая буква представляет начальную букву названия очередной книги.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(k\), которая является лексикографически наибольшей строкой, которую может получить Эла.

Примечание

В первом наборе входных данных книги можно распределить по \(3\) отсекам как показано ниже:

  • в первом отсеке находятся книги с индексами \(1, 2, 3, 7\): \(multiset_1 = \{\)'c', 'a', 'b', 'd'\(\}\) \(\rightarrow\) \(MEX(multiset_1) =\) 'e'
  • во втором отсеке находятся книги с индексами \(4, 5, 6, 9\) : \(multiset_2 = \{\)'c', 'c', 'a', 'b'\(\}\) \(\rightarrow\) \(MEX(multiset_2) =\) 'd'
  • в третьем отсеке находятся книги с индексами \(8, 10, 11, 12\): \(multiset_3 = \{\)'a', 'a' , 'a', 'c'\(\}\) \(\rightarrow\) \(MEX(multiset_3) =\) 'b'

Следовательно, ответ 'edb'. Можно доказать, что Эла никак не может расположить книги так, чтобы в результате получилась лексикографически большая строка.

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\) микросекунд.

A. Упоротая слава

жадные алгоритмы реализация сортировки *800

Герой очень хочет славы, поэтому он сражается с монстрами.

У героя есть \(n\) способностей. \(i\)-я способность имеет тип \(a_i\) (любой из огонь или мороз) и исходный урон \(b_i\).

Герой может использовать все \(n\) способностей в любом порядке (каждая способность будет использована только один раз). При использовании каждой способности, происходит следующее:

  • Если текущая способность следует сразу за способностью другого типа, то её урон удваивается.
Другими словами,
  1. Если способность типа огонь с исходным уроном \(c\) используется сразу после способности с типом огонь, тогда она нанесет \(c\) урона;
  2. Если способность типа огонь с исходным уроном \(c\) используется сразу после способности с типом мороз, тогда она нанесет \(2c\) урона;
  3. Если способность типа мороз с исходным уроном \(c\) используется сразу после способности с типом огонь, тогда она нанесет \(2c\) урона;
  4. Если способность типа мороз с исходным уроном \(c\) используется сразу после способности с типом мороз, тогда она нанесет \(c\) урона.

Ваша задача найти максимальный урон, который может нанести герой.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

В первой строке задано целое число \(n\) (\(1 \leq n \leq 10^5\)), означающее количество способностей.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 1\)), где \(a_i\) означает тип \(i\)-й способности. \(i\)-я способность имеет тип огонь, если \(a_i = 0\), и тип мороз, если \(a_i = 1\).

В третьей строке задано \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq 10^9\)), где \(b_i\) означает исходный урон \(i\)-й способности.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальный урон, который может нанести герой.

Примечание

В первом наборе входных данных мы можем применить способности в порядке \([3, 1, 4, 2]\), и суммарный урон будет \(100 + 2 \times 1 + 2 \times 1000 + 10 = 2112\).

Во втором наборе входных данных мы можем применить способности в порядке \([1, 4, 2, 5, 3, 6]\), и суммарный урон будет \(3 + 2 \times 6 + 2 \times 4 + 2 \times 7 + 2 \times 5 + 2 \times 8 = 63\).

В третьем наборе входных данных мы можем применить способности в порядке \([1, 2, 3]\), и суммарный урон будет \(1000000000 + 1000000000 + 1000000000 = 3000000000\).

В четвертом примере всего одна способность с уроном \(1\), значит суммарный урон будет \(1\).

B. Упоротые префиксные суммы

жадные алгоритмы Конструктив математика сортировки *1200

Пусть \(a_1, a_2, \dots, a_n\) - отсортированная последовательность целых чисел длины \(n\) такая, что \(a_1 \leq a_2 \leq \dots \leq a_n\).

Для каждого \(1 \leq i \leq n\), префиксная сумма \(s_i\) первых \(i\) элементов \(a_1, a_2, \dots, a_i\) определяется как \(\) s_i = \sum_{k=1}^i a_k = a_1 + a_2 + \dots + a_i. \(\)

Вам заданы последние \(k\) элементов префиксных сумм, а именно \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\). Ваша задача определить, возможно ли это.

Формально, дано \(k\) целых чисел \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\), задача состоит в том, чтобы проверить, есть ли последовательность целых чисел \(a_1, a_2, \dots, a_n\) такая, что

  1. \(a_1 \leq a_2 \leq \dots \leq a_n\), и
  2. \(s_i = a_1 + a_2 + \dots + a_i\) для всех \(n-k+1 \leq i \leq n\).
Входные данные

В первой строке содержится целое число \(t\) (\(1 \leq t \leq 10^5\)) — Количество наборов входных данных. Затем следуют сами наборы входных данных.

В первой строке набора входных данных задано два целых числа \(n\) (\(1 \leq n \leq 10^5\)) и \(k\) (\(1 \leq k \leq n\)), означающие длину последовательности \(a\) и число данных элементов префиксных сумм.

Во второй строке набора входных данных задано \(k\) целых чисел \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\) (\(-10^9 \leq s_i \leq 10^9\) для каждого \(n-k+1 \leq i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек) если это возможно и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных подходит только \(a = [1, 1, 1, 1, 1]\).

Во втором наборе входных данных мы можем выбрать \(a = [-3, -2, -1, 0, 1, 2, 3]\).

В третьем наборе входных данных подходит только \(a = [2, 1, 1]\), но это не отсортированная последовательность.

В четвертом наборе входных данных может быть показано, что такой последовательности не существует.

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» (без кавычек) в противном случае.

Примечание

В первом примере Алиса всегда выбирает два нечетных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

В третьем примере у Боба есть выигрышная стратегия, заключающаяся в том, что он всегда выбирает число той же четности, что и Алиса в свой последний ход. Следовательно, Боб всегда выигрывает.

В четвертом примере Алиса всегда выбирает два четных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

F. Упоротая связность

графы Деревья жадные алгоритмы интерактив Конструктив кратчайшие пути снм *2400

Это интерактивная задача.

Дан простой неориентированный граф с \(n\) вершинами пронумерованными от \(1\) до \(n\), ваша задача состоит в том, чтобы покрасить все вершины так, чтобы для каждого цвета \(c\), выполнялись следующие условия:

  1. Множество вершин цвета \(c\) является связным;
  2. \(s_c \leq n_c^2\), где \(n_c\) число вершин цвета \(c\), и \(s_c\) сумма степеней вершин цвета \(c\).
Можно показать, что всегда существует раскраска такая, что условия выполняются.

Исходно вам дано только \(n\) - число вершин и степень каждой вершины.

Каждым запросом вы можете выбрать вершину \(u\). В ответ вы получите \(k\)-е ребро, исходящее из \(u\), если это \(k\)-й запрос к вершине \(u\).

Вы можете сделать максимум \(n\) запросов.

Неориентированный граф называется простым, если он не содержит кратных ребер и петель.

Степень вершины это число ребер, исходящих из нее.

Множество вершин \(S\) называется связным если для любых двух различных вершин \(u, v \in S\), существует путь, который проходит только по вершинам множества \(S\), и соединяет \(u\) и \(v\). Формально, существует последовательность ребер \((u_1, v_1), (u_2, v_2), \dots, (u_k, v_k)\) с \(k \geq 1\) такая, что

  1. \(u_1 = u\), \(v_k = v\), и \(v_i = u_{i+1}\) для любого \(1 \leq i < k\); и
  2. \(u_k \in S\) и \(v_k \in S\) для любого \(1 \leq i \leq k\).
Множество содержащее одну вершину является связным.
Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Следующие строки содержат описание и интерактивную часть каждого набора входных данных.

Для каждого набора входных данных вы начинаете взаимодействие с итерактором с чтения целого числа \(n\) (\(1\le n \le 1000\)) в первой строке, означающего число вершин в графе.

Вторая строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(0 \leq d_i \leq n - 1\)), где \(d_i\) это степень вершины \(i\).

Чтобы совершить запрос к вершине \(u\) (\(1 \leq u \leq n\)), вы должны вывести

  • «? \(u\)»
В отдельной строке. Если это \(k\)-й запрос к вершине \(u\), вершина \(e_{u, k}\) будет выведена на следующей отдельной строке, где \(\left(u, e_{u, k}\right)\) это \(k\)-е ребро, исходящее из вершины \(u\). В случае если \(k > d_u\), положим \(e_{u, k} = -1\). Вы должны сделать не более \(n\) «?» запросов.

Чтобы дать ответ вы должны вывести

  • «! \(c_1\) \(c_2\) \(\dots\) \(c_n\)»
в отдельной строке, где \(c_i\) (\(1 \leq c_i \leq n\)) это цвет вершины \(i\). После этого ваша программа должны продолжить работать со следующим набором входных данных или завершиться, если это был последний.

Гарантируется, что дан простой неориентированный граф.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

В случае, если формат запроса неверный, или вы сделали более \(n\) «?» запросов, вы получите вердикт Неправильный Ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Первая строка взлома должна содержать целое число \(t\) (\(1 \leq t \leq 1000\)), означающее число наборов входных данных. Следующие строки содержат описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)), означающее число вершин в графе.

Затем следуют \(n\) строк. В \(i\)-й строке содержится целое число \(d_i\) (\(0 \leq d_i \leq n - 1\)), означающее степень вершины \(i\), и затем \(d_i\) различных целых чисел \(e_{i,1}, e_{i,2}, \dots, e_{i,d_i}\) (\(1 \leq e_{i, j} \leq n\) и \(e_{i,j} \neq i\)), где \(\left(i, e_{i,j}\right)\) это \(j\)-е ребро, исходящее из вершины \(i\).

Вы должны гарантировать, что граф является простым и неориентированным.

Вы должны гарантировать, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Примечание

В примере только один набор входных данных.

В нем \(n = 5\) вершин, из которых \(1, 2, 3, 4\) имеют степень \(2\) и вершина \(5\) имеет степень \(0\). Это означает, что вершина \(5\) изолированная - не соединена ни с одной другой вершиной.

Возможное взаимодействие с итерактором показано во вводе и выводе примера, использовано \(4\) «?» запроса. Из них два к вершине \(1\) и два к вершине \(3\). Исходя из результатов этих запросов мы знаем, что вершины \(1\) и \(3\) соединены с вершинами \(2\) и \(4\).

Возможное решение показано, вершины \(1\) и \(2\) покрашены в цвет \(1\), вершины \(3\) и \(4\) покрашены в цвет \(2\), и вершина \(5\) покрашена в цвет \(3\). Легко заметить, что решение удовлетворяет условиям.

  • Для цвета \(c = 1\), вершины \(1\) и \(2\) связны. Также, \(n_1 = 2\) и \(s_1 = d_1 + d_2 = 2 + 2 = 4 \leq n_1^2 = 2^2 = 4\);
  • Для цвета \(c = 2\), вершины \(3\) и \(4\) связны. Также, \(n_2 = 2\) и \(s_2 = d_3 + d_4 = 2 + 2 = 4 \leq n_2^2 = 2^2 = 4\);
  • Для цвета \(c = 3\), есть только одна вершина (вершина \(5\)) покрашенная в цвет \(3\). Также, \(n_3 = 1\) и \(s_3 = d_5 = 0 \leq n_3^2 = 1^2 = 1\).

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\).

B. Восстановление массива

жадные алгоритмы Конструктив математика *1100

Для массива целых неотрицательных чисел \(a\) размера \(n\) выписали массив \(d\), где \(d_1 = a_1\), \(d_i = |a_i - a_{i - 1}|\) для \(2 \le i \le n\).

Ваша задача — по заданному массиву \(d\) восстановить массив \(a\), или сообщить, что подходящих массивов несколько.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — размер массивов \(a\) и \(d\).

Вторая строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(0 \le d_i \le 100\)) — элементы массива \(d\).

Можно показать, что при таких ограничениях всегда существует хотя бы один подходящий массив \(a\).

Выходные данные

Для каждого набора входных данных выведите элементы массива \(a\), если подходящий массив \(a\) — единственный. В противном случае выведите число \(-1\).

Примечание

Во втором примере есть два подходящих массива: \([2, 8, 5]\) и \([2, 8, 11]\).

D. Сбросить k ребер

Бинарный поиск графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *1900

Задано корневое дерево, состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), корень — это вершина \(1\).

Вы можете совершить следующую операцию не более \(k\) раз:

  • выбрать ребро \((v, u)\) дерева такое, что \(v\) является родителем \(u\);
  • удалить ребро \((v, u)\);
  • добавить ребро \((1, u)\) (т. е. сделать \(u\) с его поддеревом ребенком корня).

Высотой дерева называют максимальную глубину среди всех его вершин, а глубина вершины — это количество ребер на пути от корня до нее. Например, глубина вершины \(1\) равна \(0\), так как она — корень, а глубина всех ее детей равна \(1\).

Какую минимальную высоту дерева можно получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(0 \le k \le n - 1\)) — количество вершин в дереве и наибольшее количество операций, которые вы можете совершить.

Во второй строке записаны \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)) — родитель \(i\)-й вершины. Вершина \(1\) — корень.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно число — наименьшая высота дерева, которую можно получить, совершив не более \(k\) операций.

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» (без кавычек).

C. Увеличения на отрезке

жадные алгоритмы Структуры данных *1800

Поликарп — начинающий программист. Сейчас он исследует программу своего друга. Он уже обнаружил там функцию rangeIncrement(l, r), которая прибавляет единицу к каждому элементу некоторого массива a для всех индексов на отрезке [l, r]. Иными словами, эта функция делает следующее:


function rangeIncrement(l, r)
for i := l .. r do
a[i] = a[i] + 1

Поликарпу известно состояние массива a после серии вызовов этой функции. Он хочет определить минимальное количество вызовов функции, которые приведут к такому результату. Кроме того, он хочет понять какие именно вызовы функции нужны в таком случае. Гарантируется, что искомое количество вызовов не превосходит 105.

До вызовов функции rangeIncrement(l, r) все элементы массива равны нулям.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 105) — длина массива a[1... n].

Вторая строка содержит его целочисленные элементы, записанные через пробел, a[1], a[2], ..., a[n] (0 ≤ a[i] ≤ 105) после некоторой серии вызовов функции rangeIncrement(l, r).

Гарантируется, что хотя бы один элемент массива отличен от 0. Гарантируется, что ответ содержит не более 105 вызовов функции rangeIncrement(l, r).

Выходные данные

В первую строку выведите t — наименьшее количество вызовов функции rangeIncrement(l, r), которые приведут к массиву из входных данных. Гарантируется, что это число окажется не более 105.

Далее выведите t строк — описания вызовов функции по одному в строке. Каждая строка должна содержать два целых числа li, ri (1 ≤ li ≤ ri ≤ n) — аргументы i-го вызова rangeIncrement(l, r). Вызовы функции могут быть осуществлены в любом порядке.

Если решений несколько, разрешается вывести любое.

Примечание

В первом примере требуется вызов для всего массива и четыре дополнительных вызова:

  • один для отрезка [2,2] (т.е. второго элемента массива),
  • три для отрезка [5,5] (т.е. пятого элемента массива).

B. Много лишнего сыра 2

геометрия жадные алгоритмы сортировки *800

У Пака Чанека есть \(n\) двухмерных ломтиков сыра. \(i\)-й ломтик сыра можно представить в виде прямоугольника размерами \(a_i \times b_i\). Мы хотим расположить их на двумерной плоскости так, чтобы:

  • Каждая грань каждого ломтика сыра параллельна либо оси x, либо оси y.
  • Нижняя грань каждого ломтика — это отрезок на оси x.
  • Никакие два ломтика не пересекаются, но они могут соприкасаться гранями.
  • Они образуют одну связанную фигуру.

Обратите внимание, что мы можем расположить их в любом порядке (крайний левый ломтик сыра не обязательно является первым ломтиком сыра). Также обратите внимание, что мы можем вращать каждый ломтик сыра любым способом при условии выполнения остальных ограничений.

Найдите минимально возможный периметр построенной фигуры.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Следующие строки содержат описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество ломтиков сыра у Пака Чанека.

В \(i\)-й из следующих \(n\) строк каждого набора содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i,b_i \leq 10^9\)) — размеры \(i\)-го ломтика сыра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую целое число — минимально возможный периметр построенной фигуры.

Примечание

В первом наборе входных данных один из способов получения минимально возможного периметра выглядит следующим образом.

Мы можем вычислить периметр построенной фигуры: \(2+5+1+1+1+1+3+1+5+1+2+3=26\). Можно показать, что нельзя получить меньший периметр.

Ниже показано некорректное расположение.

Периметр данной фигуры \(24\), но не все ограничения в задаче выполнены. Нижняя грань ломтика \(1 \times 1\) не находится на оси x.

Во втором наборе входных данных один из способов получения минимально возможного периметра выглядит следующим образом.

Мы можем вычислить периметр построенной фигуры: \(2+2+2+3+2+3+2+2+2+4=24\). Можно показать, что нельзя получить меньший периметр.

C. Кубики и мешки

жадные алгоритмы игры Конструктив сортировки *1400

Есть \(n\) кубиков, пронумерованных от \(1\) до \(n\). Кубик \(i\) имеет вес \(a_i\).

У Пака Чанека есть \(3\) мешка с номерами от \(1\) до \(3\), которые изначально пусты. Каждый кубик Пак Чанек должен положить в один из мешков. После этого в каждом мешке должен оказаться хотя бы один кубик.

После того, как Пак Чанек разложит кубики, Бу Денгклек возьмет ровно по одному кубику из каждого мешка. Пусть \(w_j\) — вес кубика, который Бу Денгклек берет из мешка \(j\). Результатом всех действий назовем число \(|w_1 - w_2| + |w_2 - w_3|\), где \(|x|\) — модуль числа \(x\).

Известно, что Денгклек будет брать кубики таким образом, чтобы минимизировать результат. Чему равен максимально возможный результат, если Пак Чанек раскладывает кубики оптимально?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов. Следующие строки содержат описание каждого набора.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество кубиков.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — веса кубиков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите строку, содержащую целое число, представляющее максимально возможный результат, если Пак Чанек оптимально разложит кубики.

Примечание

В первом наборе входных данные, один из вариантов получить итоговый результат, равный \(6\), выглядит следующим образом:

  • Положить кубики \(1\), \(4\), и \(5\) в мешок \(1\).
  • Положить кубик \(3\) в мешок \(2\).
  • Положить кубик \(2\) в мешок \(3\).

Если Пак Чанек разложит кубики таким образом, то Денгклек может взять кубики следующим образом:

  • Взять кубик \(5\) из мешка \(1\).
  • Взять кубик \(3\) из мешка \(2\).
  • Взять кубик \(2\) из мешка \(3\).

Результат равен \(|a_5 - a_3| + |a_3 - a_2| = |3 - 5| + |5 - 1| = 6\). Можно показать, что Бу Денгклек не может получить меньший результат при таком распределении кубиков.

Можно показать, что нет другого распределения кубиков, которое дает результат больший, чем \(6\).

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\). Можно доказать, что это действительно максимально возможная длина.

C. Минимизируй толщину

жадные алгоритмы математика Перебор *1100

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\), состоящая из \(n\) положительных целых чисел.

Назовём её подотрезком группу подряд идущих элементов. Каждый подотрезок характеризуется двумя индексами — индексом своего начала и индексом своего окончания. Обозначим за \(a[l,r]\) подотрезок последовательности \(a\) с началом в \(l\) и концом в \(r\), то есть \(a[l,r]=[a_l, a_{l+1}, \dots, a_r]\).

Например, если \(a=[31,4,15,92,6,5]\), то \(a[2,5]=[4,15,92,6]\), \(a[5,5]=[6]\), \(a[1,6]=[31,4,15,92,6,5]\) — её подотрезки.

Разобьем заданную последовательность \(a\) на подотрезки так, чтобы:

  • каждый элемент попал ровно в один подотрезок;
  • суммы элементов для всех подотрезков равны.

Например, если \(a\) = [\(55,45,30,30,40,100\)], то такую последовательность можно разбить на три подотрезка: \(a[1,2]=[55,45]\), \(a[3,5]=[30, 30, 40]\), \(a[6,6]=[100]\). Каждый элемент принадлежит ровно одному подотрезку, сумма элементов каждого подотрезка равна \(100\).

Назовём толщиной разбиения длину самого длинного подотрезка. Например, толщина разбиения из примера выше равна \(3\).

Найдите минимальную толщину среди всевозможных разбиений заданной последовательности \(a\) на подотрезки требуемым образом.

Входные данные

В первой строке вам дано единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 2000\)) — длина последовательности \(a\).

Во второй строке каждого набора входных данных содержится ровно \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке ответ — минимальную возможную толщину разбиения последовательности \(a\) на подотрезки требуемым образом.

Обратите внимание, что всегда существует разбиение, вы всегда можете рассматривать всю последовательность как один подотрезок.

Примечание

Разбиение в первом наборе входных данных рассмотрено в условии, можно показать, что оно оптимально.

Во втором наборе входных данных разбить на подотрезки можно только оставив единственный подотрезок. Тогда толщина разбиения равна длине всей последовательности, то есть \(4\).

В третьем наборе входных данных оптимальным будет разбиение \([10, 55], [35, 30], [65]\). Толщина разбиения будет равна \(2\).

В четвёртом наборе возможны следующие разбиения:

  • \([4] + [1, 1, 1, 1] + [4]\);
  • \([4, 1, 1] + [1, 1, 4]\).

B. Возрастающий

жадные алгоритмы реализация сортировки *800

Вам дан массив \(a\) из \(n\) целых положительных чисел. Определите, можно ли, переставив элементы, сделать массив строго возрастающим. Другими словами, определите, можно ли переставить элементы так, чтобы выполнялось условие \(a_1 < a_2 < \dots < a_n\).

Входные данные

Первая строка содержит число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \leq n \leq 100\)) — количество элементов в массиве.

Вторая строка каждого набора содержит \(n\) чисел \(a_i\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

Для каждого набора выведите «YES» (без скобок), если массив удовлетворяет условию, и «NO» (без скобок) в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «YEs», «Yes», «Yes» и «YES» будут считаться как положительный ответ).

Примечание

В первом наборе любая перестановка оставит массив \([1,1,1,1]\), который не является строго возрастающим.

Во втором наборе можно сделать массив \([1,3,4,7,8]\).

D. Взаимно простые

жадные алгоритмы Перебор теория чисел *1100

Дан массив из \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\)). Выведите максимальное значение \(i + j\) такое, что \(a_i\) и \(a_j\) взаимно простые\(^{\dagger}\), или \(-1\), если таких \(i\) и \(j\) не существует.

Например, рассмотрим массив \([1, 3, 5, 2, 4, 7, 7]\). Максимальное значение \(i + j\), которое можно получить, равно \(5 + 7\), так как \(a_5 = 4\) и \(a_7 = 7\) являются взаимно простые.

\(^{\dagger}\) Два целых числа \(p\) и \(q\) являются взаимно простыми, если единственное положительное целое число, которое является делителем их обоих, равно \(1\) (их наибольший общий делитель равен \(1\)).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов. Далее следует их описание.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — количество элементов в массиве.

Следующая строка содержит \(n\) разделенных пробелами положительных чисел \(a_1\), \(a_2\),..., \(a_n\) (\(1 \leq a_i \leq 1000\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите одно целое число  — максимальное значение \(i + j\), такое, что \(i\) и \(j\) удовлетворяют условию, что \(a_i\) и \(a_j\) взаимно просты, или выведите \(-1\), если не существует таких \(i\) и \(j\).

Примечание

Для первого примера можно выбрать \(i = j = 3\), при этом сумма индексов равна \(6\), так как \(1\) и \(1\) - взаимно простые.

Для второго примера можно выбрать \(i = 7\) и \(j = 5\), при этом сумма индексов равна \(7 + 5 = 12\), так как \(7\) и \(4\) являются взаимно простыми.

E. Scuza

Бинарный поиск жадные алгоритмы математика *1200

У Тимура есть лестница с \(n\) ступеньками. Ступенька \(i\) выше предыдущей на \(a_i\) метров. Первая ступенька на \(a_1\) метр выше земли, а земля находится на высоте \(0\) метров.

Лестница из первого примера.

У Тимура есть \(q\) запросов, каждый из которых обозначается целым числом \(k_1, \dots, k_q\). Для каждого запроса \(k_i\) выведите максимально возможную высоту, на которую Тимур может подняться, поднимаясь по ступенькам, если длина его ног \(k_i\). Тимур может подняться на \(j\)-ю ступеньку только в том случае, если длина его ног не меньше \(a_j\). Другими словами, \(k_i \geq a_j\) для каждой ступеньки \(j\).

Обратите внимание, что вы должны ответить на каждый вопрос независимо.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n, q\) (\(1 \leq n, q \leq 2\cdot10^5\)) — количество ступенек и количество запросов, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел (\(1 \leq a_i \leq 10^9\)) — разницы в высотах ступенек.

Третья строка каждого теста содержит \(q\) целых чисел (\(0 \leq k_i \leq 10^9\)) — числа для каждого запроса.

Гарантируется, что сумма \(n\) не превышают \(2\cdot10^5\), сумма \(q\) не превышают \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите \(q\) целых чисел - ответ на каждый запрос.

Обратите внимание, что ответ на некоторые запросы не помещается в 32-битный целочисленный тип, поэтому вы должны использовать как минимум 64-битный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

Рассмотрим первый пример, изображенный в условии.

  • Если длина ног Тимура \(1\), то он может подняться только на ступеньку \(1\), поэтому максимальная высота, на которую он может забраться это \(1\) метр.
  • Если длина ног Тимура \(2\) или \(4\), то он может подняться только по ступенькам \(1\), \(2\) и \(3\), поэтому максимальная высота, на которую он может забраться это \(1+2+1=4\) метра.
  • Если длина ног Тимура составляет \(9\) или \(10\), то он может подняться по всей лестнице, так максимальная высота, на которую он может забраться это \(1+2+1+5=9\) метров.
В первом вопросе второго тестового примера у Тимура нет ног, поэтому он не может подняться даже на одну ступеньку. :(

F. Меньше

жадные алгоритмы Конструктив Строки *1500

У Альперена есть две строки, \(s\) и \(t\), которые обе изначально равны «a».

Он выполнит \(q\) операций двух видов над данными строками:

  • \(1 \;\; k \;\; x\) — Добавить строку \(x\) ровно \(k\) раз в конец строки \(s\). Другими словами, \(s := s + \underbrace{x + \dots + x}_{k \text{ times}}\).
  • \(2 \;\; k \;\; x\) — Добавить строку \(x\) ровно \(k\) раз в конец строки \(t\). Другими словами, \(t := t + \underbrace{x + \dots + x}_{k \text{ times}}\).

После каждой операции определите, можно ли переставить символы \(s\) и \(t\) так, чтобы \(s\) была лексикографически меньше \(^{\dagger}\), чем \(t\).

Обратите внимание, что строки изменяются после выполнения каждой операции и не возвращаются в исходное состояние.

\(^{\dagger}\) Проще говоря, лексикографический порядок - это порядок, в котором слова перечислены в словаре. Формальное определение таково: строка \(p\) лексикографически меньше строки \(q\), если существует позиция \(i\) такая, что \(p_i < q_i\), и для всех \(j < i\), \(p_j = q_j\). Если такой позиции \(i\) не существует, то \(p\) лексикографически меньше \(q\), если длина \(p\) меньше длины \(q\). Например, \(\texttt{abdc} < \texttt{abe}\) и \(\texttt{abc} < \texttt{abcd}\), где мы пишем \(p < q\), если \(p\) лексикографически меньше \(q\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(q\) \((1 \leq q \leq 10^5)\) — количество операций, которые будет выполнять Alperen.

Затем следуют \(q\) строк, каждая из которых содержит два положительных целых числа \(d\) и \(k\) (\(1 \leq d \leq 2\); \(1 \leq k \leq 10^5\)) и непустую строку \(x\), состоящую из строчных английских букв — тип операции, количество раз, которое мы будем добавлять к строке \(x\) и строку, которую нужно добавить соответственно.

Гарантируется, что сумма \(q\) по всем наборам не превышает \(10^5\) и что сумма длин всех строк \(x\) из входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждой операции выведите «YES», если возможно расположить элементы в обеих строках таким образом, что \(s\) будет лексикографически меньше \(t\) и «NO» в противном случае.

Примечание

В первом примере строки изначально являются \(s = \) «a» и \(t = \) «a».

После первой операции строка \(t\) становится «aaa». Поскольку «a» уже лексикографически меньше, чем «aaa», ответом на эту операцию должно быть «YES».

После второй операции строка \(s\) становится «aaa», а поскольку \(t\) также равна «aaa», мы не можем переставить символы \(s\) так, чтобы она была лексикографически меньше \(t\), поэтому ответ «NO».

После третьей операции строка \(t\) становится «aaaaaa», а \(s\) уже лексикографически меньше нее, поэтому ответом будет «YES».

После четвертой операции \(s\) становится «aaabb» и нет способа сделать ее лексикографически меньше, чем «aaaaaa», поэтому ответ «NO».

После пятой операции строка \(t\) становится «aaaaaaabcaabcaabca», и мы можем переставить символы в строках так: «bbaaa» и «caaaaaabcaabcaabaa», так что \(s\) будет лексикографически меньше \(t\), поэтому мы должны ответить «YES».

G. Оррэй

битмаски жадные алгоритмы математика Перебор сортировки *1500

Вам дан массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Определим массив префиксного ИЛИ \(b\) как массив \(b_i = a_1~\mathsf{OR}~a_2~\mathsf{OR}~\dots~\mathsf{OR}~a_i\), где \(\mathsf{OR}\) представляет собой битовую операцию ИЛИ. Другими словами, массив \(b\) формируется путем вычисления \(\mathsf{OR}\) каждого префикса \(a\).

Вас попросили переставить элементы массива \(a\) таким образом, чтобы массив префиксных OR был лексикографически максимальным.

Массив \(x\) лексикографически больше массива \(y\), если в первой позиции, где \(x\) и \(y\) отличаются, \(x_i > y_i\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит \(n\) неотрицательных целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n\) целых чисел — любую перестановку массива \(a\), при которой получается лексикографически максимальный массив префиксных OR.

B. Стоимость перестановки

жадные алгоритмы Конструктив *800

Вам дано целое число \(n\). Вы должны построить перестановку размера \(n\).

Перестановка — это массив, в котором каждое число от \(1\) до \(s\) (где \(s\) — размер перестановки) встречается ровно один раз. Например, \([2, 1, 4, 3]\) — перестановка размера \(4\); \([1, 2, 4, 5, 3]\) — перестановка размера \(5\); \([1, 4, 3]\) — не перестановка (число \(2\) отсутствует), \([2, 1, 3, 1]\) — не перестановка (число \(1\) встречается дважды).

Подотрезок перестановки — это непрерывная подпоследовательность перестановки. Например, у перестановки \([2, 1, 4, 3]\) \(10\) подотрезков: \([2]\), \([2, 1]\), \([2, 1, 4]\), \([2, 1, 4, 3]\), \([1]\), \([1, 4]\), \([1, 4, 3]\), \([4]\), \([4, 3]\) и \([3]\).

Стоимость перестановки — это количество ее подотрезков, которые также являются перестановками. Например, стоимость перестановки \([2, 1, 4, 3]\) равна \(3\), так как подотрезки \([2, 1]\), \([1]\) и \([2, 1, 4, 3]\) являются перестановками.

Вы должны вывести перестановку размера \(n\) с минимально возможной стоимостью среди всех перестановок размера \(n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 48\)) — количество наборов входных данных.

Затем следуют \(t\) строк. В \(i\)-й из них задано одно целое число \(n\) (\(3 \le n \le 50\)), обозначающее \(i\)-й набор входных данных.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку размера \(n\) с минимально возможной стоимостью. Если существует несколько таких перестановок, выведите любую из них.

Примечание

В первом примере перестановка \([1, 4, 3, 5, 2]\) — один из возможных ответов; ее стоимость равна \(2\).

Во втором примере перестановка \([4, 1, 6, 2, 5, 3]\) — один из возможных ответов; ее стоимость равна \(2\).

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.

A. Замена чисел

жадные алгоритмы реализация *800

Массив из целых чисел \(a_1, a_2, \ldots, a_n\) преобразуется в массив из строчных букв латинского алфавита с помощью следующей процедуры.

Пока в массиве есть хотя бы одно число:

  • Выбрать произвольное число \(x\) из массива \(a\), и произвольную букву латинского алфавита \(y\).
  • Заменить все все вхождения числа \(x\) на букву \(y\).

Например, если изначально был массив \(a = [2, 3, 2, 4, 1]\), то его могли преобразовать следующим образом:

  • Выбрать число \(2\) и букву c. После этого \(a = [c, 3, c, 4, 1]\).
  • Выбрать число \(3\) и букву a. После этого \(a = [c, a, c, 4, 1]\).
  • Выбрать число \(4\) и букву t. После этого \(a = [c, a, c, t, 1]\).
  • Выбрать число \(1\) и букву a. После этого \(a = [c, a, c, t, a]\).

После преобразования все получившиеся буквы объединяются в строку, в нашем примере получилось бы строка «cacta».

По данному массиву \(a\) и строке \(s\) определите, могла ли строка \(s\) получиться из массива \(a\) после описанного преобразования?

Входные данные

В первой строке входных данных задано целое число \(t\) \((1 \leq t \leq 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 50\)) — длина массива \(a\) и строки \(s\).

Во второй строке каждого набора входных данных содержится ровно \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 50\)) — элементы массива \(a\).

В третьей строке каждого набора входных данных содержится строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите «YES», если из массива \(a\) можно получить строку \(s\), и «NO» иначе. Вы можете выводить каждую букву в любом регистре.

Примечание

Первый набор данных соответствует примеру, описанному в условии.

Во втором наборе входных данных можно выбрать число \(50\) и букву a.

В третьем наборе входных данных можно выбрать число \(11\) и букву a, после чего \(a = [a, 22]\). После этого выбрать число \(22\) и букву b и получить \(a = [a, b]\).

В пятом наборе входных данных можно по очереди заменить все числа на букву a.

D. Делимость на 2^n

жадные алгоритмы математика сортировки *1200

Вам дан массив положительных целых чисел \(a_1, a_2, \ldots, a_n\).

Сделайте так, чтобы произведение всех чисел массива, то есть \(a_1 \cdot a_2 \cdot \ldots \cdot a_n\), делилось на \(2^n\).

Вы можете выполнять следующую операцию сколько угодно раз:

  • выберите произвольный индекс \(i\) (\(1 \leq i \leq n\)) и замените значение \(a_i\) на \(a_i=a_i \cdot i\).

Вы не можете применять операцию повторно к одному индексу. Иными словами, все выбранные значения \(i\) должны быть различны.

Найдите, какое наименьшее количество операций нужно выполнить, чтобы произведение всех чисел массива делилось на \(2^n\). Обратите внимание, что не всегда такой набор операций существует.

Входные данные

В первой строке входных данных дано единственное целое число \(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\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы произведение всех чисел массива делилось на \(2^n\). Если ответа не существует, то выведите -1.

Примечание

В первом наборе входных данных произведение чисел изначально равно \(2\), поэтому можно не применять операции.

Во втором наборе входных данных произведение чисел изначально равно \(6\). Мы можем применить операцию для \(i = 2\), и тогда \(a_2\) станет равно \(2\cdot2=4\), а произведение чисел станет равно \(3\cdot4=12\), а это произведение чисел делится на \(2^n=2^2=4\).

В четвертом наборе входных данных даже если мы применим все возможные операции, то у нас все равно не получится сделать произведение чисел кратным \(2^n\)  — оно будет равно \((13\cdot1)\cdot(17\cdot2)\cdot(1\cdot3)\cdot(1\cdot4)=5304\), что не делится на \(2^n=2^4=16\).

В пятом наборе входных данных можно применить операции для \(i = 2\) и \(i = 4\).

A. МаксМинА

жадные алгоритмы Конструктив *800

У вас есть массив \(a\) размера \(n\), состоящий только из нулей и единиц, и целое число \(k\). За одну операцию вы можете выполнить одно из двух следующих действий:

  • Выберите \(2\) последовательных элемента \(a\) и замените их на их минимум (то есть сделайте \(a := [a_{1}, a_{2}, \ldots, a_{i-1}, \min(a_{i}, a_{i+1}), a_{i+2}, \ldots, a_{n}]\) для некоторого \(1 \le i \le n-1\)). Эта операция уменьшает размер \(a\) на \(1\).
  • Выберите \(k\) последовательных элементов \(a\) и замените их на их максимум (то есть сделайте \(a := [a_{1}, a_{2}, \ldots, a_{i-1}, \max(a_{i}, a_{i+1}, \ldots, a_{i+k-1}), a_{i+k}, \ldots, a_{n}]\) для некоторого \(1 \le i \le n-k+1\)). Эта операция уменьшает размер \(a\) на \(k-1\).

Определите, возможно ли превратить \(a\) в \([1]\) после нескольких (возможно, нуля) операций.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 50\)) — размер массива \(a\) и длину отрезка, на котором можно выполнить операцию второго типа.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(a_i\) равно \(0\) или \(1\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, если возможно превратить \(a\) в \([1]\), выведите «YES», иначе выведите «NO».

Примечание

В первом наборе входных данных вы можете выполнить операцию второго типа над вторым и третьим элементами так, что \(a\) будет равно \([0, 1]\), затем вы можете выполнить операцию второго типа над первым и вторым элементами, после чего \(a\) превратится в \([1]\).

Очевидно, что в четвертом наборе входных данных вы не можете получить ни одного значения \(1\), что бы вы ни делали.

В пятом наборе входных данных вы можете сначала выполнить операцию второго типа над первыми тремя элементами, чтобы \(a\) стало равно \([1, 0, 0, 1]\), затем выполнить операцию второго типа над элементами со второй позиции по четвертую так, что \(a\) станет равно \([1, 1]\), и, наконец, выполнить операцию первого типа над оставшимися элементами так, что \(a\) превратится в \([1]\).

B. Восстание

жадные алгоритмы Конструктив *800

У вас есть массив \(a\) размера \(n\), состоящий только из нулей и единиц. Вы можете выполнять следующую операцию:

  • выбрать два индекса \(1 \le i , j \le n\), \(i \ne j\),
  • добавить \(a_{i}\) к \(a_{j}\),
  • удалить \(a_{i}\) из \(a\).

Обратите внимание, что элементы \(a\) могут стать больше \(1\) после выполнения некоторых операций. Также обратите внимание, что после операции \(n\) становится на \(1\) меньше.

Какое минимальное количество операций необходимо, чтобы сделать \(a\) неубывающим, т. е. каждый элемент должен быть не меньше предыдущего?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)), размер массива \(a\).

Следующая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots a_{n}\) (\(a_i\) равно \(0\) или \(1\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для сортировки \(a\) в неубывающем порядке.

Примечание

В первом наборе входных данных \(a\) уже неубывающий, поэтому никаких операций выполнять не нужно, и ответ равен \(0\).

Во втором наборе входных данных можно выполнить операцию для \(i = 1\) и \(j = 5\), тогда \(a\) будет равно \([0, 0, 1, 2]\) и станет неубывающим.

В третьем наборе входных данных можно выполнить операцию для \(i = 2\) и \(j = 1\), так что \(a\) будет равно \([1]\) и станет неубывающим.

C. Операции над перестановкой

жадные алгоритмы Конструктив математика реализация *1300

Вам дана перестановка \(a\) размера \(n\), и вы должны выполнить над ней \(n\) операций. В \(i\)-й операции вы должны выбрать непустой суффикс \(a\) и увеличить все его элементы на \(i\). Каким образом нужно выполнить операции, чтобы минимизировать количество инверсий в конечном массиве?

Обратите внимание, что вы можете выполнять операции с одним и тем же суффиксом любое количество раз.

Перестановкой размера \(n\) называется такой массив размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз. Суффиксом называются несколько последовательных элементов массива, включающие в себя последний элемент массива. Инверсией в массиве \(a\) называется пара индексов \((i, j)\) такая, что \(i > j\) и \(a_{i} < a_{j}\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(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 n\)) — исходная перестановка \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(x_{1}, x_{2}, \ldots, x_{n}\) (\(1 \le x_{i} \le n\) для каждого \(1 \le i \le n\)), указывающее, что \(i\)-я операция должна быть применена к суффиксу начиная с индекса \(x_{i}\). Если ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных одно из оптимальных решений — на каждой операции увеличивать весь массив (то есть суффикс, начинающийся с индекса \(1\)). Итоговый массив \([11, 12, 13, 14]\) будет содержать \(0\) инверсий.

Во втором наборе входных данных \(a\) будет равно \([2, 4, 3, 5, 6]\), \([2, 4, 3, 7, 8]\), \([2, 4, 6, 10, 11]\), \([2, 8, 10, 14, 15]\) и \([7, 13, 15, 19, 20]\) после первой, второй, третьей, четвертой и пятой операций соответственно. Таким образом, итоговый массив \(a\) будет иметь ноль инверсий.

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\).

A. Две группы

жадные алгоритмы Конструктив *800

Вам дан массив \(a\), состоящий из \(n\) целых чисел. Вы хотите распределить эти \(n\) целых чисел в две группы \(s_1\) и \(s_2\) (группы могут быть пустыми) так, чтобы выполнялись следующие условия:

  • Для каждого \(i\) \((1 \leq i \leq n)\), \(a_i\) попадает ровно в одну группу.
  • Значение \(|sum(s_1)| - |sum(s_2)|\) является максимально возможным среди всех таких способов распределения этих чисел.

    Здесь \(sum(s_1)\) обозначает сумму чисел в группе \(s_1\), а \(sum(s_2)\) обозначает сумму чисел в группе \(s_2\).

Определите максимально возможное значение \(|sum(s_1)| - |sum(s_2)|\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 2 \cdot 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1 \leq n \leq 10^5)\)  — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2 \ldots a_n\) \((-10^9 \leq a_i \leq 10^9)\)  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — максимально возможное значение \(|sum(s_1)| - |sum(s_2)|\).

Примечание

В первом наборе входных данных, мы можем распределить числа как \(s_1 = \{10\}\), \(s_2 = \{-10\}\). Тогда значение будет \(|10| - |-10| = 0\).

Во втором наборе входных данных, мы можем распределить числа как \(s_1 = \{0, 11, -1\}\), \(s_2 = \{-2\}\). Тогда значение будет \(|0 + 11 - 1| - |-2| = 10 - 2 = 8\).

В третьем наборе входных данных, мы можем распределить числа как \(s_1 = \{2, 3, 2\}\), \(s_2 = \{\}\). Тогда значение будет \(|2 + 3 + 2| - |0| = 7\).

В четвертом наборе входных данных, мы можем распределить числа как \(s_1 = \{-9, -4, 0\}\), \(s_2 = \{2, 0\}\). Тогда значение будет \(|-9 - 4 + 0| - |2 + 0| = 13 - 2 = 11\).

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\).

В третьем наборе входных данных вы можете не делать операции.

A. Трусливые ладьи

жадные алгоритмы реализация *800

Дана шахматная доска размера \(n \times n\). На ней расположены \(m\) ладей таким образом, что:

  • никакие две ладьи не занимают одну клетку;
  • никакие две ладьи не атакуют друг друга.

Ладья атакует все клетки, которые находятся в ее строке или столбце.

Можно ли подвинуть ровно одну ладью (вы можете самостоятельно выбрать, какую именно) в другую клетку так, что никакие две ладьи все еще не будут атаковать друг друга? Ладья может сходить в любую клетку в ее строке или столбце, если никакая другая ладья не стоит на ее пути.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 8\)) — размер доски и количество ладей.

В \(i\)-й из следующих \(m\) строк записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)) — позиция \(i\)-й ладьи: \(x_i\) — это строка, а \(y_i\) — столбец.

Никакие две ладьи не занимают одну клетку. Никакие две ладьи не атакуют друг друга.

Выходные данные

На каждый набор входных данных выведите «YES», если можно подвинуть ровно одну ладью в другую клетку так, что никакие две ладьи все еще не будут атаковать друг друга. В противном случае выведите «NO».

Примечание

В первом наборе входных данных ладьи стоят в противоположных углах доски \(2 \times 2\). Каждая из них может сходить в соседний угол, но сходить туда означает попасть по атаку другой ладьи.

Во втором наборе входных данных одна ладья стоит в центре доски \(3 \times 3\). У нее есть \(4\) доступных хода, и каждый из них подходит, потому что нет другой ладьи, чтобы ее атаковать.

B. Подарок смерти

жадные алгоритмы *900

Вы играете в компьютерную игру. Для прохождения текущего уровня вам нужно убить полчище монстров. Среди него есть \(n\) монстров стоящих в ряд, пронумерованных от \(1\) по \(n\). У \(i\)-го монстра есть \(a_i\) здоровья и специальное заклинание «Подарок смерти» мощности \(b_i\).

Вы собираетесь убивать монстров по одному. Для убийства монстра со здоровьем \(h\) необходимо ровно \(h\) секунд.

Когда \(i\)-й монстр погибает, он использует свое заклинание, которое увеличивает здоровье своих соседей на \(b_i\) (соседями \(j\)-го монстра в ряду являются монстры на позициях \(j - 1\) и \(j + 1\). У первого и последнего монстров только по одному соседу).

После смерти каждого монстра, ряд смыкается, то есть соседи убитого монстра становятся соседями друг друга (соответственно, заклинание одного из соседей будет влиять на другого). Например, представим ситуацию с \(4\) монстрами со здоровьем \(a = [2, 6, 7, 3]\) и заклинаниями \(b = [3, 6, 0, 5]\). Один из способов уничтожения монстров показан ниже:

\(2\)\(6\)\(7\)\(3\)\(\xrightarrow{6\ s}\)\(8\)\(13\)\(3\)\(\xrightarrow{13\ s}\)\(8\)\(3\)\(\xrightarrow{8\ s}\)\(6\)\(\xrightarrow{6\ s}\)\(\{\}\)
\(3\)\(6\)\(0\)\(5\)\(3\)\(0\)\(5\)\(3\)\(5\)\(5\)
Первая строка описывает здоровье монстров, а вторая — силу их заклинаний.

В результате мы можем уничтожить всех монстров за \(6 + 13 + 8 + 6\) \(=\) \(33\) секунды. Заметим, что это только пример и он может не являться самым быстрым из вариантов уничтожения.

Какое наименьшее время вам понадобиться для убийства всего ряда монстров?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество монстров в ряду.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — первоначальное здоровье каждого монстра.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i \le 10^9\)), где \(b_i\) — это мощность заклинания \(i\)-го монстра.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число  — наименьшее возможное суммарное время уничтожения всех монстров.

Примечание

В первом наборе входных данных есть только один монстр, который будет убит за \(10\) секунд.

Во втором наборе, выгодно убить сначала первого монстра, потом последнего, а затем среднего. Уничтожение монстров займет \(100 + 100 + (1 + 1 + 1)\) \(=\) \(203\) секунд.

В третьем наборе, выгодно сначала убить первого монстра, потом третьего, затем четвертого, и, наконец, второго. Уничтожение всех займет \(2 + 7 + (3 + 0) + (3 + 6 + 5)\) \(=\) \(26\) секунд.

C. Игра с числами

Бинарный поиск жадные алгоритмы игры реализация Структуры данных *1400

Алиса и Боб играют в игру. У них есть массив положительных целых чисел \(a\) размера \(n\).

Перед началом игры Алиса выбирает целое число \(k \ge 0\). Игра длится \(k\) ходов, номера ходов нумеруются от \(1\) до \(k\). На \(i\)-м ходу Алиса должна удалить из массива элемент, который меньше либо равен \(k - i + 1\). После этого, если массив не пустой, Боб должен прибавить к некоторому элементу массива \(k - i + 1\). Обратите внимание, что и действие Алисы, и следующее за ним действие Боба — это две части одного и того же хода. Если Алиса не может удалить элемент на каком-то ходу — она проигрывает. Если \(k\)-й ход закончился, а Алиса еще не проиграла, то она выигрывает.

Ваша задача — определить максимальное значение \(k\), при котором Алиса может выиграть при оптимальной игре обоих игроков. Боб играет против Алисы, поэтому он пытается, если это возможно, заставить ее проиграть.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(k\), при котором Алиса может выиграть при оптимальной игре обоих игроков.

C. Geometry Horse

жадные алгоритмы реализация сортировки *1600

Вася играет в Geometry Horse.

Цель игры — уничтожить геометрические фигуры, находящиеся в игровом мире. За уничтожение фигуры начисляется определенное число очков в зависимости от типа фигуры и текущего множителя.

В данной игре имеется n видов геометрических фигур, для каждого вида известно количество фигур данного вида ki и стоимость одной фигуры данного вида ci. За уничтожение одной фигуры вида i игроку начисляется ci·f очков, где f — текущий множитель. Множитель может принимать целые значения от 1 до t + 1 включительно. Изначально множитель равен 1. После уничтожения pi (1 ≤ i ≤ t) фигур множитель становится равен i + 1, таким образом, фигура, уничтоженная по счету ровно (pi + 1)-ой, учитывается уже со множителем i + 1.

Ваша задача — определить, какое наибольшее число очков может набрать Вася, уничтожив все фигуры. Учтите, что Вася настолько силен, что может уничтожать фигуры в любом выбранном им порядке.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 100) — количество типов геометрических фигур.

В каждой из следующих n строк содержатся два целых числа, записанных через пробел, ki и ci (1 ≤ ki ≤ 109, 0 ≤ ci ≤ 1000) — количество фигур i-го вида и стоимость одной фигуры i-го вида, соответственно.

В следующей строке содержится единственное целое число t (1 ≤ t ≤ 100) — ограничение на текущий множитель.

В следующей строке содержатся t целых чисел, записанных через пробел, pi (1 ≤ p1 < p2 < ... < pt ≤ 1012) — числа описывающие изменения множителя.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное число — наибольшее количество очков, которое может набрать Вася.

Примечание

В первом примере Вася сначала уничтожит три фигуры и получит 3·1·10 = 30 очков. Затем множитель станет равным 2 и Вася, уничтожив оставшиеся две фигуры, получит еще 2·2·10 = 40 очков. Всего Вася получит 70 очков.

Во втором примере все 8 фигур будут уничтожены с коэффициентом 1, поэтому всего Вася наберет (3·8 + 5·10)·1 = 74 очка.

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 раза ниже на всем интервале действия огненной башни, то есть будет нанесен вдвое больший урон.

B. Максимальная подстрока

жадные алгоритмы Перебор реализация *800

Бинарной строкой называется строка, состоящая только из символов 0 и 1. Вам дана бинарная строка \(s\).

Для некоторой непустой подстроки\(^\dagger\) \(t\) строки \(s\), состоящей из \(x\) символов 0 и \(y\) символов 1, определим её стоимость как:

  • \(x \cdot y\), если \(x > 0\) и \(y > 0\);
  • \(x^2\), если \(x > 0\) и \(y = 0\);
  • \(y^2\), если \(x = 0\) и \(y > 0\).

Вам дана бинарная строка \(s\) длины \(n\), найдите максимальную стоимость среди всех её непустых подстрок.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную стоимость среди всех подстрок.

Примечание

В первом наборе входных данных мы можем взять подстроку \(111\). Она содержит \(3\) символа 1 и \(0\) символов 0. Таким образом, \(a = 3\), \(b = 0\), и её стоимость равна \(3^2 = 9\).

Во втором наборе входных данных мы можем взять всё строку. Она содержит \(4\) символа 1 и \(3\) символа 0. Таким образом, \(a = 4\), \(b = 3\), и её стоимость равна \(4 \cdot 3 = 12\).

В третьем наборе входных данных мы можем взять подстроку \(1111\), и её стоимость равна \(4^2 = 16\).

В четвёртом наборе входных данных мы можем взять всю строку. Её стоимость равна \(4 \cdot 3 = 12\).

В пятом наборе входных данных мы можем взять подстроку \(000\). Её стоимость равна \(3 \cdot 3 = 9\).

В шестом наборе входных данных мы можем взять только подстроку \(0\). Её стоимость равна \(1 \cdot 1 = 1\).

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\).

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\).

В третьем наборе входных данных можно показать, что требуемого разбиения не существует.

E. N станков

Бинарный поиск жадные алгоритмы Перебор *3300

Вы были приглашены в качестве специалиста по оптимизации производственных процессов в одну очень крупную компанию. У компании в распоряжении находятся \(n\) станков, стоящих друг за другом в цепочке производства. Каждый станок можно охарактеризовать одним из двух способов: \((+,~a_i)\) или \((*,~a_i)\).

Если на вход станку вида \((+,~a_i)\) подается заготовка с ценностью \(x\), то на выходе получается заготовка с ценностью \(x + a_i\).

Если на вход станку вида \((*,~a_i)\) подается заготовка с ценностью \(x\), то на выходе получается заготовка с ценностью \(x \cdot a_i\).

Весь производственный процесс выглядит следующим образом. На вход первому станку подается заготовка с ценностью \(1\), полученная после работы первого станка заготовка подается на вход второму станку, результат его работы — на вход третьему станку и так далее. Дела у компании идут не очень хорошо, так что на данный момент ценность полученного на выходе продукта не превосходит \(2 \cdot 10^9\).

Директора компании не довольны эффективностью производственного процесса и выделили вам бюджет в \(b\) монет на его оптимизацию.

Чтобы оптимизировать производство, вы можете менять порядок станков в цепочке. А именно, потратив \(p\) монет, вы можете взять любой станок вида \((+,~a_i)\) и переставить его в любое место в цепочке производства, не меняя порядок остальных станков. Также, потратив \(m\) монет, вы можете взять любой станок вида \((*,~a_i)\) и переставить его в любое место в цепочке производства.

Какой максимальной ценности выходного продукта можно добиться, если сделать перестановки суммарной стоимостью не более \(b\) монет?

Входные данные

Первая строка содержит четыре целых числа \(n\), \(b\), \(p\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le b, p, m \le 10^9\)) — количество станков на производстве, ваш бюджет и стоимости переноса станков обоих видов.

Каждая из следующих \(n\) строк содержит описание очередного станка. Описание станка начинается с символа «+» или «*», обозначающего вид станка. Далее следует целое число \(a_i\) (\(1 \le a_i \le 2 \cdot 10^9\)).

Гарантируется, что текущая ценность выходного продукта не превосходит \(2 \cdot 10^9\).

Выходные данные

Выведите одно целое число — максимальную ценность выходного продукта, которой можно добиться, переставив станки в цепи производства на не более чем \(b\) монет суммарно.

Примечание

В первом тесте бюджет не позволяет нам сдвинуть станок \((*,~2)\), однако мы можем переместить оба \((+,~1)\) в начало, и получить цепочку \((+,~1)\) \((+,~1)\) \((*,~2)\). Если ей на вход подать заготовку ценности \(1\), то ее ценность будет меняться следующим образом: \(1, 2, 3, 6\).

Во втором тесте мы можем сдвинуть только один станок. Переместим \((+,~2)\) из конца в начало получим цепочку \((+,~2)\) \((*,~2)\) \((+,~1)\) \((*,~3)\) при проходе через которую ценность заготовки меняется следующим образом: \(1, 3, 6, 7, 21\).

В третьем тесте поместим станок \((*,~4)\) перед \((*,~5)\) и станок \((+,~3)\) в начало. Получим цепочку \((+,~3)\) \((*,~2)\) \((+,~1)\) \((+,~1)\) \((+,~1)\) \((+,~1)\) \((*,~4)\) \((*,~5)\), при проходе через которую ценность заготовки меняется так: \(1, 4, 8, 9, 10, 11, 12, 48, 240\).

A. Техническая поддержка

жадные алгоритмы *800

Вы работаете в службе контроля качества технической поддержки одной большой компании. Ваша работа заключается в том, чтобы проверять, все ли вопросы клиентов были решены.

Сегодня вам на проверку прислали копию переписки одного из клиентов со специалистом технической поддержки. По регламенту работы на каждое сообщение клиента должно последовать одно или несколько сообщений, являющихся ответом специалиста поддержки. Однако, иногда клиент задает вопросы настолько быстро, что некоторые из ответов специалиста на старые вопросы появляются уже после того, как клиент задал несколько новых вопросов.

Из-за политики конфиденциальности полный текст сообщений вам не доступен, виден лишь порядок сообщений, а также тип каждого сообщения: вопрос клиента или ответ специалиста технической поддержки. Известно, что диалог начался с вопроса клиента.

От вас требуется определить, может ли этот диалог соответствовать регламенту работы, описанному выше, или правила работы были точно нарушены.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — суммарное количество сообщений в диалоге.

Вторая строка каждого набора входных данных состоит из \(n\) символов «Q» и «A», описывающих типы сообщений в диалоге в хронологическом порядке. Символ «Q» обозначает сообщение, являющееся вопросом клиента, а символ «A» — сообщение, являющееся ответом специалиста технической поддержки. Гарантируется, что строка начинается с символа «Q».

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если диалог может соответствовать регламенту работы, либо «No» (без кавычек) в противном случае.

Примечание

В первом наборе входных данных после двух вопросов клиента последовали два ответа специалиста, поэтому данный диалог может соответствовать регламенту работы.

Во втором наборе входных данных один из первых двух вопросов, а также последний вопрос остались без ответа.

В третьем наборе входных данных специалист технической поддержки отправил два сообщения в качестве ответа на единственное сообщение клиента.

B. Кевин и перестановка

жадные алгоритмы Конструктив математика *800

Кевину на день рождения подарили множество попарно различных чисел \(1, 2, 3, \ldots, n\).

Он хочет упорядочить эти числа таким образом, чтобы минимальное значение модуля разности двух соседних чисел было как можно больше. Более формально, если Кевин расположит числа в порядке \(p_1, p_2, \ldots, p_n\), он хочет максимизировать величину \(\)\min \limits_{i=1}^{n - 1} \lvert p_{i + 1} - p_i \rvert,\(\) где \(|x|\) обозначает модуль числа \(x\).

Помогите Кевину сделать это.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \leq 1\,000\)) — количество чисел в множестве.

Выходные данные

Для каждого набора входных данных выведите строку, содержащую \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)), описывающую порядок чисел, при котором минимальное значение модуля разности двух соседних чисел максимально.

Формально, нужно вывести перестановку \(p\), которая максимизирует величину \(\min \limits_{i=1}^{n - 1} \lvert p_{i + 1} - p_i \rvert\).

Если существует несколько оптимальных решений, выведите любое из них.

Примечание

В первом наборе входных данных минимальное значение модуля разности двух соседних чисел равно \(\min \{\lvert 4 - 2 \rvert, \lvert 1 - 4 \rvert, \lvert 3 - 1 \rvert \} = \min \{2, 3, 2\} = 2\). Несложно показать, что это оптимальный ответ.

Во втором наборе входных данных любая перестановка чисел \(1, 2, 3\) является оптимальным ответом. Минимальное значение модуля разности двух соседних чисел равно \(1\).

C. Почти все - кратные

жадные алгоритмы теория чисел *1400

Даны два целых числа \(n\) и \(x\). Перестановка\(^{\dagger}\) \(p\) длины \(n\) называется забавной, если \(p_i\) делится нацело на \(i\) для всех \(1 \leq i \leq n - 1\), при этом \(p_n = 1\), а \(p_1 = x\).

Найдите лексокографически минимальную\(^{\ddagger}\) забавную перестановку, или скажите, что такой перестановки не существует.

\(^{\dagger}\) Перестановкой длины \(n\) называется массив, содержащий все числа от \(1\) до \(n\) ровно по одному разу.

\(^{\ddagger}\) Пусть \(a\) и \(b\) — перестановки длины \(n\). Перестановка \(a\) лексикографически меньше \(b\), если в первой позиции \(i\), где \(a\) и \(b\) различны, \(a_i < b_i\). Перестановка называется лексикографически минимальное, если она лексикографически меньше всех остальных перестановок.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(2 \leq n \leq 2 \cdot 10^5\); \(1 < x \leq n\)).

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если ответ существует, выведите \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\)) — лексикографически минимальную забавную перестановку \(p\). Иначе выведите \(-1\).

Примечание

В первом примере перестановка \([3,2,1]\) удовлетворяет всем условиям: \(p_1=3\), \(p_3=1\), и:

  • \(p_1=3\) делится на \(1\).
  • \(p_2=2\) делится на \(2\).
Можно показать, что эта перестановка является лексикографически минимальной.

Во втором примере перестановка \([2,4,3,1]\) удовлетворяет всем условиям: \(p_1=2\), \(p_4=1\), и:

  • \(p_1=2\) делится на \(1\).
  • \(p_2=4\) делится на \(2\).
  • \(p_3=3\) делится на \(3\).
Можно показать, что эта перестановка является лексикографически минимальной.

В третьем примере не существует забавных перестановок.

C. Термостат

жадные алгоритмы кратчайшие пути математика *1100

Влад пришёл домой и обнаружил, что кто-то перенастроил старый термостат на температуру \(a\).

Термостат можно настроить только на температуру от \(l\) до \(r\) включительно, при этом температура не может измениться меньше чем на \(x\). Формально, за одно действие вы можете перенастроить термостат с температуры \(a\) на температуру \(b\), если \(|a - b| \ge x\) и \(l \le b \le r\).

Вам заданы \(l\), \(r\), \(x\), \(a\) и \(b\). Найдите минимальное количество действий, необходимое чтобы из температуры \(a\) получить температуру \(b\), либо сообщите что это невозможно сделать.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит по три целых числа \(l\), \(r\) и \(x\) (\(-10^9 \le l \le r \le 10^9\), \(1 \le x \le 10^9\)) — границы диапазона и минимальное изменение температуры.

Вторая строка каждого набора содержит по два целых числа \(a\) и \(b\) (\(l \le a, b \le r\)) — начальная и конечная температуры.

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных. Если невозможно добиться температуры \(b\), выведите -1, иначе выведите минимальное количество действий.

Примечание

В первом примере термостат уже настроен правильно.

Во втором примере можно добиться нужной температуры следующим образом: \(4 \rightarrow 10 \rightarrow 5\).

В третьем примере можно добиться нужной температуры следующим образом: \(3 \rightarrow 8 \rightarrow 2 \rightarrow 7\).

В четвёртом тесте невозможно сделать какую-либо перенастройку.

F. Всевозможные цифры

Бинарный поиск жадные алгоритмы математика Структуры данных теория чисел *1800

На доске написано положительное число \(x\) длины \(n\) в системе счисления с основанием \(p\) (\(2 \le p \le 10^9\)). Число \(x\) задано в виде последовательности \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < p\)) — цифры числа \(x\) в порядке слева направо (от наиболее значащих к наименее).

Дмитрий очень любит все цифры данной системы счисления, поэтому он хочет увидеть каждую из них хотя бы один раз.

За одну операцию он может:

  • взять любое число \(x\), написанное на доске, увеличить его на \(1\), и выписать на доску новое значение \(x + 1\).

Например, \(p=5\) и \(x=234_5\).

  • Изначально на доске присутствуют цифры \(2\), \(3\) и \(4\);
  • Дмитрий увеличивает число \(234_5\) на \(1\) и записывает число \(240_5\). На доске присутствуют цифры \(0, 2, 3, 4\);
  • Дмитрий увеличивает число \(240_5\) на \(1\) и записывает число \(241_5\). Теперь на доске присутствуют все цифры от \(0\) до \(4\).

Ваша задача — определить, за какое минимальное количество операций можно получить на доске все цифры от \(0\) до \(p-1\) хотя бы по одному разу.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 2 \cdot 10^3\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) (\(1 \le n \le 100\)) и \(p\) (\(2 \le p \le 10^9\)) — длина числа и основание системы счисления.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < p\)) — цифры числа \(x\) в системе счисления с основанием \(p\)

Гарантируется, что число \(x\) не содержит ведущих нулей (то есть, \(a_1>0\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, за которое Дмитрий сможет получить на доске все цифры от \(0\) до \(p-1\).

Можно показать, что для этого всегда требуется конечное число операций.

G. Восстанови перестановку

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *1900

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

Для перестановки \(p\) чётной длины \(n\) можно получить массив \(b\) длины \(\frac{n}{2}\) такой, что:

  • \(b_i = \max(p_{2i - 1}, p_{2i})\) для \(1 \le i \le \frac{n}{2}\)

Например, если \(p\) = [\(2, 4, 3, 1, 5, 6\)], то:

  • \(b_1 = \max(p_1, p_2) = \max(2, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(3,1)=3\)
  • \(b_3 = \max(p_5, p_6) = \max(5,6) = 6\)
Итого получим \(b\) = \([4, 3, 6]\).

Для заданного массива \(b\) найдите лексикографически минимальную перестановку \(p\) такую, что из неё можно получить заданный массив \(b\).

Если \(b\) = [\(4,3,6\)], то лексикографически минимальная перестановка, из которой можно его получить, это \(p\) = [\(1,4,2,3,5,6\)], так как:

  • \(b_1 = \max(p_1, p_2) = \max(1, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(2, 3) = 3\)
  • \(b_3 = \max(p_5, p_6) = \max(5, 6) = 6\)

Перестановка \(x_1, x_2, \dots, x_n\) лексикографически меньше перестановки \(y_1, y_2 \dots, y_n\), если и только если существует такое \(i\) (\(1 \le i \le n\)), что \(x_1=y_1, x_2=y_2, \dots, x_{i-1}=y_{i-1}\) и \(x_i<y_i\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое чётное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вo второй строке каждого набора входных данных записано ровно \(\frac{n}{2}\) целых чисел \(b_i\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • лексикографически минимальную перестановку \(p\) такую, что из неё можно получить массив \(b\);
  • или число -1, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

A. Торговое дело

жадные алгоритмы сортировки *1200

Чтобы раздобыть денег на новый эонический бластер, рейнджер Йцукен решил ненадолго заняться торговлей. Он хочет купить некоторое количество товаров (возможно, ничего не купить) на одной из планет, после чего продать купленные товары уже на другой планете. Обратите внимание, что данная операция не повторяется, то есть продажа и покупка производится ровно один раз. Чтобы осуществить свой план, Йцукен собирается взять в банке кредит, покрывающий все расходы, а по окончании операции возвратить взятые в долг деньги (деньги возвращаются без процентов). При этом Йцукен хочет получить как можно больше прибыли.

Всего в системе n планет, на каждой из которых можно купить или продать товары m типов (например, продовольствие, медикаменты, оружие, алкоголь и так далее). Для каждой планеты i и каждого типа товара j известны:

  • aij — стоимость покупки единицы товара;
  • bij — стоимость продажи единицы товара;
  • cij — количество оставшихся единиц товара.

Считается, что на планете i можно купить не более cij единиц товара типа j, однако продать можно всегда любое количество товаров любого типа.

Зная, что трюм корабля Йцукена вмещает не более k единиц товаров, определите наибольшее количество прибыли, которое Йцукен может получить.

Входные данные

В первой строке записаны через пробел три целых числа n, m и k (2 ≤ n ≤ 10, 1 ≤ m, k ≤ 100) — количество планет, количество типов товаров и размер трюма Йцукена, соответственно.

Далее идут n блоков с описанием каждой планеты.

В первой строке i-ого блока находится название планеты — строка длиной от 1 до 10 латинских букв. Первая буква названия — большая, остальные — маленькие. Далее в i-ом блоке идут m строк, j-ая из них содержит три целых числа aij, bij и cij (1 ≤ bij < aij ≤ 1000, 0 ≤ cij ≤ 100) — числа, описывающие денежные операции с j-м товаром на i-й планете. Числа в строках разделяются пробелами.

Гарантируется, что названия всех планет различны.

Выходные данные

Выведите одно число — наибольшее количество прибыли, которое можно получить.

Примечание

В первом тестовом примере нужно прилететь на планету Venus взять там кредит на 74 денежных единиц и купить 3 единицы первого товара и 7 единиц третьего товара (3·6 + 7·8 = 74). Далее рейнджер должен прилететь на планету Earth и продать там купленные товары. За них он получит 3·9 + 7·9 = 90, из этих денег нужно отдать 74 за кредит. Получается прибыль равна 16 денежным единицам. В данном примере большую прибыль получить невозможно.

B. Любимая задача Atilla

жадные алгоритмы реализация Строки *800

Для того чтобы написать строку, Atilla должен сначала выучить все буквы, которые содержатся в строке.

Он хочет написать сообщение \(s\). Он просит вас узнать минимальный размер алфавита, который ему предстоит выучить, чтобы он смог написать эту всю эту строку.

Алфавит размером \(x\) (\(1 \leq x \leq 26\)) содержит только первые \(x\) латинских букв. Например, алфавит размера \(4\) содержит только символы \(\texttt{a}\), \(\texttt{b}\), \(\texttt{c}\) и \(\texttt{d}\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — длину заданной строки.

Затем следует строка \(s\) длиной \(n\), состоящая из строчных латинских букв.

Выходные данные

Для каждого набора выведите одно целое число — минимальный размер алфавита, необходимого для того, чтобы Atilla смог написать строку \(s\).

Примечание

Для первого набора нужен только символ \(\texttt{a}\), поэтому достаточно алфавита размером \(1\), который содержит только \(\texttt{a}\).

Для второго набора нужны символы \(\texttt{d}\), \(\texttt{o}\), \(\texttt{w}\), \(\texttt{n}\). Минимальный размер алфавита, который содержит их все, равен \(23\) (такой алфавит можно представить в виде строки \(\texttt{abcdefghijklmnopqrstuvw}\)).

E. Бинарные инверсии

жадные алгоритмы математика Структуры данных *1100

Вам дан бинарный массив\(^{\dagger}\) длины \(n\). Вам можете выполнить над ним следующую операцию не более одного раза. Операция заключается в следующем — вы можете выбрать любой элемент и инвертировать его: превратить \(0\) в \(1\) или наоборот.

Какое максимальное количество инверсий \(^{\ddagger}\) может иметь массив после выполнения не более одной операции?

\(^\dagger\) Бинарный массив — это массив, состоящий только из нулей и единиц.

\(^\ddagger\) Количество инверсий в массиве — это количество пар индексов \(i,j\) таких, что \(i<j\) и \(a_i > a_j\).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте. Далее следуют их описания.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длину массива.

Следующая строка содержит \(n\) целых положительных чисел \(a_1\), \(a_2\),..., \(a_n\) (\(0 \leq a_i \leq 1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите одно целое число  — максимальное количество инверсий, которое может быть у массива после выполнения не более одной операции.

Примечание

В первом примере инверсии изначально формируются парами индексов (\(1, 2\)), (\(1, 4\)), (\(3, 4\)), что в сумме составляет \(3\), что уже является максимально возможным значением.

Во втором примере инверсии изначально образованы парами индексов (\(2, 3\)), (\(2, 4\)), (\(2, 6\)), (\(5, 6\)), в сумме четыре. Но, применив операцию над первым элементом, массив становится \({1, 1, 0, 0, 1, 0}\), где инверсии уже образованы парами индексов (\(1, 3\)), (\(1, 4\)), (\(1, 6\)), (\(2, 3\)), (\(2, 4\)), (\(2, 6\)), (\(5, 6\)), что в сумме составляет \(7\) инверсий, что является максимально возможным.

F. Квесты

Бинарный поиск жадные алгоритмы сортировки *1500

У вас есть возможность выполнять \(n\) квестов. Если вы выполняете \(i\)-й квест, вы получаете \(a_i\) монет. Вы можете выполнить не больше одного квеста в день.

Однако, после того как вы выполнили квест, вы не можете выполнить его снова в течение следующих \(k\) дней. (Например, если \(k=2\) и вы выполняете \(1\)-й квест в \(1\)-й день, тогда вы не сможете выполнить этот квест снова во \(2\)-й или в \(3\)-й день, но сможете его выполнить в \(4\)-й день.)

Заданы два целых числа \(c\) и \(d\). Найдите максимальный \(k\) такой, что возможно получить как минимум \(c\) монет за \(d\) дней. Если таких \(k\) не существует, выведите Impossible. Если \(k\) может быть бесконечно большим, выведите Infinity.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n,c,d\) (\(2 \leq n \leq 2\cdot10^5\); \(1 \leq c \leq 10^{16}\); \(1 \leq d \leq 2\cdot10^5\)) — количество квестов, количество необходимых монет и количество дней.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — награды за квесты.

Гарантируется что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\), а сумма \(d\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • если таких \(k\) не существует, выведите Impossible;
  • если \(k\) может быть бесконечно большим, выведите Infinity;
  • иначе, выведите одно целое число — максимальный \(k\) такой что возможно получить как минимум \(c\) монет в течение \(d\) дней.
Примечание

В первом тесте, один из способов получить \(5\) монет за \(4\) дня с \(k=2\) состоит в следующем:

  • день 1: выполнить квест 2, и получить \(2\) монеты;
  • день 2: выполнить квест 1, и получить \(1\) монету;
  • день 3: ничего не делать;
  • день 4: выполнить квест 2, и получить \(2\) монеты.

Суммарно мы получили \(2+1+2=5\) монет.

Во втором тесте, мы можем получить более \(20\) монет в первый день, выполнив лишь только первый квест. Выполнив первый квест, мы сразу получим \(100\) монет, значит значение \(k\) может быть бесконечно большим, так как нам никогда не понадобится выполнить ещё один квест.

В третьем тесте, что бы мы не делали, мы не можем получить \(100\) монет за \(3\) дня.

B. Уничтожение кольца

жадные алгоритмы Конструктив реализация *1000

Определим циклическую последовательность размера \(n\) как массив \(s\) длины \(n\), в котором \(s_n\) является соседним с \(s_1\).

У Muxii есть кольцо, представленное циклической последовательностью \(a\) размера \(n\).

Сама сущность кольца ненавидит равные соседние элементы. Поэтому, если два соседних элемента в последовательности равны в любой момент времени, один из них будет немедленно стерт. Изначально последовательность не содержит равных соседних элементов.

Muxii может выполнять следующие операции, пока последовательность не станет пустой:

  • Выбрать элемент в \(a\) и стереть его.

Например, если кольцо имеет вид \([1, 2, 4, 2, 3, 2]\), и Muxii стирает элемент \(4\), то кольцо сотрёт один из элементов, равных \(2\), и кольцо примет вид \([1, 2, 3, 2]\).

Muxii хочет найти максимальное количество операций, которые он может выполнить.

Заметим, что в кольце размером \(1\) его единственный элемент не считается соседним с самим собой (поэтому он не стирается сразу).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 100\)) — размер циклической последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i\leq n\)) — саму последовательность.

Гарантируется, что \(a_i\ne a_{i+1}\) для \(1\leq i<n\).

Гарантируется, что \(a_n\ne a_1\) при \(n>1\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которые может выполнить Muxii.

Примечание

В первом наборе входных данных вы можете сначала стереть второй элемент, а затем стереть оставшиеся элементы по одному в любом порядке. Всего можно выполнить эту операцию \(4\) раза. Обратите внимание, что если сначала стереть первый элемент, то последовательность превратится в \([2,3,2]\), а затем сразу станет \([2,3]\).

Во втором наборе входных данных можно сначала стереть первый элемент, тогда последовательность превратится в \([2,1]\). Затем можно стереть все оставшиеся элементы по одному в любом порядке.

C. Построение множеств

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1400

Вам дана бинарная матрица \(b\) (все элементы матрицы равны \(0\) или \(1\)) из \(n\) строк и \(n\) столбцов.

Вам нужно построить \(n\) множеств \(A_1, A_2, \ldots, A_n\), для которых выполняются следующие условия:

  • Каждое множество непустое и состоит из различных целых чисел от \(1\) до \(n\) включительно.
  • Все множества попарно различны.
  • Для всех пар \((i,j)\), удовлетворяющих условиям \(1\leq i, j\leq n\), \(b_{i,j}=1\) тогда и только тогда, когда \(A_i\subsetneq A_j\). Другими словами, \(b_{i, j}\) равно \(1\), если \(A_i\) является собственным подмножеством \(A_j\) и \(0\) в противном случае.

Множество \(X\) является собственным подмножеством множества \(Y\), если \(X\) является непустым подмножеством \(Y\), и \(X \neq Y\).

Гарантируется, что для всех наборов входных данных в этой задаче, такие \(n\) множеств существуют. Заметим, что это не означает, что такие \(n\) множеств существуют для всех возможных наборов входных данных.

Если существует несколько решений, то можно вывести любое из них.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит целое число \(n\) (\(1\le n\le 100\)).

Следующие \(n\) строк содержат бинарную матрицу \(b\), \(j\)-е символ \(i\)-й строки обозначает \(b_{i,j}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Гарантируется, что для всех наборов входных данных в данной задаче такие \(n\) множеств существуют.

Выходные данные

Для каждого набора входных данных выведите \(n\) строк.

В \(i\)-й строке сначала выведите \(s_i\) \((1 \le s_i \le n)\)  — размер множества \(A_i\). Затем выведите \(s_i\) попарно различных целых чисел от \(1\) до \(n\)  — элементы множества \(A_i\).

Если существует несколько решений, то можно вывести любое из них.

Гарантируется, что для всех наборов входных данных в данной задаче такие \(n\) множеств существуют.

Примечание

В первом наборе входных данных имеем \(A_1 = \{1, 2, 3\}, A_2 = \{1, 3\}, A_3 = \{2, 4\}, A_4 = \{1, 2, 3, 4\}\). Множества \(A_1, A_2, A_3\) являются собственными подмножествами \(A_4\), а также множество \(A_2\) является собственным подмножеством \(A_1\). Никакое другое множество не является собственным подмножеством никакого другого множества.

Во втором наборе входных данных имеем \(A_1 = \{1\}, A_2 = \{1, 2\}, A_3 = \{1, 2, 3\}\). \(A_1\) является собственным подмножеством \(A_2\) и \(A_3\), а \(A_2\) является собственным подмножеством \(A_3\).

E. Сделайте связным

Бинарный поиск графы Деревья жадные алгоритмы Конструктив матрицы Перебор снм *2400

Вам дан простой неориентированный граф, состоящий из \(n\) вершин. Граф не содержит петель, между каждой парой вершин существует не более одного ребра. Ваша задача проста: сделать граф связным.

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите произвольную вершину \(u\).
  • Для каждой вершины \(v\), для которой \(v\ne u\), если \(v\) смежна с \(u\), удалите ребро между \(u\) и \(v\), иначе добавьте ребро между \(u\) и \(v\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать граф связным. Также найдите любую последовательность операций минимальной длины, которая делает граф связным.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 800\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 4000\)) — количество вершин в графе.

Затем следуют \(n\) строк. В \(i\)-й строке содержится бинарная строка \(s_i\) длины \(n\), где \(s_{i,j}\) равно '1', если между вершинами \(i\) и \(j\) изначально существует ребро, иначе \(s_{i,j}\) равно '0'.

Гарантируется, что \(s_{i,i}\) всегда '0' и \(s_{i,j}=s_{j,i}\) для \(1\leq i,j\leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(4000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(m\)  — минимально необходимое количество операций.

Если \(m\) больше нуля, то выведите дополнительную строку, состоящую из \(m\) целых чисел — вершин, выбранных в операциях в вашем решении. Если существует несколько решений с минимальным количеством операций, выведите любое из них.

Примечание

В первом наборе входных данных граф связен в начале, поэтому ответ  — \(0\).

Во втором наборе входных данных, если мы выполним операцию с вершиной \(1\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1\\ 1&0&1\\ 1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным.

В третьем наборе входных данных, если мы проделаем операцию с вершинами \(3\) и \(4\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1&1\\ 1&0&1&1\\ 1&1&0&1\\ 1&1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным, и можно доказать, что мы не можем выполнить менее \(2\) операций, чтобы сделать граф связным.

A. Разделяй и властвуй

жадные алгоритмы математика теория чисел *800

Массив \(b\) называется хорошим, если сумма элементов \(b\) четная.

Вам дан массив \(a\) из \(n\) положительных целых чисел. За одну операцию вы можете выбрать индекс \(i\) и заменить \(a_i := \lfloor \frac{a_i}{2} \rfloor\). \(^\dagger\)

Найдите минимальное число операций (возможно, \(0\)), необходимое, чтобы сделать \(a\) хорошим. Можно показать, что всегда возможно сделать \(a\) хорошим.

\(^\dagger\) \(\lfloor x \rfloor\) обозначает округление вниз, то есть наибольшее число, меньшее или равное \(x\). Например, \(\lfloor 2.7 \rfloor = 2\), \(\lfloor \pi \rfloor = 3\) и \(\lfloor 5 \rfloor =5\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 50\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^6\)) — массив \(a\).

Обратите внимание, что сумма значений \(n\) по наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите минимальное необходимое число операций для того, чтобы сделать \(a\) хорошим.

Примечание

В первом набора входных данных массив \(a\) хороший изначально.

Во втором наборе можно дважды выполнить операцию с индексом \(2\). После первой операции массив \(a\) становится равным \([7,2]\). После выполнения операции с индексом \(2\) снова массив \(a\) становится равным \([7,1]\), этот массив хороший. Можно показать, что невозможно сделать массив \(a\) хорошим за меньшее число операций.

В третьем примере \(a\) станет равным \([0,2,4]\), если мы выполним операцию один раз с индексом \(1\). Так как \([0,2,4]\) хороший, то ответ равен \(1\).

В четвертом примере нужно выполнить операцию с индексом \(1\) четыре раза. После всех операций \(a\) становится равным \([0]\). Можно показать, что невозможно сделать массив \(a\) хорошим за меньшее число операций.

A. Абсолютная максимизация

битмаски жадные алгоритмы Конструктив математика *800

Вам дан массив \(a\) длины \(n\). Вы можете применить следующую операцию несколько (возможно, ноль) раз:

  • Выбрать \(i\), \(j\), \(b\): Поменять местами \(b\)-й бит в бинарной записи \(a_i\) и \(a_j\).

В бинарной записи биты нумеруются справа (наименее значимый) налево (наиболее значимый). Учтите, что в начале любой бинарной записи имеется бесконечное число начальных нулевых битов.

Например, поменять местами \(0\)-й бит для \(4=100_2\) и \(3=11_2\) даст в результате \(101_2=5\) и \(10_2=2\). Поменять местами \(2\)-й бит для \(4=100_2\) и \(3=11_2\) даст в результате \(000_2=0_2=0\) и \(111_2=7\).

Найдите максимальное значение \(\max(a) - \min(a)\).

Тут \(\max(a)\) означает максимальный элемент \(a\) и \(\min(a)\) означает минимальный элемент \(a\).

Бинарная запись \(x\) — это \(x\) записанное в системе счисления с основанием \(2\). Например, \(9\) и \(6\) записанные в системе счисления с основанием \(2\) это \(1001\) и \(110\), соответственно.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 128\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 512\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 1024\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(512\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное возможное значение \(\max(a) - \min(a)\).

Примечание

В первом примере может быть показано, что не надо делать никаких операций — максимальное значение \(\max(a) - \min(a)\) это \(1 - 0 = 1\).

Во втором примере ни одна операция не может изменить массив — максимальное значение \(\max(a) - \min(a)\) это \(5 - 5 = 0\).

В третьем примере изначально \(a = [1, 2, 3, 4, 5]\), мы можем применить операцию \(i = 2\), \(j = 5\), \(b = 1\). Массив станет равен \(a = [1, 0, 3, 4, 7]\). Может быть показано, что последующие операции не приведут к улучшению ответ. Таким образом, максимальное значение это \(\max(a) - \min(a) = 7 - 0 = 7\).

C. Очередная задача про массив

жадные алгоритмы Конструктив Перебор *2000

Вам дан массив \(a\) из \(n\) целых чисел. Вы можете совершить следующую операцию любое число раз (0 или больше раз):

  • Выбрать \(2\) индекса \(i\),\(j\) где \(1 \le i < j \le n\) и заменить \(a_k\) для всех \(i \leq k \leq j\) значением \(|a_i - a_j|\)

Выведите максимальную сумму всех элементов конечного массива, которую вы можете получить таким образом.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(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\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму конечного массива.

Примечание

В первом примере невозможно достичь сумму \(> 3\) используя операцию, таким образом ответ \(3\).

Во втором примере можно показать, что максимальная достижимая сумма равна \(16\). Используем операцию \((1,2)\) и преврати массив из \([9,1]\) в \([8,8]\), таким образом ответ равен \(16\).

В третьем примере можно показать, что невозможно достичь суммы \(> 18\) используя операцию, таким образом ответ \(18\).

A. Дореми и краски

жадные алгоритмы *800

У Дореми \(n\) ведерок с краской, они могут быть представленны в виде массива \(a\) длины \(n\). Ведерко \(i\) содержит краску цвета \(a_i\).

Пусть \(c(l,r)\) — количество различных цветов в подмассиве \([a_l,a_{l+1},\ldots,a_r]\). Выберите \(2\) целых числа \(l\) и \(r\) такие, что \(l \leq r\), а значение \(r-l-c(l,r)\) — максимально возможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — дллину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(l\) и \(r\) такие, что \(l \leq r\), а значение \(r-l-c(l,r)\) — максимально возможно.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере \(a=[1,3,2,2,4]\).

  • Если \(l=1\) и \(r=3\), то \(c(l,r)=3\) (\(3\) различных элементов среди \([1,3,2]\)).
  • Если \(l=2\) и \(r=4\), то \(c(l,r)=2\) (\(2\) различных элементов среди \([3,2,2]\)).

Можно показать, что выбор \(l=2\) и \(r=4\) максимизирует значение \(r-l-c(l,r)\), равное \(0\).

Во втором примере \(a=[1,2,3,4,5]\).

  • Если \(l=1\) и \(r=5\), то \(c(l,r)=5\) (\(5\) различных элементов среди \([1,2,3,4,5]\)).
  • Если \(l=3\) и \(r=3\), то \(c(l,r)=1\) (\(1\) различных элементов среди \([3]\)).

Можно показать, что выбор \(l=1\) и \(r=5\) максимизирует значение \(r-l-c(l,r)\), равное \(-1\). Выбор \(l=3\) и \(r=3\) также подходит.

C. Дореми и строительство города

графы жадные алгоритмы *1400

Строительство нового города Дореми начинается! Город можно представить как простой неориентированный граф из \(n\) вершин. Высота \(i\)-й вершины равна \(a_i\). Теперь Дореми должна решить, какие вершины должны быть соединены ребрами.

По экономическим причинами в графе не должно быть петель или кратных ребер.

Из соображений безопасности не должно быть попарно различных вершин \(u\), \(v\) и \(w\) таких, что \(a_u \leq a_v \leq a_w\), и существуют ребра \((u,v)\) и \((v,w)\).

Дореми хочет знать, какое максимальное количество ребер в графе может быть при данных ограничениях. Можете помочь ей?

Обратите внимание, что построенный граф не обязательно должен быть связным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — количество вершин.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1\le a_i\le 10^6\)) — высоты всех вершин.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимально возможное число ребер в графе.

Примечание

В первом наборе входных данных максимум может быть \(3\) ребра. Одно из возможных решений — добавить ребра \((1,3)\), \((2,3)\), \((3,4)\). На рисунке ниже красное число над вершиной \(i\) равно \(a_i\).

Список ниже перечисляет все тройки \(u\), \(v\), \(w\) такие, что существуют ребра \((u,v)\) и \((v,w)\).

  • \(u=1\), \(v=3\), \(w=2\);
  • \(u=1\), \(v=3\), \(w=4\);
  • \(u=2\), \(v=3\), \(w=1\);
  • \(u=2\), \(v=3\), \(w=4\);
  • \(u=4\), \(v=3\), \(w=1\);
  • \(u=4\), \(v=3\), \(w=2\).

Другое возможное решение — добавить ребра \((1,4)\), \((2,4)\), \((3,4)\).

Неправильное решение — добавить ребра \((1,3)\), \((2,3)\), \((2,4)\), \((3,4)\). В таком случае если выбрать \(u=4\), \(v=2\), \(w=3\), то \(a_u\le a_v \le a_w\) выполняется, и есть соответствующие ребра.

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]\).

B. Broken Keyboard

жадные алгоритмы *800

Recently, Mishka started noticing that his keyboard malfunctions — maybe it's because he was playing rhythm games too much. Empirically, Mishka has found out that every other time he presses a key, it is registered as if the key was pressed twice. For example, if Mishka types text, the first time he presses a key, exactly one letter is printed; the second time he presses a key, two same letters are printed; the third time he presses a key, one letter is printed; the fourth time he presses a key, two same letters are printed, and so on. Note that the number of times a key was pressed is counted for the whole keyboard, not for each key separately. For example, if Mishka tries to type the word osu, it will be printed on the screen as ossu.

You are given a word consisting of \(n\) lowercase Latin letters. You have to determine if it can be printed on Mishka's keyboard or not. You may assume that Mishka cannot delete letters from the word, and every time he presses a key, the new letter (or letters) is appended to the end of the word.

Input

The first line of the input contains one integer \(t\) (\(1 \le t \le 100\)) — the number of test cases.

The first line of the test case contains one integer \(n\) (\(1 \le n \le 100\)) — the length of the word.

The second line of the test case contains a string \(s\) consisting of \(n\) lowercase Latin letters — the word that should be checked.

Output

For each test case, print YES if the word \(s\) can be printed on Mishka's keyboard, and NO otherwise.

Note

In the first test case, Mishka can type the word as follows: press o (one letter o appears at the end of the word), then presses s (two letters s appear at the end of the word), and, finally, press u (one letter appears at the end of the word, making the resulting word ossu).

In the second test case, Mishka can try typing the word as follows: press a (one letter a appears at the end of the word). But if he tries to press a one more time, two letters a will appear at the end of the word, so it is impossible to print the word using his keyboard.

In the fourth test case, Mishka has to start by pressing q. Then, if he presses w, two copies of w will appear at the end of the word, but the third letter should be e instead of w, so the answer is NO.

H. Hospital Queue

Бинарный поиск графы жадные алгоритмы реализация *2200

There are \(n\) people (numbered from \(1\) to \(n\)) signed up for a doctor's appointment. The doctor has to choose in which order he will appoint these people. The \(i\)-th patient should be appointed among the first \(p_i\) people. There are also \(m\) restrictions of the following format: the \(i\)-th restriction is denoted by two integers \((a_i, b_i)\) and means that the patient with the index \(a_i\) should be appointed earlier than the patient with the index \(b_i\).

For example, if \(n = 4\), \(p = [2, 3, 2, 4]\), \(m = 1\), \(a = [3]\) and \(b = [1]\), then the only order of appointment of patients that does not violate the restrictions is \([3, 1, 2, 4]\). For \(n =3\), \(p = [3, 3, 3]\), \(m = 0\), \(a = []\) and \(b = []\), any order of appointment is valid.

For each patient, calculate the minimum position in the order that they can have among all possible orderings that don't violate the restrictions.

Input

The first line contains two integers \(n\) and \(m\) (\(1 \le n \le 2000\); \(0 \le m \le 2000\)).

The second line contains \(n\) integers \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)).

Then \(m\) lines follow. The \(i\)-th of them contains two integers \(a_i\) and \(b_i\) (\(1 \le a_i, b_i \le n\); \(a_i \ne b_i\)). All pairs of \((a_i, b_i)\) are distinct (i. e. if \(i \ne j\), then either \(a_i \ne a_j\), \(b_i \ne b_j\), or both).

Additional constraint on the input: there is at least one valid order of patients.

Output

Print \(n\) integers, where \(i\)-th integer is equal to the minimum position of \(i\)-th patient in the order, among all valid orders. Positions in the order are numbered from \(1\) to \(n\).

Note

In the first example, \([3, 1, 2, 4]\) the only one valid order, so the minimum position of each patient is equal to their position in this order.

In the second example, any order is valid, so any patient can be appointed first.

In the third example, there are three valid orders: \([4, 2, 3, 1, 5]\), \([3, 4, 2, 1, 5]\) and \([4, 3, 2, 1, 5]\).

K. Torus Path

жадные алгоритмы математика *1500

You are given a square grid with \(n\) rows and \(n\) columns, where each cell has a non-negative integer written in it. There is a chip initially placed at the top left cell (the cell with coordinates \((1, 1)\)). You need to move the chip to the bottom right cell (the cell with coordinates \((n, n)\)).

In one step, you can move the chip to the neighboring cell, but:

  1. you can move only right or down. In other words, if the current cell is \((x, y)\), you can move either to \((x, y + 1)\) or to \((x + 1, y)\). There are two special cases:
    • if the chip is in the last column (cell \((x, n)\)) and you're moving right, you'll teleport to the first column (to the cell \((x, 1)\));
    • if the chip is in the last row (cell \((n, y)\)) and you're moving down, you'll teleport to the first row (to the cell \((1, y)\)).
  2. you cannot visit the same cell twice. The starting cell is counted visited from the beginning (so you cannot enter it again), and you can't leave the finishing cell once you visit it.

Your total score is counted as the sum of numbers in all cells you have visited. What is the maximum possible score you can achieve?

Input

The first line contains the single integer \(n\) (\(2 \le n \le 200\)) — the number of rows and columns in the grid.

Next \(n\) lines contains the description of each row of the grid. The \(i\)-th line contains \(n\) integers \(a_{i, 1}, a_{i, 2}, \dots, a_{i, n}\) (\(0 \le a_{i, j} \le 10^9\)) where \(a_{i, j}\) is the number written in the cell \((i, j)\).

Output

Print one integer — the maximum possible score you can achieve.

N. Number Reduction

жадные алгоритмы *1500

You are given a positive integer \(x\).

You can apply the following operation to the number: remove one occurrence of any digit in such a way that the resulting number does not contain any leading zeroes and is still a positive integer. For example, \(10142\) can be converted to \(1142\), \(1042\), \(1012\) or \(1014\) (note that \(0142\) is not a valid outcome); \(10\) can be converted to \(1\) (but not to \(0\) since it is not positive).

Your task is to find the minimum positive integer that you can obtain from \(x\) if you can apply the aforementioned operation exactly \(k\) times.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 10^5\)) — the number of test cases.

The first line of each test case contains a single integer \(x\) (\(1 \le x < 10^{500000}\)).

The second line contains a single integer \(k\) (\(0 \le k < |x|\)), where \(|x|\) is the length of the number \(x\).

The sum of \(|x|\) over all test cases does not exceed \(5 \cdot 10^5\).

Output

For each test case, print one integer — the minimum positive number that you can obtain from \(x\) if you can apply the operation exactly \(k\) times.

B. Башни из кубиков

жадные алгоритмы сортировки Структуры данных *800

Даны \(n\) башен из кубиков, пронумерованных от \(1\) до \(n\). В \(i\)-й башне \(a_i\) кубиков.

За один ход можно переложить один кубик с \(i\)-й башни на \(j\)-ю, но только если \(a_i > a_j\). Такой ход увеличивает \(a_j\) на \(1\) и уменьшает \(a_i\) на \(1\). Вы можете сделать сколько угодно ходов (возможно, ноль).

Какое наибольшее количество кубиков можно получить на башне \(1\) после ходов?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество башен.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — количество кубиков в каждой башне.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите наибольшее количество кубиков, которые могут оказаться на башне \(1\) после того как вы сделаете произвольное количество ходов (возможно, ноль).

Примечание

В первом наборе входных данных вы можете переместить кубик с башни \(2\) на башню \(1\), сделав количества кубиков равными \([2, 1, 3]\). Затем переместить кубик с башни \(3\) на башню \(1\), сделав количества кубиков равными \([3, 1, 2]\). Башня \(1\) высотой \(3\) кубика, и нельзя получить больше.

Во втором наборе входных данных можно переместить кубик с любой из башен \(2\) или \(3\) на башню \(1\) так, чтобы в ней стало \(2\) кубика.

В третьем наборе входных данных можно \(500000000\) раз переместить кубик с башни \(2\) на башню \(1\). После этого количества кубиков станут \([500000001, 500000000]\).

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\) в порядке их возрастания.

A. Кратные факториалу

жадные алгоритмы математика теория чисел *800

Вам дано натуральное число \(k\). Найдите наибольшее натуральное число \(x\), где \(1 \le x < k\), такое, что \(x! + (x - 1)!^\dagger\) кратно \(^\ddagger\) числу \(k\), или определите, что такого \(x\) не существует.

\(^\dagger\) \(y!\) обозначает факториал числа \(y\): \(0! = 1\), а для \(y \geq 1\) факториал задаётся рекуррентно: \(y! = y \cdot (y-1)!\). Например, \(5! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 \cdot 0! = 120\).

\(^\ddagger\) Если \(a\) и \(b\) — целые числа, то \(a\) кратно \(b\), если существует целое число \(c\) такое, что \(a = b \cdot c\). Например, \(10\) кратно \(5\), но \(9\) не кратно \(6\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Единственная строка каждого набора входных данных содержит одно целое число \(k\) (\(2 \le k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшее возможное натуральное число \(x\), удовлетворяющее условиям выше.

Если такого \(x\) не существует, выведите \(-1\).

Примечание

В первом наборе \(2! + 1! = 2 + 1 = 3\), что кратно \(3\).

В третьем наборе \(7! + 6! = 5040 + 720 = 5760\), что кратно \(8\).

B. Быстрая сортировка

жадные алгоритмы математика *900

Вам дана перестановка\(^\dagger\) \(p\) длины \(n\) и положительное число \(k \le n\).

За одну операцию вы:

  • Выбираете \(k\) различных элементов \(p_{i_1}, p_{i_2}, \ldots, p_{i_k}\).
  • Удаляете их из массива и добавляете эти элементы в конец массива в отсортированном по возрастанию порядке.

Например, если \(p = [2,5,1,3,4]\) и \(k = 2\), и вы выберете \(5\) и \(3\) как элементы для операции, то операция будет выглядеть так: \([2, \color{red}{5}, 1, \color{red}{3}, 4] \rightarrow [2, 1, 4, \color{red}{3},\color{red}{5}]\).

Найдите минимальное число операций, которое необходимо сделать, чтобы отсортировать массив по возрастанию. Можно показать, что это всегда возможно сделать.

\(^\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 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le n\)) — длина перестановки и параметр операции.

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1,p_2,\ldots, p_n\) (\(1 \le p_i \le n\)). Гарантируется, что \(p\) — перестановка.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, которое необходимо сделать, чтобы отсортировать массив. Можно показать, что это всегда возможно.

Примечание

В первом наборе входных данных массив уже отсортирован.

Во втором наборе можно выбрать число \(3\) и перестановка станет отсортированной: \([\color{red}{3}, 1, 2] \rightarrow [1, 2, \color{red}{3}]\).

В третьем наборе входных данных можно выбрать \(3\) и \(4\), тогда перестановка станет отсортированной: \([1, \color{red}{3}, 2, \color{red}{4}] \rightarrow [1, 2, \color{red}{3},\color{red}{4}]\).

Можно показать, что в четвертом наборе за \(1\) операцию отсортировать массив невозможно. А за две операции можно отсортировать так: в первой операции выбрать элементы \(2\) и \(1\), а во второй выбрать \(3\) и \(4\). Тогда перестановка станет отсортированной: \([\color{red}{2}, 3, \color{red}{1}, 4] \rightarrow [\color{blue}{3}, \color{blue}{4}, \color{red}{1}, \color{red}{2}] \rightarrow [1,2, \color{blue}{3}, \color{blue}{4}]\).

C. Поэлементное ограничение

жадные алгоритмы Конструктив реализация сортировки *1300

Вам дан массив целых чисел \(a\) длины \(n\).

Найдите две перестановки\(^\dagger\) \(p\) и \(q\) длины \(n\) такие, что \(\max(p_i,q_i)=a_i\) для всех \(1 \leq i \leq n\) или сообщите, что таких \(p\) и \(q\) не существует.

\(^\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 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина перестановки.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует \(p\) и \(q\), удовлетворяющих условиям, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек), затем выведите \(2\) строки. Первая строка должна содержать \(n\) целых \(p_1,p_2,\ldots,p_n\), а вторая строка должна содержать \(n\) целых \(q_1,q_2,\ldots,q_n\).

Если существует несколько решений, вы можете вывести любое из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных \(p=q=[1]\). Это верно, так как \(a_1 = max(p_1,q_1) = 1\).

Во втором наборе \(p=[1,3,4,2,5]\) и \(q=[5,2,3,1,4]\). Эти массивы удовлетворяют условию, так как:

  • \(a_1 = \max(p_1, q_1) = \max(1, 5) = 5\),
  • \(a_2 = \max(p_2, q_2) = \max(3, 2) = 3\),
  • \(a_3 = \max(p_3, q_3) = \max(4, 3) = 4\),
  • \(a_4 = \max(p_4, q_4) = \max(2, 1) = 2\),
  • \(a_5 = \max(p_5, q_5) = \max(5, 4) = 5\).

В третьем наборе можно показать, что таких \(p\) и \(q\) не существует.

D. Удачная перестановка

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1800

Вам дана перестановка\(^\dagger\) \(p\) длины \(n\).

За одну операцию вы можете выбрать два индекса \(1 \le i < j \le n\) и поменять местами \(p_i\) и \(p_j\).

Найдите минимальное количество операций, которое необходимо сделать, чтобы в итоговой перестановке была ровно одна инверсия\(^\ddagger\).

\(^\dagger\) Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

\(^\ddagger\) Количеством инверсий в перестановке \(p\) называется количество пар индексов \((i, j)\) таких, что \(1 \le i < j \le n\) и \(p_i > p_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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\)). Гарантируется, что \(p\) — перестановка.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, которое необходимо сделать, чтобы в итоговом массиве была ровно одна инверсия. Можно показать, что это всегда возможно.

Примечание

В первом наборе входных перестановка уже удовлетворяет условию.

Во втором наборе вы можете выполнить операцию с \((i,j)=(1,2)\), после этого в перестановке \([2,1]\) будет ровно одна инверсия.

В третьем наборе нельзя выполнить условие меньше чем за \(3\) операции. А за \(3\) операции можно добиться выполнения условия так: \((i,j)\) должны равняться \((1,3)\), \((2,4)\), \((3,4)\) в соответствующих операциях. Итоговой перестановкой будет \([1, 2, 4, 3]\), в ней ровно одна инверсия.

В четвёртом наборе нужно сделать обмен, в котором \((i,j)=(2,4)\), в результате чего перестановка будет равняться \([2,1,3,4]\).

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\).

A. Косия и доски

жадные алгоритмы Перебор *1000

У Косии есть \(n\) маркерных досок, пронумерованных от \(1\) до \(n\). Изначально на \(i\)-й доске написано целое число \(a_i\).

Косия выполнит \(m\) операций. На \(j\)-й операции она выберет одну из досок и заменит число, написанное на этой доске, на \(b_j\).

Найдите максимально возможную сумму чисел на досках после выполнения всех \(m\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 100\)).

Вторая строка содержит \(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\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную сумму чисел на досках после выполнения всех \(m\) операций.

Примечание

В первом примере Косия может выполнить операции следующим образом.

  1. Выбрать \(1\)-ю доску и заменить число на ней на \(b_1=4\).
  2. Выбрать \(2\)-ю доску и заменить число на \(b_2=5\).

После выполнения всех операций на досках будут написаны числа \(4\), \(5\) и \(3\) соответственно, их сумма равна \(12\). Можно показать, что это максимально возможная сумма.

Во втором примере Косия может выполнить операции следующим образом.

  1. Выбрать \(2\)-ю доску и заменить число на \(b_1=3\).
  2. Выбрать \(1\)-ю доску и заменить число на \(b_2=4\).
  3. Выбрать \(2\)-ю доску и заменить число на \(b_3=5\).

Сумма этих чисел равна \(4 + 5 = 9\). Можно показать, что это максимально возможная сумма.

C. Хоссам и ученики

жадные алгоритмы математика теория чисел *1600

У Хоссама \(n\) учеников. Он присвоил число \(a_i\) \(i\)-му ученику.

Пара \(i\)-го и \(j\)-го (\(i \neq j\)) учеников называется успешной, если существует число \(x\) (\(x \geq 2\)) такое, что \(x\) делит \(a_i\) и \(x\) делит \(a_j\)

Хоссам хочет знать, существует ли успешная пара среди его учеников.

Хоссам очень устал и попросил вас помочь ему решить эту задачу.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\)(\(1 \le t \le 10^5\)), количество наборов входных данных. Далее следуют их описания.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — числа, присвоенные ученикам.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если среди учеников существует успешная пара, и «NO» иначе. Вы можете выводить буквы в любом регистре.

Примечание

В первом примере первый и второй ученики составляют успешную пару:

\(a_1 = 32, a_2 = 48\), можно выбрать \(x = 4\)

C. Разные разности

жадные алгоритмы Конструктив математика *1000

Назовем массив \(a\), состоящий из \(k\) целых чисел, строго возрастающим, если \(a_1 < a_2 < \dots < a_k\). Например, массивы \([1, 3, 5]\), \([1, 2, 3, 4]\), \([3, 5, 6]\) — строго возрастающие; массивы \([2, 2]\), \([3, 7, 5]\), \([7, 4, 3]\), \([1, 2, 2, 3]\) — нет.

Для строго возрастающего массива \(a\) из \(k\) элементов обозначим характеристику как количество различных элементов в массиве \([a_2 - a_1, a_3 - a_2, \dots, a_k - a_{k-1}]\). Например, характеристика массива \([1, 3, 4, 7, 8]\) равна \(3\), так как массив \([2, 1, 3, 1]\) содержит \(3\) различных элемента: \(2\), \(1\) и \(3\).

Вам даны два целых числа \(k\) и \(n\) (\(k \le n\)). Постройте строго возрастающий массив из \(k\) целых чисел от \(1\) до \(n\) с максимально возможной характеристикой.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 819\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(k\) и \(n\) (\(2 \le k \le n \le 40\)).

Выходные данные

Для каждого набора входных данных выведите \(k\) целых чисел — элементы строго возрастающего массива \(a\) с максимально возможной характеристикой. Если ответов несколько, выведите любой из них.

G. Поднятие рейтинга

Бинарный поиск жадные алгоритмы математика реализация сортировки *2200

Монокарп играет в шахматы на одном популярном сайте. На этом сайте у него есть \(n\) соперников. Рейтинг \(i\)-го соперника равен \(a_i\). Изначальный рейтинг Монокарпа равен \(x\). Монокарп хочет достичь рейтинга \(y\) (\(y > x\)).

Когда Монокарп играет партию, он побеждает, если его текущий рейтинг больше или равен рейтинга противника. В случае победы рейтинг Монокарпа повышается на \(1\), в случае поражения — понижается на \(1\). Рейтинг его противника не меняется.

Монокарп хочет за минимальное кол-во партий достигнуть рейтинга \(y\). Но сайт не позволяет ему легко набирать рейтинг в играх против слабых игроков, требуя, чтобы Монокарп играл со всеми противниками примерно равное количество партий. Формально, Монокарп может сыграть партию с противником \(i\) только если нет другого противника \(j\) такого, что Монокарп сыграл против \(i\) больше раз, чем против \(j\).

Посчитайте минимальное кол-во партий, которое нужно сыграть Монокарпу, чтобы достичь рейтинга \(y\), или скажите, что это невозможно. Заметьте, что рейтинги противников Монокарпа остаются неизменными, в отличие от рейтинга самого Монокарпа.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(x\) и \(y\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le x < y \le 10^{12}\)) — количество противников Монокарпа, его первоначальный и желаемый рейтинги.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)) — рейтинги противников Монокарпа.

Гарантируется, что сумма \(n\) по всем \(t\) наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество партий, которые нужно сыграть Монокарпу, чтобы получить рейтинг \(y\), или \(-1\), если достичь данного рейтинга невозможно.

Примечание

В первом наборе входных данных, Монокарп может использовать следующую стратегию:

  1. Монокарп играет против \(2\)-го соперника и увеличивает рейтинг (\(2 \to 3\));
  2. Монокарп играет против \(1\)-го соперника и увеличивает рейтинг (\(3 \to 4\));
  3. Монокарп играет против \(4\)-го соперника и увеличивает рейтинг (\(4 \to 5\));
  4. Монокарп играет против \(5\)-го соперника и увеличивает рейтинг (\(5 \to 6\));
  5. Теперь Монокарп должен сыграть с оставшимися тремя соперниками. Он проиграет \(3\) раза и получит рейтинг \(3\) (\(6 \to 5 \to 4 \to 3\));
  6. После этого Монокарп повторит шаги 1-5 два раза. После \(14\) партий получится, что он сыграл дважды к каждым противников и его финальный рейтинг равен \(4\).
  7. Монокарп играет против \(1\)-го соперника и увеличивает рейтинг (\(4 \to 5\));
  8. Монокарп играет против \(2\)-го соперника и увеличивает рейтинг (\(5 \to 6\));
  9. Монокарп играет против \(4\)-го соперника и увеличивает рейтинг (\(6 \to 7\));
  10. Монокарп играет против \(5\)-го соперника и увеличивает рейтинг (\(7 \to 8\));
  11. Монокарп играет против \(7\)-го соперника и увеличивает рейтинг (\(8 \to 9\));
  12. Монокарп играет против \(3\)-го соперника и увеличивает рейтинг (\(9 \to 10\));
В результате Монокарп сыграл дважды с \(6\)-м противником и трижды со всеми остальными, получив рейтинг \(10\) за \(14 + 6 = 20\) партий.

Во втором наборе можно показать, что какие бы партии не сыграл Монокарп, он не сможет получить рейтинг выше \(4\).

B. Покраска

жадные алгоритмы Конструктив математика *1500

У Cirno_9baka есть бумажная лента с \(n\) клетками, расположенными в ряд. Поскольку он считает, что чистая бумажная лента слишком скучна, он хочет раскрасить клетки в \(m\) цветов. Из эстетических соображений он считает, что \(i\)-й цвет должен быть использован ровно \(a_i\) раз, а также, что для каждых \(k\) последовательных клеток их цвета должны быть попарно различными.

Помогите Cirno_9baka выяснить, существует ли такой способ раскрасить клетки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\,000\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(k\) (\(1 \leq k \leq n \leq 10^9\), \(1 \leq m \leq 10^5\), \(m \leq n\)). Здесь \(n\) обозначает количество клеток, \(m\)  — количество цветов, а \(k\) означает, что для каждых \(k\) последовательных клеток, их цвета должны быть попарно различными.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \cdots , a_m\) (\(1 \leq a_i \leq n\))  — обозначающие, сколько раз цвета должны быть использованы. Гарантируется, что \(a_1 + a_2 + \ldots + a_m = n\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует хотя бы одна возможная схема раскраски; в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «Yes» и «YEs» будут распознаны как положительные ответы).

Примечание

В первом наборе входных данных нет способа раскрасить клетки, удовлетворяющего всем условиям.

Во втором наборе входных данных мы можем раскрасить клетки следующим образом: \((1, 2, 1, 2, 3, 4, 3, 4, 5, 6, 5, 6)\). Для любых \(2\) последовательных клеток, их цвета различны.

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\).

D. Одинаковое число единиц

жадные алгоритмы Конструктив Перебор реализация *1600

ChthollyNotaSeniorious получил специальный подарок от AquaMoon: \(n\) бинарных массивов длины \(m\). AquaMoon говорит ему, что за одну операцию он может выбрать любые два массива и любую позицию \(pos\) от \(1\) до \(m\) и поменять местами элементы на позициях \(pos\) в этих массивах.

Его увлекла эта игра, и он хочет найти минимальное количество операций, которые необходимо выполнить, чтобы количество \(1\) во всех массивах было одинаковым. Он пригласил вас принять участие в этой интересной игре, поэтому, пожалуйста, попробуйте найти его!

Если это возможно, пожалуйста, выведите конкретные шаги обмена в формате, описанном в разделе выходных данных. В противном случае, пожалуйста, выведите \(-1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(2 \leq m \leq 10^5\)).

В \(i\)-й из следующих \(n\) строк содержится \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) \((0 \le a_{i, j} \le 1)\)  — элементы \(i\)-го массива.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных, если цель недостижима, выведите \(-1\).

В противном случае в первой строке выведите \(k\) \((0 \le k \le mn)\)  — минимальное необходимое количество операций.

\(i\)-я из следующих \(k\) строк должна содержать \(3\) целых числа \(x_i, y_i, z_i\) \((1 \le x_i, y_i \le n, 1 \le z_i \le m)\), которые описывают операцию, которая меняет местами \(a_{x_i, z_i}, a_{y_i, z_i}\): меняет местами \(z_i\)-е числа \(x_i\)-го и \(y_i\)-го массивов.

Примечание

В первом наборе входных данных достаточно выполнить одну операцию: поменять местами первый элемент во второй и первой строках. Массивы станут \([0, 1, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1]\), каждый из которых содержит ровно две \(1\).

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\).

A2. Садовник и капибары (сложная версия)

жадные алгоритмы Конструктив *900

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на длину строки. Вы можете делать взломы, только если обе версии задачи сданы.

Казимир Казимирович — марсианский садовник. У него есть огромный сад, в котором растут двоичные сбалансированные яблони.

Недавно Казимир решил завести себе трех капибар. Садовник даже придумал им имена и записал их на листе бумаги. Имя каждой из капибар — непустая строка, состоящая из строчных букв «a» и «b».

Обозначим имена капибар строками \(a\), \(b\) и \(c\). Тогда Казимир записал непустые строки \(a\), \(b\) и \(c\) подряд без пробелов. Например, если капибар звали «aba», «ab» и «bb», то записанная садовником строка будет выглядеть как «abaabbb».

Садовник запомнил интересное свойство: либо строка \(b\) лексикографически не меньше строк \(a\) и \(c\) одновременно, либо строка \(b\) лексикографически не больше строк \(a\) и \(c\) одновременно. Иными словами, либо выполнено \(a \le b\) и \(c \le b\), либо выполнено \(b \le a\) и \(b \le c\) (а возможно, и оба условия одновременно). Здесь \(\le\) обозначает лексикографическое «меньше или равно» для строк. Таким образом, \(a \le b\) значит, что строки должны быть либо равны, либо строка \(a\) должна стоять раньше в словаре, чем строка \(b\). Более подробное объяснение этой операции см. в разделе «Примечание».

Сегодня садовник взглянул на свои записи и понял, что не может восстановить имена, поскольку они записаны без пробелов. Он уже не уверен, сможет ли восстановить оригинальные строки \(a\), \(b\) и \(c\), поэтому ему хочется найти любую тройку имен, которая удовлетворяет описанному выше свойству.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке набора входных данных находится строка \(s\) (\(3 \le |s| \le 2 \cdot 10^5\)) — имена капибар, записанные слитно. Строка состоит только из латинских букв «a» и «b».

Гарантируется, что сумма длин строк по всем наборам тестовых данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке три строки \(a\), \(b\) и \(c\), разделенные пробелами — имена, при записи которых без пробелов получается строка \(s\). При этом должно выполняться либо \(a \le b\) и \(c \le b\), либо \(b \le a\) и \(b \le c\).

Если способов восстановить имена несколько, то выведите любой из них. Если имена восстановить невозможно, то выведите «:(» (без кавычек).

Примечание

Строка \(x\) лексикографически меньше строки \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква «a», а в строке \(y\) — буква «b».

Теперь перейдем к примерам.

В первом наборе входных данных один из возможных способов разбить строку \(s\) на три строки — это «b», «bb», «a».

В третьем наборе входных данных можно заметить, что разбиение удовлетворяет двум условиям сразу (т. е. \(a \le b\), \(c \le b\), \(b \le a\) и \(b \le c\) верны одновременно).

E. Уравнивание людей

жадные алгоритмы реализация *2100

Мальчик Петя и его друг, Petya++, отправились на BFDMONCON, где сегодня проходит конкурс костюмов.

Проходя по фестивалю, они наткнулись на научный стенд имени профессора Оука и Гольфболла, где им предложили решить интересную задачу.

Дана последовательность из чисел \(a_1, a_2, \dots, a_n\) и вы можете производить несколько операций над этой последовательностью.

Каждая операция должна выглядеть следующим образом. Вы выбираете некоторую подпоследовательность\(^\dagger\). Далее вы называете все числа, находящиеся на нечетных позициях в этой подпоследовательности — северными, а все числа, находящиеся на четных позициях в этой подпоследовательности — южными. При этом учитывается лишь позиция числа в подпоследовательности, а не в исходной последовательности.

Например, рассмотрим последовательность \(1, 4, 2, 8, 5, 7, 3, 6, 9\) и ее подпоследовательность (выделена жирным) \(1, \mathbf{4}, \mathbf{2}, 8, \mathbf{5}, 7, 3, \mathbf{6}, 9\). Тогда числа \(4\) и \(5\) будут северными, а числа \(2\) и \(6\) — южными.

После этого можно выполнить одно из следующих действий:

  • прибавить \(1\) ко всем северным числам и отнять \(1\) от всех южных; или
  • прибавить \(1\) ко всем южным числам и отнять \(1\) от всех северных.

Таким образом, из последовательности \(1, \mathbf{4}, \mathbf{2}, 8, \mathbf{5}, 7, 3, \mathbf{6}, 9\) при выборе описанной выше подпоследовательности можно получить либо \(1, \mathbf{5}, \mathbf{1}, 8, \mathbf{6}, 7, 3, \mathbf{5}, 9\), либо \(1, \mathbf{3}, \mathbf{3}, 8, \mathbf{4}, 7, 3, \mathbf{7}, 9\).

Затем операция заканчивается. Обратите также внимание, что все операции являются независимыми, т. е. по окончании одной операции числа больше не называются северными или южными.

Необходимо с помощью описанных выше операций превратить все числа последовательности в нули. Поскольку до конкурса костюмов осталось совсем немного времени, ребята хотят узнать, какое минимальное количество операций для этого придется совершить.

Увы, ребятам такая задача оказалась не по силам, поэтому они позвали Вас на помощь.

\(^\dagger\) Последовательность \(c\) является подпоследовательностью \(d\), если \(c\) может быть получена из \(d\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — количество чисел в последовательности.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — описание самой последовательности.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите по одному целому числу в отдельной строке — минимальное количество операций, необходимое, чтобы последовательность состояла только из нулей.

Примечание

В первом тестовом примере последовательность операций выглядит так: \(\mathbf{1}, 2, \mathbf{-3} \longrightarrow 0, \mathbf{2}, \mathbf{-2} \longrightarrow 0, \mathbf{1}, \mathbf{-1} \longrightarrow 0, 0, 0\).

Во втором тестовом примере последовательность выглядит так: \(\mathbf{1}, 0, 0, \mathbf{-1}, -1 \longrightarrow 0, 0, 0, 0, \mathbf{-1} \longrightarrow 0, 0, 0, 0, 0\).

В четвертом тестовом примере достаточно выбрать всю последовательность в качестве подпоследовательности, а затем отнять единицу от северных чисел и прибавить единицу к южным. Таким образом, последовательность занулится за одну операцию.

В пятом тестовом примере не нужно делать никаких операций, поскольку последовательность уже и так состоит из нулей.

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\) оптимальных плана показаны на рисунке ниже:

A. Walking Boy

жадные алгоритмы *800

One of the SWERC judges has a dog named Boy. Besides being a good competitive programmer, Boy loves fresh air, so she wants to be walked at least twice a day. Walking Boy requires \(120\) consecutive minutes. Two walks cannot overlap, but one can start as soon as the previous one has finished.

Boy before and after getting ACCEPTED on this problem.

Today, the judge sent \(n\) messages to the SWERC Discord server. The \(i\)-th message was sent \(a_i\) minutes after midnight. You know that, when walking Boy, the judge does not send any messages, but he can send a message right before or right after a walk. Is it possible that the judge walked Boy at least twice today?

Note that a day has \(1440\) minutes, and a walk is considered to happen today if it starts at a minute \(s \ge 0\) and ends right before a minute \(e \le 1440\). In that case, it must hold that \(e - s = 120\) and, for every \(i = 1, \, 2 \, \dots, \, n\), either \(a_i \le s\) or \(a_i \ge e\).

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1 \le t \le 100\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains an integer \(n\) (\(1 \le n \le 100\)) — the number of messages sent by the judge.

The second line of each test case contains \(n\) integers \(a_1, \, a_2, \, \dots, \, a_n\) (\(0 \le a_1 < a_2 < \cdots < a_n < 1440\)) — the times at which the messages have been sent (in minutes elapsed from midnight).

Output

For each test case, output one line containing \(\texttt{YES}\) if it is possible that Boy has been walked at least twice, and \(\texttt{NO}\) otherwise.

Note

In the first test case, the judge has sent a message at each time multiple of \(100\) (excluding \(0\)). It is impossible that he has walked Boy even once.

In the second test case, the times are the same as above, but \(500\) and \(1000\) are missing. The judge could have walked Boy, for instance, during the time intervals \([440, 560]\) and \([980, 1100]\). The situation is illustrated in the picture below, where the walks are represented by green intervals.

\(\)\(\)

In the third test case, the times are the same as in the first test case, but \(1000\) is missing. The judge could have walked Boy at most once.

In the fourth test case, Boy could have been walked during the time intervals \([739, 859]\) and \([859, 979]\).

C. Library game

жадные алгоритмы игры интерактив сортировки *2500

Alessia and Bernardo are discovering the world of competitive programming through the books of their university library.

The library consists of \(m\) sections numbered from \(1\) to \(m\). Each section contains only books dedicated to a particular subject and different sections correspond to different subjects. In order to prevent the students from wandering in the library, the university has established a system of passes. Each pass has a length \(y\) associated to it and allows access to an interval of \(y\) consecutive sections in the library. During a visit, the student must choose exactly one book from one of these sections and leave the library. Each pass can be used only once.

At the moment Alessia and Bernardo have \(n\) passes of lengths \(x_1, \, x_2, \, \dots, \, x_n\). They have different opinions on the best way to improve: Alessia thinks that it is important to study many different topics, while Bernardo believes that it is important to study deeply at least one topic. So, Alessia wants to use the \(n\) passes to get \(n\) books on distinct topics, while Bernardo would like to get at least two books on the same topic.

They have reached the following agreement: for each of the following \(n\) days, Alessia will choose a pass of length \(y\) among those which are still available and an interval of \(y\) sections in the library, and Bernardo will go into the library and will take exactly one book from one of those sections.

Can Bernardo manage to get at least two books on the same subject, or will Alessia be able to avoid it?

You should decide whether you want to be Alessia or Bernardo, and you have to fulfill the goal of your chosen character. The judge will impersonate the other character. Note that, even if at some moment Bernardo has already taken two books on the same subject, the interaction should go on until the end of the \(n\) days.

Input

The first line contains two integers \(n\) and \(m\) (\(1 \le n \le 100\), \(n \le m \le 5000\)) — the number of passes and the number of sections.

The second line contains \(n\) integers \(x_1, \, x_2, \, \dots, \, x_n\) (\(1 \le x_i \le m\)) — the lengths of the passes available.

Interaction

First, you should print a line containing either the string \(\texttt{Alessia}\) or the string \(\texttt{Bernardo}\) — the character that you want to impersonate.

Then, for each of the \(n\) turns:

  • If you are taking the role of Alessia, print a single line consisting of two integers \(y\) and \(a\) (\(1 \le a \le m - y + 1\)) — you are choosing a pass of length \(y\) and the interval of sections \([a, a + y - 1]\). Note that at least one pass of length \(y\) must still be available. After this, read a single integer \(b\) (\(a \le b \le a + y - 1\)) — the subject of the book selected by Bernardo.
  • If you are taking the role of Bernardo, read two integers \(y\) and \(a\) (\(1 \le a \le m - y + 1\)) — the length of the pass chosen by Alessia and the index of the first section of the interval. It is guaranteed that there is at least one pass of length \(y\) available. Then, print a line consisting of a single integer \(b\) (\(a \le b \le a + y - 1\)) — the subject from which you choose to take a book.

If one of your interactions is malformed, the interactor terminates immediately and your program receives the verdict \(\texttt{WRONG-ANSWER}\). Otherwise, you will receive the verdict according to the game's criteria described above.

After printing a line do not forget to end the line and flush the output. Otherwise, you will get the verdict \(\texttt{TIMELIMIT}\). To flush the output, use:

  • \(\texttt{fflush(stdout)}\) in C;
  • \(\texttt{fflush(stdout)}\), \(\texttt{cout <}\texttt{< flush}\) or \(\texttt{cout.flush()}\) in C++;
  • \(\texttt{System.out.flush()}\) in Java and Kotlin;
  • \(\texttt{sys.stdout.flush()}\) in Python.
Note

In the first sample, it can be shown that Alessia can accomplish her goal. An example of interaction (after reading the input) follows:

\(\) \begin{array}{|c|c|c|} \hline \textbf{Contestant} & \textbf{Judge} & \textbf{Explanation} \\ \hline \texttt{Alessia} & & \text{The program will act as Alessia} \\ \hline 3 \quad 11 & & \text{Choose $y = 3$ and $a = 11$} \\ \hline & 13 & \text{Judge selects $b = 13$} \\ \hline 10 \quad 2 & & \text{Choose $y = 10$ and $a = 2$} \\ \hline & 9 & \text{Judge selects $b = 9$} \\ \hline 7 \quad 1 & & \text{Choose $y = 7$ and $a = 1$} \\ \hline & 4 & \text{Judge selects $b = 4$} \\ \hline 2 \quad 10 & & \text{Choose $y = 2$ and $a = 10$} \\ \hline & 10 & \text{Judge selects $b = 10$} \\ \hline 3 \quad 6 & & \text{Choose $y = 3$ and $a = 6$} \\ \hline & 7 & \text{Judge selects $b = 7$} \\ \hline \end{array} \(\)

The program of the contestant wins because all the books chosen by Bernardo pertain to different topics. The actions performed by the contestant and the judge in this example of interaction may be non-optimal.

In the second sample, it can be shown that Bernardo can manage to fulfil his goal. An example of interaction (after reading the input) follows:

\(\) \begin{array}{|c|c|c|} \hline \textbf{Contestant} & \textbf{Judge} & \textbf{Explanation} \\ \hline \texttt{Bernardo} & & \text{The program will act as Bernardo} \\ \hline & 4 \quad 1 & \text{Judge chooses $y = 4$ and $a = 1$} \\ \hline 4 & & \text{Select $b = 4$} \\ \hline & 1 \quad 10 & \text{Judge chooses $y = 1$ and $a = 10$} \\ \hline 10 & & \text{Select $b = 10$} \\ \hline & 6 \quad 3 & \text{Judge chooses $y = 6$ and $a = 3$} \\ \hline 4 & & \text{Select $b = 4$} \\ \hline & 4 \quad 5 & \text{Judge chooses $y = 4$ and $a = 5$} \\ \hline 8 & & \text{Select $b = 8$} \\ \hline \end{array} \(\)

The program of the contestant wins because Bernardo has selected two books on topic number \(4\). The actions performed by the contestant and the judge in this example of interaction may be non-optimal.

D. Teamwork

жадные алгоритмы Конструктив математика *2800

As soon as SWERC starts, your experienced \(3\)-person team immediately realizes that the contest features \(a\) easy problems, \(b\) medium problems, and \(c\) hard problems. Solving a problem will take any of you \(2\), \(3\), or \(4\) time units, depending on whether the problem is easy, medium, or hard. Regardless of the difficulty of the problem, the last time unit spent to solve it has to be spent using your shared computer.

You organize your efforts so that each of you starts (and ends) solving problems at integer time units. Any given problem can be solved by only one contestant; it requires a contiguous amount of time (which depends on the difficulty of the problem). None of the \(3\) of you can solve more than one problem at a time, but you can start solving a new problem immediately after finishing one. Similarly, the shared computer cannot be used by more than one of you at a time, but any of you can start using the computer (to complete the problem currently being solved) immediately after someone else stops using it.

Given that the contest lasts \(l\) time units, find the maximum number of problems that your team can solve. Additionally, find one way to solve the maximum number of problems.

Input

The input has a single line. It contains four integers \(a\), \(b\), \(c\), \(l\) (\(0 \leq a, b, c, \leq 10^4\), \(0 \le l \le 10^5\)) — the number of easy, medium, and hard problems, and the duration of the contest.

Output

On the first line, print a single integer \(n\) — the maximum number of problems that your team can solve.

Then, on the \(j\)-th of the following \(n\) lines, print three integers \(x_j\), \(p_j\), \(q_j\) (\(1 \leq x \leq 3\), \(0 \leq p_j < q_j \leq l\)) — the contestant that solves the \(j\)-th problem, and the start and end time for solving the \(j\)-th problem (measured as time units elapsed from the beginning of the contest). The difference \(q_j - p_j\) is \(2\), \(3\), or \(4\), depending on the difficulty of the problem.

The last \(n\) lines are to be provided in increasing order of end time: \(q_1 < q_2 < \cdots < q_n\). If there are multiple ways to solve \(n\) problems, output any of them.

Note

In the first sample, the first contestant solves an easy problem between time \(0\) and time \(2\) while the second contestant solves a medium problem between time \(0\) and time \(3\).

In the second sample, the first contestant solves an easy problem between time \(0\) and time \(2\), and then also solves a medium problem between time \(2\) and time \(5\). In the meantime, the second contestant solves another medium problem between time \(0\) and time \(3\), while the third contestant solves a hard problem between time \(0\) and time \(4\).

In the third sample, the contest only has medium and hard problems, and there is not enough time to solve any of them.

F. Train Splitting

графы жадные алгоритмы Конструктив *1700

There are \(n\) big cities in Italy, and there are \(m\) train routes between pairs of cities. Each route connects two different cities bidirectionally. Moreover, using the trains one can reach every city starting from any other city.

Right now, all the routes are operated by the government-owned Italian Carriage Passenger Company, but the government wants to privatize the routes. The government does not want to give too much power to a single company, but it also does not want to make people buy a lot of different subscriptions. Also, it would like to give a fair chance to all companies. In order to formalize all these wishes, the following model was proposed.

There will be \(k \ge 2\) private companies indexed by \(1, \, 2, \, \dots, \, k\). Each train route will be operated by exactly one of the \(k\) companies. Then:

  • For any company, there should exist two cities such that it is impossible to reach one from the other using only routes operated by that company.
  • On the other hand, for any two companies, it should be possible to reach every city from any other city using only routes operated by these two companies.

Find a plan satisfying all these criteria. It can be shown that a viable plan always exists. Please note that you can choose the number \(k\) and you do not have to minimize or maximize it.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains two integers \(n\) and \(m\) (\(3 \le n \le 50\), \(n-1 \le m \le n(n-1)/2\)) — the number of cities and the number of train routes.

The next \(m\) lines contain two integers \(u_i\) and \(v_i\) each (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)) — the \(i\)-th train route connects cities \(u_i\) and \(v_i\).

It is guaranteed that the routes connect \(m\) distinct pairs of cities. It is guaranteed that using the trains one can reach every city starting from any other city.

The sum of the values of \(n\) over all test cases does not exceed \(5000\).

Output

For each test case, on the first line print an integer \(k\) (\(2 \le k \le m\)) — the number of companies in your plan; on the second line print \(m\) integers \(c_1, \, c_2, \, \dots, \, c_m\) (\(1 \le c_i \le k\)) — in your plan company \(c_i\) operates the \(i\)-th route.

If there are multiple valid plans, you may print any of them.

Note

In the first test case, the output is illustrated in the following picture, where different colors correspond to different companies (blue for \(1\), red for \(2\), green for \(3\), and yellow for \(4\)):

If we consider, for example, only companies \(2\) and \(3\), we can see that from any city it is possible to reach every other city (picture on the left below). However, if we restrict to company \(2\) alone, it becomes impossible to reach city \(5\) from city \(1\) (picture on the right).

In the second test case, the output is illustrated in the following picture:

I. Spinach Pizza

геометрия жадные алгоритмы игры интерактив *2500

The two siblings Alberto and Beatrice have to eat a spinach pizza together. However, none of them likes spinach, so they both want to eat as little as possible.

The pizza has the shape of a strictly convex polygon with \(n\) vertices located at integer coordinates \((x_1, y_1), \, (x_2, y_2), \, \dots, \, (x_n, y_n)\) of the plane.

The siblings have decided to eat the pizza in the following way: taking turns, starting with Alberto, each sibling chooses a vertex of the remaining part of the pizza and eats out the triangle determined by its two neighboring edges. In this way, after each of the first \(n - 3\) turns the pizza will have one less vertex. The game ends after the \((n - 2)\)-th turn, when all the pizza has been eaten.

Assuming that Alberto and Beatrice choose the slices to eat optimally, which of the siblings manages to eat at most half of the pizza? You should identify a sibling that has a strategy to do so and help them choose the slices appropriately. Note that it is possible that both Alberto and Beatrice end up eating exactly half of the area if they choose their slices optimally.

Input

The first line contains a single integer \(n\) (\(4 \le n \le 100\)) — the number of vertices.

The next \(n\) lines contain two integers \(x_i\) and \(y_i\) each (\(-10^6 \le x_i, y_i \le 10^6\)) — the coordinates of the \(i\)-th vertex of the polygon representing the initial shape of the pizza.

It is guaranteed that the polygon is strictly convex and that its vertices are given in counterclockwise order.

Interaction

First, you should print a line containing either the string \(\texttt{Alberto}\) or the string \(\texttt{Beatrice}\) — the sibling that you will help to win.

Then, for the next \(n - 2\) turns, you will alternate with the judge in choosing a slice of the pizza and removing it, starting with you if you chose to help Alberto, or starting with the judge if you chose to help Beatrice.

  • When it is your turn, print a single line containing an integer \(p\) (\(1 \leq p \leq n\)) that has not been chosen before, indicating that you want to eat the slice determined by the vertex located at \((x_p, y_p)\).
  • When it is the judge's turn, read an integer \(q\) (\(1 \leq q \leq n\)), indicating that the other player eats the slice determined by the vertex located at \((x_q, y_q)\). It is guaranteed that \(q\) has not been chosen before.

If one of your interactions is malformed, the interactor terminates immediately and your program receives the verdict \(\texttt{WRONG-ANSWER}\). Otherwise, you will receive \(\texttt{CORRECT}\) if at the end your player has eaten at most half of the pizza, and \(\texttt{WRONG-ANSWER}\) otherwise.

After printing a line do not forget to end the line and flush the output. Otherwise, you will get the verdict \(\texttt{TIMELIMIT}\). To flush the output, use:

  • \(\texttt{fflush(stdout)}\) in C;
  • \(\texttt{fflush(stdout)}\), \(\texttt{cout <}\texttt{< flush}\) or \(\texttt{cout.flush()}\) in C++;
  • \(\texttt{System.out.flush()}\) in Java and Kotlin;
  • \(\texttt{sys.stdout.flush()}\) in Python.
Note

In the first sample, the pizza has area \(15\). Alberto can eat less than half of the pizza by eating the slice around vertex \(2\) (which has area \(6.5\)) or around vertex \(3\) (which has area \(3.5\)).

In the second sample, it can be proved that both players will eat exactly half of the pizza if they eat optimally. Therefore it is possible to choose to help either Alberto or Beatrice.

In the third sample, it is possible to show that only Beatrice has a strategy to eat at most half of the pizza. The following is an example of a valid interaction (after reading the input):

\(\) \begin{array}{|c|c|c|} \hline \textbf{Contestant} & \textbf{Judge} & \textbf{Explanation} \\ \hline \texttt{Beatrice} & & \text{The contestant will help Beatrice} \\ \hline & \texttt{7} & \text{Alberto eats the triangle with vertices $6$, $7$, $1$ and area $1$} \\ \hline \texttt{2} & & \text{Beatrice eats the triangle with vertices $1$, $2$, $3$ and area $2$} \\ \hline & \texttt{5} & \text{Alberto eats the triangle with vertices $4$, $5$, $6$ and area $1.5$} \\ \hline \texttt{4} & & \text{Beatrice eats the triangle with vertices $3$, $4$, $6$ and area $8$} \\ \hline & \texttt{6} & \text{Alberto eats the triangle with vertices $3$, $6$, $1$ and area $11$} \\ \hline \end{array} \(\) The total area eaten by Alberto is \(13.5\) and the total area eaten by Beatrice is \(10\), which is less than half the area of the whole pizza. The actions performed by the contestant and the judge in this example of interaction may be non-optimal. The process is illustrated below:

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\).

A. Все любят хорошие массивы!

жадные алгоритмы математика *800

Массив \(a\) называется хорошим, если для любой пары соседних элементов \(a_i\) и \(a_{i+1}\) (\(1\le i \lt n\)) имеют разную четность. В частности, массив размера \(1\) всегда является хорошим.

Вам задан массив длины \(n\).

За одну операцию можно выбрать любую пару соседних элементов, в которой элементы имеют одинаковую четность, удалить их, а затем вставить на то же место их произведение.

Определите минимальное число операций, необходимое для того, чтобы сделать массив хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите число, равное минимальному числу операций, необходимых для получения хорошего массива.

Примечание

Рассмотрим первый набор входных данных. Выберем \(2\)-е и \(3\)-е числа и применим операций к ним. Массив, до этого равный \([1, \color{red}{7}, \color{red}{11}, 2, 13]\), станет равен \([1, \color{red}{77}, 2, 13]\). Затем выберем \(1\)-й и \(2\)-й элементы. Массив, равный \([\color{red}{1}, \color{red}{77}, 2, 13]\), станет равен \([\color{red}{77}, 2, 13]\). Таким образом, нам достаточно \(2\) операций. Можно доказать, что меньшим числом операций обойтись нельзя.

Во втором наборе входных данных данный массив уже является хорошим. Поэтому нам нужно всего \(0\) операций.

B. Морднилап

жадные алгоритмы Комбинаторика математика *900

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)). Всего существует \(n! = n \cdot (n-1) \cdot (n - 2) \cdot \ldots \cdot 1\) различных перестановок длины \(n\).

По произвольной перестановке \(p\) длины \(n\) мы создаем массив \(a\) длины \(2n\), который равен конкатенации \(p\) и ее разворота. Далее, стоимостью \(p\) назовем число инверсий в \(a\).

Число инверсий в массиве \(a\) определяется как количество пар индексов \(i\), \(j\), таких что \(i < j\) и \(a_i > a_j\).

Например, если \(p = [1, 2]\), то \(a\) будет равно \([1, 2, 2, 1]\). В \(a\) всего две инверсии: \((2, 4)\) и \((3, 4)\) (нумерация элементов с 1). Значит, стоимость \(p\) равна \(2\).

Ваша задача — найти сумму стоимостей всех \(n!\) перестановок длины \(n\). Выведите остаток от деления этой суммы на \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит число \(n\) (\(1 \leq n \leq 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму стоимостей всех перестановок длины \(n\) по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Примечание

В первом наборе входных данных \(p = [1]\) — единственная возможная перестановка. Тогда \(a = [1, 1]\), и в этом массиве \(0\) инверсий.

Во втором наборе входных данных перестановки — это \([1, 2]\) и \([2, 1]\). Их соответствующие массивы \(a\) таковы: \([1, 2, 2, 1]\) и \([2, 1, 1, 2]\). В них обоих по \(2\) инверсии.

A. Сумма-перевёртыш

жадные алгоритмы реализация *800

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Каждое число равно либо \(1\), либо \(-1\). Вы должны выполнить следующую операцию над массивом \(a\) ровно один раз:

  • Выбрать индекс \(i\) (\(1 \leq i < n\)) и перевернуть знаки \(a_i\) и \(a_{i+1}\). Здесь переворачивание знака означает, что \(-1\) будет заменено на \(1\), а \(1\) станет \(-1\).

Какое максимально возможное значение \(a_1 + a_2 + \ldots + a_n\) можно получить после применения вышеописанной операции?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длину массива \(a\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = 1\) либо \(a_i = -1\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимально возможную сумму массива \(a\), которую вы можете получить в результате применения одной операции.

Примечание

В первом случае мы можем выбрать индекс \(4\) и перевернуть знаки \(a_4\) и \(a_5\). После этой операции сумма будет равна \(-1+1+1+1+1 = 3\). Можно показать, что мы не можем сделать сумму больше этого значения.

В третьем наборе единственным вариантом является выбор индекса \(1\).

B. Запрещённая перестановка

жадные алгоритмы математика *1300

Вам дана перестановка \(p\) длины \(n\), массив из \(m\) различных целых чисел \(a_1, a_2, \ldots, a_m\) (\(1 \le a_i \le n\)) и целое число \(d\).

Пусть \(\mathrm{pos}(x)\) — индекс элемента \(x\) в перестановке \(p\). Массив \(a\) не является хорошим, если

  • \(\mathrm{pos}(a_{i}) < \mathrm{pos}(a_{i + 1}) \le \mathrm{pos}(a_{i}) + d\) для всех \(1 \le i < m\).

Например, при перестановке \(p = [4, 2, 1, 3, 6, 5]\) и \(d = 2\):

  • \(a = [2, 3, 6]\) — это не хороший массив.
  • \(a = [2, 6, 5]\) является хорошим, потому что \(\mathrm{pos}(a_1) = 2\), \(\mathrm{pos}(a_2) = 5\), поэтому условие \(\mathrm{pos}(a_2) \le \mathrm{pos}(a_1) + d\) не выполняется.
  • \(a = [1, 6, 3]\) является хорошим, потому что \(\mathrm{pos}(a_2) = 5\), \(\mathrm{pos}(a_3) = 4\), поэтому условие \(\mathrm{pos}(a_2) < \mathrm{pos}(a_3)\) не выполняется.

За один ход можно поменять местами два соседних элемента перестановки \(p\). Какое минимальное количество ходов нужно сделать, чтобы массив \(a\) стал хорошим? Можно показать, что всегда существует последовательность ходов, при которой массив \(a\) становится хорошим.

Перестановка — это массив, состоящий из \(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\), \(m\) и \(d\) (\(2\leq n \leq 10^5\), \(2\leq m\leq n\), \(1 \le d \le n\)), длину перестановки \(p\), длину массива \(a\) и значение \(d\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1\leq p_i \leq n\), \(p_i \ne p_j\) для \(i \ne j\)).

Третья строка содержит \(m\) различных целых чисел \(a_1, a_2, \ldots, a_m\) (\(1\leq a_i \leq n\), \(a_i \ne a_j\) для \(i \ne j\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество ходов, необходимое для того, чтобы массив \(a\) стал хорошим.

Примечание

В первом наборе, \(pos(a_1)=1\), \(pos(a_2)=3\). Входных данных можно поступить следующим образом: поменять местами \(p_3\) и \(p_4\). После этого массив \(a\) будет хорошим, так как условие \(\mathrm{pos}(a_2) \le \mathrm{pos}(a_1) + d\) не будет выполнено.

Во втором наборе, \(pos(a_1)=1\), \(pos(a_2)=4\). Можно выполнить \(3\) таких хода:

  1. Поменять местами \(p_3\) и \(p_4\).
  2. Поменять местами \(p_2\) и \(p_3\).
  3. Поменять местами \(p_1\) и \(p_2\).
После этих перемещений перестановка \(p\) будет иметь вид \([2,5,4,3,1]\). Массив \(a\) будет хорошим, потому что условие \(\mathrm{pos}(a_1) < \mathrm{pos}(a_2)\) не будет выполнено. Можно показать, что массив \(a\) нельзя сделать хорошим за меньшее число ходов.

В третьем наборе, \(pos(a_1)=1\), \(pos(a_2)=3\), \(pos(a_3)=5\). Ходов может быть \(2\):

  1. Поменять местами \(p_4\) и \(p_5\).
  2. Поменять местами \(p_3\) и \(p_4\).
После этих перемещений перестановка \(p\) будет иметь вид \([3,4,2,1,5]\). Массив \(a\) будет хорошим, потому что условие \(\mathrm{pos}(a_2) < \mathrm{pos}(a_3)\) не будет выполнено. Можно показать, что массив \(a\) нельзя сделать хорошим за меньшее количество ходов.

В четвертом наборе, \(pos(a_1)=2\), \(pos(a_2)=1\). Массив \(a\) уже хороший.

В пятом наборе, \(pos(a_1)=2\), \(pos(a_2)=5\). Ходов может быть \(2\):

  1. Поменять местами \(p_1\) и \(p_2\).
  2. Поменять местами \(p_5\) и \(p_6\).

A. Зал славы

жадные алгоритмы Конструктив Строки *800

Талия — легендарный гроссмейстер в шахматах. У нее есть \(n\) кубков, расположеных в ряд, кубки пронумерованы от \(1\) до \(n\) (слева направо), и по одной лампе рядом с каждым из кубков (лампы пронумерованы так же, как и кубки).

Каждая лампа направлена либо налево, либо направо; лампа освещает все кубки в заданном направлении (но не освещает кубок, рядом с которым стоит). Формально, у Талии есть строка \(s\) из символов «L» и «R», описывающая направления ламп. Лампа номер \(i\) освещает:

  • кубки \(1,2,\ldots, i-1\), если \(s_i\) это «L»;
  • кубки \(i+1,i+2,\ldots, n\), если \(s_i\) это «R».

Талия может выполнить следующую операцию не более одного раза:

  • Выбрать индекс \(i\) (\(1 \leq i < n\));
  • Поменять местами лампы \(i\) и \(i+1\) (не меняя их направление). Другими словами, поменять \(s_i\) и \(s_{i+1}\).

Талия попросила вас осветить все кубки (то есть сделать так, чтобы каждый кубок был освещен хотя бы одной лампой), или сообщить, что это невозможно сделать. Если это можно сделать, вы можете выполнить одну операцию или ничего не делать. Обратите внимание, что нельзя менять направления освещения ламп, можно только поменять местами соседние лампы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит положительное целое число \(n\) (\(2 \leq n \leq 100\,000\)) — количество кубков.

Вторая строка содержит строку \(s\) длины \(n\), состоящую только из букв «L» и «R»: \(i\)-я буква описывает направление \(i\)-й лампы.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно осветить все кубки, выполнив одну операцию или ничего не делая. Иначе выведите \(0\), если операцию выполнять не надо (т. е. все кубки освещены при изначальном положении ламп), или индекс \(i\) (\(1 \leq i < n\)), если нужно поменять местами лампы \(i\) и \(i+1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере можно поменять местами лампы \(1\) и \(2\) или ничего не делать. В любом случае мы получим строку «LL». Не все кубки будут освещены, так как кубок \(2\) не освещен ни одной лампой: лампа \(1\) ничего не освещает, а лампа \(2\) освещает только кубок \(1\).

Во втором примере необходимо поменять местами лампы \(1\) и \(2\). Строка станет равной «RL«. Кубок \(1\) освещен лампой \(2\), а кубок \(2\) освещен лампой \(1\), поэтому можно подсветить все кубки.

В третьем примере все кубки изначально освещены, поэтому не выполнять операцию является корректным решением.

В последних двух примерах не обязательно менять местами лампы, так как все кубки изначально освещены. Однако представленные решения тоже верные.

C. Наименьшая префиксная сумма

жадные алгоритмы Структуры данных *1600

У Балтика, известного шахматиста, а также математика, есть массив \(a_1,a_2, \ldots, a_n\), и он хочет выполнить следующую операцию несколько (возможно, \(0\)) раз:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\));
  • умножить \(a_i\) на \(-1\), то есть присвоить \(a_i := -a_i\).

Любимое число Балтика равно \(m\), поэтому он хочет, чтобы значение \(a_1 + a_2 + \cdots + a_m\) было наименьшим среди всех непустых префиксных сумм. Формально, для всех \(k = 1,2,\ldots, n\) должно выполняться \(\)a_1 + a_2 + \cdots + a_k \geq a_1 + a_2 + \cdots + a_m.\(\)

Обратите внимание, что может существовать несколько наименьших префиксных сумм, и необходимо только, чтобы \(a_1 + a_2 + \cdots + a_m\) была одной из них.

Помогите Балтику найти минимальное количество операций, необходимое, чтобы сумма \(a_1 + a_2 + \cdots + a_m\) стала наименьшей префиксной суммой. Можно показать, что необходимая последовательность операций всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 2\cdot 10^5\)) — размер массива и его любимое число.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — сам массив.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально необходимое число операций.

Примечание

В первом примере можно выполнить операцию \(a_4 := -a_4\). Массив становится равным \([-1,-2,-3,4]\), а префиксные суммы \([a_1, \ a_1+a_2, \ a_1+a_2+a_3, \ a_1+a_2+a_3+a_4]\) становятся равными \([-1,-3,-6,-2]\). Поэтому \(a_1 + a_2 + a_3=-6\) является наименьшей из всех префиксных сумм.

Во втором примере можно выполнить операцию \(a_3 := -a_3\). Массив становится равным \([1,2,-3,4]\), префиксные суммы равны \([1,3,0,4]\).

В третьем и четвертом примерах \(a_1 + a_2 + \cdots + a_m\) уже является наименьшей префиксной суммой, нет необходимости выполнять операции.

В пятом примере одна из подходящих последовательностей операций следующая:

  • \(a_3 := -a_3\),
  • \(a_2 := -a_2\),
  • \(a_5 := -a_5\).

Массив становится равным \([-2,-3,5,-5,20]\), его префиксные суммы равны \([-2,-5,0,-5,15]\). Обратите внимание, что и \(a_1+a_2=-5\), и \(a_1+a_2+a_3+a_4=-5\) — минимальные префиксные суммы (и это корректное решение).

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]\).

E. Параллельные показательные матчи Ани

графы жадные алгоритмы интерактив Конструктив сортировки *2400

Это интерактивная задача.

Аня собрала \(n\) шахматных экспертов, пронумерованных от \(1\) до \(n\), для которых выполняются следующие свойства:

  • Для любой пары игроков один игрок всегда выигрывает игру против другого (ничей не бывает);
  • Свойство транзитивности не обязательно выполняется: может быть такое, что \(A\) всегда выигрывает \(B\), \(B\) всегда выигрывает \(C\), а \(C\) всегда выигрывает \(A\).
Аня не знает, кто из игроков выигрывает кого в каждой паре.

Рассмотрим турнир из \(n-1\) игр. В каждой игре Аня выбирает двух игроков. Один из них выигрывает и остается в турнире, другой выбывает. После всех игр только остается только один игрок, называемый победителем. Игрок называется кандидатом в мастера, если он может победить в турнире (обратите внимание, что победитель турнира может зависеть от Аниного выбора игроков в \(n-1\) игре).

Так как Аня — любознательная девочка, ей интересно найти, какие игроки являются кандидатами в мастера. К сожалению, у нее не очень много времени. Она может организовать не более \(2n\) сеансов параллельной игры, в которых один игрок играет против многих.

В каждом сеансе Аня выберет ровно одного игрока, который сыграет по одной партии против нескольких (как минимум одного) других игроков. Выбранный игрок выиграет все игры, которые он бы выиграл в обычных условиях, то же самое верно для проигрышей. После окончания сеанса Аня узнает только количество партий, выигранных выбранным игроком (но не какие из партий были выиграны). По результатам сеанса никто не выбывает из турнира.

Можете помочь Ане определить кандидатов в мастера?

Выигрывающий игрок в каждой паре игроков может быть изменен между сеансами, но только так, чтобы результаты всех предыдущих сеансов сохранились. Эти изменения могут зависеть от ваших запросов.

Протокол взаимодействия

Сначала считайте одно целое число \(n\) (\(3 \leq n \leq 250\)) — количество игроков. После этого вы можете устраивать сеансы или выводить ответ.

Чтобы устроить сеанс, выведите «? \(i \; s_1 s_2 \ldots s_n\)» (без кавычек), где \(i\) — номер игрока, который будет одновременно играть против других. \(s\) — бинарная строка, обозначающая, против кого будет играть этот игрок. \(i\) играет против каждого \(j\), для которого выполняется \(s_j = 1\) (\(s_j = 1\) должно выполняться хотя бы для одного \(1 \leq j \leq n\)). Обратите внимание, должно выполняться \(s_i = 0\), так как игрок не может играть сам против себя, иначе запрос считается некорректным.

После этого считайте одно целое число — количество партий, в которых выиграл \(i\).

Когда вы нашли ответ, выведите «! \(c_1 c_2 \ldots c_n\)» (без кавычек) и завершите свою программу. \(c\) — бинарная строка, показывающая кандидатов в мастера. Игрок \(i\) является кандидатом в мастера, если выполняется \(c_i=1\), иначе он им не является.

Если вы сделаете более \(2n\) запросов, или какой-то запрос некорректен, взаимодействие немедленно завершится, и вы получите вердикт Неправильны ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче запрещены.

Примечание

В первом примере первый запрос описывает сеанс игрока \(1\) против игрока \(2\) (и никого другого). Ответ на запрос равен \(1\), что означает, что игрок \(1\) выиграл единственную игру. Можно заключить, что \(1\) побеждает \(2\). Аналогично во втором запросе \(2\) побеждает \(3\), и в третьем запросе \(3\) побеждает \(1\). Все игроки являются кандидатами в мастера, потому что

  • Игрок \(1\) может выиграть турнир, если сначала играют \(2\) и \(3\). \(3\) проигрывает и выбывает, а \(2\) остается. \(1\) играет против \(2\) и выигрывает;
  • Другие игроки могут выиграть аналогично.

Во втором примере третий запрос описывает сеанс игрока \(1\) против всех остальных. Ответ на этот запрос равен \(4\), что означает, что им были выиграны все игры. Можно понять, что \(1\) побеждает всех других игроков. Так как этот игрок не может проиграть, то только он может остаться в конце турнира, то есть это единственный кандидат в мастера.

A. Школа и Хаято

жадные алгоритмы Конструктив *800

Сегодня Хаято пришёл из школы с домашним заданием.

Для задания Хаято дали массив \(a\) длины \(n\). Задание заключается в поиске \(3\) чисел из этого массива таких, что их сумма нечетна. В школе он утверждал, что такие \(3\) числа есть, но Хаято не уверен, поэтому попросил у вас помощи.

Скажите, есть ли такие три числа, и если есть, то выведите индексы \(i\), \(j\) и \(k\) такие, что число \(a_i + a_j + a_k\) нечетное.

Нечетными числами называются целые числа, не делящиеся на \(2\): \(1\), \(3\), \(5\) и так далее.

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора данных в первой строке содержится одно целое число \(n\) (\(3 \le n \le 300\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных в первой строке сначала выведите одно слово «YES» (без кавычек), если существует \(3\) числа с нечетной суммой, или «NO» (без кавычек), если таких \(3\) чисел нет.

Если ответ существует, то во второй строке выведите \(3\) различных числа \(i, j, k\) (\(1 \le i, j, k \le n\)) — индексы чисел. Если ответов несколько — выведите любой.

Примечание

В первом наборе входных данных существует один способ взять \(3\) числа, и так как \(1 + 1 + 1 = 3\), то такая тройка нам подходит.

Во втором наборе входных данных нужно взять числа \(1, 2, 2\), так как \(1 + 2 + 2 = 5\).

В третьем наборе входных данных существует один способ взять три числа, но получаем \(1 + 2 + 3 = 6\) — четное число, поэтому нужной тройки не существует.

В пятом наборе входных данных, какие бы три числа мы не взяли, их сумма будет четной.

B. НОД разбиение

жадные алгоритмы математика Перебор теория чисел *1100

Находясь у Киры дома, Джоске увидел на столе лист с написанной на нем задачей.

Задача звучала так. Есть массив \(a\) длины \(n\). На этом массиве нужно сделать следующее:

  • выбрать число \(k > 1\);
  • разбить массив на \(k\) подотрезков \(^\dagger\);
  • посчитать сумму в каждом из \(k\) подотрезков и записать их в другой массив \(b\) (где сумма подотрезка \((l, r)\) равна \({\sum_{j = l}^{r}a_j}\));
  • итоговым счетом такого разбиения будет \(\gcd(b_1, b_2, \ldots, b_k)^\ddagger\).

Задача заключается в поиске такого разбиения, чтобы счет был максимально возможным. Джоске заинтересовался данной задачей, но не силен в информатике. Помогите ему найти максимально возможный счет.

\(^\dagger\) Разбиением массива на \(k\) подотрезков называется \(k\) пар чисел \((l_1, r_1), (l_2, r_2), \ldots, (l_k, r_k)\) таких, что \(l_i \le r_i\) и для каждого \(1 \le j \le k - 1\) верно \(l_{j + 1} = r_j + 1\), а также \(l_1 = 1\) и \(r_k = n\). Эти пары представляют сами подотрезки.

\(^\ddagger\) \(\gcd(b_1, b_2, \ldots, b_k)\) обозначает наибольший общий делитель (НОД) массива \(b\).

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора данных в первой строке содержится одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le 10^9 \)) — сам массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальный счет при оптимальном разбиении.

Примечание

В первом наборе входных данных можно выбрать \(k = 2\) и разбить массив на подотрезки \((1, 2)\) и \((3, 4)\).

Тогда счет такого разбиения будет равен \(\gcd(a_1 + a_2, a_3 + a_4) = \gcd(2 + 2, 1 + 3) = \gcd(4, 4) = 4\).

В четвертом наборе входных данных можно выбрать \(k = 3\) и разбить массив на подотрезки \((1, 2), (3, 5), (6, 6)\).

Счётом разбиения будет \(\gcd(1 + 2, 1 + 1 + 1, 3) = 3\).

B. Поход в кинотеатр

жадные алгоритмы Перебор сортировки *1000

В компании из \(n\) человек организуется поход в кинотеатр. Каждый человек может либо пойти, либо нет. Это зависит от того, сколько ещё народу пойдёт. А именно, каждый человек \(i\) сказал: «Я хочу пойти в кинотеатр тогда и только тогда, когда пойдут хотя бы ещё \(a_i\) других человек, не считая меня». Это значит, что \(i\)-й человек расстроится в двух случаях:

  • если он пойдёт в кинотеатр, а кроме него пойдут строго менее \(a_i\) других человек; или
  • если он не пойдёт в кинотеатр, но при этом пойдут хотя бы \(a_i\) других человек.

Сколько есть способов выбрать множество людей, идущих в кинотеатр, чтобы никто не расстроился?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — число людей в компании.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n - 1\)) — числа из высказываний людей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — число различных способов выбрать множество людей, идущих в кинотеатр, чтобы никто не расстроился.

Примечание

В первом наборе входных данных оба человека хотят пойти тогда и только тогда, когда другой человек пойдёт. Есть два подходящих варианта: либо оба пойдут, либо оба не пойдут. Если же пойдёт лишь один из двоих, то оба окажутся расстроены.

Во втором наборе входных данных в кинотеатр должны пойти все. В любом другом варианте обязательно кто-нибудь расстроится.

В третьем наборе входных данных есть три допустимых варианта: либо идёт человек с номером \(2\); либо идут люди с номерами \(2, 3, 4, 7\); либо идут все восемь человек.

C. Равные частоты

жадные алгоритмы Конструктив Перебор реализация сортировки Строки *1600

Назовём строку сбалансированной, если все символы, которые в ней присутствуют, входят в неё одинаковое число раз. Например, «coder», «appall» и «ttttttt» — сбалансированные строки, а «wowwow» и «codeforces» — нет.

Вам дана строка \(s\) длины \(n\), состоящая из строчных латинских букв. Найдите сбалансированную строку \(t\) той же длины \(n\), состоящую из строчных латинских букв и отличающуюся от строки \(s\) в как можно меньшем числе позиций. Другими словами, число индексов \(i\) таких, что \(s_i \ne t_i\), должно быть минимальным возможным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее число позиций, в которых строка \(s\) и сбалансированная строка \(t\) могут отличаться, и далее выведите саму такую строку \(t\).

Если существует несколько решений, выведите любое из них. Можно показать, что хотя бы одна сбалансированная строка всегда существует.

Примечание

В первом наборе входных данных заданная строка «hello» не является сбалансированной: буквы «h», «e» и «o» встречаются в ней по одному разу, а буква «l» — два раза. С другой стороны, строка «helno» сбалансирована: в ней присутствуют пять разных букв, и каждая из них встречается ровно один раз. Строки «hello» и «helno» отличаются всего в одной позиции — в четвёртом символе. Возможны и другие решения.

Во втором наборе входных данных строка «codefofced» сбалансирована, так как в ней присутствуют только буквы «c», «o», «d», «e» и «f», и каждая из них встречается ровно два раза.

В третьем наборе входных данных строка «eeeee» сбалансирована, так как в ней присутствует только буква «e».

В четвёртом наборе входных данных заданная строка «appall» уже сбалансирована.

E. Сжатие прямоугольников

Бинарный поиск жадные алгоритмы Перебор реализация Структуры данных *2300

Перед вами прямоугольная таблица высоты \(2\) и ширины \(10^9\), состоящая из единичных клеток. На таблице расположено \(n\) прямоугольников, причём границы прямоугольников проходят по границам клеток. \(i\)-й прямоугольник покрывает все клетки в строках с \(u_i\) по \(d_i\) включительно и столбцах с \(l_i\) по \(r_i\) включительно (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)). Данные прямоугольники могут произвольным образом пересекаться, вкладываться и совпадать.

Вам нужно каждый прямоугольник либо удалить, либо заменить на любой свой непустой подпрямоугольник. Во втором случае подпрямоугольник должен целиком содержаться в исходном прямоугольнике, а его границы всё также должны проходить по границам клеток. При этом разрешается, чтобы подпрямоугольник совпал с исходным прямоугольником.

Требуется, чтобы никакие два (неудаленных) прямоугольника после замены не имели общих клеток, а суммарная площадь, покрытая новыми прямоугольниками, была как можно больше.

Рисунок для первого набора входных данных. Сверху изображены данные прямоугольники, снизу — изменённые. Прямоугольник номер \(4\) был удалён.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество прямоугольников.

Каждая из следующих \(n\) строк содержит четыре целых числа \(u_i, l_i, d_i, r_i\) (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)) — координаты клеток, находящихся в левом верхнем и правом нижнем углу прямоугольника соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите целое число \(s\) — максимальную возможную площадь, покрытую новыми прямоугольниками. Далее в \(n\) строках выведите ваше решение для покрытия такой площади.

В \(i\)-й из этих строк выведите четыре целых числа \(u'_i, l'_i, d'_i, r'_i\). Если вы удаляете \(i\)-й прямоугольник, выведите \(u'_i = l'_i = d'_i = r'_i = 0\). Иначе эти числа обозначают новые координаты клеток в левом верхнем и правом нижнем углу \(i\)-го прямоугольника соответственно. Они должны удовлетворять следующим неравенствам: \(u_i \le u'_i \le d'_i \le d_i\); \(l_i \le l'_i \le r'_i \le r_i\).

Если существует несколько решений, выведите любое из них.

Примечание

На рисунке в условии задачи изображен первый набор входных данных.

C. Очередной Турнир

Бинарный поиск жадные алгоритмы сортировки *1700

Вы участвуете в турнире под названием «Очередной Турнир». В турнире участвуют \(n + 1\) человек: вы и \(n\) ваших соперников, пронумерованных от \(1\) по \(n\).

Каждый участник сыграет против каждого ровно один раз. Если соперник \(i\) состязается с соперником \(j\), он выигрывает тогда и только тогда, когда \(i > j\).

Если же оппонент \(i\) играет против вас, все становится немного сложнее. Для того чтобы победить оппонента \(i\), вам нужно готовиться к матчу на протяжении \(a_i\) минут. В противном случае вы проиграете данному сопернику.

У вас есть \(m\) свободных минут для подготовки к матчам, но вы можете готовиться одновременно только к одному матчу. Другими словами, если вы хотите выиграть у оппонентов \(p_1, p_2, \dots, p_k\), вы должны потратить на подготовку \(a_{p_1} + a_{p_2} + \dots + a_{p_k}\) минут. Если же это число больше \(m\), вы не сможете их всех победить.

Финальное место каждого участника равно количеству участников со строго большим количеством побед \(+\) \(1\). Например, если \(3\) участника выиграли по \(5\) раз, \(1\) участник — \(3\) раза, и \(2\) участника — по \(1\) разу, то первые \(3\) займут \(1\)-е место, четвертый — \(4\)-е место, и два последних — \(5\)-е место.

Посчитайте минимально возможное место (меньше — лучше), которое вы сможете занять, если на подготовку к матчам у вас всего \(m\) минут.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 5 \cdot 10^5\); \(0 \le m \le \sum\limits_{i=1}^{n}{a_i}\)) — количество ваших оппонентов и общее время, которое у вас есть на подготовку к матчам.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 1000\)), где \(a_i\) — это количество минут, необходимое на подготовку к матчу с \(i\)-м оппонентом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее возможное место, которое вы сможете занять, если на подготовку у вас есть только \(m\) минут.

Примечание

В первом наборе входных данных у вас есть время на подготовку ко всем оппонентам, а потому вы выиграете все \(4\) матча и займете \(1\)-е место, так как все ваши оппоненты выиграют не более \(3\) матчей.

Во втором наборе вы можете подготовиться ко второму оппоненту и выиграть у него. В результате вы выиграете \(1\) матч, оппонент \(1\) — \(1\) матч, оппонент \(2\) — \(1\) матч, оппонент \(3\) — \(3\) матча. А потому оппонент \(3\) займет \(1\)-е место, и все остальные, включая вас,  — \(2\)-е место.

В третьем наборе входных у вас нет времени на подготовку, а потому вы проиграете все матчи. Так как у каждого из оппонентов будет хотя бы \(1\) победа, вы займете последнее место (место \(6\)).

В четвертом наборе у вас нет времени на подготовку, но вы все равно выиграете у первого оппонента. В результате оппонент \(1\) не выиграл ни одного матча, у вас \(1\) победа, и у всех остальных хотя бы \(2\) победы. А потому ваше место \(4\).

A. Монстры (простая версия)

жадные алгоритмы Перебор *1000

Это простая версия задачи. В этой версии задачи ответ нужно вычислить один раз. В этой версии задачи взломы запрещены.

В компьютерной игре вы сражаетесь против \(n\) монстров. Монстр с номером \(i\) имеет \(a_i\) единиц здоровья, где \(a_i\) — целое число. Монстр жив, пока имеет хотя бы \(1\) единицу здоровья.

Вы можете использовать заклинания двух типов:

  1. Нанести \(1\) единицу урона любому живому монстру на ваш выбор.
  2. Нанести \(1\) единицу урона всем живым монстрам. Если хотя бы один монстр умирает (оказывается с \(0\) единицами здоровья) в результате этого действия — повторить его (и продолжать повторять, пока хотя бы один монстр умирает после каждого применения).

При нанесении \(1\) единицы урона здоровье монстра уменьшается на \(1\).

Заклинания типа 1 могут быть использованы сколько угодно раз, а заклинание типа 2 — не более одного раза за игру.

Какое наименьшее число раз вам нужно применить заклинания типа 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 n\)) — число единиц здоровья у монстров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее число раз, которое нужно применить заклинания типа 1, чтобы убить всех монстров.

Примечание

В первом наборе входных данных начальные значения здоровья у монстров равны \([3, 1, 2]\). Достаточно применить заклинание типа 2:

  • Здоровья монстров становятся равны \([2, 0, 1]\). Так как монстр номер \(2\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([1, 0, 0]\). Так как монстр номер \(3\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\).

Так как можно обойтись вообще без заклинаний типа 1, ответ равен \(0\).

Во втором наборе входных данных начальные значения здоровья у монстров равны \([4, 1, 5, 4, 1, 1]\). Одной из оптимальных является следующая последовательность действий:

  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(1\). Здоровья монстров становятся равны \([3, 1, 5, 4, 1, 1]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 3, 1, 1]\).
  • Используя заклинание типа 1, снова нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 2, 1, 1]\).
  • Использовать заклинание типа 2:
    • Здоровья монстров становятся равны \([2, 0, 4, 1, 0, 0]\). Так как монстры номер \(2\), \(5\) и \(6\) умерли, заклинание повторяется.
    • Здоровья монстров становятся равны \([1, 0, 3, 0, 0, 0]\). Так как монстр номер \(4\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 2, 0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 1, 0, 0, 0]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(3\). Здоровья монстров становятся равны \([0, 0, 0, 0, 0, 0]\).

Всего заклинания типа 1 были применены \(4\) раза. Можно показать, что это наименьшее возможное число.

C. Монстры (сложная версия)

жадные алгоритмы Структуры данных *2200

Это сложная версия задачи. В этой версии задачи ответ нужно вычислить для каждого префикса массива монстров.

В компьютерной игре вы сражаетесь против \(n\) монстров. Монстр с номером \(i\) имеет \(a_i\) единиц здоровья, где \(a_i\) — целое число. Монстр жив, пока имеет хотя бы \(1\) единицу здоровья.

Вы можете использовать заклинания двух типов:

  1. Нанести \(1\) единицу урона любому живому монстру на ваш выбор.
  2. Нанести \(1\) единицу урона всем живым монстрам. Если хотя бы один монстр умирает (оказывается с \(0\) единицами здоровья) в результате этого действия — повторить его (и продолжать повторять, пока хотя бы один монстр умирает после каждого применения).

При нанесении \(1\) единицы урона здоровье монстра уменьшается на \(1\).

Заклинания типа 1 могут быть использованы сколько угодно раз, а заклинание типа 2 — не более одного раза за игру.

Для каждого \(k = 1, 2, \ldots, n\) ответьте на следующий вопрос. Пусть в игре присутствуют только первые \(k\) монстров, с номерами \(1, 2, \ldots, k\). Какое наименьшее число раз вам нужно применить заклинания типа 1, чтобы убить всех \(k\) монстров?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(k\)-е из этих чисел должно быть равно наименьшему числу раз, которое нужно применить заклинания типа 1, чтобы убить всех \(k\) монстров, если в игре присутствуют только монстры с номерами \(1, 2, \ldots, k\).

Примечание

В первом наборе входных данных при \(k = n\) начальные значения здоровья у монстров равны \([3, 1, 2]\). Достаточно применить заклинание типа 2:

  • Здоровья монстров становятся равны \([2, 0, 1]\). Так как монстр номер \(2\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([1, 0, 0]\). Так как монстр номер \(3\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\).

Так как можно обойтись вообще без заклинаний типа 1, ответ равен \(0\).

Во втором наборе входных данных при \(k = n\) начальные значения здоровья у монстров равны \([4, 1, 5, 4, 1, 1]\). Одной из оптимальных является следующая последовательность действий:

  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(1\). Здоровья монстров становятся равны \([3, 1, 5, 4, 1, 1]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 3, 1, 1]\).
  • Используя заклинание типа 1, снова нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 2, 1, 1]\).
  • Использовать заклинание типа 2:
    • Здоровья монстров становятся равны \([2, 0, 4, 1, 0, 0]\). Так как монстры номер \(2\), \(5\) и \(6\) умерли, заклинание повторяется.
    • Здоровья монстров становятся равны \([1, 0, 3, 0, 0, 0]\). Так как монстр номер \(4\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 2, 0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 1, 0, 0, 0]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(3\). Здоровья монстров становятся равны \([0, 0, 0, 0, 0, 0]\).

Всего заклинания типа 1 были применены \(4\) раза. Можно показать, что это наименьшее возможное число.

B. Факторизация числа

жадные алгоритмы математика теория чисел *1100

Дано целое число \(n\).

Рассмотрим все пары целочисленных массивов \(a\) и \(p\) одинаковой длины, такие что \(n = \prod a_i^{p_i}\) (т.е. \(a_1^{p_1}\cdot a_2^{p_2}\cdot\ldots\))(\(a_i>1;p_i>0\)) и \(a_i\) является произведением некоторых (возможно, одного) различных простых чисел.

Например, для \(n = 28 = 2^2\cdot 7^1 = 4^1 \cdot 7^1\) пара массивов \(a = [2, 7]\), \(p = [2, 1]\) является корректной, а пара массивов \(a = [4, 7]\), \(p = [1, 1]\) нет, так как \(4=2^2\) — произведение не различных простых чисел.

Ваша задача найти максимальное значение \(\sum a_i \cdot p_i\) (т.е. \(a_1\cdot p_1 + a_2\cdot p_2 + \ldots\)) по всем возможным парам массивов \(a\) и \(p\). Обратите внимание, что вам не нужно минимизировать или максимизировать длину массива.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит только одно целое число \(n\) (\(2 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(\sum a_i \cdot p_i\).

Примечание

В первом наборе входных данных \(100 = 10^2\), так что \(a = [10]\), \(p = [2]\) и тогда \(\sum a_i \cdot p_i\) достигает максимального значения \(10\cdot 2 = 20\). Кроме того, \(a = [100]\), \(p = [1]\) не является корректной парой, так как \(100\) не состоит из различных простых множителей.

Во втором наборе входных данных мы можем рассматривать \(10\) как \(10^1\), поэтому \(a = [10]\), \(p = [1]\). Обратите внимание, что когда \(10 = 2^1\cdot 5^1\), \(\sum a_i \cdot p_i = 7\).

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\).

E. Распределение XOR

битмаски жадные алгоритмы Конструктив математика *2100

Вам дан массив из ровно \(n\) чисел \([1,2,3,\ldots,n]\), а также целые числа \(k\) и \(x\).

Вам нужно разбить массив на ровно \(k\) непустых непересекающихся подпоследовательностей так, чтобы побитовое исключающее ИЛИ всех чисел в каждой подпоследовательности было равно \(x\), и каждое число находилось ровно в одной подпоследовательности. Обратите внимание, что нет никаких ограничений на длину каждой подпоследовательности.

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Например, для \(n = 15\), \(k = 6\), \(x = 7\) корректно следующее разбиение:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\),
где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Следующее разбиение некорректно, так как не используются числа \(8\) и \(15\):

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([7]\), \(7 = 7\).

Следующее разбиение некорректно, так как \(3\) встречается дважды, а \(1\), \(2\) не используются:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([3,4]\), \(3 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\), \(x\) (\(1 \le k \le n \le 2 \cdot 10^5\); \(1\le x \le 10^9\)) — длина массива, количество подпоследовательностей и требуемое значение XOR.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если ответ существует, выведите «YES» в первой строке. В \(i\)-й из следующих \(k\) строк сначала выведите целое число \(s_i\) — длину \(i\)-й подпоследовательности, затем выведите \(s_i\) целых чисел — саму \(i\)-ю подпоследовательность. Если ответов несколько, выведите любой. Обратите внимание, что вы можете вывести элементы подпоследовательности в любом порядке.

В противном случае выведите «NO».

Примечание

В первом наборе входных данных мы строим следующие \(6\) подпоследовательностей:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\).

Во втором наборе входных данных мы строим следующие \(4\) подпоследовательности:

  • \([1,4]\), \(1 \oplus 4 = 5\),
  • \([2,7]\), \(2 \oplus 7 = 5\),
  • \([3,6]\), \(3 \oplus 6 = 5\),
  • \([5,8,9,10,11]\), \(5 \oplus 8 \oplus 9 \oplus 10 \oplus 11 = 5\).

Следующей разбиение также будет считаться правильным в этом наборе входных данных:

  • \([1,4]\), \(1 \oplus 4 = 5\),
  • \([2,7]\), \(2 \oplus 7 = 5\),
  • \([5]\), \(5 = 5\),
  • \([3,6,8,9,10,11]\), \(3 \oplus 6 \oplus 8 \oplus 9 \oplus 10 \oplus 11 = 5\).

B. Сумма двух чисел

жадные алгоритмы Конструктив математика реализация Теория вероятностей *1100

Сумма цифр целого неотрицательного числа \(a\) — это результат суммирования его цифр при записи в десятичной системе счисления. Например, сумма цифр числа \(123\) равна \(6\), а сумма цифр числа \(10\) равна \(1\). Формально, сумма цифр числа \(\displaystyle a=\sum_{i=0}^{\infty} a_i \cdot 10^i\), где \(0 \leq a_i \leq 9\), определяется как \(\displaystyle\sum_{i=0}^{\infty}{a_i}\).

Дано целое число \(n\). Найдите два целых неотрицательных числа \(x\) и \(y\), которые удовлетворяют следующим условиям:

  • \(x+y=n\), и
  • сумма цифр числа \(x\) и сумма цифр числа \(y\) отличаются не более чем на \(1\).

Можно показать, что такие \(x\) и \(y\) всегда существуют.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^9\)) — сумму искомых чисел.

Выходные данные

Для каждого набора входных данных выведите два целых числа \(x\) и \(y\). Если ответов несколько, выведите любой.

Примечание

Во втором наборе входных данных сумма цифр \(67\) и сумма цифр \(94\) равны \(13\).

В третьем наборе сумма цифр числа \(60\) равна \(6\), а сумма цифр числа \(7\) равна \(7\).

C. Разбиение на пары

жадные алгоритмы Конструктив математика *1300

Дано целое число \(n\). Разбейте числа от \(1\) до \(2n\) на пары (каждое число должно быть ровно в одной паре) так, чтобы суммы пар были последовательными различными целыми числами.

Формально, пусть \((a_i, b_i)\) — пары, на которые вы разбили числа. \(\{a_1, b_1, a_2, b_2, \ldots, a_n, b_n\}\) должно быть перестановкой чисел \(\{1, 2, \ldots, 2n\}\). Обозначим отсортированные по возрастанию значения \(\{a_1+b_1, a_2+b_2, \ldots, a_n+b_n\}\) как \(s_1 < s_2 < \ldots < s_n\). Должно выполняться \(s_{i+1}-s_i = 1\) для всех \(1 \le i \le n - 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если такое разбиение не существует, выведите «No». В противном случае выведите «Yes», а после \(n\) строк — пары чисел.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для третьего набора каждое целое число от \(1\) до \(6\) встречается один раз. Суммы совпавших пар составляют \(4+2=6\), \(1+6=7\), \(3+5=8\) — последовательные различные целые числа.

F. XOR, деревья и запросы

битмаски графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм *2500

Вам дано дерево с \(n\) вершинами. Вершины пронумерованы от \(1\) до \(n\).

Вам нужно будет назначить каждому ребру вес. Пусть вес \(i\)-го ребра будет \(a_i\) (\(1 \leq i \leq n-1\)). Вес каждого ребра должен быть целым числом от \(0\) до \(2^{30}-1\), включительно.

Вам дано \(q\) условий. Каждое условие состоит из трех целых чисел \(u\), \(v\) и \(x\). Это означает, что побитовое исключающее ИЛИ всех ребер на кратчайшем пути от \(u\) до \(v\) должно быть равно \(x\).

Выясните, существуют ли числа \(a_1, a_2, \ldots, a_{n-1}\), удовлетворяющие заданным условиям. Если существуют, выведите такое решение, при котором \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) будет наименьшим. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Если существует несколько решений таких, что \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) является наименьшим, выведите любое из них.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 2.5 \cdot 10^5\), \(0 \le q \le 2.5 \cdot 10^5\)). В \(i\)-й из следующих \(n-1\) строк содержится два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \neq y_i\)), то есть \(i\)-е ребро соединяет вершины \(x_i\) и \(y_i\) в дереве.

Гарантируется, что заданные ребра образуют дерево.

Следующие \(q\) строк содержат информацию об условиях.

Каждая строка содержит три целых числа \(u\), \(v\), \(x\) (\(1 \le u, v \le n\), \(u \neq v\), \(0 \le x \le 2^{30}-1\)), означающие, что побитовое исключающее ИЛИ всех ребер на кратчайшем пути от \(u\) до \(v\) должно быть \(x\).

Выходные данные

Если не существует \(a_1\), \(a_2\), ..., \(a_{n-1}\), которые удовлетворяют заданным условиям, выведите «No».

В противном случае в первой строке выведите «Yes».

Затем в следующей строке выведите \(n-1\) целых чисел, где \(i\)-е целое число — это вес \(i\)-го ребра. Если существует несколько решений, то выведите такое решение, при котором \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) будет наименьшим.

Если существует несколько решений, при которых \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) принимает наименьшее значение, выведите любое.

При выводе «Yes» или «No» вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого примера не существует набора весов ребер, удовлетворяющего заданному условию.

Для второго примера два условия означают, что \(a_1 \oplus a_2 \oplus a_3=2\) и \(a_4 \oplus a_5=7\). Может существовать несколько решений, например, \((a_1, a_2, a_3, a_4, a_5)=(1, 2, 1, 4, 3)\).

Для третьего примера два условия означают, что \(a_1 \oplus a_2 \oplus a_3=3\) и \(a_1 \oplus a_4 \oplus a_5=5\). Существует множество решений, удовлетворяющих данному условию.

\((a_1, a_2, a_3, a_4, a_5)=(1, 1, 3, 4, 0)\) удовлетворяет заданным условиям, но побитовое исключающее ИЛИ весов всех ребер равно \(7\), что не является наименьшим возможным значением \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\), поэтому это не является верным решением.

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\).

B. Таисия и кубики

жадные алгоритмы жадные алгоритмы математика *800

У Таисии есть \(n\) шестигранных кубиков. Каждая грань кубика помечена цифрой от \(1\) до \(6\), каждая цифра от \(1\) до \(6\) используется один раз.

Таисия бросает все \(n\) кубиков одновременно и получает последовательность значений \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 6\)), где \(a_i\) — число, выпавшее на верхней грани \(i\)-го кубика. Сумма этой последовательности оказывается равна \(s\).

Внезапно домашний кот Таисии ворует один кубик с максимальным выпавшим значением \(a_i\) и считает сумму значений на оставшемся \(n-1\) кубике, которая оказывается равна \(r\).

Вы знаете только количество кубиков \(n\), значения \(s\) и \(r\). Восстановите любую последовательность \(a\), удовлетворяющую условию.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных задан на отдельной строке и состоит из трёх целых чисел \(n\), \(s\), \(r\) (\(2 \le n \le 50\), \(1 \le r < s \le 300\)).

Гарантируется, что такая последовательность существует.

Выходные данные

Для каждого набора входных данных выведите: \(n\) чисел \(a_1, a_2, \ldots, a_n\) в любом порядке. Гарантируется, что такая последовательность существует.

Если подходят несколько последовательностей, вы можете вывести любую.

B. Таисия и кубики

жадные алгоритмы жадные алгоритмы математика *800

У Таисии есть \(n\) шестигранных кубиков. Каждая грань кубика помечена цифрой от \(1\) до \(6\), каждая цифра от \(1\) до \(6\) используется один раз.

Таисия бросает все \(n\) кубиков одновременно и получает последовательность значений \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 6\)), где \(a_i\) — число, выпавшее на верхней грани \(i\)-го кубика. Сумма этой последовательности оказывается равна \(s\).

Внезапно домашний кот Таисии ворует один кубик с максимальным выпавшим значением \(a_i\) и считает сумму значений на оставшемся \(n-1\) кубике, которая оказывается равна \(r\).

Вы знаете только количество кубиков \(n\), значения \(s\) и \(r\). Восстановите любую последовательность \(a\), удовлетворяющую условию.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных задан на отдельной строке и состоит из трёх целых чисел \(n\), \(s\), \(r\) (\(2 \le n \le 50\), \(1 \le r < s \le 300\)).

Гарантируется, что такая последовательность существует.

Выходные данные

Для каждого набора входных данных выведите: \(n\) чисел \(a_1, a_2, \ldots, a_n\) в любом порядке. Гарантируется, что такая последовательность существует.

Если подходят несколько последовательностей, вы можете вывести любую.

D. Матрёшки

жадные алгоритмы сортировки Структуры данных *1200

Матрёшка — деревянная игрушка в виде расписной куклы, внутрь которой можно вложить подобную ей куклу меньшего размера.

Набор матрёшек содержит одну или более матрёшку, их размеры составляют подряд идущие положительные целые числа. Таким образом, набор матрёшек описывается двумя числами: \(s\) — размером минимальной матрёшки в наборе и \(m\) — количеством матрёшек в наборе. Иными словами, набор содержит матрёшки размеров \(s, s + 1, \dots, s + m - 1\) для некоторых целых \(s\) и \(m\) (\(s,m > 0\)).

У вас было несколько наборов матрёшек. Недавно вы обнаружили, что кто-то смешал все ваши наборы в один и записал последовательность размеров кукол — целые числа \(a_1, a_2, \dots, a_n\).

Вы не помните, сколько точно у вас было наборов, поэтому хотите найти минимальное количество наборов, которое могло быть у вас изначально.

Например, если заданная последовательность имеет вид \(a=[2, 2, 3, 4, 3, 1]\). Изначально могло быть всего \(2\) набора:

  • первый набор, состоящий из \(4\)-х матрешек с размерами \([1, 2, 3, 4]\);
  • второй набор, состоящий из \(2\)-x матрешек с размерами \([2, 3]\).

По заданной последовательности размеров матрёшек \(a_1, a_2, \dots, a_n\) определите минимальное количество наборов матрёшек, которые могут эту последовательность составлять.

Каждый набор используется полностью, то используются все его матрёшки. Каждый элемент заданной последовательности должен соответствовать ровно одной кукле из какого-то набора.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — суммарное количество матрёшек, которые были во всех наборах.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\))  — размеры матрёшек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — минимально возможное количество наборов, чтобы составить заданную последовательность.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных все матрёшки могли быть частью одного набора с минимальным размером матрёшки \(s=7\).

В третьем наборе входных данных каждая матрешка представляет собой отдельный набор.

F. Тимофей и черно-белое дерево

графы Деревья жадные алгоритмы кратчайшие пути математика Перебор поиск в глубину и подобное разделяй и властвуй *2100

Тимофей приехал в известную летнюю школу и нашел там дерево на \(n\) вершинах. Дерево — это связный неориентированный граф без циклов.

Каждая вершина этого дерева, кроме \(c_0\), покрашена в белый цвет. Вершина \(c_0\) покрашена в черный цвет.

Тимофей хочет покрасить все вершины этого дерева в черный цвет. Для этого он выполняет \(n - 1\) операцию. Во время \(i\)-й операции он выбирает белую вершину \(c_i\) и красит ее в черный цвет.

Назовем позитивностью дерева минимальное расстояние между всеми парами различных черных вершин в нем. Расстоянием между вершинами \(v\) и \(u\) называется количество ребер на пути от \(v\) до \(u\).

После каждой очередной покраски Тимофей хочет знать позитивность текущего дерева.

Входные данные

В первой строке записано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны числа \(n, c_0\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le c_0 \le n\)) — количество вершин в дереве и номер начальной черной вершины.

Во второй строке каждого набора входных данных записано \(n - 1\) различных чисел \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le n\), \(c_i \ne c_0\)), где \(c_i\) это вершина, покрашенная в черный цвет во время \(i\)-й операции.

В следующей \(n - 1\) строке каждого набора входных данных записаны числа \(v_i, u_i\) (\(1 \le v_i, u_i \le n\)) — ребра в дереве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке \(n - 1\) число.

Число с номером \(i\) должно быть равно позитивности дерева, полученного первыми \(i\) покрасками.

Примечание

В первом наборе входных данных, после второй покраски, дерево выглядит так:

Расстояние между вершинами \(1\) и \(6\) равно \(3\), расстояние между вершинами \(4\) и \(6\) равно \(3\), расстояние между вершинами \(1\) и \(4\) равно \(2\). Позитивность такого дерева равна минимуму из этих расстояний, то есть \(2\).

В третьем наборе входных данных, после четвертой покраски, дерево выглядит так:

Позитивность такого дерева равна \(2\).

D. Непересекающееся разделение

жадные алгоритмы Перебор Строки *1000

Обозначим за \(f(x)\) функцию от строки \(x\), равную числу различных символов, содержащихся в строке. Например, \(f(\texttt{abc}) = 3\), \(f(\texttt{bbbbb}) = 1\), а \(f(\texttt{babacaba}) = 3\).

Дана строка \(s\), разделите её на две непустых строки \(a\) и \(b\) таких, что \(f(a) + f(b)\) максимально возможно. Другими словами, найдите наибольшее возможное значение \(f(a) + f(b)\) такое, что \(a + b = s\) (конкатенация строк \(a\) и \(b\) равна строке \(s\)).

Входные данные

Тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — максимально возможное значение \(f(a) + f(b)\) такое, что \(a + b = s\).

Примечание

В первом наборе входных данных существует только один корректный способ разделить \(\texttt{aa}\) на две непустых строки: \(\texttt{a}\) и \(\texttt{a}\). \(f(\texttt{a}) + f(\texttt{a}) = 1 + 1 = 2\).

Во втором наборе, разделив \(\texttt{abcabcd}\) на \(\texttt{abc}\) и \(\texttt{abcd}\) мы можем получить наибольший возможный ответ \(f(\texttt{abc}) + f(\texttt{abcd}) = 3 + 4 = 7\)

В третьем наборе не важно как мы разделим строку, ответ будет равен \(2\) при любом разделении.

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\).

G1. Телепорты (Простая версия)

жадные алгоритмы сортировки *1100

Единственное отличие между простой и сложной версиями — точки, куда вы можете телепортироваться.

Рассмотрим точки \(0, 1, \dots, n\) расположенные на прямой. Имеются телепорты, расположенные в каждой из точек \(1, 2, \dots, n\). В точке \(i\) вы можете сделать следующее:

  • Переместиться влево на единицу. Это стоит \(1\) монету.
  • Переместиться вправо на единицу. Это стоит \(1\) монету.
  • Воспользоваться телепортом в точке \(i\), если он существует. Это стоит \(a_i\) монет. В результате, вы телепортируетесь в точку \(0\). Каждым телепортом можно воспользоваться только один раз.

У вас есть \(c\) монет, и вы начинаете в точке \(0\). Каким наибольшим числом телепортов вы сможете воспользоваться?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка теста содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(c\) (\(1 \leq n \leq 2\cdot10^5\); \(1 \leq c \leq 10^9\))  — длина массива и количество монет, которое у вас есть соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)), разделенных пробелами — стоимости использования телепортов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество телепортов, которым вы сможете воспользоваться.

Примечание

В первом наборе входных данных вы можете переместиться на одну единицу вправо, использовать телепорт в точке \(1\) и телепортироваться в точку \(0\), переместиться на две единицы вправо и использовать телепорт в точке \(2\). У вас останется \(6-1-1-2-1 = 1\) монета, этого недостаточно, чтобы использовать другой телепорт. Вы использовали два телепорта, поэтому ответ — два.

Во втором наборе входных данных вы перемещаетесь на четыре единицы вправо и используете телепорт, перемещаясь в \(0\), затем перемещаетесь на шесть единиц вправо и используете телепорт в точке \(6\), перемещаясь в \(0\). Общая стоимость составит \(4+6+6+4 = 20\). У вас осталось \(12\) монет, но этого недостаточно, чтобы добраться до любого другого телепорта и использовать его, поэтому ответ равен \(2\).

В третьем наборе входных данных у вас недостаточно монет для использования любого телепорта, поэтому ответ равен нулю.

G2. Телепорты (Сложная версия)

Бинарный поиск жадные алгоритмы сортировки *1900

Единственное отличие между простой и сложной версиями — точки, куда вы можете телепортироваться.

Рассмотрим точки \(0,1,\dots,n+1\) расположенные на прямой. Имеются телепорты, расположенные в каждой из точек \(1,2,\dots,n\). В точке \(i\) вы можете сделать следующее:

  • Переместиться влево на единицу. Это стоит \(1\) монету.
  • Переместиться вправо на единицу. Это стоит \(1\) монету.
  • Воспользоваться телепортом в точке \(i\), если он существует. Это стоит \(a_i\) монет. В результате, вы телепортируетесь в точку \(0\) или \(n+1\) на ваш выбор. Каждым телепортом можно воспользоваться только один раз.

У вас есть \(c\) монет, и вы начинаете в точке \(0\). Каким наибольшим числом телепортов вы сможете воспользоваться?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка теста содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(c\) (\(1 \leq n \leq 2\cdot10^5\); \(1 \leq c \leq 10^9\))  — длина массива и количество монет, которое у вас есть соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1 \leq a_i \leq 10^9\)), разделенных пробелами — стоимости использования телепортов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество телепортов, которым вы сможете воспользоваться.

Примечание

В первом наборе входных данных вы можете переместиться на одну единицу вправо, использовать телепорт в точке \(1\) и телепортироваться в точку \(n+1\), переместиться на одну единицу влево и использовать телепорт в точке \(5\). У вас останется \(6-1-1-1-1 = 2\) монеты, этого недостаточно, чтобы использовать другой телепорт. Вы использовали два телепорта, поэтому ответ — два.

Во втором наборе входных данных вы перемещаетесь на четыре единицы вправо и используете телепорт, перемещаясь в \(n+1\), затем перемещаетесь на три единицы влево и используете телепорт в точке \(6\), перемещаясь в \(n+1\), и затем перемещаетесь влево на четыре единицы и используете телепорт. Общая стоимость составит \(4+6+3+4+4+9 = 30\) и вы использовали три телепорта.

В третьем наборе входных данных у вас недостаточно монет для использования любого телепорта, поэтому ответ равен нулю.

A. GamingForces

жадные алгоритмы сортировки *800

Монокарп играет в компьютерную игру. Он должен уничтожить \(n\) монстров, у \(i\)-го из них \(h_i\) здоровья.

У Монокарпа есть два заклинания, каждое из которых он может применить произвольное количество раз (возможно, ноль) и в произвольном порядке:

  • выбрать ровно двух живых монстров и уменьшить их здоровье на \(1\);
  • выбрать ровно одного живого монстра и убить его.

Когда здоровье монстра становится равным \(0\), он умирает.

Какое наименьшее количество раз Монокарп должен применить заклинания, чтобы убить всех монстров?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество монстров.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 100\)) — здоровье каждого монстра.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество раз, которое Монокарп должен применить заклинания, чтобы убить всех монстров.

Примечание

В первом наборе входных данных изначальный список здоровья \([1, 2, 1, 2]\). Применяются три заклинания:

  • первое заклинание на монстров \(1\) и \(2\) — монстр \(1\) умирает, у монстр \(2\) здоровье становится \(1\), новый список здоровья \([0, 1, 1, 2]\);
  • первое заклинание на монстров \(3\) и \(4\) — монстр \(3\) умирает, у монстр \(4\) здоровье становится \(1\), новый список здоровья \([0, 1, 0, 1]\);
  • первое заклинание на монстров \(2\) и \(4\) — оба монстра \(2\) и \(4\) умирают.

Во втором наборе входных данных изначальный список здоровья \([2, 4, 2]\). Применяются три заклинания:

  • первое заклинание на монстров \(1\) и \(3\) — у обоих монстров здоровье становится \(1\), новый список здоровья \([1, 4, 1]\);
  • второе заклинание на монстра \(2\) — монстр \(2\) умирает, новый список здоровья \([1, 0, 1]\);
  • первое заклинание на монстров \(1\) и \(3\) — оба монстра \(1\) и \(3\) умирают.

В третьем наборе изначальный список здоровья \([1, 2, 3, 4, 5]\). Применяются пять заклинаний. \(i\)-е из них убивает \(i\)-го монстра вторым заклинанием. Последовательность списков здоровья: \([1, 2, 3, 4, 5]\) \(\rightarrow\) \([0, 2, 3, 4, 5]\) \(\rightarrow\) \([0, 0, 3, 4, 5]\) \(\rightarrow\) \([0, 0, 0, 4, 5]\) \(\rightarrow\) \([0, 0, 0, 0, 5]\) \(\rightarrow\) \([0, 0, 0, 0, 0]\).

B. Стендап комик

жадные алгоритмы математика *1200

Ева — начинающий стендап комик. На ее первое выступление пришли целых два зрителя: Алиса и Боб.

Ева подготовила \(a_1 + a_2 + a_3 + a_4\) шуток, сгруппированных по типам:

  • тип 1: Алисе и Бобу нравятся;
  • тип 2: Алисе нравятся, а Бобу нет;
  • тип 3: Бобу нравятся, а Алисе нет;
  • тип 4: ни Алисе, ни Бобу не нравятся.

Изначально настроение обоих зрителей \(0\). Когда зритель слышит шутку, которая ему нравится, его настроение увеличивается на \(1\). Когда зритель слышит шутку, которая ему не нравится, его настроение уменьшается на \(1\). Если настроение становится отрицательным (строго меньше нуля), то зритель уходит.

Когда кто-то уходит, Еве становится грустно, и она заканчивает выступление. Если никто не уходит, а у Евы заканчиваются шутки, то она тоже заканчивает выступление.

Поэтому Ева бы хотела рассказать шутки в таком порядке, чтобы выступление длилось как можно дольше. Помогите ей посчитать наибольшее количество шуток, которые она может рассказать до того как выступление закончится.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны четыре целых числа \(a_1, a_2, a_3, a_4\) (\(0 \le a_1, a_2, a_3, a_4 \le 10^8\); \(a_1 + a_2 + a_3 + a_4 \ge 1\)) — количество шуток каждого типа, которые подготовила Ева.

Выходные данные

На каждый набор выходных данных выведите одно целое число — наибольшее количество шуток, которые Ева может рассказать до того как хотя бы один из зрителей уйдет или как у нее закончатся шутки.

Примечание

В первом наборе входных данных Ева подготовила только шутки первого типа. Поэтому тут не выберешь порядок. Она рассказывает все свои штуки, и Алисе, и Бобу они нравятся. Их настроение становится \(5\). Выступление заканчивается после того как у Евы заканчиваются шутки.

Во втором наборе входных данных Ева подготовила только шутки четвертого типа. Опять же не выберешь порядок. Она рассказывает шутку, и ни Алисе, ни Бобу она не нравится. Их настроение уменьшается на один, становится \(-1\). У них обоих отрицательное настроение, поэтому они оба уходят, и выступление заканчивается.

В третьем наборе входных данных Ева сначала рассказывает обе шутки первого типа. У Алисы и Боба становится настроение \(2\). Затем \(2\) шутки третьего типа. Настроение Алисы \(0\). Настроение Боба \(4\). Затем \(4\) шутки второго типа. Настроение Алисы \(4\). Настроение Боба \(0\). Затем еще \(4\) шутки третьего типа. Настроение Алисы \(0\). Настроение Боба \(4\). Затем оставшуюся шутку второго типа. Настроение Алисы \(1\). Настроение Боба \(3\). Затем еще шутку третьего типа и четвертого типа, например. Настроение Алисы становится \(-1\), и она уходит.

В четвертом наборе входных данных Ева должна сначала рассказать шутки, которые нравятся обоим зрителям, затем шутки, которые не нравятся никому. Она может рассказать \(4\) шутки четвертого типа, пока зрители не уйдут.

C. Min Max сортировка

Бинарный поиск жадные алгоритмы математика Перебор *1500

Вам дана перестановка \(p\) размера \(n\) (перестановка размера \(n\) — это массив размера \(n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно один раз).

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  1. выбрать два различных элемента \(x\) и \(y\) и удалить их из перестановки;
  2. вставить минимум из \(x\) и \(y\) в перестановку таким образом, чтобы он стал первым элементом;
  3. вставить максимум из \(x\) и \(y\) в перестановку таким образом, чтобы он стал последним элементом;

Например, если \(p = [1, 5, 4, 2, 3]\), и мы хотим применить операцию к элементам \(3\) и \(5\), тогда после первого шага операции \(p = [1, 4, 2]\); а после вставки элементов \(p = [3, 1, 4, 2, 5]\).

Ваша задача — определить минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(p\) в возрастающем порядке (т. е. преобразуйте \(p\) таким образом, что \(p_1 < p_2 < \dots < p_n\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки.

Вторая строка набора входных данных содержит \(n\) различных целых чисел от \(1\) до \(n\) — заданную перестановку \(p\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(p\) в возрастающем порядке.

Примечание

В первом примере можно действовать следующим образом:

  1. в перестановке \(p = [1, 5, 4, 2, 3]\) выберем элементы \(4\) и \(2\), тогда после применения операции перестановка \(p = [2, 1, 5, 3, 4]\);
  2. в перестановке \(p = [2, 1, 5, 3, 4]\) выберем элементы \(1\) и \(5\), тогда после применения операции перестановка \(p = [1, 2, 3, 4, 5]\).

A. Ещё одна акция

жадные алгоритмы математика *800

В знаменитом магазине «Двоечка» продукты продаются всего два дня в месяц. Причем цены в каждый из дней различаются. Вам захотелось закупить \(n\) килограммов картошки на месяц. Вы знаете, что в первый день месяца \(1\) килограмм картофеля стоит \(a\) рублей, а во второй — \(b\) рублей. При этом в «Двоечке» можно покупать только целое число килограммов.

Как удачно совпало, в «Двоечке» объявлена акция на картошку, действующая только в первый день месяца, — при покупке \(m\) килограммов картофеля, вы получаете \(1\) килограмм в подарок! Другими словами, вы можете получить \(m + 1\) килограммов, заплатив за \(m\) килограммов.

Найдите минимальное число рублей, которое вам придется потратить, чтобы запастись хотя бы \(n\) килограммов картофеля.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) \((1 \leq a, b \leq 10^9)\) — цена \(1\) килограмма картофеля в первый и второй день, соответственно.

Вторая строка содержит два целых числа \(n\) и \(m\) \((1 \leq n, m \leq 10^9)\) — необходимое количество картофеля для покупки и количество картофеля для акции.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число рублей которое придется заплатить, чтобы купить хотя бы \(n\) килограммов картофеля.

Примечание

В первом наборе входных данных в первый день вы покупаете \(1\) кг и получаете еще \(1\) по акции. Во второй день покупаете \(1\) килограмм картофеля. Таким образом, суммарно потратите \(5+4=9\) монет.

Во втором наборе входных данных в первый день вы покупаете \(2\) кг и получаете еще \(1\) по акции. Таким образом, вы потратите \(2 \cdot 5 = 10\) монет.

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\)-го человека.

B. Не делится

жадные алгоритмы Конструктив математика *900

Вам дан массив из \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы можете выбрать любой элемент массива и увеличить его на \(1\).

Выполните не более \(2n\) операций, чтобы массив удовлетворял следующему свойству: \(a_{i+1}\) не делится на \(a_i\) для каждого \(i = 1, 2, \ldots, n-1\).

Вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1\le n\le 10^4\)) — длину заданного массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\leq 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^4\).

Выходные данные

Для каждого теста выведите ответ на отдельной строке.

В единственной строке выведите \(n\) целых чисел — итоговый массив \(a\) после применения не более чем \(2n\) операций.

Можно показать, что ответ всегда существует при заданных ограничениях. Если ответов несколько, выведите любой.

Примечание

В первом наборе входных данных массив \([4, 5, 6, 7]\) может быть получен путем применения \(2\) операций к первому элементу, \(1\) операции ко второму элементу, \(3\) операций к третьему элементу и \(1\) операции к четвертому элементу. Общее количество выполненных операций составляет \(7\), что меньше разрешенных \(8\) операций в данном случае.

Во втором наборе входных данных массив \([3, 2, 3]\) можно получить, применив две операции к первому элементу. Другой возможный результирующий массив может быть \([2, 3, 5]\), потому что общее количество операций не обязано быть минимальным.

В третьем тестовом примере, если не применять никакие операции, получится массив, удовлетворяющий свойству, описанному в условии. Обратите внимание, что выполнение операций не является обязательным.

C. Оценка подпоследовательностей

Бинарный поиск жадные алгоритмы математика *1300

Определим оценку последовательности \([s_1, s_2, \ldots, s_d]\) как \(\displaystyle \frac{s_1\cdot s_2\cdot \ldots \cdot s_d}{d!}\), где \(d!=1\cdot 2\cdot \ldots \cdot d\). В частности, оценка пустой последовательности равна \(1\).

Для последовательности \([s_1, s_2, \ldots, s_d]\) пусть \(m\) будет максимальной оценкой среди всех ее подпоследовательностей. Тогда ее стоимость определяется как максимальная длина подпоследовательности с оценкой \(m\).

Вам дана неубывающая последовательность \([a_1, a_2, \ldots, a_n]\) целых чисел длины \(n\). Другими словами, выполняется условие \(a_1 \leq a_2 \leq \ldots \leq a_n\). Для каждого \(k=1, 2, \ldots , n\) найдите стоимость последовательности \([a_1, a_2, \ldots , a_k]\).

Последовательность \(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\leq n\)) — заданную последовательность. Гарантируется, что ее элементы расположены в неубывающем порядке.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — стоимости последовательностей \([a_1, a_2, \ldots , a_k]\) в порядке возрастания \(k\).

Примечание

В первом наборе входных данных:

  • Максимальная оценка среди подпоследовательностей \([1]\) равна \(1\). Подпоследовательности \([1]\) и \([]\) (пустая последовательность) — единственные с такой оценкой. Таким образом, стоимость \([1]\) составляет \(1\).
  • Максимальная оценка среди подпоследовательностей \([1, 2]\) равна \(2\). Единственная подпоследовательность с такой оценкой — \([2]\). Таким образом, стоимость \([1, 2]\) составляет \(1\).
  • Максимальная оценка среди подпоследовательностей \([1, 2, 3]\) равна \(3\). Подпоследовательности \([2, 3]\) и \([3]\) — единственные с такой оценкой. Таким образом, стоимость \([1, 2, 3]\) составляет \(2\).
Следовательно, ответ в этом случае равен \(1\:\:1\:\:2\) — стоимости \([1], [1, 2]\) и \([1, 2, 3]\) в этом порядке.

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\).

В третьем примере хороших вершин нет.

B. Идеальная точка

геометрия жадные алгоритмы Перебор *900

Вам дано \(n\) одномерных отрезков (каждый отрезок представляется двумя числами — координатами его концов).

Давайте определим функцию \(f(x)\) как количество отрезков, покрывающих точку \(x\) (отрезок покрывает точку \(x\), если \(l \le x \le r\), где \(l\) – левый конец отрезка, а \(r\) — правый).

Целочисленная точка \(x\) называется идеальной, если она принадлежит большему количеству отрезков, чем любая другая целочисленная точка, т.е. \(f(y) < f(x)\) верно для любой другой целочисленной точки \(y\).

Вам дано целое число \(k\). Ваша задача состоит в том, чтобы определить, возможно ли удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 50\)).

Далее следует \(n\) строк, \(i\)-я и них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i, r_i \le 50\); \(l_i \le r_i\)) — концы \(i\)-го отрезка.

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной, в противном случае выведите NO.

Каждую букву можно выводить в любом регистре (например, YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом примере точка \(3\) уже идеальна (она покрыта тремя отрезками), поэтому не нужно ничего удалять.

В четвертом примере можно удалить все, кроме отрезка \([5, 5]\).

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\).

F. Блокирующие фишки

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2400

Задано дерево, состоящее из \(n\) вершин. На нем есть \(k\) фишек, расположенных в вершинах \(a_1, a_2, \dots, a_k\). Все \(a_i\) различны. Вершины \(a_1, a_2, \dots, a_k\) изначально покрашены в черный цвет. Остальные вершины белые.

Вы сыграете в игру, в ходе которой сделаете какое-то количество ходов (возможно, ноль). На \(i\)-м ходе (в \(1\)-индексации) вы подвинете фишку номер \(((i - 1) \bmod k + 1)\) из ее текущей вершины в соседнюю белую вершину и покрасите эту вершину в черный. То есть, если \(k=3\), то вы двигаете фишку \(1\) на ходе \(1\), фишку \(2\) на ходе \(2\), фишку \(3\) на ходе \(3\), фишку \(1\) на ходе \(4\), фишку \(2\) на ходе \(5\), и так далее. Если нет соседней белой вершины, то игра заканчивается.

Какое наибольшее количество ходов вы можете совершить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

В каждой из следующих \(n - 1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — описания ребер. Данные ребра задают дерево.

В следующей строке записано одно целое число \(k\) (\(1 \le k \le n\)) — количество фишек.

В следующей строке записаны \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \le a_i \le n\)) — вершины с фишками. Все \(a_i\) различны.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее количество ходов, которые вы можете совершить.

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\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшая возможная стоимость дерева.

A. Li Hua и лабиринт

графы жадные алгоритмы Конструктив Потоки реализация *800

Имеется прямоугольный лабиринт размером \(n\times m\). Обозначим \((r,c)\) как клетку в \(r\)-й строке сверху и \(c\)-м столбце слева. Две клетки называются соседними, если они имеют общую сторону. Путь — это последовательность пустых клеток, в которой любые две подряд идущие клетки являются соседними.

Каждая клетка изначально пуста. Li Hua может выбрать несколько клеток (кроме \((x_1, y_1)\) и \((x_2, y_2)\)) и поместить в каждую из них препятствие. Он хочет узнать минимальное количество препятствий, которые нужно поставить, чтобы не существовало пути из \((x_1, y_1)\) в \((x_2, y_2)\).

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n,m\) (\(4\le n,m\le 10^9\)) — размер лабиринта.

Вторая строка каждого набора входных данных содержит четыре целых числа \(x_1,y_1,x_2,y_2\) (\(1\le x_1,x_2\le n, 1\le y_1,y_2\le m\)) — координаты начальной и конечной клетки.

Гарантируется, что \(|x_1-x_2|+|y_1-y_2|\ge 2\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество препятствий, которое нужно поставить на поле, чтобы не существовало пути из \((x_1, y_1)\) в \((x_2, y_2)\).

Примечание

В первом наборе входных данных можно поставить препятствия на \((1,3), (2,3), (3,2), (4,2)\). Тогда путь из \((2,2)\) в \((3,3)\) не будет существовать.

B. Li Hua и узор

жадные алгоритмы Конструктив *1100

У Li Hua есть узор размером \(n\times n\), каждая клетка которого либо синяя, либо красная. Он может выполнить ровно \(k\) операций. За одну операцию он выбирает клетку и меняет ее цвет с красного на синий или с синего на красный. Каждая клетка может быть выбрана сколько угодно раз. Можно ли сделать узор, который соответствует его же повороту на \(180^{\circ}\)?

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n,k\) (\(1\le n\le 10^3,0\le k \le 10^9\)) — размер шаблона и количество операций.

Каждая из следующих \(n\) строк содержит \(n\) целых чисел \(a_{i,j}\) (\(a_{i,j}\in\{0,1\}\)) — начальный цвет клетки: \(0\) для синей и \(1\) для красной.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^3\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно получить узор, соответствующий его повороту на \(180^{\circ}\), применив ровно \(k\) операций, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных нельзя выполнить ни одной операции. Шаблон после вращения показан справа.

Во втором наборе входных данных можно выполнить операции над \((2,1),(3,2),(3,4)\). Шаблон после операций находится в середине, а шаблон после вращения — справа.

C. Li Hua и шахматы

жадные алгоритмы интерактив Конструктив *1600

Это интерактивная задача.

Li Ming и Li Hua играют в игру. У Li Hua есть шахматная доска размером \(n\times m\). Обозначим \((r, c)\) (\(1\le r\le n, 1\le c\le m\)) как клетку в \(r\)-й строке сверху и в \(c\)-м столбце слева. Li Ming поставил короля на шахматную доску, и Li Hua нужно угадать его позицию.

Li Hua может задавать Li Ming не более \(3\) вопросов. В каждом вопросе он может выбрать клетку и спросить минимальное количество шагов, необходимых для перемещения короля на выбранную клетку. Каждый вопрос является независимым, что означает, что король на самом деле не перемещается.

Король может переместиться из \((x,y)\) в \((x',y')\) тогда и только тогда, когда \(\max\{|x-x'|,|y-y'|\}=1\) (как показано на следующем рисунке).

Позиция короля выбирается перед взаимодействием.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Протокол взаимодействия

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)).

Первая строка каждого набора входных данных содержит два целых числа \(n,m\) (\(1\le n,m\le 10^9\)) — размер шахматной доски, после чего начинается взаимодействие.

Чтобы задать вопрос, выведите «? \(r\) \(c\)» (без кавычек, \(1 \leq r \leq n, 1 \leq c \leq m\)). Затем вы должны ввести ответ со стандартного ввода — минимальное количество шагов, необходимое королю для перемещения в выбранную клетку.

Если ваша программа задала некорректный вопрос или вы задали больше трёх вопросов, интерактор немедленно завершится, а ваша программа получит вердикт Неправильный ответ.

Чтобы дать окончательный ответ, выведите «! \(r\) \(c\)» (без кавычек, \((r,c)\) - это начальная координата короля). Обратите внимание, что вывод ответа не учитывается в ограничение в \(3\) вопроса.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 10^3\)).

Первая и единственная строка каждого набора входных данных должна содержать четыре целых числа \(n,m,r,c\) (\(1\le r\le n\le 10^9,1\le c\le m\le 10^9\)).

Примечание

В первом наборе входных данных король находится в точке \((2,2)\). Для перемещения в клетку \((2,3)\) требуется \(1\) шаг, а для перемещения в клетку \((2,4)\) — \(2\) шага.

Обратите внимание, что ваши запросы могут быть другими. Это просто пример запросов, которые вы можете сделать.

A. Гвоздь программы

жадные алгоритмы реализация сортировки *800

Вам даны два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\).

За одну операцию можно выбрать любое число \(i\) от \(1\) до \(n\) и поменять местами числа \(a_i\) и \(b_i\).

Определите, можно ли после использования некоторого (возможно, нулевого) количества операций добиться одновременного выполнения следующих двух условий:

  • \(a_n = \max(a_1, a_2, \ldots, a_n)\),
  • \(b_n = \max(b_1, b_2, \ldots, b_n)\).

Здесь запись \(\max(c_1, c_2, \ldots, c_k)\) обозначает максимальное из чисел \(c_1, c_2, \ldots, c_k\). Например \(\max(3, 5, 4) = 5\), \(\max(1, 7, 7) = 7\), \(\max(6, 2) = 6\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина массивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)) — элементы первого массива.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 100\)) — элементы второго массива.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите «Yes», если после применения некоторого (возможно, нулевого) количества операций можно добиться выполнения описанных условий. В противном случае выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных можно поменять местами числа \(a_3\) и \(b_3\), после чего массив \(a\) станет равным \([7, 9, 9]\), а массив \(b\) станет равным \([7, 6, 7]\) и оба условия будут выполнены.

Во втором наборе входных данных можно показать, что выполнить условия невозможно.

В третьем наборе входных данных можно поменять местами числа \(a_1\) и \(b_1\), после чего массив \(a\) станет равным \([99, 99]\), а массив \(b\) станет равным \([100, 100]\) и оба условия будут выполнены.

В пятом наборе входных данных можно поменять местами \(a_7\) и \(b_7\), \(a_8\) и \(b_8\), \(a_9\) и \(b_9\), после чего массив \(a\) станет равным \([1, 2, 3, 4, 5, 6, 6, 6, 6]\), а массив \(b\) станет равным \([9, 9, 9, 9, 9, 9, 7, 8, 9]\) и оба условия будут выполнены.

B. Три семёрки

жадные алгоритмы Перебор реализация Структуры данных *1000

Лотерея «Три Семёрки» проводилась \(m\) дней. В день \(i\) в лотерее участвовали \(n_i\) людей с номерами \(a_{i, 1}, \ldots, a_{i, n_i}\).

Известно, что в каждый из \(m\) дней из участников лотереи выбирался ровно один победитель. Победителю лотереи в день \(i\) запрещено участвовать в лотерее в дни с номерами от \(i+1\) до \(m\).

К сожалению, информация о победителях лотереи была утеряна. Вам нужно восстановить любой возможный список победителей лотереи в дни с номерами от \(1\) до \(m\) или определить, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(1 \le m \le 50\,000\)) — количество дней, в которые проводилась лотерея.

Далее для каждого \(i\) от \(1\) до \(m\) находится блок данных из двух строк.

В первой строке каждого блока находится одно целое число \(n_i\) (\(1 \le n_i \le 50\,000\)) — количество участников лотереи в день \(i\).

Во второй строке блока находятся числа \(a_{i, 1}, \ldots, a_{i, n_i}\) (\(1 \le a_{i, j} \le 50\,000\)) — номера участников лотереи в день \(i\). Гарантируется, что все числа \(a_{i, 1}, \ldots, a_{i, n_i}\) попарно различны.

Гарантируется, что сумма значений \(n_i\) по всем блокам всех наборов входных данных не превосходит \(50\,000\).

Выходные данные

Для каждого набора входных данных, если решения не существует, выведите одно целое число \(-1\).

Иначе выведите \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \le p_i \le 50\,000\)) — номера победителей лотереи в дни с \(1\) по \(m\). Если существует несколько корректных решений, выведите любое из них.

Примечание

В первом наборе входных данных один из подходящих ответов \([8, 2, 1]\), так как участник с номером \(8\) участвовал в день \(1\), но не участвовал в дни \(2\) и \(3\); участник с номером \(2\) участвовал в день \(2\), но не участвовал в день \(3\); а участник с номером \(1\) участвовал в день \(3\). Обратите внимание, что это не единственный возможный ответ, например, \([8, 9, 4]\) также является верным ответом.

Во втором наборе входных данных оба участника лотереи участвовали в обоих днях лотереи, значит любой возможный победитель лотереи в день \(1\) обязательно участвовал в день \(2\), значит подходящего ответа не существует.

В третьем наборе входных данных в дни \(2\), \(3\) и \(4\) участвовал только один участник, а в день \(1\) единственный участник, не участвовавший в лотерее в днях \(2, 3, 4\) — это участник \(2\). Значит \([2, 1, 4, 3]\) — единственно верный ответ.

C. Магазин сладостей

жадные алгоритмы математика теория чисел *1700

В магазине продаётся \(n\) типов конфет с номерами от \(1\) до \(n\). Одна конфета типа \(i\) стоит \(b_i\) монет. Всего в магазине есть \(a_i\) конфет типа \(i\).

Вам необходимо расфасовать все конфеты по пачкам, каждая пачка должна состоять только из конфет одного типа. Формально, для каждого типа конфет \(i\) вам необходимо выбрать число \(d_i\), обозначающее количество конфет типа \(i\) в одной пачке, так, чтобы \(a_i\) делилось без остатка на \(d_i\).

Тогда стоимость одной пачки конфет типа \(i\) будет равна \(b_i \cdot d_i\). Обозначим эту стоимость за \(c_i\), то есть \(c_i = b_i \cdot d_i\).

После расфасовки пачки конфет будут помещены на полку. Рассмотрим стоимости пачек, расположенных на полке, в порядке \(c_1, c_2, \ldots, c_n\). Для описания стоимостей будут использоваться ценники. Один ценник может описать стоимость всех товаров от \(l\) до \(r\) включительно, если \(c_l = c_{l+1} = \ldots = c_r\). Каждый из товаров от \(1\) до \(n\) должен быть описан хотя бы одним ценником. К примеру, если \(c_1, \ldots, c_n = [4, 4, 2, 4, 4]\), для описания всех товаров будет достаточно \(3\) ценника, первый ценник описывает товары \(1, 2\), второй: \(3\), третий: \(4, 5\).

Вам даны числа \(a_1, b_1, a_2, b_2, \ldots, a_n, b_n\). Ваша задача выбрать числа \(d_i\) так, чтобы \(a_i\) делилось на \(d_i\) для всех \(i\), и необходимое количество ценников для описания стоимостей \(c_1, c_2, \ldots, c_n\) было минимально возможным.

Для лучшего понимания условия ознакомьтесь с иллюстрацией первого набора входных данных первого теста:

Повторим смысл используемых в задаче обозначений:

\(a_i\) — количество конфет типа \(i\) имеющихся в магазине.

\(b_i\) — стоимость одной конфеты типа \(i\).

\(d_i\) — количество конфет типа \(i\) в одной пачке.

\(c_i\) — стоимость одной пачки конфет типа \(i\), выражается по формуле \(c_i = b_i \cdot d_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 200\,000\)) — количество видов конфет.

Каждая из следующих \(n\) строк каждого набора входных данных содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le 10^9\), \(1 \le b_i \le 10\,000\)) — количество конфет и стоимость одной конфеты типа \(i\) соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(200\,000\).

Выходные данные

Для каждого набора входных данных, выведите минимальное количество ценников необходимое для описания стоимостей всех товаров в магазине.

Примечание

В первом наборе входных данных можно выбрать \(d_1 = 4\), \(d_2 = 6\), \(d_3 = 7\), \(d_4 = 5\). Тогда стоимости товаров будут равны: \([12, 12, 35, 35]\). Для их описания хватит \(2\) ценников, первый ценник для \(c_1, c_2\) и второй ценник для \(c_3, c_4\). Можно показать, что при любом корректном выборе \(d_i\) для описания всех товаров понадобится как минимум \(2\) ценника. Также обратите внимание, что этот пример иллюстрируется картинкой в условии задачи.

Во втором наборе входных данных при \(d_1 = 4\), \(d_2 = 2\), \(d_3 = 10\) стоимости всех товаров будут равны \(20\). Таким образом \(1\) ценника хватит для описания всех товаров. Обратите внимание, что \(a_i\) делится на \(d_i\) для всех \(i\), что является необходимым условием.

В третьем наборе входных данных нетрудно понять, что для описания \(2\), \(3\) и \(4\) товара может быть использован один ценник. И дополнительно понадобится по ценнику для товаров \(1\) и \(5\). Итого \(3\) ценника.

D. Шокирующая расстановка

жадные алгоритмы Конструктив математика *1600

Вам дан массив \(a_1, a_2, \ldots, a_n\), состоящий из целых чисел, такой что \(a_1 + a_2 + \ldots + a_n = 0\).

Переставьте элементы массива \(a\) таким образом, чтобы выполнялось следующее условие:

\(\)\max\limits_{1 \le l \le r \le n} \lvert a_l + a_{l+1} + \ldots + a_r \rvert < \max(a_1, a_2, \ldots, a_n) - \min(a_1, a_2, \ldots, a_n),\(\) где \(|x|\) обозначает модуль числа \(x\).

Более формально, вам нужно выяснить, существует ли такая перестановка \(p_1, p_2, \ldots, p_n\), что для массива \(a_{p_1}, a_{p_2}, \ldots, a_{p_n}\) выполняется условие выше, и найти полученный массив.

Напомним, что массив \(p_1, p_2, \ldots, p_n\) называется перестановкой, если для каждого числа \(x\) от \(1\) до \(n\) существует ровно одно \(i\) от \(1\) до \(n\) такое, что \(p_i = x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 300\,000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). Гарантируется, что сумма массива \(a\) равняется нулю, иными словами: \(a_1 + a_2 + \ldots + a_n = 0\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Для каждого набора входных данных, если переставить элементы массива \(a\) требуемым образом невозможно, в единственной строке выведите «No».

Если же это возможно, в первой строке выведите «Yes», а далее в отдельной строке \(n\) чисел — элементы \(a_1, a_2, \ldots, a_n\), переставленные в нужном порядке (\(a_{p_1}, a_{p_2}, \ldots, a_{p_n}\)).

Если возможных ответов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(\max(a_1, \ldots, a_n) - \min(a_1, \ldots, a_n) = 9\). Поэтому элементы можно переставить следующим образом: \([-5, -2, 3, 4]\). Несложно видеть, что для такой расстановки значение \(\lvert a_l + \ldots + a_r \rvert\) всегда не больше \(7\), а значит и меньше \(9\).

Во втором наборе входных данных можно переставить элементы массива следующим образом: \([-3, 2, -3, 2, 2]\). Тогда максимальный модуль суммы будет достигаться на подмассиве \([-3, 2, -3]\), и будет равен \(\lvert -3 + 2 + -3 \rvert = \lvert -4 \rvert = 4\), что меньше чем \(5\).

В четвёртом тестовом примере любая перестановка массива \(a\) подойдёт в качестве ответа, в том числе и \([-1, 0, 1]\).

A. Прямой эфир

жадные алгоритмы математика реализация Структуры данных *800

На Codeforces поле «Прямой эфир» показывает последние \(n\) постов, в которых были обновления.

Изначально там находятся посты \(1, 2, \ldots, n\) (в таком порядке сверху вниз). Также есть бесконечно много постов, которые не находятся в поле, пронумерованных целыми числами \(n + 1, n + 2, \ldots\).

Когда обновление происходит в посте \(p\):

  • Если пост находится в поле «Прямой эфир», он перемещается со своей позиции на самую верхнюю.
  • Иначе он добавляется в поле на самую верхнюю позицию, а пост на самой нижней позиции удаляется из поля «Прямой эфир».

Вы знаете, что следующие \(m\) обновлений произойдут в постах \(p_1, p_2, \ldots, p_m\) (\(n + 1 \leq p_i \leq n + m\)) в моменты времени \(1, 2, \ldots, m\). Обратите внимание, что обновления происходят только с постами имеющими номер \(\geq n + 1\).

Для каждого поста \(i\) (\(1 \leq i \leq n\)) найдите минимальный момент времени, когда он будет удален из поля «Прямой эфир», или скажите, что он не будет удален.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Описания наборов входных данных следуют.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \leq n, m \leq 5 \cdot 10^4\)) — размер поля «Прямой эфир» и количество действий.

В следующей строке находятся \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(n + 1 \leq p_i \leq n + m\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(t_1, t_2, \ldots, t_n\), где \(t_i=-1\), если пост \(i\) не будет удален, иначе \(t_i\) равняется первому моменту времени, когда пост \(i\) будет удален (\(1 \leq t_i \leq m\)).

Примечание

В первом наборе входных данных единственный пост \(1\) будет удален в момент времени \(1\) и будет заменен на пост \(2\).

Во втором наборе входных данных поле «Прямой эфир» будет (в порядке сверху вниз):

  1. Перед моментом времени \(1\): \([1, 2, 3]\), после момента времени \(1\): \([5, 1, 2]\). Пост \(3\) был удален.
  2. Перед моментом времени \(2\): \([5, 1, 2]\), после момента времени \(2\): \([4, 5, 1]\). Пост \(2\) был удален.

Пост \(1\) не будет удален.

Во третьем наборе входных данных поле «Прямой эфир» будет (в порядке сверху вниз):

  1. Перед моментом времени \(1\): \([1, 2, 3, 4]\), после момента времени \(1\): \([5, 1, 2, 3]\). Пост \(4\) был удален.
  2. Перед моментом времени \(2\): \([5, 1, 2, 3]\), после момента времени \(2\): \([9, 5, 1, 2]\). Пост \(3\) был удален.
  3. Перед моментом времени \(3\): \([9, 5, 1, 2]\), после момента времени \(3\): \([9, 5, 1, 2]\). Ничего не изменилось.
  4. Перед моментом времени \(4\): \([9, 5, 1, 2]\), после момента времени \(4\): \([5, 9, 1, 2]\). Поменялся только порядок постов.
  5. Перед моментом времени \(5\): \([5, 9, 1, 2]\), после момента времени \(5\): \([7, 5, 9, 1]\). Пост \(2\) был удален.

Пост \(1\) не будет удален.

B. Уравняй делением

жадные алгоритмы Конструктив математика Перебор *1200

Вам дан массив \(a_1, a_2, \ldots, a_n\) положительных целых чисел.

Вы можете сделать следующую операцию несколько (возможно, ноль) раз:

  • Выбираются два индекса \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)).
  • Приравнивается \(a_i := \lceil \frac{a_i}{a_j} \rceil\). Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа \(\geq x\).

Можно ли сделать все элементы массива равными с помощью нескольких операций (возможно, нуля)? Если да, выведите любой способ сделать это за не более чем \(30n\) операций.

Можно доказать, что в ограничениях этой задачи если существует какой-нибудь способ сделать все элементы равными, существует способ, использующий не более \(30n\) операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 100\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(q\) (\(-1 \leq q \leq 30n\)). Если \(q=-1\), то решения не существует, иначе \(q\) равняется количеству операций.

Если \(q \geq 0\), то следующие \(q\) строк содержат по два целых числа \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)) — описания операций.

Если существует несколько решений, выведите любое.

Примечание

В первом, втором и четвертом наборах входных данных все числа равны, поэтому можно ничего не делать.

В третьем наборе входных данных невозможно сделать все числа равными с помощью операций.

В пятом наборе входных данных: \([\color{red}{4}, 3, \color{blue}{2}] \to [\color{blue}{2}, \color{red}{3}, 2] \to [2, 2, 2]\).

В шестом наборе входных данных: \([\color{blue}{3}, 3, \color{red}{4}, 4] \to [3, \color{blue}{3}, 2, \color{red}{4}] \to [\color{red}{3}, 3, \color{blue}{2}, 2] \to [2, \color{red}{3}, 2, \color{blue}{2}] \to [2, 2, 2, 2]\).

На примере красные числа это числа на позициях \(i\) (которые будут присвоены), синие числа это числа на позициях \(j\).

C. Двойной лексикографический минимум

жадные алгоритмы Строки *1700

Вам дана строка \(s\). Вы можете поменять порядок символов и получить строку \(t\). Определим \(t_{\mathrm{max}}\) как лексикографический максимум строки \(t\) и перевернутой строки \(t\).

По данной строке \(s\) определите лексикографически минимальное значение \(t_{\mathrm{max}}\) по всем перестановкам \(t\) строки \(s\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда одно из двух условий выполнено:

  • \(a\) является префиксом \(b\), но \(a \ne b\);
  • в первой позиции, в которой \(a\) и \(b\) отличаются, в строке \(a\) стоит символ, который встречается в алфавите раньше, чем соответствующий символ в строке \(b\).
Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\))— количество наборов входных данных. Описания наборов входных данных следуют.

В единственной строке для каждого набора входных данных находится строка \(s\) (\(1 \leq |s| \leq 10^5\)). \(s\) состоит из строчных символов латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальное значение строки \(t_{\mathrm{max}}\) по всем перестановкам \(t\) строки \(s\).

Примечание

В первом наборе входных данных есть одна перестановка символов строки \(s\), это «a».

Во втором наборе входных данных есть три возможных перестановки символов \(s\):

  • \(t = \mathtt{aab}\): \(t_{\mathrm{max}} = \max(\mathtt{aab}, \mathtt{baa}) = \mathtt{baa}\)
  • \(t = \mathtt{aba}\): \(t_{\mathrm{max}} = \max(\mathtt{aba}, \mathtt{aba}) = \mathtt{aba}\)
  • \(t = \mathtt{baa}\): \(t_{\mathrm{max}} = \max(\mathtt{baa}, \mathtt{aab}) = \mathtt{baa}\)

Лексикографически минимальное значение \(t_{\mathrm{max}}\) по всем случаям это «aba».

E. Объединение городов

геометрия жадные алгоритмы Конструктив математика поиск в глубину и подобное реализация снм *2300

Вам дана таблица \(n \times m\). Некоторые клетки заполнены, некоторые пустые.

Город — это максимальное (по включению) множество заполненных клеток, такое что можно дойти из любой клетки города до любой другой клетки города, перемещаясь в соседние по стороне клетки, только по клеткам города. Другими словами, город — это компонента связности заполненных клеток, где ребро проводится между соседними по стороне заполненными клетками.

Изначально в таблице находятся два города. Вы хотите поменять некоторые пустые клетки на заполненные, так что выполняются два условия:

  • В таблице находится один город.
  • Кратчайший путь между любыми двумя заполненными клетками, если можно перемещаться только по заполненным клеткам, равно манхеттенскому расстоянию между клетками.

Манхеттенское расстояние между двумя клетками \((a, b)\) и \((c, d)\) равняется \(|a - c| + |b - d|\).

Найдите способ заполнить некоторые клетки, чтобы все условия выполнялись и общее количество заполненных клеток было минимально.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(1 \le n, m \le 50\), \(nm \geq 3\)).

Следующие \(n\) строк описывают таблицу. В \(i\)-й строке находится строка \(s_i\) длины \(m\). Символ \(s_{i,j}\) равен '#', если клетка \((i, j)\) заполнена, и '.', если клетка пустая.

Гарантируется, что изначально в таблице ровно два города.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(25\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая содержит строку длины \(m\) — описание таблицы, которую вы сделали в том же формате, что во входных данных.

Если существует несколько возможных способов заполнить некоторые пустые клетки, чтобы общее количество заполненных клеток было минимально, выведите любой.

Примечание

В первом наборе входных данных мы добавляем одну заполненную клетку между двумя городами, чтобы соединить их. Можно убедиться, что второе условие также выполняется.

Во втором наборе входных данных мы также соединяем города одной заполненной клеткой, также выполняя второе условие.

В третьем наборе входных данных, обратите внимание, что если мы заполним 3 клетки слева сверху, города будут соединены, однако второе условие не будет выполняться для пары клеток \((4, 2)\) и \((2, 4)\).

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\). Можно показать, что это минимальная достижимая цена.

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).

Выходные данные

Выведите наибольший возможный заработок Васи в бурлях, если бы он заранее знал все события. Не забудьте, что Вася не может хранить у себя одновременно больше одной флешки.

D. Имя

жадные алгоритмы Строки *1900

В далеком созвездии Тау Кита все стало для нас непонятно. В частности, таукитяне очень хитро выбирают имена своим детям.

Молодые родители abac и bbad думают как назвать своего первенца. Решено, что имя будет перестановкой букв строки s. Чтобы не отставать от соседей, они решили назвать ребеночка так, чтобы имя оказалось лексикографически строго больше имени t соседского сына.

С другой стороны, они подозревают о скором введении налога на имена. В соответствии с ним таукитяне с лексикографически большими именами будут платить большие суммы. По этой причине abac и bbad хотят назвать первенца так, чтобы имя было лексикографически строго больше имени t и при этом лексикографически наименьшим.

Лексикографический порядок строк — это привычный нам порядок «как в словаре». Такое сравнение используется во всех современных языках программирования для сравнения строк. Формально, строка p длины n лексикографически меньше строки q длины m, если верно одно из двух утверждений:

  • n < m, а p является началом (префиксом) строки q (например, «aba» меньше строки «abaa»),
  • p1 = q1, p2 = q2, ..., pk - 1 = qk - 1, pk < qk для некоторого k (1 ≤ k ≤ min(n, m)), здесь символы в строках нумеруются от 1.

Напишите программу, которая по заданной строке s и имени соседского ребенка t определяет такую строку, которая получается перестановкой букв s, лексикографически строго больше t и при этом лексикографически как можно меньше.

Входные данные

В первой строке записана непустая строка s (1 ≤ |s| ≤ 5000), где |s| — ее длина. Вторая строка содержит непустую строку t (1 ≤ |t| ≤ 5000), где |t| — ее длина. Обе строки состоят из строчных букв латинского алфавита.

Выходные данные

Выведите искомое имя или -1, если такового не существует.

Примечание

В первом примере данная строка s является искомой, следовательно, порядок букв в ней менять не надо.

B. Посчитай количество пар

жадные алгоритмы Строки *1000

У Кристины есть строка \(s\) длины \(n\), состоящая только из строчных и заглавных латинских букв. За каждую пару из строчной буквы и соответствующей ей заглавной Кристина может получить \(1\) бурль. При этом, пары из символов не могут пересекаться, то есть каждый символ может быть только в одной паре.

Например, если у нее есть строка \(s\) = «aAaaBACacbE», то она может получить бурль за следующие пары символов:

  • \(s_1\) = «a» и \(s_2\) = «A»
  • \(s_4\) = «a» и \(s_6\) = «A»
  • \(s_5\) = «B» и \(s_{10}\) = «b»
  • \(s_7\)= «C» и \(s_9\) = «c»

Кристина хочет получить больше бурлей за свою строку, поэтому она собирается совершить над ней не более \(k\) операций. За одну операцию она может:

  • либо выбрать строчный символ \(s_i\) (\(1 \le i \le n\)) и сделать его заглавным.
  • либо выбрать заглавный символ \(s_i\) (\(1 \le i \le n\)) и сделать его строчным.

Например, при \(k\) = 2 и \(s\) = «aAaaBACacbE» она может совершить одну операцию: выбрать \(s_3\) = «a» и сделать его заглавным. Тогда она получит еще одну пару из \(s_3\) = «A» и \(s_8\) = «a».

Найдите максимальное количество бурлей, которое Кристина может получить за свою строку.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) (\(1 \le n \le 2 \cdot 10^5\)) и \(k\) (\(0 \le k \le n\)) — количество символов в строке и максимальное количество операций, которое можно над ней совершить.

Во второй строке каждого набора входных данных записана строка \(s\) длины \(n\), состоящая только из строчных и заглавных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных на отдельной строке выведите ровно одно целое число: максимальное количество бурлей, которое Кристина может получить за строку \(s\).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных невозможно получить ни одну пару выполнив любое количество операций.

C1. Усиление героев (простая версия)

жадные алгоритмы Структуры данных *1000

Это простая версия задачи. Она отличается от сложной только ограничениями на \(n\) и \(t\).

Есть колода из \(n\) карт, каждая из которых характеризуется своей силой. Бывают карты двух видов:

  • карта героя, сила такой карты всегда равна \(0\);
  • карта бонуса, сила такой карты всегда положительна.

Вы можете делать с колодой следующее:

  • взять карту сверху колоды;
  • если эта карта является картой бонуса, вы можете положить её на верх своей колоды с бонусами либо в сброс;
  • если эта карта является картой героя, то к его силе прибавляется сила верхней карты из вашей колоды с бонусами (если она не пуста), после этого герой добавляется к вашей армии, а использованный бонус уходит в сброс.

Ваша задача с помощью таких действий собрать армию с наибольшей суммарной силой.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество карт в колоде.

Вторая строка каждого набора содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(0 \le s_i \le 10^9\)) — силы карт в порядке сверху вниз.

Гарантируется, что сумма всех значений \(n\) не превосходит \(5000\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — максимальную возможную суммарную силу армии, которой можно добиться.

Примечание

В первом примере можно взять бонусы \(1\) и \(2\). Обе карты героев получат по \(3\) к силе. Если взять все бонусы, один из них останется неиспользованным.

Во втором примере карту героя сверху колоды невозможно усилить, а остальных можно усилить бонусами \(2\) и \(3\) и получить \(6\) суммарной силы.

В четвёртом примере можно взять бонусы \(1\), \(2\), \(3\), \(5\) и пропустить бонус \(6\), тогда герой \(4\) будет усилен бонусом \(3\) на \(5\), а герой \(7\) бонусом \(5\) на \(4\). \(4+5=9\).

C2. Усиление героев (сложная версия)

жадные алгоритмы Структуры данных *1100

Это сложная версия задачи. Она отличается от простой только ограничениями на \(n\) и \(t\).

Есть колода из \(n\) карт, каждая из которых характеризуется своей силой. Бывают карты двух видов:

  • карта героя, сила такой карты всегда равна \(0\);
  • карта бонуса, сила такой карты всегда положительна.

Вы можете делать с колодой следующее:

  • взять карту сверху колоды;
  • если эта карта является картой бонуса, вы можете положить её на верх своей колоды с бонусами либо в сброс;
  • если эта карта является картой героя, то к его силе прибавляется сила верхней карты из вашей колоды с бонусами (если она не пуста), после этого герой добавляется к вашей армии, а использованный бонус уходит в сброс.

Ваша задача с помощью таких действий собрать армию с наибольшей суммарной силой.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество карт в колоде.

Вторая строка каждого набора содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(0 \le s_i \le 10^9\)) — силы карт в порядке сверху вниз.

Гарантируется, что сумма всех значений \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — максимальную возможную суммарную силу армии, которой можно добиться.

Примечание

В первом примере можно взять бонусы \(1\) и \(2\). Обе карты героев получат по \(3\) к силе. Если взять все бонусы, один из них останется неиспользованным.

Во втором примере карту героя сверху колоды невозможно усилить, а остальных можно усилить бонусами \(2\) и \(3\) и получить \(6\) суммарной силы.

В четвёртом примере можно взять бонусы \(1\), \(2\), \(3\), \(5\) и пропустить бонус \(6\), тогда герой \(4\) будет усилен бонусом \(3\) на \(5\), а герой \(7\) бонусом \(5\) на \(4\). \(4+5=9\).

D. Удали два символа

жадные алгоритмы Строки Структуры данных хэши *1200

У Дмитрия есть строка \(s\), состоящая из строчных латинских букв.

Дмитрий решил удалить два подряд идущих символа из строки \(s\) и вам интересно, какое количество различных строк может получиться после такой операции.

Например, у Дмитрия есть строка «aaabcc». Вы можете получить следующие различные строки: «abcc»(при удалении первых двух или второго и третьего символов), «aacc»(при удалении третьего и четвёртого символов),«aaac»(при удалении четвертого и пятого символов) и «aaab»(при удалении последних двух).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания входных данных.

Первая строка описания каждого набора входных данных содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Вторая строка описания каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных строк, которые можно получить, удалив две подряд идущие буквы.

Примечание

Первый пример разобран в условии.

В третьем примере получатся следующие строки: «cdef», «adef», «abef», «abcf», «abcd».

В седьмом примере при любом удалении получится строка «aba».

E1. Непростительное заклятие (простая версия)

графы жадные алгоритмы Конструктив Перебор снм Строки *1400

Это простая версия задачи. В этой версии \(k\) всегда равно \(3\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. В этой версии задачи можно менять буквы на расстоянии \(3\) или \(4\). Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=3\) или \(|i-j|=4\).

Например, если \(s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(k = 3\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно действовать следующим образом:

  • Поменять местами буквы на позициях \(2\) и \(5\) (расстояние \(3\)), тогда получим заклинание «aaacbba».
  • Поменять местами буквы на позициях \(4\) и \(7\) (расстояние \(3\)), тогда получим заклинание «aaaabbc».

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(3\) или \(4\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

E2. Непростительное заклятие (сложная версия)

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм Строки *1500

Это сложная версия задачи. В этой версии нет дополнительных ограничений на число \(k\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=k\) или \(|i-j|=k+1\).

Например, если \(k = 3, s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно менять соседние буквы местами, так что можем отсортировать строку например с помощью сортировки пузырьком.

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(6\) или \(7\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

B. Покупка подарков

жадные алгоритмы сортировки Структуры данных *1800

У маленького Саши есть две подруги, которых он хочет порадовать подарками на Восьмое марта. Для этого он отправился в самый большой торговый центр в городе.

В торговом центре есть \(n\) отделов, в каждом из которых находятся ровно два магазина. Для удобства пронумеруем отделы целыми числами от \(1\) до \(n\). Известно, что подарки в первом магазине \(i\)-го отдела стоят \(a_i\) рублей, а во втором магазине \(i\)-го отдела — \(b_i\) рублей.

Войдя в торговый центр, Саша посетит каждый из \(n\) отделов торгового центра, причем в каждом отделе он зайдет ровно в один магазин. Когда Саша попадет в \(i\)-й отдел, он выполнит ровно одно из двух действий:

  1. Купить подарок первой подруге, потратив на это \(a_i\) рублей.
  2. Купить подарок второй подруге, потратив на это \(b_i\) рублей.

Для каждой подруги Саша собирается купить хотя бы один подарок. Более того, он хочет подобрать подарки таким образом, чтобы разность цен самых дорогих подарков, купленных подругам, была как можно меньше, чтобы никто не обиделся.

Более формально: пусть \(m_1\) — максимальная цена подарка, купленного первой подруге, а \(m_2\) — максимальная цена подарка, купленного второй подруге. Саша хочет выбрать подарки таким образом, чтобы минимизировать величину \(\lvert m_1 - m_2 \rvert\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 500\,000\)) — количество отделов в торговом центре.

Каждая из следующих \(n\) строк каждого набора входных данных содержит два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)) — цены подарков в первом и втором магазине \(i\)-го отдела, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\,000\).

Выходные данные

Выведите одно целое число — минимальную разность цен самых дорогих подарков, купленных подругам.

Примечание

В первом наборе входных данных у Саши есть два возможных варианта действий: купить подарок первой подруге в первом отделе, а второй подруге — во втором отделе, или наоборот. В первом случае \(m_1 = m_2 = 1\), а во втором случае — \(m_1 = m_2 = 2\). В обоих случаях ответ равен \(0\). Во втором наборе входных данных можно купить подарки для первой подруги в \(2\)-м, \(4\)-м и \(5\)-м отделах, а для второй подруги — в \(1\)-м и \(3\)-м отделах. Таким образом, \(m_1 = \max(2, 4, 2) = 4\), \(m_2 = \max(5, 3) = 5\). Ответ равен \(\lvert 4 - 5 \rvert = 1\).

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\) город.

A. Лайки

жадные алгоритмы реализация *800

Недавно Никита провел очень противоречивый раунд, после которого его вклад очень быстро менялся.

Анонс висел на главной странице \(n\) секунд. В \(i\)-ю секунду \(|a_i|\)-й человек либо поставил лайк, либо убрал лайк (в этой задаче Никите повезло и дизлайков не существует). Если \(a_i > 0\), то \(a_i\)-й человек поставил лайк. Если \(a_i < 0\), то \(-a_i\) человек убрал лайк. Каждый человек ставил и убирал лайк не более одного раза. Человек не мог убрать лайк, если он до этого его не ставил.

Так как после раунда у Никиты вклад стал очень плохим, то он захотел проанализировать, как менялся его вклад, пока анонс был на главной странице. Он обратился к создателю платформы с просьбой дать ему последовательность \(a_1, a_2, \ldots, a_n\). Но из-за несовершенства платформы последовательность \(a\) перемешалась.

Вам дана перемешанная последовательность \(a\), которая описывает активность пользователей. Вам требуется сказать для каждого момента от \(1\) до \(n\), какое максимальное и минимальное количество лайков могло быть на посту в этот момент.

Входные данные

В первой строке входных данных дано одно число \(t\) (\(1 \leqslant t \leqslant 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано одно число \(n\) (\(1 \leqslant n \leqslant 100\)) — количество секунд, в течение которых анонс Никиты висел на главной странице.

В следующей строке дано \(n\) чисел \(b_1, b_2, b_3, \ldots, b_n\) (\(1 \leqslant |b_i| \leqslant n\)) — перемешанный массив \(a\). Гарантируется, что существует такая перестановка \(b\), что она является корректной последовательностью событий, описанных в условии.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите по две строки, в каждой из которых по \(n\) чисел.

В первой строке для каждого набора входных данных выведите максимальное количество лайков, которые Никита мог иметь на анонсе в \(i\)-ю секунду.

Во второй строке для каждого набора входных данных выведите минимальное количество лайков, которые Никита мог иметь на анонсе в \(i\)-ю секунду.

Примечание

В первом наборе входных данных максимальные значения достигаются при следующей перестановке: \(1, 2, -2\). А минимальные значения при такой: \(2, -2, 1\).

Во третьем наборе входных данных все максимумы достигаются при следующей перестановке: \(4, 2, 3, 1, -1, -2\). А минимальные значения при следующей перестановке: \(2, -2, 1, -1, 3, 4\).

B. Расселение морских свинок

жадные алгоритмы математика реализация *1000

Даша очень любит морских свинок. В связи с этим, она решила поселить как можно больше морских свинок у себя дома и разработала план на ближайшие \(n\) дней. Каждый день она будет либо покупать новую морскую свинку, либо вызывать врача, чтобы он осмотрел всех ее питомцев.

К сожалению, магазин, в котором она собралась покупать морских свинок, не разбирается в них. Поэтому не может определить их пол. Даша тоже не может этого сделать. Единственный, кто может помочь — врач.

Для содержания морских свинок нужны вольеры. Покупать их Даша планирует в том же магазине. К сожалению, там продается только один вид — двухместный вольер. В нем может жить не более двух морских свинок.

Так как Даша не хочет нанести моральную травму своим питомцам — она не будет селить двух морских свинок разного пола в один вольер.

Помогите Даше посчитать, сколько минимум вольеров нужно купить, чтобы ни в один момент времени две морские свинки разных полов не жили в одном вольере.

В рамках этой задачи мы считаем, что у морских свинок всего два пола — мужской и женский.

Входные данные

В первой строке входных данных дано одно число \(t\) (\(1 \leqslant t \leqslant 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано одно число \(n\) (\(1 \leqslant n \leqslant 10^5\)) — количество дней на которые у Даши есть план.

В следующей строке дано \(n\) чисел \(b_1, b_2, b_3, \ldots, b_n\) (\(1 \leqslant b_i \leqslant 2\)) — план Даши. Если \(b_i = 1\), то в \(i\)-й день Даша купит новую морскую свинку. Если \(b_i = 2\), то в \(i\)-й день к Даше придет доктор и поможет определить пол всех морских свинок которые уже есть у Даши.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — сколько минимум вольеров нужно купить Даше, чтобы ни в один момент времени две морские свиньи разного пола не жили вместе.

Примечание

В первом наборе входных данных Даше нужно селить каждую морскую свинку в отдельный вольер, так как она не знает их пол.

Во втором наборе входных данных Даша купит \(0\) морских свинок, а значит ей потребуется \(0\) вольеров.

В третьем наборе входных данных Даше нужно \(3\) вольера, чтобы поселить каждую морскую свинку в отдельный вольер до прихода врача на \(4\)-й день. Когда она узнает их пол, то хотя бы две морские свинки окажутся одного пола и их можно будет поселить в один вольер, а третью - в другой вольер. Таким образом у нее будет один свободный вольер, в который она может поселить новую морскую свинку. Таким образом ответ \(3\).

В четвертом наборе входных данных покажем, что \(4\) - оптимальный ответ.

Для начала заметим, что первые четыре морские свинки можно поселить по одной в вольер. Затем придет врач и определит их пол. Среди этих четырех морских свинок будет хотя бы одна пара одного пола, потому что: либо морских свинок мужского пола хотя бы \(2\), либо их не больше \(1\), а значит женского пола хотя бы \(3\). Теперь мы можем поселить эту пару в один вольер, а две остальные - в отдельные. У нас останется еще один пустой вольер куда можно поселить новую свинку.

Теперь покажем, что ответ не меньше \(4\). Пусть среди первых \(4\) морских свинок \(3\) имеют женский пол и \(1\) - мужской. Нам нужно минимум \(3\) вольера чтобы их расселить. Тогда, когда мы купим новую морскую свинку - нам понадобится еще один вольер, в которые мы ее поселим, так как мы не знаем ее пол.

A. Хромой король

жадные алгоритмы математика *800

Вам дана шахматная доска размером \(201 \times 201\), т. е. она состоит из \(201\) строки и \(201\) столбца. Строки этой шахматной доски пронумерованы от \(-100\) до \(100\) снизу вверх. Столбцы этой шахматной доски пронумерованы от \(-100\) до \(100\) слева направо. Обозначим \((r, c)\) позицию, расположенную в \(r\)-й строке и \(c\)-м столбце.

В позиции \((0, 0)\) стоит фигура короля, и она хочет добраться до позиции \((a, b)\) как можно скорее. В этой задаче наш король хромает. Каждую секунду король делает ровно один из следующих пяти ходов.

  • Пропустить ход. Позиция короля остается неизменной.
  • Вверх. Если текущая позиция короля \((r, c)\), он переходит в позицию \((r + 1, c)\).
  • Вниз. Позиция изменяется с \((r, c)\) на \((r - 1, c)\).
  • Направо. Позиция изменяется с \((r, c)\) на \((r, c + 1)\).
  • Налево. Позиция изменяется с \((r, c)\) на \((r, c - 1)\).

Королю не разрешается делать ходы, выводящие его за пределы доски. Важным следствием хромоты короля является то, что ему не разрешено делать одно и то же действие две секунды подряд. Например, если король сходил направо, то на следующей секунде он может только пропустить ход, сходить вверх, вниз или налево.

Какое минимальное количество секунд нужно хромому королю, чтобы достичь позиции \((a, b)\)?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют \(t\) строк, каждая из которых содержит описание одного набора входных данных.

Каждый набор входных данных состоит из двух целых чисел \(a\) и \(b\) (\(-100 \leq a, b \leq 100\)) — позиция клетки, которую хочет достичь король. Гарантируется, что либо \(a \ne 0\), либо \(b \ne 0\).

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е из этих целых чисел должно быть равно минимальному количеству секунд, которое необходимо хромому королю, чтобы добраться до позиции, которую он хочет занять в \(i\)-м наборе входных данных. Король всегда начинает с позиции \((0, 0)\).

Примечание

Одно из возможных решений для первого набора входных данных: вниз, направо, вниз, направо, вниз, налево, вниз.

Одно из возможных решений для второго набора входных данных состоит в том, чтобы чередовать ходы направо и вверх, каждый по \(4\) раза.

Одно из возможных решений для третьего набора входных данных состоит в том, чтобы чередовать действия «налево» и «пропустить ход», начиная с действия «налево». Таким образом, «налево» будет использовано \(6\) раз, а «пропустить ход» \(5\) раз.

B. Вакцинация

жадные алгоритмы реализация *1000

Итан управляет станцией вакцинации, чтобы помогать людям бороться с сезонным гриппом. Он анализирует исторические данные, чтобы разработать оптимальную стратегию использования вакцины.

Пусть в конкретный день на станцию вакцинации придут \(n\) пациентов. Пациент с номером \(i\) придёт в момент времени \(t_i\). Каждого пациента можно попросить подождать не более \(w\) моментов времени, то есть \(i\)-й пациент может получить вакцину в моменты времени \(t_i, t_i + 1, \ldots, t_i + w\).

Вакцины поставляются в упаковках, каждая упаковка состоит из \(k\) доз. Каждому пациенту требуется ровно одна доза. Пакеты хранятся в специальном холодильнике. После того, как пачку вынули из холодильника и открыли, ее уже нельзя положить обратно. Время жизни вакцины вне холодильника составляет \(d\) моментов времени. Таким образом, если упаковка была вынута из холодильника и открыта в момент \(x\), дозы из этой упаковки можно использовать для вакцинации пациентов в моменты \(x, x + 1, \ldots, x + d\). В момент \(x + d + 1\) все оставшиеся неиспользованные дозы этой пачки выбрасываются.

Предположим, что на станции вакцинации достаточно персонала для проведения произвольного количества операций в каждый момент времени. Какое минимальное количество упаковок вакцин требуется для вакцинации всех \(n\) пациентов?

Входные данные

Первая строка входных данных содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10^4\)). Затем следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(d\) и \(w\) (\(1 \leq n, k \leq 2 \cdot 10^5\), \(0 \leq d, w \leq 10^6\)) — количество пациентов, количество доз в упаковке вакцины, количество моментов времени, в течение которых вакцина может жить вне холодильника, и количество моментов времени, в течение которых каждый из пациентов может ждать соответственно.

Вторая строка каждого набора входных данных содержит неубывающую последовательность \(t_1, t_2, \ldots, t_n\) (\(0 \leq t_1 \leq t_2 \leq \ldots \leq t_n \leq 10^6\)). \(i\)-м элементом этой последовательности является момент прихода \(i\)-го пациента на станцию вакцинации.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(2 \cdot 10^5\).

Выходные данные

Выведите одно целое число — минимальное количество упаковок с вакциной, необходимое для вакцинации всех \(n\) пациентов.

Примечание

В первом наборе входных данных первая упаковка может быть открыта в момент времени \(1\) для вакцинации пациента \(1\). Затем дозы из этой упаковки будут использованы в моменты времени \(2\) и \(3\) для пациентов \(2\) и \(3\) соответственно. Далее персоналу необходимо попросить пациентов \(4\) и \(5\) дождаться момента \(13\). В момент \(13\) персонал открывает вторую упаковку вакцины и обслуживает пациентов \(4\) и \(5\). Наконец, последний пациент приходит в момент \(18\) и сразу же получает последнюю дозу из второй упаковки, пока она ещё не испортилась.

Во втором наборе входных данных вакцина может быть использована только в тот момент времени, когда её достают из холодильника. Более того, все пациенты хотят быть обслужены именно в тот момент, когда они приходят. Это означает, что персонал должен открыть две упаковки в момент \(3\) и использовать пять доз для пациентов \(1\), \(2\), \(3\), \(4\) и \(5\). Из этих двух упаковок останется три дозы, но их нельзя использовать для пациента \(6\). Когда пациент \(6\) приходит в момент \(4\), персоналу необходимо открыть новую упаковку, чтобы использовать только одну дозу из неё.

C. Вращайте барабан!

жадные алгоритмы математика Перебор теория чисел *1500

Пока Джеймс уехал по делам, Веспер неторопливо изучает, что интересного легендарное казино «Рояль» может предложить людям, увлекающимся спортивным программированием.

Её внимание привлекла совершенно новая рулетка «Вращайте барабан!», которая работает довольно своеобразно. Колесо рулетки состоит из \(n\) секторов с номерами от \(0\) до \(n - 1\). Шарика нет, а выигрышный сектор определяется статичной стрелкой, указывающей на один из секторов. Секторы пронумерованы последовательно и колесо всегда крутится в сторону увеличения индексов. Это означает, что сектор \(i + 1\) идёт сразу после сектора \(i\) для всех \(i\) от \(0\) до \(n - 2\), а сектор \(0\) идёт сразу после сектора \(n - 1\).

После того, как ставка сделана, игроку разрешается самостоятельно потянуть за ручку старта и заставить колесо вращаться. Если игрок потянет ручку с целочисленной положительной силой \(f\), то колесо будет вращаться в течение \(f\) секунд. В течение первой секунды оно прокрутится \(f\) секторов, в следующую секунду оно прокрутится \(f - 1\) секторов, затем \(f - 2\) секторов и так далее до полной остановки. После того как колесо полностью останавливается, выигрышным объявляется сектор, на который указывает стрелка.

Стрелка рулетки в данный момент указывает на сектор \(x\). Веспер знает, что она может потянуть ручку с любой целочисленной силой от \(1\) до \(p\) включительно. Обратите внимание, что потянуть ручку с силой \(0\) (то есть не потянуть вообще) нельзя. Самый большой приз — автомобиль — присуждается, если выигрывает сектор \(0\). Теперь Веспер задается вопросом, сможет ли она сделать так, чтобы выиграл сектор \(0\), потянув ручку старта ровно один раз?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует \(t\) строк, каждая из которых содержит описание одного набора входных данных.

Описание каждого набора входных данных состоит из трёх целых чисел \(n\), \(x\) и \(p\) (\(3 \leq n \leq 10^5\), \(0 \leq x < n\), \(1 \leq p \leq 10^9\)) — количество секторов на колесе, текущий сектор, на который указывает стрелка, и максимальная сила, с которой Веспер может потянуть ручку старта, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, \(i\)-я строка должна содержать ответ для \(i\)-го набора входных данных. Если возможно потянуть за ручку старта с целочисленной силой от \(1\) до \(p\), чтобы сектор \(0\) выиграл, выведите «Yes». В противном случае выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных единственный возможный способ потянуть ручку — с усилием \(1\). Этого недостаточно, чтобы стрелка указывала на сектор \(0\), для этого требуется как минимум сила \(2\).

Во втором наборе входных данных Веспер может потянуть ручку с силой \(2\), так что колесо повернётся на \(2 + 1 = 3\) сектора, а стрелка будет указывать на сектор \(0\).

В третьем наборе входных данных Веспер может потянуть за ручку с силой \(4\), так что колесо повернётся на \(4 + 3 + 2 + 1 = 10\) секторов, после чего стрелка будет снова показывать на сектор \(0\).

В четвёртом наборе входных данных Веспер может потянуть за ручку с силой \(5\), так что колесо повернётся на \(5 + 4 + 3 + 2 + 1 = 15\) секторов. Это заставит колесо сделать один полный оборот плюс ещё \(4\) сектора.

В пятом наборе входных данных, какую бы силу ни выбрала Веспер, чтобы потянуть за ручку, она может сделать выигрышными только секторы \(1\) и \(2\).

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|

B. У строки есть цель

жадные алгоритмы Строки *800

Дана строка \(s\). Можно ровно один раз применить к строке такую операцию: выбрать индекс \(i\) и переставить символ \(s_i\) в начало строки (удалив его на старой позиции). Например, если к строке «abaacd» применить операцию с индексом \(i=4\) в нумерации с \(1\), то получится строка «aabacd». Какую лексикографически минимальную\(^{\dagger}\) строку можно получить одной такой операцией?

\(^{\dagger}\)Строка \(a\) лексикографически меньше строки \(b\) такой же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 10 ^ 5\)) — длину строки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10 ^ 5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите лексикографически минимальную строку, которую можно получить после применения одной операции из условия к исходной строке ровно один раз.

Примечание

В первом наборе нужно переместить последний символ в начало.

Во втором наборе входных данных нужно перенести в начало вторую букву «a».

В третьем наборе нужно применить операцию с \(i=1\), тогда строка не изменится.

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\) каждая вершина является отдельной компонентой.

F2. Выживание слабейших (сложная версия)

жадные алгоритмы математика сортировки *3100

Это сложная версия задачи. Она отличается от простой только ограничением на \(n\). Вы можете делать взломы, только если заблокируете обе версии задачи.

Пусть \(a_1, a_2, \ldots, a_n\) — массив, состоящий из целых неотрицательных чисел. Определим \(F(a_1, a_2, \ldots, a_n)\) как отсортированный по неубыванию массив, состоящий из \(n - 1\) минимальных чисел вида \(a_i + a_j\), где \(1 \le i < j \le n\). Другими словами, \(F(a_1, a_2, \ldots, a_n)\) — это отсортированный по неубыванию массив из \(n - 1\) минимальных сумм всевозможных пар элементов массива \(a_1, a_2, \ldots, a_n\). Например, \(F(1, 2, 5, 7) = [1 + 2, 1 + 5, 2 + 5] = [3, 6, 7]\).

Вам дан массив, состоящий из целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\). Определите, чему равен единственный элемент массива \(\underbrace{F(F(F\ldots F}_{n-1}(a_1, a_2, \ldots, a_n)\ldots))\). Так как ответ может быть достаточно большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — начальную длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите единственное число — ответ на задачу по модулю \(10^9 + 7\).

Примечание

В первом тесте массив трансформируется следующим образом: \([1, 2, 4, 5, 6] \to [3, 5, 6, 6] \to [8, 9, 9] \to [17, 17] \to [34]\). Единственный элемент конечного массива равен \(34\).

Во втором тесте \(F(a_1, a_2, \ldots, a_n)\) будет равен \([2, 2, 2, 8, 8, 8, 8, 8]\). Этот массив составлен из \(3\) чисел вида \(1 + 1\) и из \(5\) чисел вида \(1 + 7\).

В четвёртом тесте массив трансформируется следующим образом: \([10^9, 10^9, 777] \to [10^9+777, 10^9+777] \to [2 \cdot 10^9 + 1554]\). \(2 \cdot 10^9 + 1554\) по модулю \(10^9+7\) равняется \(1540\).

A. Мастер перемещений

геометрия жадные алгоритмы математика *800

YunQian стоит на бесконечной плоскости, на которой задана система координат. За один ход она может переместиться на одну клетку по диагонали вправо вверх или на одну клетку налево.

Иными словами, если она стоит в точке \((x,y)\), она может переместиться либо в точку \((x+1,y+1)\), либо в точку \((x-1,y)\).

YunQian изначально стоит в точке \((a,b)\) и хочет переместиться в точку \((c,d)\). Найдите минимальное количество ходов, которое она должна сделать, или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре числа \(a\), \(b\), \(c\), \(d\) (\(-10^8\le a,b,c,d\le 10^8\)).

Выходные данные

Для каждого набора входных данных, если возможно переместиться из точки \((a,b)\) в точку \((c,d)\), выведите минимальное количество ходов. В противном случае выведите \(-1\).

Примечание

В первом наборе входных данных один из возможных путей с использованием \(4\) ходов: \((-1,0)\to (0,1)\to (-1,1)\to (0,2)\to (-1,2)\). Можно доказать, что невозможно перейти из точки \((-1,0)\) в точку \((-1,2)\) менее чем за \(4\) хода.

B. Мастер Mex-ов

жадные алгоритмы Конструктив *900

Вам дан массив \(a\) длины \(n\). Цена массива \(a\) — это MEX\(^{\dagger}\) массива \([a_1+a_2,a_2+a_3,\ldots,a_{n-1}+a_n]\). Найдите минимальную цену \(a\), если в нём разрешается переставлять элементы массива \(a\) местами. Обратите внимание, что вам не нужно искать массив \(a\), на котором достигается минимальная цена.

\(^{\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\) (\(2\le n\le 2\cdot10^5\)).

Вторая строка каждого набора содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 2\cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную цену \(a\) после перестановки элементов \(a\) в любом порядке.

Примечание

В первом наборе входных данных оптимальной является перестановка \(a\), равная \([0,0]\), ценой этого массива является MEX массива \([0+0]=[0]\), равный \(1\).

Во втором наборе оптимальной является перестановка \(a\) равная \([0,1,0]\), ценой этого массива является MEX массива \([0+1,1+0]=[1,1]\), равного \(0\).

F1. Мастер НОД (простая версия)

жадные алгоритмы математика сортировки теория чисел *2900

Это простая версия задачи. Различия между версиями заключаются в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Вам дан массив \(a\) длины \(n\) и два целых числа \(m\) и \(k\). Каждый элемент в \(a\) удовлетворяет условию \(1\le a_i \le m\).

За одну операцию вы выбираете два индекса \(i\) и \(j\) такие, что \(1 \le i < j \le |a|\), затем добавляете \(\gcd(a_i,a_j)\) в конец массива и удаляете \(a_i\) и \(a_j\) из массива. Обратите внимание, что после этой операции длина массива уменьшится на единицу.

Найдите максимально возможную сумму массива после выполнения ровно \(k\) операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^5\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 10^6\); \(1\le m \le 10^6\); \(1 \le k \le n-1\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le m\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^6\) и сумма \(m\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите максимально возможную сумму массива после оптимального выполнения \(k\) операций.

Примечание

В первом наборе входных данных лучшим способом является выбор \(i=1\), \(j=3\) в первой операции. Итоговая последовательность — \([7,4]\).

F2. Мастер НОД (сложная версия)

жадные алгоритмы математика сортировки *2900

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Вам дан массив \(a\) длины \(n\) и два целых числа \(m\) и \(k\). Каждый элемент в \(a\) удовлетворяет условию \(1\le a_i \le m\).

За одну операцию вы выбираете два индекса \(i\) и \(j\) такие, что \(1 \le i < j \le |a|\), затем добавляете \(\gcd(a_i,a_j)\) в конец массива и удаляете \(a_i\) и \(a_j\) из массива. Обратите внимание, что после этой операции длина массива уменьшится на единицу.

Найдите максимально возможную сумму массива после выполнения ровно \(k\) операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^5\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 10^6\); \(1\le m \le 9\cdot 10^{18}\); \(1 \le k \le n-1\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le m\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите максимально возможную сумму массива после оптимального выполнения \(k\) операций.

Примечание

В первом наборе входных данных лучшим способом является выбор \(i=1\), \(j=3\) в первой операции. Итоговая последовательность — \([7,4]\).

B. Хватайте конфеты

жадные алгоритмы *800

Михай и Бьянка играют с мешочками конфет. У них есть последовательность \(a\) из \(n\) мешочков с конфетами. В \(i\)-м мешке \(a_i\) конфет. Мешочки раздаются игрокам в порядке от первого до \(n\)-го мешочка.

Если в мешке чётное количество конфет, то его хватает Михай. В противном случае его хватает Бьянка. Как только мешок схвачен, количество конфет в нём прибавляется к общему количеству конфет игрока, который его взял.

Михай хочет покрасоваться, поэтому он хочет изменить порядок массива так, чтобы в любой момент (кроме самого начала, когда у обоих нет конфет) у Михая было строго больше конфет, чем у Бьянки. Помогите Михаю выяснить, существует ли такой способ переставить мешочки.

Входные данные

Первая строка ввода содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество мешков.

Вторая строка каждого набора входных данных содержит \(n\) разделенных пробелами целых чисел \(a_i\) (\(1 \leq a_i \leq 100\)) — количество конфет в каждом мешке.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если такая перестановка существует, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных Михай может переупорядочить массив следующим образом: \([4, 1, 2, 3]\). Затем процесс будет происходить следующим образом:

  • в первом пакете \(4\) конфет, что является чётным, поэтому Михай берет его — У Михая \(4\) конфеты, а у Бьянки \(0\).
  • во втором пакете \(1\) конфета, что является нечётным числом, поэтому его берет Бьянка — у Михая \(4\) конфеты, а у Бьянки — \(1\).
  • в третьем пакете \(2\) конфеты, что является чётным числом, поэтому его берет Михай — У Михая \(6\) конфет, а у Бьянки \(1\).
  • в четвертом пакете конфет на \(3\), что нечётно, поэтому его берет Бьянка — У Михая \(6\) конфет, а у Бьянки — \(4\).

Поскольку у Михая всегда больше конфет, чем у Бьянки, эта перестановка подходит.

C. Найти и заменить

жадные алгоритмы реализация Строки *800

Вам дана строка \(s\), состоящая из строчных латинских букв. За одну операцию можно выбрать символ и заменить все вхождения этого символа на \(\texttt{0}\), или заменить все вхождения этого символа на \(\texttt{1}\).

Можно ли выполнить некоторое количество ходов так, чтобы в результате получилась чередующаяся бинарная строка\(^{\dagger}\)?

Например, рассмотрим строку \(\texttt{abacaba}\). Вы можете сделать следующие ходы:

  • Заменить \(\texttt{a}\) на \(\texttt{0}\). Тогда строка будет иметь вид \(\color{red}{\texttt{0}}\texttt{b}\color{red}{\texttt{0}}\texttt{c}\color{red}{\texttt{0}}\texttt{b}\color{red}{\texttt{0}}\).
  • Заменить \(\texttt{b}\) на \(\texttt{1}\). Тогда строка будет иметь вид \({\texttt{0}}\color{red}{\texttt{1}}{\texttt{0}}\texttt{c}{\texttt{0}}\color{red}{\texttt{1}}{\texttt{0}}\).
  • Заменить \(\texttt{c}\) на \(\texttt{1}\). Теперь строка имеет вид \({\texttt{0}}{\texttt{1}}{\texttt{0}}\color{red}{\texttt{1}}{\texttt{0}}{\texttt{1}}{\texttt{0}}\). Это чередующаяся бинарная строка.

\(^{\dagger}\)Чередующаяся бинарная строка — это такая строка из \(\texttt{0}\) и \(\texttt{1}\), что никакие два соседних символа не равны. Например, \(\texttt{01010101}\), \(\texttt{101}\), \(\texttt{1}\) являются чередующимися бинарными строками, а \(\texttt{0110}\), \(\texttt{0a0a0}\), \(\texttt{10100}\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2000\)) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит строку, состоящую из \(n\) строчных латинских букв — строка \(s\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить строку в чередующуюся бинарную строку, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Первый набор входных данных объясняется в условии.

Во втором наборе входных данных единственными возможными бинарными строками, которые вы можете получить, являются \(\texttt{00}\) и \(\texttt{11}\). Но они обе не являются чередующимися.

В третьем наборе входных данных можно получить \(\texttt{1}\), что является чередующейся бинарной строкой.

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\), поэтому разрешается вывести любое из них.

B. Точки на плоскости

Бинарный поиск жадные алгоритмы математика *1000

У вас есть двумерная координатная плоскость, и вам надо расставить \(n\) фишек на ней.

Вы можете ставить фишки только в точки с целочисленными координатами. Стоимость поставить фишку в точку \((x, y)\) равна \(|x| + |y|\) (где \(|a|\) означает абсолютное значение числа \(a\)).

Стоимость расстановки \(n\) фишек равна максимуму из стоимостей каждой фишки.

Вам нужно расставить \(n\) фишек на плоскости так, чтобы евклидово расстояние между любой парой фишек было строго больше \(1\) и стоимость расстановки была как можно меньше.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^{18}\)) — количество фишек, которое вам нужно расставить.

Выходные данные

Для каждого набора входных данных, выведите одно целое число — минимально возможную стоимость расстановки \(n\) фишек, если расстояние между каждой парой фишек должно быть строго больше \(1\).

Примечание

В первом наборе входных данных, вы можете разместить единственную фишку в точку \((0, 0)\) с общей стоимостью \(0 + 0 = 0\).

Во втором наборе, вы можете, например, поставить фишки в точки \((-1, 0)\), \((0, 1)\) и \((1, 0)\) со стоимостями \(|-1| + |0| = 1\), \(|0| + |1| = 1\) и \(|0| + |1| = 1\). Расстояние между каждой парой фишек больше чем \(1\) (например, расстояние между \((-1, 0)\) и \((0, 1)\) равно \(\sqrt{2}\)). Общая стоимость равна \(\max(1, 1, 1) = 1\).

В третьем наборе, вы можете, например, поставить фишки в точки \((-1, -1)\), \((-1, 1)\), \((1, 1)\), \((0, 0)\) и \((0, 2)\). Общая стоимость равна \(\max(2, 2, 2, 0, 2) = 2\).

C. Суммы на подмассивах

жадные алгоритмы Конструктив математика *1500

Для массива \(a = [a_1, a_2, \dots, a_n]\) определим его подмассив \(a[l, r]\) как массив \([a_l, a_{l+1}, \dots, a_r]\).

Например, у массива \(a = [1, -3, 1]\) \(6\) непустых подмассивов:

  • \(a[1,1] = [1]\);
  • \(a[1,2] = [1,-3]\);
  • \(a[1,3] = [1,-3,1]\);
  • \(a[2,2] = [-3]\);
  • \(a[2,3] = [-3,1]\);
  • \(a[3,3] = [1]\).

Даны два целых числа \(n\) и \(k\). Постройте массив \(a\) из \(n\) целых чисел, такой, что:

  • все элементы \(a\) от \(-1000\) до \(1000\);
  • у массива \(a\) ровно \(k\) подмассивов с положительными суммами;
  • у каждого из остальных \(\dfrac{(n+1) \cdot n}{2}-k\) подмассивов \(a\) отрицательная сумма.
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 30\); \(0 \le k \le \dfrac{(n+1) \cdot n}{2}\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — элементы массива, удовлетворяющего ограничениям задачи. Можно показать, что ответ всегда существует. Если ответов несколько, выведите любой из них.

D. Сортировка бинарной строки

жадные алгоритмы Конструктив *1800

Вам дана двоичная строка \(s\), состоящая только из символов 0 и/или 1.

Вы можете выполнить несколько (возможно, ноль) операций над строкой. Каждая операция имеет один из двух типов:

  • выбрать два соседних элемента строки и поменять их местами. Такой вид операции стоит \(10^{12}\) монет;
  • выбрать любой элемент строки и удалить его. Такой вид операции стоит \(10^{12}+1\) монет.

Ваша задача — определить минимальное количество монет, необходимое для сортировки строки \(s\) в порядке неубывания (т. е. преобразовать \(s\) таким образом, что \(s_1 \le s_2 \le \dots \le s_m\), где \(m\) — длина строки после применения всех операций). Пустая строка также считается отсортированной в порядке неубывания.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящую только из символов 0 и/или 1.

Сумма длин всех заданных строк не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество монет, необходимое для сортировки строки \(s\) в порядке неубывания.

Примечание

В первом примере необходимо удалить \(1\)-й элемент, чтобы строка стала равной 00.

Во втором примере строка уже отсортирована.

В третьем примере необходимо поменять местами \(2\)-й и \(3\)-й элементы, чтобы строка стала равной 0011.

В четвертом примере необходимо поменять местами \(3\)-й и \(4\)-й элементы, чтобы строка стала равной 00011101, а затем удалить \(7\)-й элемент, чтобы строка стала равной 0001111.

В пятом примере необходимо удалить \(1\)-й элемент, чтобы строка стала равной 001101, а затем удалить \(5\)-й элемент, чтобы строка стала равной 00111.

В шестом примере строка уже отсортирована.

F. Путешествие по Берляндии

Бинарный поиск графы жадные алгоритмы реализация Структуры данных *2500

В Берляндии \(n\) городов, расположенных по кругу и пронумерованных от \(1\) до \(n\) по часовой стрелке.

Мы хотим объехать всю Берляндию, начав в каком-то городе, посетив все остальные города и вернувшись в стартовый город. К сожалению, ехать мы можем только по Берляндской Кольцевой Автодороге, соединяющей все \(n\) городов. Проектировал дорогу очень титулованный и респектабельный министр, поэтому она односторонняя — по ней можно ехать только по часовой стрелке, то есть только из города \(i\) в город \((i \bmod n) + 1\) (т.е. из \(1\) в \(2\), из \(2\) в \(3\), ..., из \(n\) в \(1\)).

Бензобак машины вмещает до \(k\) литров бензина. На пути \(i\)-го города в следующий машина расходует \(a_i\) литров бензина.

В каждом городе есть заправка; литр бензина на заправке в \(i\)-м городе стоит \(b_i\) бурлей. Заправляться между городами нельзя; если бензин закончился между городами, то такая поездка считается незавершенной.

Для каждого города посчитайте минимальную стоимость путешествия, если оно должно начаться и закончиться в нем.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество городов и объем бензобака, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 2\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, где \(i\)-е из них равно минимальной стоимости путешествия, если начать и закончить в \(i\)-м городе.

A. Красивая последовательность

жадные алгоритмы Перебор *800

Массив из \(m\) чисел \(a_{1}, a_{2}, \ldots, a_{m}\) является хорошим тогда и только тогда, когда существует один или несколько \(i\) (\(1 \le i \le m\)), таких что \(a_{i} = i\).

Например, массив \([3,2,3]\) является хорошим, так как \(a_{2} = 2\), \(a_{3} = 3\), а массив \([3,1,1]\) не является, так как нет такого \(i\), что \(a_{i} = i\).

Массив \(a\) является красивым тогда и только тогда, когда существует такая подпоследовательность \(a\), что эта подпоследовательность хорошая. Например, \([4,3,2]\) является красивым массивом, так как его подпоследовательность \([4,2]\) хорошая, но \([5,3,4]\) не является красивым массивом.

Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) получается из \(a\) удалением нескольких (возможно, нуля или всех) элементов.

Теперь вам дан массив, проверьте, красивый он или нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(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 10^9\)).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES» или «NO» (без кавычек), показывая, красивый этот массив или нет.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных хорошей подпоследовательностью является \(b=[3,2]\), где \(b_{2} = 2\).

Во втором наборе входных данных хорошей подпоследовательностью является \(b=[2,4,3]\), где \(b_{3} = 3\).

В четвертом наборе входных данных хорошей подпоследовательностью является \(b=[1]\), где \(b_{1} = 1\).

В пятом наборе входных данных хорошей подпоследовательностью является \(b=[2,2]\), где \(b_{2} = 2\).

C. Сделайте перестановку

жадные алгоритмы Перебор сортировки *1300

У вас есть массив целых чисел \(a\) длины \(n\). Вы можете выполнять два вида операций.

  • Удалить целое число из \(a\). Эта операция стоит \(c\).
  • Вставить произвольное натуральное число \(x\) в любую позицию \(a\) (в начало, в конец или между любыми двумя соседними элементами). Эта операция стоит \(d\).

Вы хотите сделать конечный массив перестановкой любой положительной длины. Пожалуйста, выведите минимальную стоимость, чтобы сделать из массива перестановку. Обратите внимание, что вы можете сделать массив пустым во время операций, но окончательный массив должен содержать хотя бы одно целое число.

Перестановкой длины \(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\), \(c\), \(d\) (\(1 \le n \le 10^5\), \(1 \le c,d \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le 10^9\)).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную стоимость, которую нужно потратить, чтобы сделать из массива перестановку.

Примечание

В первом наборе входных данных массив уже является перестановкой, поэтому операции не нужны.

Во втором наборе входных данных мы можем удалить числа \(5\), \(6\) и получить перестановку \([1,2,3]\). Стоимость таких операций будет равна \(2\). Обратите внимание, что мы также можем получить перестановку, вставив число \(4\), но это стоит \(5\).

В третьем наборе входных данных мы можем просто удалить все числа, кроме первой \(1\). Это стоит \(8\), а окончательный массив \([1]\) представляет собой перестановку длины \(1\).

В четвертом наборе входных данных мы можем удалить все числа, кроме \(2\), и вставить одно число \(1\) на первую позицию. Это стоит \(4+10=14\), а окончательный массив \([1,2]\) представляет собой перестановку длины \(2\).

E. Монстры

графы жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2100

Вам дан неориентированный граф с \(n\) вершинами и \(m\) ребрами. Изначально для каждой вершины \(i\) существует монстр с опасностью \(a_{i}\) в этой вершине. Вы можете победить монстра с опасностью \(a_{i}\) тогда и только тогда, когда вы уже победили как минимум \(a_{i}\) других монстров.

Вы хотите победить всех монстров. Сначала вы выбираете некоторую вершину \(s\) и побеждаете монстра в этой вершине (поскольку вы еще не побеждали монстров, \(a_{s}\) должно быть равно \(0\)). Затем вы можете перемещаться в соседние вершины. Если вы хотите переместиться из вершины \(u\) в вершину \(v\), то должно выполняться следующее: либо монстр в вершине \(v\) уже побежден ранее, либо вы можете победить его сейчас. Во втором случае вы побеждаете монстра в вершине \(v\) и достигаете вершины \(v\). Вы можете проходить вершины и ребра любое количество раз.

Определите, сможете ли вы победить всех монстров или нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(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 n\)).

Следующие \(m\) строк содержат по два целых числа \(u\), \(v\) (\(1 \le u, v \le n\)), описывающих ребро между вершинами \(u\) и \(v\). Гарантируется, что в графе нет кратных ребер и петель.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого наборов входных данных выведите «YES», если вы можете победить всех монстров, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем начать с вершины \(3\), победить монстра в ней, затем перейти в вершины \(2\), \(1\) в этом порядке, победив монстров в них. Затем вернуться к вершине \(3\) и пойти к вершине \(4\), победив в ней монстра.

В третьем наборе входных данных нет пути к вершине \(4\), если мы начинаем с вершины \(1\). Также нет пути к вершинам \(1\), \(2\), \(3\), если мы начнем с вершины \(4\).

A. Вставь цифру

жадные алгоритмы математика Строки *800

У вас есть положительное число длины \(n\) и одна дополнительная цифра.

Вы можете вставить эту цифру в любое место в числе, в том числе в начало или в конец.

Ваша задача — сделать результат как можно больше.

Например, у вас есть число \(76543\), а дополнительная цифра равна \(4\). Тогда максимальное число, которое вы можете получить, равно \(765443\), и оно может быть получено двумя способами — вставкой цифры после \(3\)-й или после \(4\)-й цифры числа.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le d \le 9\)) — длину числа и дополнительную цифру соответственно.

Вторая строка описания каждого набора входных данных содержит строку, состоящую из \(n\) цифр — число, которое у вас есть изначально. Гарантируется, что число не содержит лидирующих нулей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, состоящую из \(n + 1\) цифры — максимально возможное число, которое можно получить.

C. Восстанови массив

жадные алгоритмы Конструктив *1100

У Кристины был массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел.

Она построила новый массив \(b\) длины \(n-1\), такой что \(b_i = \max(a_i, a_{i+1})\) (\(1 \le i \le n-1\)).

Например, пусть у Кристины был массив \(a\) = [\(3, 0, 4, 0, 5\)] длины \(5\). Тогда она сделала следующее:

  1. Посчитала \(b_1 = \max(a_1, a_2) = \max(3, 0) = 3\);
  2. Посчитала \(b_2 = \max(a_2, a_3) = \max(0, 4) = 4\);
  3. Посчитала \(b_3 = \max(a_3, a_4) = \max(4, 0) = 4\);
  4. Посчитала \(b_4 = \max(a_4, a_5) = \max(0, 5) = 5\).
В результате она получила массив \(b\) = [\(3, 4, 4, 5\)] длины \(4\).

Вам известен только массив \(b\). Найдите любой подходящий массив \(a\), который мог быть у Кристины изначально.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\), который был у Кристины изначально.

Во второй строке каждого набора входных данных записано ровно \(n-1\) целое неотрицательное число — элементы массива \(b\) (\(0 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\), и что массив \(b\) был получен корректным образом из некоторого массива \(a\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите ровно \(n\) целых неотрицательных чисел — элементы массива \(a\), который был у Кристины изначально.

Если возможных ответов несколько — выведите любой из них.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных мы действительно можем получить из массива \(a\) = [\(2, 2, 1, 1\)] массив \(b\) = [\(2, 2, 1\)]:

  • \(b_1 = \max(a_1, a_2) = \max(2, 2) = 2\);
  • \(b_2 = \max(a_2, a_3) = \max(2, 1) = 2\);
  • \(b_3 = \max(a_3, a_4) = \max(1, 1) = 1\).

В третьем наборе входных данных все элементы массива \(b\) являются нулями. Так как каждый \(b_i\) — максимум из двух соседних элементов массива \(a\), то массив \(a\) может состоять только целиком из нулей.

В четвертом наборе входных данных мы действительно можем получить из массива \(a\) = [\(0, 0, 3, 4, 3, 3\)] массив \(b\) = [\(0, 3, 4, 4, 3\)]:

  • \(b_1 = \max(a_1, a_2) = \max(0, 0) = 0\);
  • \(b_2 = \max(a_2, a_3) = \max(0, 3) = 3\);
  • \(b_3 = \max(a_3, a_4) = \max(3, 4) = 4\);
  • \(b_4 = \max(a_4, a_5) = \max(4, 3) = 4\);
  • \(b_5 = \max(a_5, a_6) = \max(3, 3) = 3\).

C. Параллельный поиск

жадные алгоритмы Конструктив сортировки *1500

Допустим, у вас есть \(n\) коробок. В \(i\)-й коробке бесконечно много шариков цвета \(i\). Иногда вам нужно получить шарик какого-то определенного цвета; но вы слишком ленивы, чтобы брать шарик из коробки самостоятельно.

Вы купили двух роботов, которые будут приносить вам шарики. Теперь этих роботов надо запрограммировать. Для этого вы должны сформировать два списка \([a_1, a_2, \dots, a_k]\) и \([b_1, b_2, \dots, b_{n-k}]\), где список \(a\) — это список коробок, назначенных первому роботу, а список \(b\) — коробки, назначенные второму роботу. Каждое целое число от \(1\) до \(n\) должно принадлежать ровно одному из этих списков.

Когда вы даете роботам команду «принести шарик цвета \(x\)», они выполняют ее следующим образом. Каждый робот проходится по тому списку коробок, который был назначен этому роботу (в том порядке, в котором коробки находятся в списке), и просматривает содержимое каждой коробки. Первый робот тратит \(s_1\) секунд, чтобы просмотреть содержимое коробки; второй робот тратит \(s_2\) секунд. Как только какой-то робот найдет коробку с шарами цвета \(x\) и просмотрит ее содержимое, поиск завершается. Время поиска — это количество секунд, прошедшее от начала поиска до того, как один из роботов просмотрит содержимое коробки \(x\). Если робот просмотрел все коробки, назначенные ему, после этого он ничего не делает.

Например, пусть \(s_1 = 2\), \(s_2 = 3\), \(a = [4, 1, 5, 3, 7]\), \(b = [2, 6]\). Если вы запросите шарик цвета \(3\), произойдет следующее:

  • сначала первый робот начнет просматривать коробку \(4\), а второй — коробку \(2\);
  • в конце \(2\)-й секунды первый робот закончит просматривать коробку \(4\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(1\);
  • в конце \(3\)-й секунды второй робот закончит просматривать коробку \(2\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(6\);
  • в конце \(4\)-й секунды первый робот закончит просматривать коробку \(1\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(5\);
  • в конце \(6\)-й секунды первый робот закончит просматривать коробку \(5\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(3\). В тот же самый момент второй робот закончит просматривать коробку \(6\). Это не та коробка, которая нужна, и второй робот закончил просматривать все назначенные ему коробки, поэтому больше он ничего не делает;
  • в конце \(8\)-й секунды первый робот закончит просматривать коробку \(3\). Это та коробка, которая вам нужна, поэтому поиск завершается;
  • итак, время поиска равно \(8\) секундам.

Вы планируете запросить шарик цвета \(1\) \(r_1\) раз, шарик цвета \(2\)\(r_2\) раз, и так далее. Составьте списки \(a\) и \(b\) таким образом, чтобы суммарное время поиска было как можно меньше.

Входные данные

В первой строке выведите одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке заданы три целых числа \(n\), \(s_1\), \(s_2\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le s_1, s_2 \le 10\));
  • во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^6\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки. В первой строке выведите список \(a\), во второй — список \(b\). Каждый список нужно вывести следующим образом: сначала размер списка, потом его элементы.

Если оптимальных ответов несколько, выведите любой из них.

A. Ян и сортировка массива

жадные алгоритмы математика *1300

Чтобы отблагодарить Яна, Мэри подарила ему массив \(a\) длины \(n\). Чтобы выглядеть умным, он хочет отсортировать массив в порядке неубывания, выполнив следующее конечное число раз: он выбирает два соседних элемента \(a_i\) и \(a_{i+1}\) (\(1\le i\le n-1\)), и увеличивает оба их на \(1\) или уменьшает оба их на \(1\). Заметим, что элементы массива могут стать отрицательными.

Как умный человек, вы заметили, что, существуют массивы, которые Ян не сможет отсортировать в порядке неубывания! Поэтому вы решили написать программу, чтобы определить, можно ли сделать массив отсортированным в неубывающем порядке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 3\cdot10^5\)) — количество элементов в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует последовательность операций, которая сделает массив отсортированным в порядке неубывания, иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем увеличить \(a_2\) и \(a_3\) на \(1\). Теперь массив стал \([1, 4, 3]\).

Затем мы можем уменьшить \(a_1\) и \(a_2\) на \(1\). Теперь массив стал \([0, 3, 3]\), который отсортирован в порядке неубывания. Поэтому ответ «YES».

Во втором наборе входных данных без разницы как Ян будет применять операции, \(a_1\) всегда останется больше \(a_2\). Поэтому ответ «NO», и Ян не сможет показаться умным.

В третьем наборе входных данных массив уже отсортирован в порядке неубывания, поэтому Яну не нужно ничего делать.

C. Между

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2200

Вам дано целое число \(n\), а также \(m\) пар целых чисел \((a_i,b_i)\), где \(1\leq a_i , b_i \leq n\), \(a_i \ne b_i\).

Вы хотите построить последовательность, удовлетворяющую следующим требованиям:

  • Все элементы последовательности являются целыми числами между \(1\) и \(n\).
  • Есть ровно один элемент со значением \(1\) в последовательности.
  • Для каждого \(i\) (\(1 \le i \le m\)), между любыми двумя элементами (на различных позициях) в последовательности со значениями \(a_i\), есть хотя бы один элемент со значением \(b_i\).
  • Построенная последовательность имеет максимальную длину среди всех последовательностей, удовлетворяющий вышеуказанным свойствам.

Иногда возможно, что такая последовательность может быть сколь угодно длинной, в таком случае вам нужно вывести «INFINITE». Иначе, вам нужно вывести «FINITE» и саму последовательность. Если существует несколько возможных последовательностей с максимальной длиной, выведите любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 300\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 1500\), \(0 \le m \le 5000\)) — максимально возможное значение элемента последовательности и количество пар.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i , b_i \le n\), \(a_i \ne b_i\)).

\((a_i, b_i) \ne (a_j, b_j)\) для всех \(1 \le i < j \le m\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1500\) и сумма \(m\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных на первой строке выведите «INFINITE», если последовательность может быть сколь угодно длинной, и «FINITE» иначе.

Если вы вывели «FINITE», то ваш вывод должен содержать ещё \(2\) строки.

Первая строка содержит целое число \(s\) — максимальную длину последовательности.

Вторая строка содержит \(s\) целых чисел, каждое со значением от \(1\) до \(n\) включительно, обозначающие элементы последовательности.

Если существует несколько последовательностей с максимальной длиной, выведите любую из них.

Можно доказать, что во всех наборах входных данных с ответом «FINITE», при данных ограничениях, максимально возможная сумма длин последовательностей в этих наборах входных данных не превосходит \(2\cdot10^6\).

Примечание

В первом наборе входных данных есть элемент \(1\) между двумя элементами со значением \(3\), и элемент \(1\) между двумя элементами со значением \(2\). Можно доказать, что не существует подходящих последовательностей длины более \(5\).

Во втором наборе входных данных \([1]\) является единственной возможной последовательностью, потому что должен быть ровно один элемент со значением \(1\) в последовательности.

В третьем наборе входных данных мы можем получить сколь угодно длинную последовательность вида \(1, 2, 2, 2, \ldots\).

B. Реконструкция таблицы

жадные алгоритмы Конструктив *1000

Рассмотрим таблицу размера \(2 \times n\), где \(n\) является чётным числом. Вы можете разместить числа \(1, 2, \ldots, 2n\) в таблице, используя каждое число ровно один раз.

Путём называется последовательность клеток, полученная последовательным переходом из клетки \((1, 1)\) вправо или вниз, пока клетка \((2, n)\) не будет достигнута. При этом путь не должен выходить за пределы таблицы.

Стоимостью пути называется знакопеременная сумма чисел, написанных в клетках пути. Иными словами, пусть числами, написанными в клетках, являются \(a_1, a_2, \ldots, a_k\) (в порядке посещения), тогда стоимостью является \(a_1 - a_2 + a_3 - a_4 + \ldots = \sum_{i=1}^k a_i \cdot (-1)^{i+1}\).

Разместите числа \(1, 2, \ldots, 2n\) в таблице так, чтобы минимальная стоимость по всем путям от \((1, 1)\) до \((2, n)\) была максимальна. Если существует несколько таких таблиц с максимальным значением, выведите любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\), \(n\) чётно) — количество столбцов в таблице.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) строки, каждая из которых содержит \(n\) целых чисел — искомую таблицу. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входные данных есть только два пути из клетки \((1, 1)\) в клетку \((2, 2)\). Их стоимости равны \(3-1+4=6\) и \(3-2+4=5\). Тогда минимальная стоимость равна \(5\), что является максимально возможным значением.

Во втором наборе входных данных есть четыре пути из клетки \((1, 1)\) в клетку \((2, 4)\). Их стоимости равны \(8-1+5-3+7=16\), \(8-2+5-3+7=15\), \(8-2+6-3+7=16\) и \(8-2+6-4+7=15\). Тогда минимальная стоимость равна \(15\), что является максимально возможным значением.

A. Почти возрастающая подпоследовательность

Бинарный поиск жадные алгоритмы Структуры данных *1500

Последовательность называется почти возрастающей, если она не содержит трех идущих подряд элементов \(x, y, z\) таких, что \(x\ge y\ge z\).

Вам дан массив \(a_1, a_2, \dots, a_n\) и \(q\) запросов.

Каждый запрос состоит из двух целых чисел \(1\le l\le r\le n\). Для каждого запроса найдите длину самой длинной почти возрастающей подпоследовательности подмассива \(a_l, a_{l+1}, \dots, a_r\).

Подпоследовательность — это последовательность, которая может быть получена из данной последовательности путем удаления нуля или более элементов без изменения порядка оставшихся элементов.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 200\,000\)) — длину массива \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\))  — значения массива \(a\).

Каждая из следующих \(q\) строк содержит описание запроса. Каждая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) — запрос, относящийся к подмассиву \(a_l, a_{l+1}, \dots, a_r\).

Выходные данные

Для каждого из \(q\) запросов выведите строку, содержащую длину самой длинной почти возрастающей подпоследовательности подмассива \(a_l, a_{l+1}, \dots, a_r\).

Примечание

В первом запросе подмассив состоит из элементов \(a_1, a_2, a_3 = [1,2,4]\). Весь подмассив является почти возрастающим, поэтому ответ равен \(3\).

Во втором запросе подмассив состоит из элементов \(a_1, a_2, a_3,a_4 = [1,2,4,3]\). Весь подмассив является почти возрастающим, потому что нет трех подряд идущих элементов таких, что \(x \geq y \geq z\). Таким образом, ответ равен \(4\).

В третьем запросе подмассив состоит из элементов \(a_2, a_3, a_4, a_5 = [2, 4, 3, 3]\). Весь подмассив не является почти возрастающим, потому что последние три элемента удовлетворяют условию \(4 \geq 3 \geq 3\). Почти возрастающую подпоследовательность длиной \(3\) можно найти (например, взяв элементы \(a_2,a_3,a_5 = [2,4,3]\)). Таким образом, ответ равен \(3\).

E. Полусумма

жадные алгоритмы Перебор разделяй и властвуй *3400

Вам дано мультимножество неотрицательных целых чисел \(\{a_1, a_2, \dots, a_n\}\).

Вы можете выбрать два элемента \(x\) и \(y\) из мультимножества, удалить их и вставить их полусумму \(\frac{x + y}{2}\) обратно в мультимножество.

Вы повторяете описанное выше действие до тех пор, пока не останется только два числа \(A\) и \(B\). Каково максимально возможное значение их абсолютной разности \(|A-B|\)?

Поскольку ответ не является целым числом, выведите его по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — размер мультимножества.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы мультимножества.

Гарантируется, что сумма \(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}\).

Примечание

В первом примере вы не можете выполнить никаких операций, поэтому ответ равен \(|7-3|=4\).

Во втором примере одна из оптимальных последовательностей операций выглядит так:

  1. Замените \(1\) и \(2\) на \(1.5\);
  2. Замените \(10\) и \(11\) на \(10.5\);
  3. Разница между \(1.5\) и \(10.5\) равна \(9\).

В третьем примере точный ответ равен \(\frac{3}{2}\), и \(500\,000\,005 \cdot 2 \equiv 3 \pmod{10^9+7}\).

A. Политика

жадные алгоритмы реализация *800

Клуб дебатов с \(n\) участниками, включая вас (участник \(1\)), сегодня последовательно обсудит \(k\) мнений. Во время каждого обсуждения участники выразят свое согласие или несогласие с мнением. Обозначим количество участников, которые согласны, как \(Y\), а количество участников, которые не согласны, как \(N\). После каждого обсуждения участники покидают клуб в соответствии со следующими правилами:

  • Если больше участников согласны с мнением, чем не согласны (\(Y > N\)), все участники, которые не согласны, покидают клуб.
  • Если больше участников не согласны с мнением, чем согласны (\(Y < N\)), все участники, которые согласны, покидают клуб.
  • В случае ничьей (\(Y = N\)), все участники покидают клуб.

Как президент клуба, вы хотите остаться в клубе и максимизировать количество участников, оставшихся после встречи. Вы знаете позицию каждого участника по всем \(k\) мнениям до начала встречи, и вы можете исключить любых участников (кроме себя самого) перед началом встречи.

Определите максимальное количество участников, включая вас, которые могут остаться в клубе после встречи, при условии, что вы также останетесь в клубе после встречи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\)) — количество участников и количество обсуждений.

\(i\)-я из следующих \(n\) строк содержит строку \(t_i\) длины \(k\). \(j\)-й символ в строке \(t_i\) указывает, согласится ли \(i\)-й участник или не согласится с \(j\)-м мнением, если он будет присутствовать во время его обсуждения. Символ «+» означает, что участник согласен, а символ «-» означает, что участник не согласен.

Гарантируется, что сумма значений \(n \cdot k\) по всем наборам входных данных не превышает \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество участников, включая вас, которые могут остаться в клубе после встречи.

Примечание

Для удобства, в примерах ниже мы будем разбирать ситуации, опираясь на то, кто пришел на встречу (т. е. не был исключен перед ней), а не на то, кто был исключён.

Пример 1:

На встречу мог прийти только первый участник, иначе оба участника ушли бы после обсуждения второго мнения.

Пример 2:

На встречу приходит только один участник и остается до конца.

Пример 3:

В клубе \(4\) участника, и только одно мнение будет обсуждаться во время встречи. Проанализируем возможные исходы в зависимости от участников на встрече:

  • Если придет только первый участник, после встречи он останется один.
  • Если первый участник придет со вторым или третьим участником, в обсуждении будет ничья, и они оба уйдут.
  • Если первый участник придет со вторым и третьим участниками, первый участник окажется в меньшинстве и уйдет после обсуждения, что противоречит условию.
  • Если придут первый и четвертый участники, они согласятся во время обсуждения и оба останутся до конца.
  • Если придут первый, второй и четвертый участники, второй участник окажется в меньшинстве во время обсуждения, и после него останутся только первый и четвертый участники. То же самое произойдет, если второго участника заменить на третьего.
  • Если придут все четыре участника, во время обсуждения будет ничья, и все уйдут.

Максимальное количество участников, оставшихся после встречи, составляет \(2\).

Пример 4:

В клубе \(5\) участников, и во время встречи будут обсуждаться \(4\) мнения.

Один из способов достичь максимального количества участников — если на встречу придут только первый, третий и пятый участники. В этом случае все они согласятся во время первых двух обсуждений, после чего третий участник окажется в меньшинстве во время третьего обсуждения. Затем первый и пятый участники согласятся в последнем обсуждении, и эти два участника останутся до конца встречи.

Пример 5:

В клубе \(4\) участника, и будут обсуждаться \(2\) мнения.

Если на встречу придут первые три участника, первый участник окажется в меньшинстве во время первого обсуждения и покинет клуб. После этого второй и третий участники будут не согласны со вторым мнением, и они оба останутся до конца встречи. Таким образом, после встречи останется 2 участника, но это недопустимый исход, так как это вынуждает первого участника уйти. Следовательно, максимальное количество в 1 участник достигается, если на встречу придет только первый участник.

A. Конструктивная задача

жадные алгоритмы Перебор *1300

Как известно, любая задача, в которой не требуется использовать сложные структуры данных, считается конструктивной. Вам предлагается решить одну из таких задач.

Дан массив \(a\) из \(n\) целых неотрицательных чисел. Вам разрешается ровно один раз выполнить следующую операцию: выбрать какой-то непустой подотрезок \(a_l, a_{l+1}, \ldots, a_r\) массива \(a\) и целое неотрицательное число \(k\), и присвоить значение \(k\) всем элементам массива на выбранном подотрезке.

Требуется выяснить, можно ли увеличить \(\operatorname{MEX}(a)\) ровно на единицу, проделав такую операцию. Другими словами, если до выполнения операции выполнялось \(\operatorname{MEX}(a) = m\), то после операции должно быть верно, что \(\operatorname{MEX}(a) = m + 1\).

Напомним, что \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — размер массива \(a\).

Вторая строка каждого набора данных содержит \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если можно увеличить \(\operatorname{MEX}(a)\) ровно на единицу, выполнив операцию из условия ровно один раз, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных \(\operatorname{MEX}(a) = 0\). Если присвоить всем элементам \(a\) значение \(0\), то \(\operatorname{MEX}\) полученного массива будет равен \(1\), и тем самым увеличится на единицу.

Во втором наборе входных данных \(\operatorname{MEX}(a) = 1\). Если присвоить значение \(1\) элементам \(a\) на отрезке от \(2\) до \(3\), то получится массив \([0, 1, 1, 0]\), для которого \(\operatorname{MEX}\) равен \(2\), и тем самым увеличился на единицу по сравнению с изначальным.

Можно показать, что в третьем и четвертом наборах входных данных невозможно выполнить операцию, чтобы значение \(\operatorname{MEX}(a)\) увеличилось ровно на единицу.

B. Мясник

геометрия жадные алгоритмы реализация сортировки *1900

Антон играет в свою любимую игру «Защита древних 2» за своего любимого героя — Мясника. Сейчас он хочет приготовить себе ужин. Для этого он возьмет прямоугольник высоты \(h\) и ширины \(w\), затем проведет вертикальный или горизонтальный разрез так, чтобы обе получившиеся части имели целые стороны. После этого одну из частей он положит в ящик, а другую снова разрежет, и так далее.

Более формально, прямоугольник размера \(h \times w\) можно разрезать на две части размеров \(x \times w\) и \((h - x) \times w\), где \(x\) является целым числом от \(1\) до \((h - 1)\), или же на две части размеров \(h \times y\) и \(h \times (w - y)\), где \(y\) является целым числом от \(1\) до \((w - 1)\).

Эту операцию он повторит \(n - 1\) раз, после чего оставшийся прямоугольник тоже положит в ящик. Таким образом, в ящике будет \(n\) прямоугольников, из которых \(n - 1\) прямоугольник был отложен в результате разрезов, а \(n\)-й прямоугольник — тот, что остался в руках Мясника после всех \(n - 1\) разрезов.

К сожалению, Мясник забыл числа \(h\) и \(w\), однако у него сохранились \(n\) прямоугольников, перемешанных в произвольном порядке. Обратите внимание, что Мясник не поворачивал прямоугольники, но, возможно, переупорядочил их. Теперь он хочет узнать все возможные пары \((h, w)\), из которых можно получить данный набор прямоугольников. А вы должны ему в этом помочь!

Гарантируется, что существует хотя бы одна пара \((h, w)\), из которой можно получить данный набор прямоугольников.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество полученных прямоугольников.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)) — высота и ширина \(i\)-го прямоугольника.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(m\) — количество пар \((h, w)\), обозначающих размеры прямоугольников, из которых можно получить данные прямоугольники. Два прямоугольника считаются различными, если у них отличается длина или ширина.

В каждой из следующих \(m\) строк выведите два целых числа \(h_i\) и \(w_i\)  — высоту и ширину прямоугольника, из которого можно получить данные прямоугольники. Вы можете выводить прямоугольники в любом порядке.

Примечание

В первом наборе входных данных у Мясника мог быть только прямоугольник размером \(4 \times 5\). Тогда разрезы могли бы выглядеть следующим образом (сначала был сделан зеленый разрез, затем красный):

Во втором наборе входных данных у Мясника мог быть либо прямоугольник размером \(1 \times 3\), либо \(3 \times 1\). Разрезы выглядели бы так (сначала был сделан зеленый разрез, затем красный):

В третьем наборе входных данных Мясник не делал ни одного разреза, поэтому прямоугольник имеет размер \(10 \times 10\).

C. Оптимальная сумма

жадные алгоритмы Структуры данных *2000

Перед Вами вновь задача на массивы. Вам задан массив a состоящий из n целых чисел a1, a2, ..., an, а также целое положительное число len. Введем две характеристики для заданного массива.

  • Рассмотрим произвольный отрезок массива длины len, начинающийся в позиции i. Величину , назовем модульной суммой на выбранном отрезке. Другими словами, модульная сумма — это сумма чисел на выбранном отрезке длины len, взятая по модулю.
  • Величину назовем оптимальной суммой массива. Другими словами, оптимальная сумма массива — это максимальная из модульных сумм на всевозможных отрезках массива длины len.

В задаче от Вас требуется посчитать оптимальную сумму заданного массива a. Однако, прежде чем производить вычисления, Вам разрешено произвести не более k последовательных операций с этим массивом следующего вида: за одну операцию разрешается взять произвольное число массива ai и умножить его на -1. Другими словами, не более k раз разрешается взять произвольное число массива ai и заменить его на  - ai. Каждое число массива разрешается выбирать произвольное количество раз.

Требуется посчитать максимально возможную оптимальную сумму массива после выполнения не более k операций, указанных выше.

Входные данные

В первой строке заданы два целых числа n, len (1 ≤ len ≤ n ≤ 105) — количество элементов в массиве и длина выбираемого подотрезка массива, соответственно.

Во второй строке задана последовательность из n целых чисел a1, a2, ..., an (|ai| ≤ 109) — исходный массив.

В третьей строке задано единственное целое число k (0 ≤ k ≤ n) — допустимое количество операций.

Все числа в строках разделены ровно одним пробелом.

Выходные данные

В единственной строке выведите максимально возможную оптимальную сумму после выполнения не более k допустимых операций.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

B. Отсортируй подмассив

жадные алгоритмы Перебор *1100

У Монокарпа был массив \(a\) из \(n\) целых чисел. Он решил выбрать два целых числа \(l\) и \(r\), такие, что \(1 \le l \le r \le n\), и отсортировать подмассив \(a[l..r]\) (подмассив \(a[l..r]\) — это подотрезок массива \(a\), содержащий элементы \(a_l, a_{l+1}, a_{l+2}, \dots, a_{r-1}, a_r\)) в порядке неубывания. После сортировки подмассива Монокарп получил новый массив, который мы обозначим за \(a'\).

Например, если \(a = [6, 7, 3, 4, 4, 6, 5]\), и Монокарп выбрал \(l = 2, r = 5\), то \(a' = [6, 3, 4, 4, 7, 6, 5]\).

Вам даны массивы \(a\) и \(a'\). Найдите такие целые числа \(l\) и \(r\), которые мог выбрать Монокарп. Если пар чисел \((l, r)\) несколько, выберите пару, соответствующую подмассиву наибольшей длины.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\));
  • во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\));
  • в третьей строке заданы \(n\) целых чисел \(a'_1, a'_2, \dots, a'_n\) (\(1 \le a'_i \le n\)).

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\);
  • существует способ получить массив \(a'\), отсортировав один подмассив в массиве \(a\);
  • \(a' \ne a\) (есть хотя бы одна позиция, в которой эти массивы различаются).
Выходные данные

Для каждого набора входных данных выведите два целых числа — значения \(l\) и \(r\) (\(1 \le l \le r \le n\)). Если ответов несколько, выведите пару чисел, соответствующую наиболее длинному подмассиву. Если ответов все еще несколько, выведите любой из них.

D. Черные клетки

Бинарный поиск жадные алгоритмы математика Перебор *1900

Вы играете с очень длинной полоской, состоящей из \(10^{18}\) белых клеток и пронумерованной слева направо числами \(0\), \(1\), \(2\) и так далее. Вы управляете особым указателем, который первоначально указывает на клетку \(0\). Также у вас есть кнопка «Shift», которую вы можете зажимать.

За один шаг, вы можете сделать одно из трех действий:

  • сдвинуть указатель вправо (из клетки \(x\) в клетку \(x + 1\));
  • нажать и держать кнопку «Shift»;
  • отпустить кнопку «Shift»: в момент, когда вы отпустите Shift, все клетки, которые были посещены с зажатым Shift, будут покрашены в черный.
(Конечно же, вы не можете нажать на уже зажатый Shift. Аналогично, вы не можете отпустить уже отпущенный Shift.)

Ваша задача — покрасить хотя бы \(k\) клеток, но есть ограничение: вам заданы \(n\) отрезков \([l_i, r_i]\) — вы можете красить только клетки, которые принадлежат этим отрезкам, т. е. вы можете покрасить клетку \(x\) только если \(l_i \le x \le r_i\) для некоторого \(i\).

Какое наименьшее количество шагов вам нужно выполнить, чтобы покрасить хотя бы \(k\) клеток в черный?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество отрезков и желаемое количество черных клеток.

Во второй строке заданы \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_1 < l_2 < \dots < l_n \le 10^9\)), где \(l_i\) — это левая граница \(i\)-го отрезка.

В третьей строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^9\); \(l_i \le r_i < l_{i + 1} - 1\)), где \(r_i\) — это правая граница \(i\)-го отрезка.

Дополнительные ограничения на входные данные:

  • каждая клетка принадлежит не более чем одному отрезку;
  • сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите наименьшее количество шагов, необходимых для покраски хотя бы \(k\) клеток в черный, или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных, одна из оптимальных стратегий — следующая:

  1. Сдвинуть вправо: указатель сдвигается в ячейку \(1\);
  2. Зажать Shift;
  3. Отпустить Shift: клетка \(1\) покрасится в черный;
  4. Сдвинуть вправо: указатель сдвигается в ячейку \(2\);
  5. Сдвинуть вправо: указатель сдвигается в ячейку \(3\);
  6. Зажать Shift;
  7. Сдвинуть вправо: указатель сдвигается в ячейку \(4\);
  8. Отпустить Shift: клетки \(3\) и \(4\) покрасятся в черный.
Мы покрасили \(3\) клетки за \(8\) шагов.

Во втором наборе входных данных, мы можем покрасить только \(8\) клеток, а нам нужно покрасить \(20\) клеток.

В третьем наборе, одна из оптимальных стратегий — следующая:

  1. Сдвинуть вправо: указатель сдвигается в ячейку \(1\);
  2. Сдвинуть вправо: указатель сдвигается в ячейку \(2\);
  3. Сдвинуть вправо: указатель сдвигается в ячейку \(3\);
  4. Зажать Shift;
  5. Сдвинуть вправо: указатель сдвигается в ячейку \(4\);
  6. Сдвинуть вправо: указатель сдвигается в ячейку \(5\);
  7. Отпустить Shift: клетки \(3\), \(4\) и \(5\) покрасятся в черный.
Мы покрасили \(3\) клетки за \(7\) шагов.

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\) действий.

B. Карина и массив

жадные алгоритмы математика сортировки *800

У Карины есть массив из \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\). Она очень любит перемножать числа, поэтому она решила, что красота пары чисел — это их произведение. А красота массива — это максимальная красота пары соседних элементов в массиве.

Например, для \(n = 4\), \(a=[3, 5, 7, 4]\) красота массива равняется \(\max\)(\(3 \cdot 5\), \(5 \cdot 7\), \(7 \cdot 4\)) = \(\max\)(\(15\), \(35\), \(28\)) = \(35\).

Карина очень хочет, чтобы ее массив был максимально красивым. Для того чтобы достигнуть своей цели, она может удалить из массива некоторые элементы (или не удалять ничего). После удаления в массиве должно остаться хотя бы два элемента.

К сожалению, Карина не успевает сделать все свои дела, поэтому она просит вас посчитать максимальную красоту массива, которую она может получить, удалив произвольное число элементов (возможно, ни одного).

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке набора содержится \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Cумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор — максимальной красотой массива, которую сможет получить Карина.

Примечание

В первом наборе входных данных примера для получения максимальной красоты нужно удалить \(2\)-й элемент.

Во втором и третьем наборах входных данных примера не нужно делать удалений для достижения максимальной красоты.

В четвертом наборе входных данных примера необходимо оставить только первый и последний элементы.

E. Делаем антипалиндромы

жадные алгоритмы математика Строки *1600

Вам дана строка \(s\), состоящая из строчных букв латинского алфавита. За одну операцию вы можете поменять местами любые два символа в строке \(s\).

Строка \(s\) длины \(n\) называется антипалиндромом, если \(s[i] \ne s[n - i + 1]\) для каждого \(i\) (\(1 \le i \le n\)). Например, строки «codeforces», «string» являются антипалиндромами, а строки «abacaba», «abc», «test» — не являются.

Определите минимальное число операций, необходимое, чтобы сделать из строки \(s\) антипалиндром, или выведите \(-1\), если это невозможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Cумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимое, чтобы сделать из строки \(s\) антипалиндром, или \(-1\), если это невозможно.

Примечание

В первом примере строка «codeforces» изначально является антипалиндромом, поэтому ответом является \(0\).

Во втором примере можно показать, что строку «abc» нельзя сделать антипалиндромом с помощью таких операций, поэтому ответом является \(-1\).

В третьем примере в строке «taarrrataa» достаточно переставить местами второй и пятый символы, и новая строка «trararataa» будет антипалиндромом, поэтому ответом является \(1\).

C. Сильно составные

жадные алгоритмы математика теория чисел *1300

Простое число — это целое число большее \(1\), которое имеет ровно два делителя. Например, число \(7\) простое, так как имеет два делителя \(\{1, 7\}\). Составное число — это целое число большее \(1\), которое имеет более двух различных делителей.

Обратите внимание, что число \(1\) не является ни простым, ни составным.

Рассмотрим составное число \(v\). Оно имеет несколько делителей: некоторые делители простые, остальные сами составные. Если число простых делителей числа \(v\) меньше или равно числу составных делителей, назовем число \(v\) сильно составным.

Например, число \(12\) имеет \(6\) делителей: \(\{1, 2, 3, 4, 6, 12\}\), два делителя \(2\) и \(3\) — простые, в то время как три делителя \(4\), \(6\) и \(12\) — составные. Поэтому, число \(12\) сильно составное. Другие примеры сильно составных чисел: \(4\), \(8\), \(9\), \(16\) и так далее.

С другой стороны, делители числа \(15\) — это \(\{1, 3, 5, 15\}\): \(3\) и \(5\) простые, \(15\) составное. Поэтому, число \(15\) не сильно составное. Другие примеры: \(2\), \(3\), \(5\), \(6\), \(7\), \(10\) и так далее.

Вам даны \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(a_i > 1\)). Вам необходимо построить массив \(b_1, b_2, \dots, b_k\) который удовлетворяет следующим условиям:

  • Произведение всех элементов массива \(a\) равно произведению всех элементов массива \(b\): \(a_1 \cdot a_2 \cdot \ldots \cdot a_n = b_1 \cdot b_2 \cdot \ldots \cdot b_k\);
  • Все элементы массива \(b\) целые больше \(1\) и являются сильно составными;
  • Размер \(k\) массива \(b\) максимально возможный.

Найдите размер \(k\) массива \(b\), или сообщите, что нет массива \(b\) удовлетворяющего условиям.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots a_n\) (\(2 \le a_i \le 10^7\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите размер \(k\) массива \(b\), или \(0\), если нет массива \(b\) удовлетворяющего условиям.

Примечание

В первом набор мы можем получить массив \(b = [18]\): \(a_1 \cdot a_2 = 18 = b_1\); \(18\) является сильно составным числом.

Во втором наборе мы можем получить массив \(b = [60]\): \(a_1 \cdot a_2 \cdot a_3 = 60 = b_1\); \(60\) является сильно составным числом.

В третьем наборе нет массива \(b\) удовлетворяющего условиям.

В четвертом наборе мы можем получить массив \(b = [4, 105]\): \(a_1 \cdot a_2 \cdot a_3 = 420 = b_1 \cdot b_2\); \(4\) и \(105\) являются сильно составными числами.

A. LuoTianyi и шоу

жадные алгоритмы реализация *1400

В шоу о VOCALOID принимают участие \(n\) человек. Они будут сидеть в ряду с сиденьями, пронумерованными от \(1\) до \(m\) слева направо.

Все \(n\) людей приходят и садятся по порядку. Каждый человек занимает место одним из трёх способов:

  1. Сесть на соседнее слева место от самого левого человека, который уже сидит, или, если место \(1\) занятно, то покинуть шоу. Если сейчас никто не сидит, то занять место с номером \(m\).
  2. Сесть на соседнее справа место от самого правого человека, который уже сидит, или, если место \(m\) занятно, то покинуть шоу. Если сейчас никто не сидит, то занять место с номером \(1\).
  3. Сесть на место с номером \(x_i\). Если это место занято, то покинуть шоу.

Теперь вы хотите узнать, каково максимальное количество тех, кто может занять место, если вы можете впустить людей на шоу в любом порядке?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество людей и количество мест.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(-2 \le x_i \le m\), \(x_i \ne 0\)), \(i\)-е из которых описывает способ, как \(i\)-й человек занимает место:

  1. Если \(x_i=-1\), то \(i\)-й человек занимает место первым способом.
  2. Если \(x_i=-2\), то \(i\)-й человек занимает место вторым способом.
  3. Если \(x_i > 0\), то \(i\)-й человек занимает место третьим способом, т.е. хочет сесть на место с номером \(x_i\) или покинуть шоу, если оно занято.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное количество человек, которые могут занять место.

Примечание

В первом наборе входных данных все люди хотят занять место \(5\), поэтому только \(1\) человек сможет занять место.

Во втором наборе входных данных людей можно впустить в порядке \(1, 2, 3, 4\), тогда все люди, кроме последнего, смогут занять место.

В третьем наборе входных данных мы можем впускать людей на шоу в таком порядке:

Впустим третьего человека:

3

Впустим четвёртого человека:

34

Впустим пятого человека:

345

Впустим первого человека:

1345

Впустим второго человека:

21345

Таким образом, все \(5\) человек заняли места.

В пятом наборе входных данных мы можем впускать людей на шоу в таком порядке:

Впустим четвёртого человека:

4

Впустим третьего человека:

34

Впустим шестого человека, он покинет шоу, потому что занимает место третьим способом и должен сесть на место \(4\), но оно уже занято:

34

Впустим пятого человека:

534

Впустим первого человека:

1534

Впустим второго человека:

21534

Таким образом, \(5\) человек заняли места.

В седьмом наборе входных данных мы можем впускать людей на шоу в таком порядке:

Впустим третьего человека:

3

Впустим четвёртого человека:

34

Впустим пятого человека:

345

Впустим шестого человека:

3456

Впустим первого человека:

34561

Впустим второго человека, он покинет шоу, потому что занимает место первым способом, но место \(1\) занято:

34561

Таким образом, \(5\) человек заняли места.

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\) обозначает операцию побитового исключающего ИЛИ.

A. LuoTianyi и строка-палиндром

жадные алгоритмы Строки *800

LuoTianyi дала вам палиндром\(^{\dagger}\) \(s\), и она хочет, чтобы вы нашли длину самой большой непустой подпоследовательности\(^{\ddagger}\) \(s\), которая не является палиндромом. Если таких подпоследовательностей нет, выведите \(-1\).

\(^{\dagger}\) Палиндромом называется строка, которая читается одинаково как слева направо, так и справа налево. Например, строки «z», «aaa», «aba», «abccba» являются палиндромами, а строки «codeforces», «reality», «ab» не являются.

\(^{\ddagger}\) Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из \(b\). Например, строки «a», «aaa», «bab» являются подпоследовательностями строки «abaab», но строки «codeforces», «bbb», «h» не являются.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит единственную строку \(s\) (\(1 \le |s| \le 50\)), состоящую из строчных латинских букв, — строку, которую LuoTianyi дала вам. Гарантируется, что \(s\) является палиндромом.

Выходные данные

Для каждого набора входных данных выведите одно целое число — длину самой длинной непустой подпоследовательности, не являющейся строкой-палиндромом. Если такой подпоследовательности нет, выведите \(-1\).

Примечание

В первом наборе входных данных «abcaba» является подпоследовательностью «abacaba», так как мы можем удалить третью букву «abacaba», чтобы получить «abcaba», а «abcaba» не является строкой-палиндромом. Мы можем доказать, что «abcaba» является примером самой длинной подпоследовательности «abacaba», не являющейся палиндромом, так что ответ равен \(6\).

Во втором наборе входных данных мы можем получить только «a» и «aa», но все они являются строками-палиндромами, поэтому ответ равен \(-1\).

B. LuoTianyi и таблица

жадные алгоритмы математика *1000

LuoTianyi дала массив \(b\) из \(n \cdot m\) целых чисел. Она просит вас построить таблицу \(a\) размера \(n \times m\), заполненную этими \(n \cdot m\) числами, при этом каждый элемент массива должен быть использован ровно один раз. Также она попросила, чтобы следующее значение было максимально:

\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\left(\max\limits_{1 \le x \le i, 1 \le y \le j}a_{x,y}-\min\limits_{1 \le x \le i, 1 \le y \le j}a_{x,y}\right)\)

Это означает, что мы рассматриваем \(n \cdot m\) подтаблиц с левым верхним углом в \((1,1)\) и правым нижним углом в \((i, j)\) (\(1 \le i \le n\), \(1 \le j \le m\)), вычисляем для каждой такой подтаблицы разность максимального и минимального элементов в ней, после чего суммируем все эти разности. Вы должны максимизировать получившуюся сумму.

Помогите ей найти максимально возможное такое значение, саму таблицу вам при этом восстанавливать не нужно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 100\)) — количество строк и столбцов таблицы.

Вторая строка каждого набора входных данных содержит \(n \cdot m\) целых чисел \(b_1, b_2, \ldots, b_{n\cdot m}\) (\(-10^5 \le b_{i} \le 10^5\)) — числа, которые вы должны записать в таблицу.

Обратите внимание, что числа в массиве \(b\) могут быть отрицательными.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение, которое можно получить.

Примечание

В первом наборе входных данных таблица выглядит так:

41
13

В подтаблице с правым нижним углом в \((1, 1)\) разность максимального и минимального элементов равна \(4 - 4 = 0\).

В подтаблице с правым нижним углом в \((1, 2)\) разность максимального и минимального элементов равна \(4 - 1 = 3\).

В подтаблице с правым нижним углом в \((2, 1)\) разность максимального и минимального элементов равна \(4 - 1 = 3\).

В подтаблице с правым нижним углом в \((2, 2)\) разность максимального и минимального элементов равна \(4 - 1 = 3\).

Тогда максимально возможное значение равно \(0+3+3+3=9\).

Во втором наборе входных данных все элементы равны, поэтому все разности равны \(0\), и ответ равен \(0\).

A. Trust Nobody

жадные алгоритмы Перебор реализация сортировки *1200

Есть группа из \(n\) человек. Некоторые из них могут быть лжецами, которые всегда лгут. Остальные люди всегда говорят правду. \(i\)-й человек сказал: «Среди нас не менее \(l_i\) лжецов». Определите, является ли сказанное людьми противоречивым, или это возможно. Если это возможно, выведите количество лжецов в группе. Если ответов несколько, вы можете вывести любой из них.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 100\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_i\) (\(0 \leq l_i \leq n\)) — число, которое сказал \(i\)-й человек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число. Если сказанное людьми противоречиво, выведите \(-1\). Иначе выведите количество лжецов в группе. Если ответов несколько, вы можете вывести любой из них.

Примечание

В первом примере единственный возможной ответ, это что лжет второй человек, откуда ответ \(1\) лжец.

Во втором примере можно показать, что невозможно выбрать лжецов, так чтобы все высказывания удовлетворяли условию.

В третьем примере все говорят правду, откуда ответ \(0\) лжецов.

C. Dreaming of Freedom

жадные алгоритмы математика теория чисел *1300

Because to take away a man's freedom of choice, even his freedom to make the wrong choice, is to manipulate him as though he were a puppet and not a person.
— Madeleine L'Engle

Есть \(n\) программистов, которые выбирают свой любимый алгоритм из \(m\) вариантов выбора. Перед первым раундом доступны все \(m\) вариантов выбора. В каждом раунде каждый программист голосует за один из оставшихся алгоритмов. После раунда остаются только те алгоритмы, за которые проголосовало максимальное число человек. Процесс голосования завершается, когда остается только один алгоритм. Определите, может ли процесс голосования длиться вечно, или вне зависимости от голосов они выберут один вариант за некоторое конечное число раундов?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — число наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой написаны два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^6\)) — число людей и вариантов выбора соответственно.

Выходные данные

Для каждого набора вxодных данных выведите «YES», если программисты в конечном итоге выберут один вариант, и «NO» иначе.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере программисты могут проголосовать \(8\)-ю способами — \(\{1|1|1, 1|1|2, 1|2|1, 1|2|2, 2|1|1, 2|1|2, 2|2|1, 2|2|2\}\).

В случаях \(1\), \(2\), \(3\) и \(5\) остается только первый алгоритм, а в остальных случаях остается только второй, поэтому голосование в любом случае заканчивается за один раунд.

Во втором примере программисты могут бесконечно голосовать \(1|1|2|2\). В таком случае оба алгоритма получают максимальное число голосов, и остаются доступными на следующий раунд.

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\).

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\).

D. Два центроида

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2800

Вам задано дерево (неориентированный связный ациклический граф), изначально содержащее только вершину \(1\). Будет несколько запросов к данному дереву. В \(i\)-м запросе появится вершина \(i + 1\), соединенная с вершиной \(p_i\) (\(1 \le p_i \le i\)).

После каждого запроса найдите наименьшее количество операций, необходимых для того, чтобы текущее дерево имело два центроида. За одну операцию вы можете добавить одну вершину и одно ребро к дереву так, чтобы оно осталось деревом.

Вершина называется центроидом, если ее удаление разбивает дерево на поддеревья с не более чем \(\lfloor \frac{n}{2} \rfloor\) вершин в каждом, где \(n\) — число вершин дерева. Например, центроид следующего дерева равен \(3\), потому что самое большое поддерево после удаления центроида имеет \(2\) вершины.

В следующем дереве вершины \(1\) и \(2\) являются центроидами.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^{5}\)) — количество вершин конечного дерева.

Вторая строка каждого набора входных данных содержит \(n - 1\) целое число \(p_1, p_2, \ldots, p_{n - 1}\) (\(1 \le p_i \le i\)) — индекс вершины, которая связана с вершиной \(i + 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) целое число. \(i\)-е число является ответом на \(i\)-й запрос — наименьшее количество операций, необходимых для того, чтобы текущее дерево имело два центроида.

Мы можем показать, что ответ всегда существует.

Примечание

На картинках ниже показан четвертый набор входных данных.

После третьего запроса:

В дереве уже есть вершины \(2\) и \(3\) в качестве центроидов, поэтому никаких операций не требуется.

После четвертого запроса:

Добавление вершины \(x\) к дереву делает вершины \(2\) и \(3\) центроидами. Нужна только одна операция.

После пятого запроса:

Добавление к дереву вершин \(x\) и \(y\) делает вершины \(5\) и \(2\) центроидами. Нужны две операции.

После шестого запроса:

Добавление к дереву вершин \(x\), \(y\) и \(z\) делает вершины \(5\) и \(2\) центроидами. Необходимо три операции.

E. Автобусные маршруты

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *3400

Существует страна, состоящая из \(n\) городов и соединяющих их \(n - 1\) двунаправленных дорог, так что мы можем путешествовать между любыми двумя городами по этим дорогам. Другими словами, эти города и дороги образуют дерево.

Есть \(m\) автобусных маршрутов, соединяющих города между собой. Автобусный маршрут между городами \(x\) и \(y\) позволяет вам путешествовать между любыми двумя городами по простому пути между \(x\) и \(y\) по этому маршруту.

Определите, можно ли из каждой пары городов \(u\) и \(v\) проехать из \(u\) в \(v\), используя не более двух автобусных маршрутов.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 5 \cdot 10^5, 0 \le m \le 5 \cdot 10^5\)) — количество городов и количество автобусных маршрутов.

Затем следует \(n - 1\) строка. Каждая строка содержит два целых числа \(u\) и \(v\), обозначающие дорогу, соединяющую города \(u\) и \(v\) (\(1 \le u, v \le n, u \neq v\)). Гарантируется, что эти города и дороги образуют дерево.

Далее следуют \(m\) строк. Каждая строка содержит два целых числа \(x\) и \(y\), обозначающие маршрут автобуса между городами \(x\) и \(y\) (\(1 \le x, y \le n\)).

Гарантируется, что сумма \(n\) по всем наборам тестов не превосходит \(5 \cdot 10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите «YES», если вы можете путешествовать между любой парой городов, используя не более двух автобусных маршрутов.

В противном случае выведите «NO». В следующей строке выведите два города \(x\) и \(y\) (\(1 \le x, y \le n\)) такие, что до города \(y\) из города \(x\) невозможно добраться не более чем двумя автобусными маршрутами.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные. ответы.

Примечание

Ниже приведены иллюстрации к \(1\), \(2\) и \(4\) наборам входных данных:

F. Последовательные перестановки

жадные алгоритмы Конструктив Структуры данных *3500

Вам дана перестановка \(a_1,a_2,\ldots,a_n\) первых \(n\) натуральных чисел. Подмассив \([l,r]\) называется последовательным, если его можно переупорядочить так, чтобы он стал последовательностью последовательных целых чисел, или, более формально, если \(\)\max(a_l,a_{l+1},\ldots,a_r)-\min(a_l,a_{l+1},\ldots,a_r)=r-l\(\) Для каждого \(k\) в диапазоне \([0,n]\) выведите максимальное количество последовательных подмассивов массива \(a\) среди всех способов перестановки последних \(n-k\) элементов массива \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(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\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целое число в качестве ответов для каждого \(k\) в диапазоне \([0,n]\).

Примечание

В первом наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4,5]\), \([5,4,3,2,1]\), \([5,2,3,4,1]\), \([5,2,1,3,4]\), \([5,2,1,4,3]\), \([5,2,1,4,3]\).

Во втором наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4]\), \([2,1,3,4]\), \([2,1,3,4]\) , \([2,1,4,3]\), \([2,1,4,3]\).

C. Мистер совершенство

битмаски жадные алгоритмы реализация *800

Виктор хочет стать «Мистером совершенство». Для этого ему нужно овладеть определенным набором навыков. Более точно, у него есть \(2\) навыка, которые ему нужно овладеть.

У него также есть \(n\) книг. Чтение книги \(i\) занимает у него \(m_i\) минут и дает ему некоторые (возможно, ни одного) из двух необходимых навыков, представленных двоичной строкой длины \(2\).

Какое минимальное количество времени потребуется, чтобы Виктор овладел обоими необходимыми навыками?

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов случаев. Затем следует описание наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество доступных книг.

Затем следуют \(n\) строк. Строка \(i\) содержит положительное целое число \(m_i\) (\(1 \leq m_i \leq 2 \cdot 10^5\)) и двоичную строку длины \(2\), где \(s_{i1} = 1\), если чтение книги \(i\) дает Виктору навык \(1\), и \(s_{i1} = 0\) в противном случае, а \(s_{i2} = 1\), если чтение книги \(i\) дает Виктору навык \(2\), и \(s_{i2} = 0\) в противном случае.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество минут, необходимое для того, чтобы Виктор овладел обоими необходимыми навыками, и \(-1\), если невозможно овладеть двумя навыками после чтения любого количества книг.

Примечание

В первом тестовом случае мы можем использовать книги \(2\) и \(3\), с общим количеством потраченного времени, равным \(3 + 4 = 7\).

Во втором тестовом случае мы можем использовать книги \(1\) и \(4\), с общим количеством потраченного времени, равным \(3 + 2 = 5\).

В третьем тестовом случае у нас есть только один вариант, и это чтение книги \(1\) за общее количество потраченного времени, равное \(5\).

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.

E. Кондитерская

жадные алгоритмы *2900

В садик ходят n ребят, пронумерованных от 1 до n. Каждому из них родители дают на карманные расходы некоторое количество денег (в рублях).

Сегодня ребята собираются в самую известную кондитерскую города. Кондитерская продает конфеты коробками: для всех i от 1 до m, включительно, в кондитерской имеется в наличии коробка, в которой ровно i конфет. Конфета стоит один рубль, так что коробка, в которой x конфет, стоит x рублей.

Ребята будут покупать конфеты по очереди, начиная с мальчика номер 1. За один раз мальчик номер i купит одну коробку конфет, количество конфет в которой строго больше, чем количество конфет в коробке, купленной предыдущим мальчиком (исключением является самый первый раз, когда первый мальчик может купить любую коробку). Затем наступает очередь мальчика номер i + 1, или же мальчика номер 1, если до этого была очередь мальчика номер n. Этот процесс можно остановить в любое время, но после закупок у всех ребят должно быть одинаковое количество коробок конфет. Конечно, ни один мальчик не может потратить больше, чем ему выдали карманных денег.

Вы работаете в кондитерской и хотели бы заготовить конфеты для детей. Выведите наибольшее количество конфет, которое можно продать детям в кондитерской. Если дети не могут приобрести ни одной конфеты (когда им не хватает карманных денег), выведите 0.

Входные данные

В первой строке через пробел записаны два целых числа n и m (2 ≤ n ≤ 2·105, 2 ≤ m ≤ 5·106, n ≤ m), обозначающие количество детей и максимальное количество конфет в коробке, соответственно.

Затем следуют n строк, в каждой строке записано по одному положительному целому числу, не превосходящему — карманные деньги в рублях, выдаваемые ребенку. Карманные деньги детей заданы по порядку, от ребенка 1 до ребенка n.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Выведите единственное целое число, обозначающее максимальное количество конфет, которое может продать кондитерская.

Примечание

Для первого теста один из раскладов, при котором кондитерская продаст 13 конфет, выглядит так:

  • 1 покупка. 1-й ребенок покупает 1 конфету.
  • 2 покупка. 2-й ребенок покупает 3 конфеты.
  • 3 покупка. 1-й ребенок покупает 4 конфеты.
  • 4 покупка. 2-й ребенок покупает 5 конфет.

C. Гиперправильные скобочные последовательности

жадные алгоритмы Комбинаторика математика сортировки теория чисел хэши *2400

Вам дано целое число \(n\) и \(k\) отрезков. \(i\)-й отрезок имеет вид \([l_i,r_i]\), где \(1 \leq l_i \leq r_i \leq n\).

Правильная скобочная последовательность\(^{\dagger,\ddagger}\) длины \(n\) называется гиперправильной, если для каждого \(i\) такого, что \(1 \leq i \leq k\), подстрока \(\overline{s_{l_i} s_{l_{i}+1} \ldots s_{r_i}}\) также является правильной скобочной последовательностью.

Ваша задача — посчитать количество гиперправильных скобочных последовательностей. Так как это число может быть очень большим, требуется вывести его по модулю \(998\,244\,353\).

\(^\dagger\) Скобочная последовательность — это строка, содержащая только символы «(» и «)».

\(^\ddagger\) Последовательность скобок называется правильной, если её можно превратить в правильное математическое выражение путём добавления символов + и 1. Например, последовательности (())(), (), (()(())) и пустая строка являются правильными, а )(, (() и (())( — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\), \(0 \le k \le 3 \cdot 10^5\)) — длину гиперправильной скобочной последовательности и количество отрезков соответственно.

Следующие \(k\) строк каждого набора содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l \le r \le n\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(3 \cdot 10^5\), и сумма \(k\) по всем наборам не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество гиперправильных скобочных последовательностей по модулю \(998\,244\,353\).

Примечание
  • Для первого набора есть \(5\) гиперправильных скобочных последовательностей длины \(6\): ((())), (()()), (())(), ()(()) и ()()().
  • Для второго набора нет правильных скобочных последовательностей длины \(5\), а следовательно, нет гиперправильных скобочных последовательностей длины \(5\).
  • Для третьего набора нет гиперправильных скобочных последовательностей длины \(8\), для которых подстрока \([1 \ldots 3]\) является правильной скобочной последовательностью.
  • Для четвертого набора существует \(4\) гиперправильные скобочные последовательности: ((())(())), ((())()()), ()()((())) и ()()(()()).

B. Слияние массивов

жадные алгоритмы Конструктив *1000

Даны два массива \(a\) и \(b\) длины \(n\).

Вы можете объединить\(^\dagger\) эти массивы, получив новый массив \(c\) длины \(2 \cdot n\). Необходимо найти максимальную длину подотрезка, состоящего из одинаковых значений, среди всех массивов \(c\), которые можно получить.

\(^\dagger\) В результате объединения двух массивов получается массив \(c\), составленный путем последовательного взятия первого элемента любого из массивов (если этот массив не пуст) и его удаления. После этого элемент добавляется в конец массива \(c\). Мы повторяем эту операцию до тех пор, пока это возможно (т.е. пока хотя бы один массив не пуст).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов. Затем следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массивов \(a\) и \(b\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 2 \cdot n\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \le b_i \le 2 \cdot n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальную длину подотрезка массива, состоящего из одинаковых значений, среди всех возможных объединений.

Примечание

В первом наборе входных данных мы можем получить только \(c=[2,2]\), поэтому ответ равен \(2\).

Во втором наборе, так как все значения различны, ответ должен быть равен \(1\).

В третьем наборе входных данных массивы \(c\), которые мы можем получить, это \([1,2,1,2]\), \([1,2,2,1]\), \([2,1,1,2]\), \([2,1,2,1]\). Мы видим, что ответ равен \(2\) при \(c=[1,2,2,1]\).

C. Контрастность

жадные алгоритмы реализация *1200

Для массива целых чисел \([a_1, a_2, \dots, a_n]\) значение \(|a_1-a_2|+|a_2-a_3|+\cdots+|a_{n-1}-a_n|\) назовем контрастностью массива. Обратите внимание, что контрастность массива размера \(1\) равен \(0\).

Дан массив целых чисел \(a\). Ваша задача — построить массив \(b\) таким образом, чтобы выполнялись следующие условия:

  • \(b\) не пустой, то есть содержит хотя бы один элемент;
  • \(b\) является подпоследовательностью \(a\), то есть \(b\) может быть получен удалением некоторых элементов из \(a\) (возможно, ни одного);
  • контрастность \(b\) равна контрастности \(a\).

Каково минимально возможное количество элементов в массиве \(b\)?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \cdot, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное количество элементов в массиве \(b\).

D1. Красно-синие операции (простая версия)

Бинарный поиск жадные алгоритмы математика реализация *2100

Единственное отличие между простой и сложной версиями — максимальные значения \(n\) и \(q\).

Задан массив, состоящий из \(n\) целых чисел. Изначально все элементы красные.

К массиву можно несколько раз применить следующую операцию. На \(i\)-й операции вы выбираете элемент массива; затем:

  • если элемент красный, то он увеличивается на \(i\) и становится синим;
  • если элемент синий, то он уменьшается на \(i\) и становится красным.

Операции нумеруются с \(1\), т. е. на первой операции некоторый элемент изменяется на \(1\) и так далее.

К массиву задаются \(q\) запросов следующего вида:

  • дано целое число \(k\), какой может быть наибольший минимум в массиве после того как вы примените ровно \(k\) операций к нему?

Обратите внимание, что операции не изменяют массив между запросами, все запросы задаются к начальному массиву \(a\).

Входные данные

В первой строке записано два целых числа \(n\) и \(q\) (\(1 \le n, q \le 1000\)) — количество элементов массива и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

В третьей строке записаны \(q\) целых чисел \(k_1, k_2, \dots, k_q\) (\(1 \le k_j \le 10^9\)).

Выходные данные

На каждый запрос выведите одно целое число — наибольший минимум, который может быть в массиве после того как вы примените ровно \(k\) операций к нему.

D2. Красно-синие операции (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив математика реализация *2400

Единственное отличие между простой и сложной версиями — максимальные значения \(n\) и \(q\).

Задан массив, состоящий из \(n\) целых чисел. Изначально все элементы красные.

К массиву можно несколько раз применить следующую операцию. На \(i\)-й операции вы выбираете элемент массива; затем:

  • если элемент красный, то он увеличивается на \(i\) и становится синим;
  • если элемент синий, то он уменьшается на \(i\) и становится красным.

Операции нумеруются с \(1\), т. е. на первой операции некоторый элемент изменяется на \(1\) и так далее.

К массиву задаются \(q\) запросов следующего вида:

  • дано целое число \(k\), какой может быть наибольший минимум в массиве после того как вы примените ровно \(k\) операций к нему?

Обратите внимание, что операции не изменяют массив между запросами, все запросы задаются к начальному массиву \(a\).

Входные данные

В первой строке записано два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество элементов массива и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

В третьей строке записаны \(q\) целых чисел \(k_1, k_2, \dots, k_q\) (\(1 \le k_j \le 10^9\)).

Выходные данные

На каждый запрос выведите одно целое число — наибольший минимум, который может быть в массиве после того как вы примените ровно \(k\) операций к нему.

B. Восстанови погоду

жадные алгоритмы сортировки *900

Вам дан массив \(a\), содержащий прогноз погоды в Берляндии за последние \(n\) дней. То есть, \(a_i\) — это предполагаемая температура воздуха в день \(i\) (\(1 \le i \le n\)).

Также вам дан массив \(b\) —температура воздуха, которая была в каждый из дней на самом деле. Однако, все значения в массиве \(b\) перемешались.

Определите, в какой день была какая температура, если известно, что погода никогда не отличается от прогноза более чем на \(k\) градусов. Другими словами, если в день \(i\) настоящая температура воздуха равнялась \(c\), то всегда верно равенство \(|a_i - c| \le k\).

Например, пусть задан массив \(a\) = [\(1, 3, 5, 3, 9\)] длины \(n = 5\) и \(k = 2\) и массив \(b\) = [\(2, 5, 11, 2, 4\)]. Тогда, чтобы значение \(b_i\) соответствовало температуре воздуха в день \(i\), можно переставить элементы массива \(b\) так: [\(2, 2, 5, 4, 11\)]. Действительно:

  • В \(1\)-й день \(|a_1 - b_1| = |1 - 2| = 1\), выполняется \(1 \le 2 = k\)
  • Во \(2\)-й день \(|a_2 - b_2| = |3 - 2| = 1\), выполняется \(1 \le 2 = k\)
  • В \(3\)-й день \(|a_3 - b_3| = |5 - 5| = 0\), выполняется \(0 \le 2 = k\)
  • В \(4\)-й день \(|a_4 - b_4| = |3 - 4| = 1\), выполняется \(1 \le 2 = k\)
  • В \(5\)-й день \(|a_5 - b_5| = |9 - 11| = 2\), выполняется \(2 \le 2 = k\)
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано два целых числа \(n\) (\(1 \le n \le 10^5\)) и \(k\) (\(0 \le k \le10^9\)) — количество дней и максимальная разница между предполагаемой и реальной температурой воздуха в каждый из дней.

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел — элементы массива \(a\) (\(-10^9 \le a_i \le 10^9\)).

Во третьей строке каждого набора входных данных записано ровно \(n\) целых чисел — элементы массива \(b\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\), и что элементы массива \(b\) всегда можно переставить таким образом, чтобы равенство \(|a_i - b_i| \le k\) было верно для всех \(i\).

Выходные данные

В отдельной строке для каждого набора входных данных выведите ровно \(n\) чисел — значения температуры воздуха в каждый из дней в правильном порядке.

Если существует несколько вариантов ответа — выведите любой из них.

C. Влад строит красивый массив

жадные алгоритмы математика *800

Владу подарили массив \(a\) из \(n\) целых положительных чисел. Теперь он хочет построить из него красивый массив \(b\) длины \(n\).

Влад считает массив красивым, если все числа в нём положительные и имеют одну чётность. То есть все числа в красивом массиве больше нуля и либо все являются чётными либо все являются нечётными.

Для построения массива \(b\) Влад может присвоить каждому \(b_i\) либо значение \(a_i\), либо \(a_i - a_j\), где можно выбрать любое \(j\) от \(1\) до \(n\).

Чтобы не пытаться сделать невозможное, Влад просит вас определить, можно ли построить красивый массив \(b\) длины \(n\) с помощью его массива \(a\).

Входные данные

В первой строке входных данных содержится целое число \(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\)

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если Влад может построить красивый массив \(b\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

D. Перевертыш

жадные алгоритмы Конструктив Перебор *1400

Вам дана перестановка \(p\) длины \(n\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \(\{2,3,1,5,4\}\) является перестановкой, а \(\{1,2,2\}\) не является (\(2\) встречается дважды), и \(\{1,3,4\}\) тоже не является перестановкой (\(n=3\), но в массиве есть \(4\)).

К перестановке \(p\) нужно ровно один раз применить следующую операцию:

  • Сначала вы выбираете отрезок \([l, r]\) (\(1 \le l \le r \le n\), отрезок —непрерывная последовательность чисел \(\{p_l, p_{l+1}, \ldots, p_{r-1}, p_r\}\)) и переворачиваете его. Переворот отрезка означает, что меняются местами пары чисел \((p_l, p_r)\), \((p_{l+1}, p_{r-1})\), ..., \((p_{l + i}, p_{r - i})\) (где \(l + i \le r - i\)).
  • Затем вы меняете местами префикс и суффикс: \([r+1, n]\) и \([1, l - 1]\) (обратите внимание, что эти отрезки могут быть пустыми).

Например, \(n = 5, p = \{2, \color{blue}{3}, \color{blue}{1}, 5, 4\}\) и был выбран отрезок \([l = 2, r = 3]\), тогда после переворота отрезка \(p = \{\color{green}{2}, \color{blue}{1}, \color{blue}{3}, \color{green}{5}, \color{green}{4}\}\), затем поменяются местами отрезки \([4, 5]\) и \([1, 1]\). Тогда \(p = \{\color{green}{5}, \color{green}{4}, 1, 3, \color{green}{2}\}\). Можно показать, что это максимальный возможный ответ для данной перестановки.

Требуется вывести лексикографически максимальную перестановку, которую можно получить после применения ровно одной такой операции.

Перестановка \(a\) лексикографически больше перестановки \(b\), если существует \(i\) (\(1 \le i \le n\)) такое, что \(a_j = b_j\) для \(1 \le j < i\) и \(a_i > b_i\).

Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке набора задано одно целое число \(n\) (\(1 \le n \le 2000\)) — размер перестановки.

Во второй строке задано \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — сама перестановка \(p\).

Гарантируется, что сумма значений \(n\) по всем тестам не превышает \(2000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите лексикографически максимальную перестановку длины \(n\), которую можно получить из \(p\), применив операцию, описанную в условии ровно один раз.

Примечание

Первый пример разобран в условии.

Во втором примере следует выбрать отрезок \([l = 9, r = 9]\).

В третьем примере следует выбрать отрезок \([l = 1, r = 1]\).

В четвертом примере следует выбрать отрезок \([l = 1, r = 2]\).

В пятом примере следует выбрать отрезок \([l = 5, r = 6]\).

В шестом примере следует выбрать отрезок \([l = 4, r = 4]\).

В седьмом примере следует выбрать отрезок \([l = 5, r = 5]\).

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\), выведите вместо этого пустую строку.

Если решений несколько, вы можете вывести любое.

Примечание
Первый набор входных данных в первом тесте.

A. Единичный массив

жадные алгоритмы математика *800

Дан массив \(a\) длины \(n\), элементы которого равны \(-1\) и \(1\). Назовём массив \(a\) хорошим, если одновременно выполняются следующие условия:

  • \(a_1 + a_2 + \ldots + a_n \ge 0\);

  • \(a_1 \cdot a_2 \cdot \ldots \cdot a_n = 1\).

За одну операцию вы можете выбрать произвольный элемент массива \(a_i\) и изменить его значение на противоположное. Другими словами, если \(a_i = -1\), то вы можете присвоить значение \(a_i := 1\), а если \(a_i = 1\), то присвоить значение \(a_i := -1\).

Определите минимальное количество операций, которые нужно сделать, чтобы массив \(a\) стал хорошим. Можно показать, что это всегда возможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = \pm 1\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которое нужно сделать, чтобы сделать массив \(a\) хорошим.

Примечание

В первом наборе входных данных мы можем присвоить значение \(a_1 := 1\). Тогда \(a_1 + a_2 + a_3 + a_4 = 1 + (-1) + 1 + (-1) = 0 \ge 0\) и \(a_1 \cdot a_2 \cdot a_3 \cdot a_4 = 1 \cdot (-1) \cdot 1 \cdot (-1) = 1\). Таким образом, мы сделали \(1\) операцию.

Во втором наборе входных данных мы можем присвоить \(a_1 := 1\). Тогда \(a_1 + a_2 + a_3 + a_4 + a_5 = 1 + (-1) + (-1) + 1 + 1 = 1 \ge 0\) и \(a_1 \cdot a_2 \cdot a_3 \cdot a_4 \cdot a_5 = 1 \cdot (-1) \cdot (-1) \cdot 1 \cdot 1 = 1\). Таким образом, мы сделали \(1\) операцию.

В третьем наборе входных данных \(a_1 + a_2 + a_3 + a_4 = (-1) + 1 + (-1) + 1 = 0 \ge 0\) и \(a_1 \cdot a_2 \cdot a_3 \cdot a_4 = (-1) \cdot 1 \cdot (-1) \cdot 1 = 1\). Таким образом, все условия уже выполнены и можно не делать операции.

В четвёртом наборе входных данных мы можем присвоить значения \(a_1 := 1, a_2 := 1, a_3 := 1\). Тогда \(a_1 + a_2 + a_3 = 1 + 1 + 1 = 3 \ge 0\) и \(a_1 \cdot a_2 \cdot a_3 = 1 \cdot 1 \cdot 1 = 1\). Таким образом, мы сделали \(3\) операции.

B. Максимальная прочность

жадные алгоритмы математика *1000

Федя играет в новую игру «The Legend of Link», в которой одной из способностей персонажа является монтаж двух материалов в одно оружие. Каждый материал имеет свою прочность, которую можно обозначить целым положительным числом \(x\). Прочность полученного оружия определяется как сумма модулей разностей цифр в десятичной записи чисел на каждой позиции.

Формально, пусть первый материал имеет прочность \(X = \overline{x_{1}x_{2} \ldots x_{n}}\), а второй имеет прочность \(Y = \overline{y_{1}y_{2} \ldots y_{n}}\). Тогда прочность оружия вычисляется как \(|x_{1} - y_{1}| + |x_{2} - y_{2}| + \ldots + |x_{n} - y_{n}|\). Если числа имеют различные длины, то более короткое число дополняется ведущими нулями.

Федя имеет в своем инвентаре в неограниченном количестве материалы со всеми возможными прочностями от \(L\) до \(R\) включительно. Помогите ему найти максимально возможную прочность оружия, которую он может получить.

Число \(C = \overline{c_{1}c_{2} \ldots c_{k}}\) определяется как число, полученное последовательной записью цифр \(c_1, c_2, \ldots, c_k\) слева направо, т.е. \(10^{k-1} \cdot c_1 + 10^{k-2} \cdot c_2 + \ldots + c_k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(L\) и \(R\) (\(1 \le L \le R < 10^{100}\)) — десятичная запись чисел, обозначающих минимальную и максимальную прочность материалов, которые есть у Феди. Гарантируется, что числа \(L\) и \(R\) не содержат ведущих нулей.

Обратите внимание, что входные данные могут не помещаться в стандартные \(32\)-битные или \(64\)-битные целочисленные типы данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную прочность оружия, которую может получить Федя из данных материалов.

Примечание

В первом наборе входных данных оружие, сделанное из материалов с прочностями \(53\) и \(57\), будет иметь максимально возможную прочность: \(|5 - 5| + |3 - 7| = 4\).

Во втором наборе входных данных максимальная прочность достигается при материалах с прочностями \(190\) и \(209\): \(|1 - 2| + |9 - 0| + |0 - 9| = 19\).

В четвёртом наборе входных данных есть только одна допустимая прочность, поэтому ответ \(0\).

В шестом наборе входных данных максимальная прочность достигается при материалах с прочностями \(1909\) и \(90\): \(|1 - 0| + |9 - 0| + |0 - 9| + |9 - 0| = 28\). Обратите внимание, что более короткое число было дополнено ведущими нулями.

C. Игра с переворотом

жадные алгоритмы игры математика Строки *1200

Алиса и Боб играют в игру. У них есть две строки \(S\) и \(T\) одинаковой длины \(n\), состоящие из строчных латинских букв. Игроки ходят по очереди, первой ходит Алиса.

В свой ход Алиса выбирает число \(i\) от \(1\) до \(n\), одну из строк \(S\) или \(T\), а также любую строчную латинскую букву \(c\), и заменяет \(i\)-й символ в выбранной строке на символ \(c\).

Боб же в свой ход выбирает одну из строк \(S\) или \(T\), и переворачивает её. Более формально, Боб делает замену \(S := \operatorname{rev}(S)\) или \(T := \operatorname{rev}(T)\), где \(\operatorname{rev}(P) = P_n P_{n-1} \ldots P_1\).

Игра длится до тех пор, пока строки \(S\) и \(T\) не равны. Как только строки становятся равны, игра моментально заканчивается.

Определим длительность игры как суммарное количество ходов, сделанных обоими игроками в процессе игры. Например, если всего Алиса сделала \(2\) хода, а Боб — \(1\) ход, то длительность такой игры равна \(3\).

Цель Алисы — минимизировать длительность игры, а цель Боба — максимизировать длительность игры.

Чему будет равна длительность игры, при оптимальной игре обоих игроков? Можно показать, что игра завершится за конечное число ходов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина строк \(S\) и \(T\).

Вторая строка каждого набора входных данных содержит строку \(S\) длины \(n\), состоящую из строчных латинских букв.

Третья строка каждого набора входных данных содержит строку \(T\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите единственное целое число — длительность описанной игры, при оптимальной игре обоих игроков.

Примечание

В первом наборе входных данных Алиса в свой ход может заменить третий символ строки \(S\) на x. После чего обе строки станут равны «abxde» и игра завершится после одного хода. Так как цель Алисы закончить игру за минимальное число ходов, этот ход будет одним из оптимальных первых ходов для неё, и итоговый ответ равен \(1\).

Во втором наборе входных данных Алиса в свой ход может заменить пятый символ строки \(T\) на h. После этого хода \(S =\) «hello», \(T =\) «olleh». Далее ходит Боб. В свой ход он обязан перевернуть одну из строк. Если Боб выберет строку \(S\), то после его хода обе строки будут равны «olleh», а если он выберет строку \(T\), то после его хода обе строки будут равны «hello». Таким образом, после представленного первого хода Алисы игра гарантированно завершится через \(2\) хода. Несложно показать, что стратегии, гарантирующей завершение игры менее чем за \(2\) хода, у Алисы не существует. Итоговый ответ равен \(2\).

В третьем наборе входных данных Алиса в свой первый ход может заменить второй символ строки \(S\) на c. После этого хода \(S =\) «ac», \(T =\) «cd». Далее ходит Боб. Если Боб перевернёт строку \(S\), то после его хода \(S =\) «ca», \(T =\) «cd». Тогда несложно видеть, что в этом случае Алиса может гарантированно закончить игру на \(3\)-м ходу, заменив второй символ строки \(T\) на a, после чего обе строки станут равны «ca». Если же Боб перевернёт строку \(T\), то после его хода \(S =\) «ac», \(T =\) «dc». В этом случае Алиса также может гарантированно закончить игру на \(3\)-м ходу, заменив первый символ строки \(S\) на d, после чего обе строки станут равны «dc». Таким образом Алиса может гарантированно закончить игру за \(3\) хода вне зависимости от ходов Боба. Можно показать, что меньше чем за \(3\) хода, при оптимальной игре Боба, игра завершиться не может.

В пятом наборе входных данных строки \(S\) и \(T\) равны, а значит игра завершится, не начавшись, за \(0\) ходов.

D. Опрос на уроке

жадные алгоритмы Перебор реализация сортировки Структуры данных *1900

На урок истории к Зинаиде Викторовне пришло \(n\) учеников. На дом было задано \(m\) тем, но у учеников было мало времени для подготовки, поэтому \(i\)-й ученик выучил только темы с \(l_i\) по \(r_i\) включительно.

В начале урока каждый ученик держит свою руку на уровне \(0\). Учительница хочет спросить какие-то темы. Происходит это так:

  • Учительница спрашивает тему \(k\).
  • Если ученик выучил тему \(k\), то он поднимает руку на \(1\), а иначе опускает на \(1\).
Каждую тему Зинаида Викторовна может спросить не более одного раза.

Определите, какая максимальная разность высот самой высокой и самой низкой руки может быть после опроса.

Обратите внимание, рука ученика может опускаться ниже \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5, 1 \le m \le 10^9\)) — количество учеников и количество тем соответственно.

В следующих \(n\) строках каждого набора содержится по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), обозначающих границы отрезка тем, которые выучил \(i\)-й ученик.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную разность высот самой высокой и самой низкой руки, которая может быть в классе после опроса.

Примечание

В первом наборе входных данных Зинаида Викторовна может спросить темы \(5, 6, 7, 8\). Тогда рука \(2\)-го ученика будет на высоте \(4\), а \(4\)-го — на высоте \(-2\), то есть разность будет равна \(6\).

Во втором наборе можно спросить темы \(1\) и \(3\). Тогда рука \(1\)-го ученика будет на высоте \(2\), а \(3\)-го ученика — на высоте \(-2\). Значит, разность будет равна \(4\).

В третьем наборе разница высот между самой высокой и низкой рукой будет \(0\) при любом наборе спрашиваемых тем.

В пятом наборе можно спросить все темы. Тогда разность высот рук \(1\)-го и \(3\)-го учеников будет равняться \(12\).

B. Лотерея

Бинарный поиск жадные алгоритмы математика Перебор *2500

Для участия в лотерее пришли \(n\) человек, пронумерованных от \(1\) до \(n\). Каждый получил билет с целым числом от \(0\) до \(m\).

В лотерее равновероятно вытягивается одно целое целевое число от \(0\) до \(m\). Победителями объявляются \(k\) билетов (или меньше, если участников недостаточно) с числами, наиболее близкими к целевому. В случае ничьей победителем объявляется билет, принадлежащий человеку с меньшим номером.

Байтек решил принять в ней участие. Он знает значения на билетах всех предыдущих участников. Он может выбрать любое значение на своем билете, но, к сожалению, поскольку он получил его последним, номер Байтека равен \(n + 1\).

Байтек хочет выиграть в лотерею. Таким образом, он хочет узнать, какое число он должен выбрать, чтобы максимизировать шансы на выигрыш. Он хочет узнать наименьшее целое число в случае, если таких целых чисел много. Ваша задача — найти число и рассчитать шансы на выигрыш.

Входные данные

В первой строке входных данных находятся целые числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^6\), \(0 \leq m \leq 10^{18}\), \(1 \leq k \leq 10^6\)).

В следующей строке находятся \(n\) целых чисел, обозначающих номера на билетах, полученных людьми, участвующими в лотерее. Эти числа — целые числа в диапазоне от \(0\) до \(m\).

Выходные данные

Вы должны вывести два целых числа. Первое должно быть равно количеству значений целевого числа (от \(0\) до \(m\)), при котором Байтек выигрывает, если оптимально выберет свой билет. Второе должно быть равно целому числу, которое Байтек должен выбрать, чтобы максимизировать свой шанс на выигрыш в лотерею.

Примечание

В первом примере Байтек выиграет при \(4\)-х целевых значениях (а именно \(0, 1, 2, 3\)), если выберет целое число \(2\), которое является наименьшим оптимальным значением. Если он выберет \(3\), он также выиграет в четырех случаях, но это значение не является наименьшим.

B. Астрофизики

жадные алгоритмы математика *1100

Через много-много лет, далеко-далеко, состоится запуск первого полета на Марс. В честь этого успеха \(n\) астрофизикам, работающим над проектом, будут выданы премии общей стоимостью \(k\) золотых монет.

Вам нужно распределить деньги по астрофизикам, и чтобы это было проще сделать, вы номинируете бонусы в серебряных монетах. Каждая золотая монета равна \(g\) серебряным, поэтому вам нужно распределить \(k \cdot g\) серебряных монет по \(n\) людям.

К сожалению, компания сейчас испытывает некоторые финансовые трудности. Поэтому вместо того, чтобы выплатить написанное на бонусе количество серебряных монет, они решили округлить эту сумму до ближайшего целого числа золотых монет.

Процедура округления выглядит следующим образом. Если премия астрофизика равна \(x\) серебряных монет, и мы обозначаем \(r = x \bmod g\), то:

  • Если \(r \geq \lceil \frac{g}{2} \rceil\), то астрофизик должен получить \(x + (g - r)\) серебряных монет;
  • Иначе астрофизик должен получить \(x - r\) серебряных монет.
Обратите внимание, что из-за округления сумма фактически выплаченных денег в общем случае не равна \(k \cdot g\) серебряным монетам. Операция \(a \bmod b\) обозначает взятие остатка от деления \(a\) на \(b\).

Вы стремитесь распределить премии так, чтобы компания из-за округления сохранила как можно больше серебряных монет. Обратите внимание, что всегда существует распределение, при котором компания платит не больше \(k \cdot g\) серебряных монет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\), \(g\) (\(1 \le n \le 10^9\), \(0 \le k \le 10^9\), \(2 \le g \le 10^9\)) — количество астрофизиков в компании, общая сумма премий в золотых монетах и количество серебряных монет, которому соответствует одна золотая монета.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — максимальное количество серебряных монет, которое может остаться от начальной суммы после выплаты всех премий.

Примечание

В первом наборе входных данных одно из оптимальных назначений может быть следующим:

  • Первый физик, \(x = 30\) серебряных монет: компания выплачивает \(0\), экономит \(30\) серебряных монет.
  • Второй физик, \(x = 140\) серебряных монет: компания выплачивает \(100\), экономит \(40\) серебряных монет.
  • Третий физик, \(x = 130\) серебряных монет: компания выплачивает \(100\), экономит \(30\) серебряных монет.

Во втором наборе мы могли бы использовать следующее распределение:

  • Первый физик, \(x = 8\) серебряных монет: после округления компания выплачивает \(14\) монет, тратит дополнительно \(6\) серебряных монет.
  • Второй физик, \(x = 6\) серебряных монет: компания выплачивает \(0\), экономит \(6\) серебряных монет.

Если же будет назначена премия в размере \(7\) серебряных монет для обоих астрофизиков, то компания должна будет заплатить дополнительную золотую монету.

B. Строка сравнений

жадные алгоритмы *900

Дана строка \(s\) из \(n\) символов, каждый из которых — либо <, либо >.

Массив \(a\), состоящий из \(n+1\) элементов, является совместимым со строкой \(s\), если для каждого \(i\) от \(1\) до \(n\) символ \(s_i\) соответствует результату сравнения элементов \(a_i\) и \(a_{i+1}\), то есть:

  • \(s_i\) равен < тогда и только тогда, когда \(a_i < a_{i+1}\);
  • \(s_i\) равен > тогда и только тогда, когда \(a_i > a_{i+1}\).

Например, массив \([1, 2, 5, 4, 2]\) совместим со строкой <<>>. С этой строкой совместимы и некоторые другие массивы, например, \([13, 37, 42, 37, 13]\).

Стоимостью массива назовем количество различных элементов в нем. Например, стоимость \([1, 2, 5, 4, 2]\) равна \(4\); стоимость массива \([13, 37, 42, 37, 13]\) равна \(3\).

Вы должны посчитать минимальную стоимость среди всех массивов, совместимых со строкой \(s\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке задано одно целое число \(n\) (\(1 \le n \le 100\));
  • во второй строке задана \(s\) — последовательность из \(n\) символов. Каждый символ \(s\) — либо <, либо >.
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость среди всех массивов, совместимых со строкой \(s\).

Примечание

В первом наборе входных данных примера из условия один из возможных массивов — это \([13, 37, 42, 37, 13]\).

Во втором наборе входных данных примера из условия один из возможных массивов — это \([42, 37, 13, 37, 42]\).

C. Лучшая двоичная строка

жадные алгоритмы Конструктив *1000

Дана строка \(s\), состоящая из символов 0, 1 и/или ?. Назовем эту строку шаблоном.

Скажем, что двоичная строка (строка, где каждый символ равен либо 0, либо 1) соответствует шаблону, если возможно заменить каждый символ ? на 0 или 1 (для каждого символа выбор независим) так, чтобы строки стали равны. Например, 0010 соответствует ?01?, но 010 не соответствует ни 1??, ни ??, ни ????.

Давайте определим стоимость двоичной строки как минимальное количество операций вида «перевернуть произвольную непрерывную подстроку строки», необходимых, чтобы строка оказалась отсортированной в порядке неубывания.

Ваша задача — найти двоичную строку с минимально возможной стоимостью среди тех, которые соответствуют заданному шаблону. Если ответов несколько, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящую из символов 0, 1 и/или ?.

Сумма длин строк по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите двоичную строку с минимально возможной стоимостью среди тех, которые соответствуют заданному шаблону. Если ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных в примере из условия стоимость полученной строки равна \(0\).

Во втором наборе входных данных стоимость полученной строки равна \(2\): мы можем перевернуть подстроку с \(1\)-го символа по \(5\)-й, и мы получим строку 00101. Затем мы можем перевернуть подстроку с \(3\)-го по \(4\)-й символ, и мы получим строку 00011, которая отсортирована в порядке неубывания.

D. Раскраска скобок

жадные алгоритмы Конструктив *1400

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Последовательность скобок называется красивой, если выполняется одно из следующих условий:

  • она является правильной скобочной последовательностью;
  • если порядок символов в этой последовательности изменить на противоположный, то она станет правильной скобочной последовательностью.

Например, скобочные последовательности «()()», «(())», «))((», «))()((» являются красивыми.

Вам дана последовательность скобок \(s\). Вы должны раскрасить ее таким образом, чтобы:

  • каждая скобка была покрашена ровно в один цвет;
  • для каждого цвета существует хотя бы одна скобка, покрашенная в этот цвет;
  • для каждого цвета, если вы запишете последовательность скобок этого цвета в порядке, в котором они встречаются в строке, вы получите красивую скобочную последовательность.

Раскрасьте заданную последовательность скобок \(s\) в минимальное количество цветов в соответствии с этими ограничениями, или сообщите, что это невозможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество символов в \(s\). Во второй строке задана \(s\) — строка из \(n\) символов, каждый из которых либо «(», либо «)».

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если нельзя покрасить строку так, чтобы раскраска соответствовала условию задачи, выведите \(-1\);
  • в противном случае выведите две строки. В первой из них выведите одно целое число \(k\) (\(1 \le k \le n\)) — минимальное количество цветов. Во второй выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) — цвет \(i\)-й скобки. Если ответов несколько, выведите любой из них.

F. Разбор на двоих

Бинарный поиск жадные алгоритмы реализация Структуры данных *2400

Только что закончилась Берлядская межвузовская олимпиада. Монокарп и Поликарп, как члены жюри, собираются провести разбор. К сожалению, время у них ограничено, так как надо закончить до церемонии закрытия.

В соревновании было \(n\) задач. Задачи пронумерованы от \(1\) до \(n\). Разбор \(i\)-й задачи занимает \(a_i\) минут. Монокарп и Поликарп планируют разобрать ровно \(k\) из них.

Разбор проходит следующим образом. Перед ними лежит весь проблемсет из \(n\) задач. Они убирают \(n - k\) из них, не изменяя порядок оставшихся \(k\) задач. Затем Монокарп забирает себе какой-то префикс из этих \(k\) задач (возможно, пустой или все задачи). Поликарп забирает себе оставшийся суффикс. После этого они идут в разные комнаты и проводят разборы для своих задач параллельно. Так что разбор занимает столько времени, сколько занимает более долгий из этих двух.

Пожалуйста, помогите Монокарпу и Поликарпу выбрать задачи и разделить их между собой так, чтобы разбор закончился как можно раньше. Выведите длительность разбора.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) — количество задач во всем проблемсете и количество задач, для которых Монокарп и Поликарп планируют провести разбор.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — время, которое занимает каждый разбор.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее время, которое может занять разбор, если Монокарп и Поликарп могут выбирать, какие \(k\) из \(n\) задач разбирать и как разделять их между собой.

D. Прогулка по скобкам

жадные алгоритмы Строки Структуры данных *2100

Дана строка \(s\) длины \(n\), состоящая из символов '(' и ')'. Вы идете по этой строке. Вы начинаете с первого символа \(s\) и хотите сделать последовательность шагов так, чтобы закончить на \(n\)-м символе. За один шаг вы можете переместиться на один символ влево (если вы стоите не на первом символе) или на один символ вправо (если вы стоите не на последнем символе). Вы не можете оставаться на одном и том же месте, однако вы можете посетить любой символ, включая первый и последний, любое количество раз.

В каждый момент времени вы записываете символ, на котором вы сейчас стоите. Мы говорим, что строка проходима, если существует некоторая последовательность ходов, начинающаяся в первом символе и заканчивающаяся в последнем, такая, что записанная вами строка является правильной скобочной последовательностью.

Правильная скобочная последовательность — это последовательность скобок, которая может быть преобразована в правильное арифметическое выражение путем добавления символов '1' и '+' между исходными символами последовательности. Например, последовательности скобок «()()», «(())» являются правильными ( итоговыми выражениями являются: «(1)+(1)», «((1+1)+1)»), а последовательности «)(» и «(» не являются правильными.

Один возможный корректный путь по \(s=\mathtt{(())()))}\). Красная точка указывает на ваше текущее положение, а красная строка — на записанную вами строку. Обратите внимание, что итоговая красная строка — это правильная скобочная последовательность.

Вам даны \(q\) запросов. Каждый запрос меняет значение символа с '(' на ')' или наоборот. После каждого изменения определите, является ли данная строка проходимой.

Запросы сохраняются, то есть эффект от каждого запроса распространяется на последующие запросы.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2\cdot 10^5\)) — размер строки и количество запросов, соответственно.

Вторая строка ввода содержит строку \(s\) длины \(n\), состоящую из символов '(' и ')' — начальная строка.

Каждая из следующих \(q\) строк содержит одно целое число \(i\) (\(1\le i \le n\)) — индекс символа, который нужно изменить в данном запросе.

Выходные данные

Для каждого запроса выведите «YES», если строка проходима после этого запроса, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YEs», «Yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом примере:

  • После первого запроса строка имеет вид (())()()(). Эта строка является правильной скобочной последовательностью, поэтому ее можно пройти, просто перемещаясь вправо.
  • После второго запроса строка имеет вид (())()))(). Если вы сдвинетесь один раз вправо, затем влево, затем пройдете вправо до конца строки, вы получите строку (((()(())())(), которая является правильной скобочной последовательностью.
  • После третьего запроса строка имеет вид ()))())())(). Мы можем показать, что эта строка не является проходимой.
Во втором примере, строки после запросов равны ()) и ()(, ни одна из которых не является проходимой.

A. Хороший массив

жадные алгоритмы математика реализация *800

Вам даны целые числа \(n\) и \(k\).

Назовем массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из нулей и единиц, хорошим, если для всех целых \(i\) от \(1\) до \(n\) выполняются оба следующих условия:

  • среди первых \(i\) элементов \(a\) хотя бы \(\lceil \frac{i}{k} \rceil\) равны \(1\),
  • среди последних \(i\) элементов \(a\) хотя бы \(\lceil \frac{i}{k} \rceil\) равны \(1\).

Здесь \(\lceil \frac{i}{k} \rceil\) обозначает результат деления \(i\) на \(k\), округлённый вверх. Например, \(\lceil \frac{6}{3} \rceil = 2\), \(\lceil \frac{11}{5} \rceil = \lceil 2.2 \rceil = 3\) и \(\lceil \frac{7}{4} \rceil = \lceil 1.75 \rceil = 2\).

Найдите наименьшее возможное количество единиц в хорошем массиве.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два целых числа \(n\), \(k\) (\(2 \le n \le 100\), \(1 \le k \le n\)) — длина массива и параметр \(k\) из условия.

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее возможное количество единиц в хорошем массиве.

Можно показать, что при данных ограничениях всегда существует хотя бы один хороший массив.

Примечание

В первом наборе входных данных \(n = 3\) и \(k = 2\):

  • Массив \([ \, 1, 0, 1 \, ]\) является хорошим и количество единиц в нём равно \(2\).
  • Массивы \([ \, 0, 0, 0 \, ]\), \([ \, 0, 1, 0 \, ]\) и \([ \, 0, 0, 1 \, ]\) не являются хорошими, так как для этих массивов при \(i=1\) не выполняется первое условие.
  • Массив \([ \, 1, 0, 0 \, ]\) не является хорошим, так как для него при \(i=1\) не выполняется второе условие.
  • Во всех остальных массивах длины \(3\) есть хотя бы \(2\) единицы.

Таким образом, ответ равен \(2\).

Во втором наборе входных данных \(n = 5\) и \(k = 2\):

  • Массив \([ \, 1, 1, 0, 0, 1 \, ]\) не является хорошим, так как для него при \(i=3\) не выполняется второе условие.
  • Массив \([ \, 1, 0, 1, 0, 1 \, ]\) является хорошим и количество единиц в нём равно \(3\).
  • Можно показать, что хорошего массива, содержащего меньше \(3\) единиц, не существует, поэтому ответ равен \(3\).

В третьем наборе входных данных \(n = 9\) и \(k = 3\):

  • Массив \([ \, 1, 0, 1, 0, 0, 0, 1, 0, 1 \, ]\) является хорошим и количество единиц в нём равно \(4\).
  • Можно показать, что хорошего массива, содержащего меньше \(4\) единиц, не существует, поэтому ответ равен \(4\).

В четвертом наборе входных данных \(n = 7\) и \(k = 1\). Существует единственный хороший массив \([ \, 1, 1, 1, 1, 1, 1, 1\, ]\), поэтому ответ равен \(7\).

B. Лампочки

жадные алгоритмы сортировки *1100

У вас есть \(n\) лампочек, пронумерованных целыми числами от \(1\) до \(n\). Лампочка \(i\) имеет два целочисленных параметра \(a_i\) и \(b_i\).

В каждый момент времени каждая лампочка находится в одном из трех состояний: она может быть выключена, включена или сломана.

Изначально все лампочки выключены. За одно действие вы можете включить одну выключенную лампочку (нельзя включать сломанные лампочки). За включение лампочки \(i\) вы получаете \(b_i\) очков. После каждого вашего действия происходит следующее:

  • Пусть в данный момент включенными (сломанные лампочки не считаются) являются \(x\) лампочек. Все лампочки \(i\), для которых \(a_i \le x\), ломаются, независимо от того, включены они или выключены.

Обратите внимание, что сломанные лампочки никогда не считаются включенными, и что после поломки включенной лампочки очки, полученные за ее включение, не теряются.

Вы можете совершить произвольное число действий.

Найдите наибольшее количество очков, которое вы можете набрать.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество лампочек.

В следующих \(n\) строках заданы по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le n, 1 \le b_i \le 10^9\)) — параметры \(i\)-й лампочки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее количество очков, которое вы можете набрать.

Примечание

В первом наборе входных данных \(n = 4\). Единственный способ набрать наибольшее количество очков выглядит следующим образом:

  • Вы включаете лампочку \(4\) и получаете \(b_4 = 13\) очков.
  • Количество включенных лампочек равно \(1\), поэтому все лампочки, у которых \(a_i \le 1\), то есть лампочки \(2\), \(3\) и \(4\), ломаются. Лампа \(4\) больше не считается включенной и количество включенных лампочек становится равным \(0\).
  • Вы можете включить только лампочку \(1\), так как все остальные лампочки сломаны. Вы получаете \(b_1 = 2\) очка.
  • Количество включенных лампочек равно \(1\). Так как \(a_1 = 2\), лампочка \(1\) не ломается.

Всего вы получили \(13 + 2 = 15\) очков. Можно показать, что это наибольшее количество очков, которое можно набрать, следовательно ответ на первый набор входных данных равен \(15\).

Во втором наборе входных данных один из способов набрать наибольшее количество очков выглядит следующим образом:

  • Первым действием вы включаете лампочку \(4\) и получаете \(2\) очка. После этого действия ни одна лампочка не ломается.
  • Вторым действием вы включаете лампочку \(3\) и получаете \(5\) очков. После этого действия включены \(2\) лампочки. Так как \(a_3 \le 2\), лампочка \(3\) ломается.
  • Третьим действием вы включаете лампочку \(1\) и получаете \(4\) очка.
  • Четвертым действием вы включаете лампочку \(5\) и получаете \(3\) очка. После этого действия включенными являются \(3\) лампочки: \(1\)-я, \(4\)-я и \(5\)-я. Лампочки \(1\), \(2\), \(4\) и \(5\) одновременно ломаются, так как для них всех \(a_i \le 3\).

Всего вы получили \(2 + 5 + 4 + 3 = 14\) очков. Можно показать, что это наибольшее количество очков, которое можно набрать.

В третьем наборе входных данных один из способов набрать наибольшее количество очков выглядит следующим образом:

  • Включить лампочку \(3\), получить \(4\) очка. Лампочки \(1\) и \(3\) ломаются.
  • Включить лампочку \(2\), получить \(4\) очка.
  • Включить лампочку \(6\), получить \(3\) очка. Лампочка \(6\) ломается.
  • Включить лампочку \(4\), получить \(4\) очка.
  • Включить лампочку \(5\), получить \(5\) очков. Лампочки \(2\), \(4\) и \(5\) ломаются.

Всего вы получили \(4 + 4 + 3 + 4 + 5 = 20\) очков. Можно показать, что это наибольшее количество очков, которое можно набрать.

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\), после считывания которого программа участника завершается.

Обратите внимание, что лишние переводы строки в примерах приведены только для удобства и в действительности вам не нужно их выводить. Программа жюри также не будет выводить лишних переводов строки.

D. Фестиваль деревянных игрушек

Бинарный поиск жадные алгоритмы сортировки *1400

В одном небольшом городке есть мастерская, специализирующаяся на работах по дереву. Так как город маленький, в ней работают всего три резчика.

Скоро в городе планируется фестиваль деревянных игрушек. Работники мастерской хотят к нему подготовиться.

Они знают, что \(n\) человек придёт в мастерскую с просьбой сделать деревянную игрушку. Люди разные и могут хотеть разные игрушки. Для простоты обозначим паттерн игрушки, которую хочет \(i\)-й человек за \(a_i\) (\(1 \le a_i \le 10^9\)).

Каждый из резчиков может заранее выбрать какой-то паттерн \(x\) (\(1 \le x \le 10^9\)), разные резчики могут выбрать разные паттерны. \(x\) - натуральное число. За время подготовки к фестивалю резчики идеально отработают технику выполнения игрушки выбранного паттерна, что позволит им мгновенно вырезать её из дерева. Чтобы сделать игрушку паттерна \(y\) резчику, выбравшему паттерн \(x\), понадобится \(|x - y|\) времени, ведь чем больше игрушка похожа на ту, что он умеет делать мгновенно, тем быстрее резчик справится с работой.

В день фестиваля, когда очередной человек зайдёт в мастерскую с просьбой сделать деревянную игрушку, резчики могут выбрать, кто из них примется за работу. При этом резчики очень умелые люди и могут одновременно выполнять заказы для разных людей.

Так как люди не любят ждать, резчики хотят выбрать паттерны для подготовки таким образом, чтобы максимальное время ожидания среди всех людей было как можно меньше.

Выведите наилучшее максимальное время ожидания, которого смогут добиться резчики.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество людей, которые придут в мастерскую.

Во второй строке набора содержится \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — паттерны игрушек.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор — наилучшее максимальное время ожидания, которого смогут добиться резчики.

Примечание

В первом примере входных данных резчики могут выбрать паттерны \(1\), \(7\), \(9\) для подготовки.

Во втором примере входных данных резчики могут выбрать паттерны \(3\), \(30\), \(60\) для подготовки.

Во третьем примере входных данных резчики могут выбрать паттерны \(14\), \(50\), \(85\) для подготовки.

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\).

D. Пары отрезков

жадные алгоритмы сортировки Структуры данных *2000

Два отрезка \([l_1, r_1]\) и \([l_2, r_2]\) пересекаются, если существует хотя бы одно число \(x\), такое, что \(l_1 \le x \le r_1\) и \(l_2 \le x \le r_2\).

Массив отрезков \([[l_1, r_1], [l_2, r_2], \dots, [l_k, r_k]]\) называется красивым, если \(k\) четно, и его можно разбить на \(\frac{k}{2}\) пар таким образом, что:

  • каждый элемент массива принадлежит ровно одной паре;
  • отрезки в каждой паре пересекаются между собой;
  • отрезки из разных пар не пересекаются.

Например, массив \([[2, 4], [9, 12], [2, 4], [7, 7], [10, 13], [6, 8]]\) является красивым, так как его можно разбить на \(3\) пары следующим образом:

  • первый элемент массива (отрезок \([2, 4]\)) и третий элемент массива (отрезок \([2, 4]\));
  • второй элемент массива (отрезок \([9, 12]\)) и пятый элемент массива (отрезок \([10, 13]\));
  • четвертый элемент массива (отрезок \([7, 7]\)) и шестой элемент массива (отрезок \([6, 8]\)).

Как видно, отрезки в каждой паре пересекаются, а отрезки из разных пар не пересекаются.

Дан массив из \(n\) отрезков \([[l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]]\). Вам нужно удалить минимально возможное количество элементов из этого массива, чтобы получившийся массив был красивым.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество отрезков в массиве. Затем следуют \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 10^9\)), обозначающих \(i\)-й отрезок.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которые нужно удалить, чтобы получившийся массив был красивым.

Примечание

В первом наборе входных данных достаточно удалить \(5\)-й элемент массива отрезков. Тогда получится массив \([[2, 4], [9, 12], [2, 4], [7, 7], [10, 13], [6, 8]]\), который является красивым.

Во втором наборе входных данных можно удалить \(1\)-й, \(3\)-й и \(4\)-й элементы массива. Тогда получится массив \([[2, 8], [5, 6]]\), который является красивым.

В третьем наборе входных данных необходимо удалить весь массив.

E. Заполни матрицу

жадные алгоритмы математика Структуры данных *2200

Дана квадратная матрица, состоящая из \(n\) строк и \(n\) столбцов ячеек, оба пронумерованы от \(1\) до \(n\). Ячейки раскрашены в белый или черный цвет. Ячейки с \(1\) до \(a_i\) черные, а ячейки с \(a_i+1\) до \(n\) белые, в \(i\)-м столбце.

Вы хотите разместить \(m\) целых чисел в матрице, от \(1\) до \(m\). Есть два правила:

  • в каждой клетке должно быть не больше одного числа;
  • в черных клетках не должно быть чисел.

Красота матрицы — это количество таких \(j\), что \(j+1\) написано в той же строке, в следующем столбце от \(j\) (в соседней справа ячейке).

Чему равна максимальная красота матрицы?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер матрицы.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)) — количество черных клеток в каждом столбце.

В третьей строке записано одно целое число \(m\) (\(0 \le m \le \sum \limits_{i=1}^n n - a_i\)) — количество чисел, которые требуется разместить в матрице. Обратите внимание, что это число может не поместиться в 32-битный целый тип данных.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — максимальную красоту матрицы после того, как вы разместите в ней все \(m\) целых чисел. Обратите внимание, что дается не больше чисел, чем белых клеток в матрице, так что ответ всегда существует.

B. Тенцинг и книги

битмаски жадные алгоритмы математика *1100

Тенцинг получил в подарок от фанатов \(3n\) книг. Книги расположены в \(3\) стопках по \(n\) книг в каждой стопке. У каждой книги есть неотрицательная целочисленная величина — сложность.

Тенцинг хочет прочитать несколько (возможно, ни одной) книги. Изначально его знание равно \(0\).

За один шаг Тенцинг выбирает непустую стопку, читает верхнюю книги в стопке и затем выкидывает ее. Если знание Тенцинга сейчас равно \(u\), то оно станет равно \(u|v\) после прочтения книги со сложностью \(v\). Здесь \(|\) обозначает операцию побитового ИЛИ. Тенцинг может прочитать произвольное количество книг и остановиться в любой момент.

Любимое число Тенцинга равно \(x\). Можете определить, может ли его знание стать равным \(x\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 10^5\), \(0 \leq x \leq 10^9\)) — количество книг в каждой стопке и любимое число Тенцинга.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^9\)) — сложности книг в первой стопке сверху вниз.

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(0 \leq b_i \leq 10^9\)) — сложности книг во второй стопке сверху вниз.

Четвертая строка содержит \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(0 \leq c_i \leq 10^9\)) — сложности книг в третьей стопке сверху вниз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если Тенцинг может сделать свое знание равным \(x\), и «No» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере Тенцинг может прочитать следующие \(4\) книги:

  • прочитать книгу со сложностью \(1\) сверху первой стопки. Знание становится равно \(0|1=1\).
  • прочитать книгу со сложностью \(1\) сверху третьей стопки. Знание становится равно \(1|1=1\).
  • прочитать книгу со сложностью \(2\) сверху первой стопки. Знание становится равно \(1|2=3\).
  • прочитать книгу со сложностью \(5\) сверху второй стопки. Знание становится равно \(3|5=7\).

После чтения этих книг знание Тенцинга равно \(7\).

В третьем примере Тенцинг может прочитать \(0\) книг, и его итоговое знание будет равно \(0\).

D. Тенцинг и его друзья животные

графы жадные алгоритмы Конструктив *1900

Расскажи историю обо мне и моих друзьях животных.

У Тенцинга есть \(n\) друзей животных. Он пронумеровал их от \(1\) до \(n\).

Однажды Тенцинг захотел поиграть со своими друзьями. Для этого Тенцинг устроит несколько игр.

В рамках одной игры он выберет множество \(S\), которое является подмножеством \(\{1,2,3,...,n\}\) и выберет целое число \(t\). Затем он будет играть в игру с животными из \(S\) в течение \(t\) минут.

Но есть некоторые ограничения:

  1. Тенцинг очень любит друга \(1\), поэтому \(1\) должен быть элементом \(S\).
  2. Тенцинг не любит друга \(n\), поэтому \(n\) не должен быть элементом \(S\).
  3. Существует m дополнительных ограничений. \(i\)-е специальное ограничение описывается целыми числами \(u_i\), \(v_i\) и \(y_i\). Предположим, что \(x\) — это общее время, в течение которого ровно один из \(u_i\) и \(v_i\) играет с Тенцингом. Тенцинг должен гарантировать, что \(x\) меньше или равно \(y_i\). Иначе будет несчастье.

Тенцинг хочет узнать максимальное общее время, которое он может играть со своими друзьями животными. Пожалуйста, найдите максимальное общее время, которое Тенцинг может играть со своими друзьями животными, и способ организации игр, при котором достигается это максимальное общее время, или сообщите, что он может играть со своими друзьями животными бесконечное количество времени. Кроме того, Тенцинг не хочет устраивать очень много игр, поэтому он устроит не более \(n^2\) игр.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 100\), \(0 \leq m \leq \frac{n(n-1)}{2}\)) — количество друзей животных и количество специальных ограничений.

В \(i\)-й из следующих \(m\) строк ввода содержится три целых числа \(u_i\), \(v_i\) и \(y_i\) (\(1\leq u_i<v_i\leq n\), \(0\leq y_i\leq 10^9\)), описывающих \(i\)-е ограничение. Гарантируется, что для \(1 \leq i < j \leq m\), \((u_i,v_i) \neq (u_j,v_j)\).

Выходные данные

Если Тенцинг может играть со своими друзьями-животными бесконечное количество времени, выведите «inf» (без кавычек).

Иначе, в первой строке выведите общее время \(T\) (\(0 \leq t \leq 10^{18}\)) и количество игр \(k\) (\(0 \leq k \leq n^2\)).

В следующих \(k\) строках вывода выведите двоичную строку \(s\) длины \(n\) и целое число \(t\) (\(0 \leq t \leq 10^{18}\)) — представление множества \(S\) и количество минут, в течение которых будет играться эта игра. Если \(s_i=\texttt{1}\), то \(i \in S\), иначе, если \(s_i=\texttt{0}\), то \(i \notin S\).

При ограничениях этой задачи можно доказать, что если Тенцинг может играть со своими друзьями только конечное количество времени, то он может играть с ними не более \(10^{18}\) минут.

Примечание

В первом примере:

  1. Тенцинг проведёт игру с другом \(\{1\}\) в течение \(1\) минуты.
  2. Тенцинг проведёт игру с друзьями \(\{1,4\}\) в течение \(1\) минуты.
  3. Тенцинг проведёт игру с друзьями \(\{1,3\}\) в течение \(1\) минуты.
  4. Тенцинг проведёт игру с друзьями \(\{1,2,3,4\}\) в течение \(1\) минуты.

Если после этого Тенцинг проведет еще одну игру с друзьями \(\{1,2\}\) в течение \(1\) минуты, то время пребывания ровно одного из друзей \(2\) или \(3\) с Тенцинг станет \(2\) минуты, что не будет удовлетворять \(3\)-му ограничению.

Во втором наборе никаких специальных ограничений нет. Поэтому Тенцинг может играть с другом \(\{1\}\) в течение бесконечного количества времени.

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\).

Рисунок для второго примера:

F. Тенцинг и дерево

Деревья жадные алгоритмы кратчайшие пути поиск в глубину и подобное сортировки *2500

У Тенцинга есть неориентированное дерево из \(n\) вершин.

Определим ценность дерева с черными и белыми вершинами следующим образом: значение ребра — это абсолютная разница между количеством черных вершин в двух компонентах дерева после удаления ребра. Ценность дерева — это сумма значений по всем ребрам.

Для всех \(k\) таких, что \(0 \leq k \leq n\), Тенцинг хочет знать максимальную ценность дерева, когда \(k\) вершин окрашены в черный цвет, а \(n-k\) вершин — в белый.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1\leq n\leq 5000\)) — количество вершин.

Следующие \(n-1\) строк ввода содержат \(2\) целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n, u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите \(n+1\) число. Число \(i\) является ответом на вопрос \(k=i-1\).

Примечание

Рассмотрим первый пример. Когда \(k=2\), Тенцинг может покрасить вершины \(1\) и \(2\) в черный цвет, тогда значение ребра \((1,2)\) равно 0, а значения остальных ребер все равны \(2\). Таким образом, ценность этого дерева равна \(4\).

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\).

A. Саша и раскраска массива

жадные алгоритмы сортировки *800

Саша нашел массив \(a\), состоящий из \(n\) целых чисел, и попросил вас раскрасить элементы.

Вы должны раскрасить каждый элемент массива. Вы можете использовать столько цветов, сколько захотите, но каждый элемент должен быть окрашен ровно в один цвет, и для каждого цвета должен быть хотя бы один элемент этого цвета.

Стоимость одного цвета — это значение \(\max(S) - \min(S)\), где \(S\) — последовательность элементов этого цвета. Стоимость всей раскраски — это сумма стоимостей по всем цветам.

Например, предположим, что у вас есть массив \(a = [\color{red}{1}, \color{red}{5}, \color{blue}{6}, \color{blue}{3}, \color{red}{4}]\), вы раскрасили его элементы в два цвета следующим образом: элементы на позициях \(1\), \(2\) и \(5\) имеют цвет \(1\); элементы на позициях \(3\) и \(4\) имеют цвет \(2\). Тогда:

  • Стоимость цвета \(1\) составляет \(\max([1, 5, 4]) - \min([1, 5, 4]) = 5 - 1 = 4\);
  • Стоимость цвета \(2\) равна \(\max([6, 3]) - \min([6, 3]) = 6 - 3 = 3\);
  • Общая стоимость раскраски равна \(7\).

Для данного массива \(a\) вы должны рассчитать максимальную возможную стоимость раскраски.

Входные данные

В первой строке дано число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \le n \le 50\)) — длина массива \(a\).

Во второй строке каждого набора входных данных дано \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 50\)) — массив \(a\).

Выходные данные

Для каждого набора входных данных выведите максимальную возможную стоимость раскраски в отдельной строке.

Примечание

В первом примере одной из оптимальных раскрасок является \([\color{red}{1}, \color{red}{5}, \color{blue}{6}, \color{blue}{3}, \color{red}{4}]\). Ответ для неё равен \((5 - 1) + (6 - 3) = 7\).

Во втором примере единственной возможной раскраской является \([\color{blue}{5}]\), для которой ответ равен \(5 - 5 = 0\).

В третьем примере оптимальной окраской является \([\color{blue}{1}, \color{red}{6}, \color{red}{3}, \color{blue}{9}]\), для которой ответ равен \((9 - 1) + (6 - 3) = 11\).

B. Лонг лонг

жадные алгоритмы математика *800

Сегодня Лёше привезли массив чисел \(a_1, a_2, \dots, a_n\) длины \(n\). Он может выполнить сколько угодно (возможно, ноль) операций, чтобы изменить массив.

За \(1\) операцию Лёша может выбрать любые \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\), и домножить все элементы массива от \(l\)-го до \(r\)-го включительно на \(-1\). Иными словами, за \(1\) операцию Лёша может заменить подмассив \([a_l, a_{l + 1}, \dots, a_r]\) на \([-a_l, -a_{l + 1}, \dots, -a_r]\).

Например, пусть \(n = 5\), массив равен \([1, -2, 0, 3, -1]\), \(l = 2\) и \(r = 4\), тогда после выполнения операции массив будет равен \([1, 2, 0, -3, -1]\).

Лёша опаздывает в школу, поэтому вы должны помочь ему найти максимальную возможную сумму элементов массива, которую можно получить выполнением произвольного количества операций, а также минимальное число операций, которое придется для этого сделать.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива.

В следующей строке даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сначала максимальную возможную сумму массива, а затем через пробел минимальное количество операций, которое необходимо выполнить, чтобы получить такую сумму.

Обратите внимание, что ответ может не помещаться в стандартный целочисленный тип данных, поэтому не забудьте использовать 64-битный тип данных.

Примечание

Далее для каждого тестового случая приводится только одна из возможных кратчайших последовательностей операций. Существуют и другие, которые имеют такую же длину и приводят к максимальной сумме элементов.

В первом примере Лёша может применить операции: \((1, 4)\), \((2, 2)\), \((6, 6)\).

Во втором примере для получения наибольшей суммы нужно выполнить операции: \((1, 8)\), \((5, 6)\).

В четвёртом примере необходимо нужно применить всего лишь одну операцию — \((2, 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\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

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]\). Проследите за переполнением целочисленного типа.

В третьем наборе входных данных есть всего одна частица, так что операций применять нельзя.

D. Построчная склейка

жадные алгоритмы Конструктив математика Строки теория чисел *1400

Пусть дана таблица символов \(A\), которая имеет размеры \(r \times c\). Её построчной склейкой назовём строку, получаемую конкатенацией всех её строк, т. е. \(\) A_{11}A_{12} \dots A_{1c}A_{21}A_{22} \dots A_{2c} \dots A_{r1}A_{r2} \dots A_{rc}. \(\)

Таблицу символов \(A\) назовём плохой, если в каких-то двух её соседних клетках (в клетках, имеющих общую сторону) записаны одинаковые символы.

Вам дано целое положительное число \(n\). Рассмотрим все строки \(s\), состоящие только из маленьких латинских букв, которые при это не являются построчной склейкой никакой плохой таблицы. Найдите произвольную такую строку, в которой число различных символов минимально среди всех таких строк длины \(n\).

Можно доказать, что строка, удовлетворяющая всем условиям задачи, всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^6\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите строку с минимальным числом различных символов среди всех подходящих строк длины \(n\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных есть \(3\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

tththat
hat
a
t
Можно доказать, что меньше чем \(3\) различными символами обойтись нельзя.

Во втором наборе входных данных есть \(2\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

iis
s
Можно доказать, что меньше чем \(2\) различными символами обойтись нельзя.

В третьем наборе входных данных есть всего \(1\) способ, как можно построчно вписать строку \(s\) в матрицу, причём он не является плохим.

В четвёртом наборе входных данных есть \(4\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

ttotomtomato
omaato
mto
a
t
o
Можно доказать, что меньше чем \(4\) различными символами обойтись нельзя. Обратите внимание, что, например, строка «orange» не является корректным ответом, поскольку в ней \(6 > 4\) различных символов, строка же «banana» не является корректным ответом, потому что она является построчной склейкой следующей плохой таблицы:
ba
na
na

F1. Перестановка минимальной стоимости (простая версия)

жадные алгоритмы Конструктив математика Перебор *2600

Единственное отличие между этой задачей и сложной версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 5 \cdot 10^3\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

F2. Перестановка минимальной стоимости (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив математика сортировки Структуры данных *2800

Единственное отличие между этой задачей и простой версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 2 \cdot 10^5\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

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\).

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\) дней.

В третьем примере нет вариантов полностью убрать симптомы.

A. Человек, ставший Богом

жадные алгоритмы сортировки *800

Карс возмущен узким мышлением жителей своей деревни, поскольку они довольствуются тем, что стоят на месте, и не пытаются стать совершенной формой жизни. Будучи первоклассным изобретателем, Карс хочет усовершенствовать свое тело и стать совершенной формой жизни. К сожалению, \(n\) жителей деревни с подозрением относятся к его идеям. \(i\)-й житель деревни подозревает Карса на \(a_i\). По отдельности каждый житель деревни боится Карса, поэтому они объединяются в группы, чтобы стать сильнее.

Силу группы сельчан от \(l\) до \(r\) можно определить как \(f(l,r)\), где \(\)f(l,r) = |a_l - a_{l+1}| + |a_{l + 1} - a_{l + 2}| + \ldots + |a_{r-1} - a_r|.\(\) Здесь \(|x-y|\) — модуль числа \(x-y\). Группа с одним жителем имеет силу \(0\).

Карс хочет разбить жителей деревни на ровно \(k\) подряд идущих групп так, чтобы сумма их сил была минимальна. Формально, он должен найти \(k - 1\) положительных целых чисел \(1 \le r_1 < r_2 < \ldots < r_{k - 1} < n\) такие, что \(f(1, r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)\) минимально. Помогите Карсу найти минимальное значение \(f(1, r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)\).

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 100)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n,k\) \((1 \leq k \leq n \leq 100)\) — количество жителей деревни и количество групп, на которые они должны быть разбиты.

Вторая строка каждого набора входных данных содержит \(n\) целых \(a_1,a_2, \ldots, a_n\) \((1 \leq a_i \leq 500)\) — подозрение каждого из жителей деревни.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное значение суммы сил всех групп, т. е. минимально возможное значение \(f(1,r_1) + f(r_1 + 1, r_2) + \ldots + f(r_{k-1} + 1, n)\).

Примечание

В первом наборе входных данных сгруппируем жителей деревни с подозрениями \((1,3,5,2)\) в \((1,3,5)\) и \((2)\). Таким образом, \(f(1,3) + f(4,4) = (|1 - 3| + |3 - 5|) + 0 = 4 + 0 = 4\).

Во втором наборе входных данных мы сгруппируем жителей деревни с подозрениями \((1,9,12,4,7,2)\) в \((1),(9,12),(4,7,2)\). Итак, \(f(1,1) + f(2,3) + f(4,6) = 0 + 3 + 8 = 11\).

B. Одиссея Хамона

битмаски жадные алгоритмы *1000

Джонатан сражается с приспешниками-вампирами DIO. Всего их \(n\), а их силы равны \(a_1, a_2, \dots, a_n\). \(\def\and {{\,\texttt{&}\,}}\)

Обозначим \((l, r)\) как группу, состоящую из вампиров с индексами от \(l\) до \(r\). Джонатан понимает, что сила любой такой группы находится в её самом слабом звене, то есть побитовом И. Более формально, уровень силы группы \((l, r)\) определяется как \(\)f(l,r) = a_l \and a_{l+1} \and a_{l+2} \and \ldots \and a_r.\(\) Здесь \(\and\) обозначает операцию побитового И.

Поскольку Джонатан хочет быстро победить вампиров, он разделит вампиров на подряд идущие группы так, чтобы каждый вампир был в ровно одной группе, а сумма сил групп была минимальна. Среди всех подходящих способов разделить вампиров, он хотел бы найти способ с максимальным количеством групп.

Учитывая силы каждого из \(n\) вампиров, найдите максимальное число групп среди всех возможных способов разделить вампиров с наименьшей суммой сил.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество вампиров.

Вторая строка каждого набора входных данных содержит \(n\) целых \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^9\)) — силы каждого вампира.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество групп среди всех возможных способов разделения вампиров с наименьшей суммой сил.

Примечание

В первом наборе входных данных оптимальным является принятие всех \(n\) вампиров за одну группу. Тогда, \(f(1,3) = 1 \and 2 \and 3 = 0\).

Во втором наборе входных данных оптимальным является создание \(2\) групп, \((2,3,1)\) и \((5,2)\). Тогда, \(f(1,3) + f(4,5) = (2 \and 3 \and 1) + (5 \and 2) = 0 + 0 = 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\) — это максимальная сила пользователя стенда, которого ДИО может вызвать.

D. Профессор Хигасиката

жадные алгоритмы реализация снм Строки Структуры данных *1900

Джосуке устал от спокойной жизни в Мориохе. Пойдя по стопам своего племянника Дзётаро, он решает упорно учиться и стать профессором информатики. Просматривая в Интернете задачи по программированию, он наткнулся на следующую.

Пусть \(s\) — бинарная строка длины \(n\). Операция над \(s\) определяется как выбор двух различных целых чисел \(i\) и \(j\) (\(1 \leq i < j \leq n\)), и обмен местами символов \(s_i, s_j\).

Рассмотрим \(m\) строк \(t_1, t_2, \ldots, t_m\), где \(t_i\) — подстрока\(^\dagger\) из \(s\) от \(l_i\) до \(r_i\). Определим \(t(s) = t_1+t_2+\ldots+t_m\) как конкатенацию строк \(t_i\) в таком порядке.

Существует \(q\) обновлений строки. В \(i\)-м обновлении \(s_{x_i}\) инвертируется. То есть, если \(s_{x_i}=1\), то \(s_{x_i}\) становится \(0\) и наоборот. После каждого обновления найдите минимальное количество операций, которые нужно выполнить над \(s\), чтобы сделать \(t(s)\) лексикографически как можно большим\(^\ddagger\).

Обратите внимание, что на самом деле ни одна операция не применяется. Нужно найти только количество операций.

Помогите Йосуке в его мечте, решив за него эту задачу.

——————————————————————

\(\dagger\) Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, нуля или всех) символов из начала и нескольких (возможно, нуля или всех) символов из конца.

\(\ddagger\) Строка \(a\) лексикографически больше строки \(b\) такой же длины тогда и только тогда, когда выполняется следующее условие:

  • в первой позиции, где \(a\) и \(b\) отличаются, в строка \(a\) стоит \(1\), а в строке \(b\) стоит \(0\).
Входные данные

Первая строка содержит три целых числа \(n\), \(m\), \(q\) (\(1 \leq n,m,q \leq 2 \cdot 10^5\)).

Вторая строка содержит бинарную строку \(s\) длины \(n\), состоящую только из цифр \(0\) и \(1\).

В \(i\)-й среди следующих \(m\) строк содержатся два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)).

В \(i\)-й среди следующих \(q\) строк содержится одно целое число \(x_i\) (\(1 \leq x_i \leq n\)).

Выходные данные

Выведите \(q\) целых чисел. В строке \(i\) выведите минимальное количество операций, которое необходимо выполнить над \(s\), чтобы получить лексикографически наибольшую возможную строку \(t(s)\) после \(i\)-го обновления.

Примечание

В первом примере:

Изначально \(t(s) = s(1,2) + s(1,2) = 0101\).

После \(1\)-го запроса, \(s\) становится \(11\) и, соответственно, \(t\) становится \(1111\). Никаких операций выполнять не нужно, так как \(t(s)\) уже является лексикографически наибольшей строкой из возможных.

После \(2\)-го запроса \(s\) становится \(01\) и, следовательно, \(t\) становится \(0101\). Необходимо выполнить операцию \(1\), поменяв местами \(s_1\) и \(s_2\). Следовательно, \(t(s)\) становится \(1010\), что является лексикографически наибольшей строкой, которую можно получить.

F. Личность босса

Бинарный поиск битмаски жадные алгоритмы математика поиск в глубину и подобное сортировки Структуры данных *2500

Во время расследования происхождения Диаволо, Джорно получает от Полнареффа секретный код. Код можно представить в виде бесконечной последовательности целых положительных чисел: \(a_1, a_2, \dots \). Джорно сразу видит закономерность, лежащую в основе кода. Первые \(n\) чисел \(a_1, a_2, \dots, a_n\) являются известными. Для \(i > n\) значение \(a_i\) равно \((a_{i-n}\ |\ a_{i-n+1})\), где \(|\) обозначает операцию побитового ИЛИ.

Части информации о Диаволо скрыты в \(q\) вопросах. Каждый вопрос связан с положительным целым числом \(v\), а ответом на него является наименьший индекс \(i\), такой, что \(a_i > v\). Если такого \(i\) не существует, то ответом будет \(-1\). Помогите Джорно ответить на вопросы!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\,000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 2 \cdot 10^5\) , \(1 \leq q \leq 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^9\)) — части кода, которые определяют шаблон.

В \(i\)-й из следующих \(q\) строк содержится одно целое число \(v_i\) (\(0 \leq v_i \leq 10^9\)) — вопрос, который задает Джорно.

Сумма \(n\) и \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(q\) чисел. Число \(i\) является ответом на \(i\)-й вопрос, заданный Джорно.

Примечание

В первом примере \(a = [2,1,3,3,\ldots]\).

  • Для первого вопроса, \(a_1=2\) – элемент с наименьшим индексом, больший чем \(1\).
  • Для второго вопроса, \(a_3=3\) – элемент с наименьшим индексом, больший чем \(2\).
  • Для третьего вопроса, нет индекса \(i\), такого что \(a_i > 3\).
.

B. Вика и мостик

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *1200

Летом Вика любит бывать на даче. Там есть всё для отдыха: удобные качели, велосипеды и речка.

Через речку прокинут деревянный мостик, состоящий из \(n\) дощечек. Он уже довольно старый и неказистый, поэтому Вика решила его покрасить. Да и в сарае как раз нашлись банки с краской \(k\) цветов.

Покрасив каждую дощечку в один из \(k\) цветов, Вика уже хотела пойти качаться на качелях, чтобы отдохнуть от работы. Однако поняла, что дом находится на другой стороне речки, а краска ещё не полностью засохла и ходить по мостику пока нельзя.

Чтобы не портить внешний вид мостика, Вика решила, что всё же пройдёт по нему, но наступая только на дощечки одного цвета. Так как иначе небольшой слой краски на её подошве испортит дощечку другого цвета. У девушки также осталось немного краски, но её хватит на перекрашивание лишь одной дощечки мостика.

Сейчас Вика стоит на земле перед первой дощечкой. Чтобы пройти по мостику, она выберет некоторые дощечки одинакового цвета (после перекрашивания), которые имеют номера \(1 \le i_1 < i_2 < \ldots < i_m \le n\) (дощечки нумеруются с \(1\) слева направо). Тогда Вике придётся переступить \(i_1 - 1, i_2 - i_1 - 1, i_3 - i_2 - 1, \ldots, i_m - i_{m-1} - 1, n - i_m\) дощечек в результате каждого из \(m + 1\) шагов.

Так как Вика боится упасть, она не хочет делать слишком длинные шаги. Помогите ей и скажите минимально возможное максимальное количество дощечек, через которые ей придётся переступить за один шаг, если в процессе перехода по мостику она может перекрасить одну (или ноль) дощечек в другой цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество дощечек в мостике и количество различных цветов краски.

Во второй строке каждого набора входных данных содержится \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le k\)) — цвета, в которые Вика покрасила дощечки мостика.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимально возможное максимальное количество дощечек, через которое придётся переступить Вике за один шаг.

Примечание

В первом наборе входных данных Вика может перекрасить дощечку посередине в цвет \(1\) и пройти через мостик, не переступая через дощечки.

Во втором наборе входных данных Вика может перекрасить дощечку посередине в цвет \(2\) и пройти через мостик, каждый раз переступая через одну дощечку.

В третьем наборе входных данных Вика может перекрасить предпоследнюю дощечку в цвет \(2\) и пройти по мостику, наступая только на дощечки с номерами \(2\) и \(5\). Тогда Вике придётся переступить \(1\), \(2\) и \(1\) дощечку при каждом шаге, поэтому ответ равен \(2\).

В четвёртом наборе входных данных Вика может вовсе не перекрашивать мостик и пройти по нему, каждый раз переступая через две дощечки, идя по дощечкам цвета \(3\).

В пятом наборе входных данных Вика может вовсе не перекрашивать мостик и пройти по нему, не переступая через дощечки.

B. Монстры

жадные алгоритмы математика сортировки *1000

Монокарп играет в очередную компьютерную игру. Как обычно, его персонаж занимается убийством монстров. Монокарпу противостоят \(n\) монстров, пронумерованных от \(1\) до \(n\), \(i\)-й из них изначально имеет \(a_i\) очков здоровья.

У персонажа Монокарпа есть способность, которая наносит \(k\) урона монстру с наибольшим текущим здоровьем. Если таких монстров несколько, выбирается тот, у которого меньший номер. Если здоровье монстра становится меньше или равно \(0\) после использования способности, то он умирает.

Монокарп использует свою способность до тех пор, пока все монстры не умрут. Ваша задача — определить порядок, в котором монстры будут умирать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество монстров и урон способности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — начальное количество здоровья монстров.

Сумма \(n\) по всем наборах входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — номера монстров в порядке, в котором они будут умирать.

Примечание

В первом примере очки здоровья меняются следующим образом: \([1, 2, \underline{3}] \rightarrow [1, \underline{2}, 1] \rightarrow [\underline{1}, 0, 1] \rightarrow [-1, 0, \underline{1}] \rightarrow [-1, 0, -1]\). Монстр, который получит урон при следующем применении способности Монокарпа, обозначается подчеркнутым.

Во втором примере очки здоровья меняются следующим образом: \([\underline{1}, 1] \rightarrow [-2, \underline{1}] \rightarrow [-2, -2]\).

В третьем примере очки здоровья меняются следующим образом: \([2, \underline{8}, 3, 5] \rightarrow [2, \underline{5}, 3, 5] \rightarrow [2, 2, 3, \underline{5}] \rightarrow [2, 2, \underline{3}, 2] \rightarrow [\underline{2}, 2, 0, 2] \rightarrow [-1, \underline{2}, 0, 2] \rightarrow [-1, -1, 0, \underline{2}] \rightarrow [-1, -1, 0, -1]\).

D. Покраска массива

жадные алгоритмы Конструктив *1700

Дан массив из \(n\) целых чисел, каждое из которых — \(0\), \(1\) или \(2\). Изначально каждый элемент массива покрашен в синий цвет.

Ваша цель — покрасить все элементы в красный цвет. Для этого вы можете выполнять операции двух типов:

  • заплатить одну монету, выбрать синий элемент и покрасить его в красный цвет;
  • выбрать красный элемент, не равный \(0\), и соседний с ним синий элемент, уменьшить выбранный красный элемент на \(1\), а выбранный синий элемент покрасить в красный цвет.

Какое минимальное количество монет вам придется потратить, чтобы покрасить все элементы в красный?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2\)).

Выходные данные

Выведите одно целое число — минимальное количество монет, которое вам придется потратить, чтобы покрасить все элементы массива в красный цвет.

Примечание

В первом примере из условия можно покрасить все элементы в красный за одну монету следующим образом:

  1. покрасить \(2\)-й элемент в красный за одну монету;
  2. уменьшить \(2\)-й элемент на \(1\) и покрасить \(1\)-й элемент в красный;
  3. уменьшить \(2\)-й элемент на \(1\) и покрасить \(3\)-й элемент в красный.

Во втором примере из условия можно покрасить все элементы в красный за две монеты следующим образом:

  1. покрасить \(4\)-й элемент в красный за одну монету;
  2. уменьшить \(4\)-й элемент на \(1\) и покрасить \(3\)-й элемент в красный;
  3. покрасить \(1\)-й элемент в красный за одну монету;
  4. уменьшить \(3\)-й элемент на \(1\) и покрасить \(2\)-й элемент в красный.

F. XOR-разделение

Бинарный поиск битмаски Деревья жадные алгоритмы разделяй и властвуй Структуры данных *2700

Для множества целых чисел \(S\) определим его стоимость как минимальное значение \(x \oplus y\) среди всех пар различных чисел из множества (\(\oplus\) обозначает оператор побитового исключающего ИЛИ). Если в множестве менее двух элементов, его стоимость равна \(2^{30}\).

Вам дано множество целых чисел \(\{a_1, a_2, \dots, a_n\}\). Вы должны разделить его на два множества \(S_1\) и \(S_2\) таким образом, что каждый элемент принадлежит ровно одному из этих двух множеств. Стоимость разделения — это минимум из стоимостей \(S_1\) и \(S_2\).

Найдите разделение с максимальной стоимостью.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 200000\)) — количество элементов в множестве.

Во второй строке задано \(n\) различных целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i < 2^{30}\)) — элементы множества.

Выходные данные

Выведите строку из \(n\) символов 0 и/или 1, описывающую разделение следующим образом: \(i\)-й символ строки должен быть 0, если \(a_i\) принадлежит \(S_1\), в противном случае этот символ должен быть 1.

Если существует несколько оптимальных ответов — выведите любой из них.

D. Сбалансированный раунд

жадные алгоритмы Перебор реализация сортировки *900

Вы являетесь автором раунда Codeforces и подготовили \(n\) задач, которые вы собираетесь задать, причем задача \(i\) имеет сложность \(a_i\). Вы будете выполнять следующий процесс:

  • удалить некоторые (возможно, ноль) задач из списка;
  • переставить оставшиеся задачи в любом порядке, который вы пожелаете.

Раунд считается сбалансированным, если и только если абсолютная разница между сложностью любых двух последовательных задач не превышает \(k\) (то есть меньше или равен \(k\)).

Какое минимальное количество задач нужно удалить, чтобы расстановка задач была сбалансированной?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два положительных целых числа \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) и \(k\) (\(1 \leq k \leq 10^9\)) — количество задач и максимально допустимая абсолютная разница между последовательными задачами.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелами, \(a_i\) (\(1 \leq a_i \leq 10^9\)) — сложность каждой задачи.

Обратите внимание, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество задач, которые нужно удалить, чтобы расстановка задач была сбалансированной.

Примечание

В первом примере мы можем удалить первые \(2\) задачи и составить набор, используя задачи со сложностями \([4, 5, 6]\), с разницей между соседними задачами равной \(|5 - 4| = 1 \leq 1\) и \(|6 - 5| = 1 \leq 1\).

Во втором примере мы можем взять одну задачу и составить раунд, используя задачу со сложностью \(10\).

H. Третья буква

графы жадные алгоритмы поиск в глубину и подобное реализация снм *1700

Чтобы выиграть свою самую трудную битву, Мирча придумал отличную стратегию для своей армии. У него есть \(n\) солдат, и он решил расположить их определенным образом в лагерях. Каждый солдат должен принадлежать ровно одному лагерю, и на каждой целочисленной точке оси \(x\) находится один лагерь (на точках \(\cdots, -2, -1, 0, 1, 2, \cdots\)).

Стратегия состоит из \(m\) условий. Условие \(i\) гласит, что солдат \(a_i\) должен принадлежать лагерю, который находится в \(d_i\) метрах перед лагерем, к которому принадлежит человек \(b_i\). (Если \(d_i < 0\), то лагерь \(a_i\) должен быть в \(-d_i\) метрах позади лагеря \(b_i\).)

Теперь Мирча задается вопросом, существует ли разбиение солдат, которое удовлетворяет условию, и просит вашей помощи! Ответьте «YES», если существует разбиение из \(n\) солдат, которое удовлетворяет всем \(m\) условиям, и «NO» в противном случае.

Обратите внимание, что два разных солдата могут быть размещены в одном лагере.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит два положительных целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^5\); \(1 \leq m \leq n\)) — количество солдат и количество условий соответственно.

Затем следуют \(m\) строк, каждая из которых содержит \(3\) целых числа: \(a_i\), \(b_i\), \(d_i\) (\(a_i \neq b_i\); \(1 \leq a_i, b_i \leq n\); \(-10^9 \leq d_i \leq 10^9\)) — описывающие условия, объясненные в условии. Обратите внимание, что если \(d_i\) положительно, то \(a_i\) должен быть в \(d_i\) метрах перед \(b_i\), а если отрицательно, то \(a_i\) должен быть в \(-d_i\) метрах позади \(b_i\).

Обратите внимание, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует такое расположение \(n\) солдат, которое удовлетворяет всем \(m\) условиям, и «NO» в противном случае.

Примечание

В первом примере мы можем разделить солдат на лагеря следующим образом:

  • Солдат \(1\) в лагере с координатой \(x = 3\).
  • Солдат \(2\) в лагере с координатой \(x = 5\).
  • Солдат \(3\) в лагере с координатой \(x = 9\).
  • Солдат \(4\) в лагере с координатой \(x = 11\).

Для второго примера не существует разбиения, которое может удовлетворить все ограничения одновременно.

Для третьего примера не существует разбиения, которое удовлетворяет всем условиям, так как мы получаем противоречивую информацию о той же паре.

Одно из возможных разбиений, удовлетворяющих условиям в четвёртом примере:

  • Солдат \(1\) в лагере с координатой \(x = 10\).
  • Солдат \(2\) в лагере с координатой \(x = 13\).
  • Солдат \(3\) в лагере с координатой \(x = -2023\).
  • Солдат \(4\) в лагере с координатой \(x = -2023\).

B. Сортировка четностью

жадные алгоритмы сортировки *800

У вас есть массив \(a\), состоящий из \(n\) целых чисел. К заданному массиву можно применять следующую операцию:

  • Поменять местами два элемента \(a_i\) и \(a_j\) такие, что \(i \neq j\), \(a_i\) и \(a_j\) либо оба четные, либо оба нечетные.

Определите, можно ли, совершая операцию некоторое число раз (возможно, нулевое), отсортировать массив в порядке неубывания?

Например, пусть \(a\) = [\(7, 10, 1, 3, 2\)]. Тогда можно совершить \(3\) операции для того, чтобы отсортировать массив:

  1. Поменять местами \(a_3 = 1\) и \(a_1 = 7\), так как \(1\) и \(7\) — нечетные. Получим \(a\) = [\(1, 10, 7, 3, 2\)];
  2. Поменять местами \(a_2 = 10\) и \(a_5 = 2\), так как \(10\) и \(2\) — четные. Получим \(a\) = [\(1, 2, 7, 3, 10\)];
  3. Поменять местами \(a_4 = 3\) и \(a_3 = 7\), так как \(3\) и \(7\) — нечетные. Получим \(a\) = [\(1, 2, 3, 7, 10\)].
Входные данные

В первой строке входных данных содержится целое число \(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\)

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если массив можно отсортировать, применив к нему операцию некоторое количество раз;
  • «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

C. Плитки возвращаются

жадные алгоритмы *1000

Влад вспомнил, что у него был ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо, и \(i\)-я плитка имеет цвет \(c_i\).

Если встать на первую плитку и начать прыгать на любое количество плиток вправо, можно получить путь длины \(p\). Длиной пути называется количество плиток, на которых вы стояли.

Влад хочет понять, можно ли получить путь длины \(p\) такой, что:

  • он заканчивается в плитке под номером \(n\);
  • выполнено то, что \(p\) нацело делится на \(k\);
  • путь разбивается на блоки длины ровно \(k\);
  • плитки в каждом блоке имеют один и тот же цвет, цвета в соседних блоках необязательно различны.

Например, пусть \(n = 14\), \(k = 3\).

Цвета плиток содержатся в массиве \(c\) = [\(\color{red}{1}, \color{violet}{2}, \color{red}{1}, \color{red}{1}, \color{gray}{7}, \color{orange}{5}, \color{green}{3}, \color{green}{3}, \color{red}{1}, \color{green}{3}, \color{blue}{4}, \color{blue}{4}, \color{violet}{2}, \color{blue}{4}\)]. Тогда можно построить путь длины \(6\), состоящий из \(2\)-x блоков:

\(\color{red}{c_1} \rightarrow \color{red}{c_3} \rightarrow \color{red}{c_4} \rightarrow \color{blue}{c_{11}} \rightarrow \color{blue}{c_{12}} \rightarrow \color{blue}{c_{14}}\)

Все плитки из \(1\)-го блока будут иметь цвет \(\color{red}{\textbf{1}}\), из \(2\)-го — цвет \(\color{blue}{\textbf{4}}\).

В данном примере также возможно построить путь длины \(9\), в котором все плитки из \(1\)-го блока будут иметь цвет \(\color{red}{\textbf{1}}\), из \(2\)-го — цвет \(\color{green}{\textbf{3}}\), из \(3\)-го — цвет \(\color{blue}{\textbf{4}}\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если можно получить путь, удовлетворяющий данным условиям;
  • «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно прыгнуть с первой плитки на последнюю;

Второй набор входных данных разобран в условии задачи.

F. Лиза и марсиане

битмаски Деревья жадные алгоритмы математика Строки *1800

Девочку Лизу похитили марсиане! Не беда, ведь она смотрела много телепередач про инопланетян, поэтому знает, что её ждёт. Назовём число марсианским, если оно является целым неотрицательным и строго меньше \(2^k\), например, при \(k = 12\), числа \(51\), \(1960\), \(0\) — марсианские, а числа \(\pi\), \(-1\), \(\frac{21}{8}\), \(4096\) — нет.

Инопланетяне выдадут Лизе \(n\) марсианских чисел \(a_1, a_2, \ldots, a_n\). Затем они попросят её назвать любое марсианское число \(x\). После чего Лиза выберет в выданной последовательности пару чисел \(a_i, a_j\) (\(i \neq j\)) и посчитает \((a_i \oplus x) \& (a_j \oplus x)\). Операция \(\oplus\) означает Побитовое исключающее ИЛИ, операция \(\&\) означает Побитовое И. Например, \((5 \oplus 17) \& (23 \oplus 17) = (00101_2 \oplus 10001_2) \& (10111_2 \oplus 10001_2) = 10100_2 \& 00110_2 = 00100_2 = 4\).

Лиза уверена, что чем больше окажется посчитанное значение, тем выше её шансы вернуться домой. Помогите девочке выбрать такие \(i, j, x\), чтобы максимизировать посчитанное значение.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

В первой строке даны целые числа \(n, k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le k \le 30\)) — длина последовательности марсианских чисел и значение \(k\).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^k\)) — последовательность марсианских чисел.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите три целых числа \(i, j, x\) (\(1 \le i, j \le n\), \(i \neq j\), \(0 \le x < 2^k\)). Значение \((a_i \oplus x) \& (a_j \oplus x)\) должно быть максимально возможным.

Если решений несколько, вы можете вывести любое.

Примечание

Первый набор входных данных: \((3 \oplus 14) \& (1 \oplus 14) = (0011_2 \oplus 1110_2) \& (0001_2 \oplus 1110_2) = 1101_2 = 1101_2 \& 1111_2 = 1101_2 = 13\).

Второй набор входных данных: \((1 \oplus 0) \& (1 \oplus 0) = 1\).

Третий набор входных данных: \((9 \oplus 4082) \& (13 \oplus 4082) = 4091\).

Четвёртый набор входных данных: \((3 \oplus 7) \& (0 \oplus 7) = 4\).

B. Несбалансированные массивы

графы жадные алгоритмы Конструктив математика сортировки *1800

Ntarsis придумал массив \(a\) из \(n\) неотрицательных целых чисел.

Массив \(b\) из \(n\) целых чисел называется несбалансированным, если он удовлетворяет следующим условиям:

  • \(-n\le b_i\le n\), \(b_i \ne 0\),
  • не существует двух индексов \((i, j)\) (\(1 \le i, j \le n\)), таких что \(b_i + b_j = 0\),
  • для каждого \(1 \leq i \leq n\), существует ровно \(a_i\) индексов \(j\) (\(1 \le j \le n\)) таких, что \(b_i+b_j>0\), где \(i\) и \(j\) не обязательно различны.

Дан массив \(a\). Ntarsis хочет, чтобы вы построили любой несбалансированный массив. Помогите ему решить эту задачу или определите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если не существует несбалансированного массива.

В противном случае выведите «YES». Затем, на следующей строке, выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\), где \(b_i \neq 0\) для всех \(1 \leq i \leq n\) — допустимый несбалансированный массив.

Примечание

Для первого набора входных данных, \(b = [1]\) является допустимым несбалансированным массивом: для \(i = 1\) существует ровно одно \(j\) (\(j = 1\)), где \(b_1 + b_j > 0\).

Для второго набора можно показать, что не существует допустимого несбалансированного массива.

Для третьего набора, \(a = [0, 1, 0]\). Массив \(b = [-3, 1, -2]\) является допустимым несбалансированным массивом.

  • Для \(i = 1\) и \(i = 3\) не существует индекса \(j\) такого, что \(b_i + b_j > 0\).
  • Для \(i = 2\) существует только один индекс \(j = 2\), такой что \(b_i + b_j > 0\) (\(b_2 + b_2 = 1 + 1 = 2\)).
Другой возможный ответ на третий пример — \(b = [-2, 1, -3]\).

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\).

E. Соперничества

жадные алгоритмы Конструктив Структуры данных *3400

У Ntarsis есть массив \(a\) длины \(n\).

Мощность подотрезка \(a_l \dots a_r\) (\(1 \leq l \leq r \leq n\)) определяется следующим образом:

  • Наибольшее значение \(x\), такое что \(a_l \dots a_r\) содержит \(x\), и ни \(a_1 \dots a_{l-1}\), ни \(a_{r+1} \dots a_n\) не содержат \(x\).
  • Если такого \(x\) не существует, мощность равна \(0\).

Массив \(b\) называется соперником для \(a\), если выполняются следующие условия:

  • Длина и \(a\), и \(b\) равна \(n\).
  • Для всех \(l, r\), где \(1 \leq l \leq r \leq n\), мощность \(a_l \dots a_r\) равна мощности \(b_l \dots b_r\).
  • Элементы \(b\) являются положительными числами.

Ntarsis хочет найти соперника \(b\) для \(a\) такого, что сумма \(b_i\) (\(1 \leq i \leq n\)) будет максимальной. Помогите ему с этой задачей!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — допустимого соперника для \(a\) такого, что сумма \(b_1 + b_2 + \cdots + b_n\) будет максимальной.

Если существует несколько соперников с максимальной суммой, выведите любого из них.

Примечание

Для первого набора одним из соперников с максимальной суммой является \([2, 4, 2, 3, 3]\).

Можно показать, что \([2, 4, 2, 3, 3]\) является соперником для \([1, 4, 1, 3, 3]\).

Ниже перечислены все возможные подмассивы \(a\) и \(b\) и их соответствующие мощности:

  • Мощность \(a[1:1] = [1] = 0\), мощность \(b[1:1] = [2] = 0\).
  • Мощность \(a[1:2] = [1, 4] = 4\), мощность \(b[1:2] = [2, 4] = 4\).
  • Мощность \(a[1:3] = [1, 4, 1] = 4\), мощность \(b[1:3] = [2, 4, 2] = 4\).
  • Мощность \(a[1:4] = [1, 4, 1, 3] = 4\), мощность \(b[1:4] = [2, 4, 2, 3] = 4\).
  • Мощность \(a[1:5] = [1, 4, 1, 3, 3] = 4\), мощность \(b[1:5] = [2, 4, 2, 3, 3] = 4\).
  • Мощность \(a[2:2] = [4] = 4\), мощность \(b[2:2] = [4] = 4\).
  • Мощность \(a[2:3] = [4, 1] = 4\), мощность \(b[2:3] = [4, 2] = 4\).
  • Мощность \(a[2:4] = [4, 1, 3] = 4\), мощность \(b[2:4] = [4, 2, 3] = 4\).
  • Мощность \(a[2:5] = [4, 1, 3, 3] = 4\), мощность \(b[2:5] = [4, 2, 3, 3] = 4\).
  • Мощность \(a[3:3] = [1] = 0\), мощность \(b[3:3] = [2] = 0\).
  • Мощность \(a[3:4] = [1, 3] = 0\), мощность \(b[3:4] = [2, 3] = 0\).
  • Мощность \(a[3:5] = [1, 3, 3] = 3\), мощность \(b[3:5] = [2, 3, 3] = 3\).
  • Мощность \(a[4:4] = [3] = 0\), мощность \(b[4:4] = [3] = 0\).
  • Мощность \(a[4:5] = [3, 3] = 3\), мощность \(b[4:5] = [3, 3] = 3\).
  • Мощность \(a[5:5] = [3] = 0\), мощность \(b[5:5] = [3] = 0\).

Можно показать, что не существует соперника с большей суммой, чем \(2 + 4 + 2 + 3 + 3 = 14\).

A. Рассортировка

жадные алгоритмы математика Перебор *800

Назовем массив \(a\) длины \(n\) отсортированным, если \(a_1 \leq a_2 \leq \ldots \leq a_{n-1} \leq a_n\).

У Ntarsis есть массив \(a\) длины \(n\).

Он может выполнить следующую операцию над массивом любое число раз (в том числе ноль):

  • Выбрать индекс \(i\) (\(1 \leq i \leq n-1\)).
  • Добавить \(1\) к \(a_1, a_2, \ldots, a_i\).
  • Вычесть \(1\) из \(a_{i+1}, a_{i+2}, \ldots, a_n\).

Значения \(a\) могут быть отрицательными после операции.

Определите минимальное количество операций, необходимых для того, чтобы сделать \(a\) неотсортированным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Выведите минимальное количество операций, необходимых для того, чтобы сделать массив неотсортированным.

Примечание

В первом наборе мы можем выполнить \(1\) операцию, чтобы сделать массив неотсортированным:

  • Выберем \(i = 1\). Тогда \(a\) становится равным \([2, 0]\), то есть перестаёт быть отсортированным.

Во втором случае мы можем выполнить \(2\) операции, чтобы сделать массив неотсортированным:

  • Выберем \(i = 3\). Тогда \(a\) становится \([2, 9, 11, 12]\).
  • Выберем \(i = 3\). Тогда \(a\) становится \([3, 10, 12, 11]\), то есть он становится неотсортированным.

Можно доказать, что \(1\) и \(2\) операции являются минимальным необходимым количеством операций в первом и втором наборе соответственно.

В третьем случае массив уже неотсортирован, поэтому мы выполняем \(0\) операций.

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\).

A. Учитель Дальтон

жадные алгоритмы математика *800

Дальтон — учитель класса, в котором учатся \(n\) учеников, пронумерованных от \(1\) до \(n\). В классе имеется \(n\) стульев, также пронумерованных от \(1\) до \(n\). Изначально студент \(i\) сидит на стуле \(p_i\). Гарантируется, что \(p_1,p_2,\dots, p_n\) — перестановка длины \(n\).

Студент счастлив, если его номер отличается от номера его стула. Чтобы сделать всех студентов счастливыми, Дальтон может многократно проделать следующую операцию: выбрать двух разных студентов и поменять их стулья местами. Какое минимальное количество ходов необходимо для того, чтобы все студенты были счастливы? Можно показать, что при ограничениях этой задачи можно сделать всех студентов счастливыми за конечное число ходов.

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается в массиве дважды), и \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве есть \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество студентов.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — \(p_i\) обозначает начальную кафедру студента \(i\). Гарантируется, что \(p\) является перестановкой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных требуется вывести минимально необходимое количество ходов.

Примечание

В первом наборе входных данных оба студента уже счастливы, поэтому Дальтон может сделать \(0\) ходов.

Во втором наборе входных данных Дальтон может поменять местами стулья студентов \(1\) и \(2\), получив массив \([2, 1, 3]\). Затем он может поменять местами стулья студентов \(2\) и \(3\), получив массив \([2, 3, 1]\). В этот момент все студенты довольны, а он выполнил \(2\) хода. Выполнить задачу меньшим числом ходов невозможно.

В третьем наборе входных данных, поменяв местами стулья студентов \(1\) и \(2\), а затем поменяв местами стулья студентов \(4\) и \(5\), Дальтон за \(2\) хода получил массив \([2, 1, 5, 3, 4]\).

B. Наибольший интервал делителей

жадные алгоритмы Комбинаторика математика Перебор теория чисел *900

Дано число \(n\). Найдите максимальный размер интервала \([l, r]\) из целых положительных чисел такого, что для каждого числа \(i\) из этого интервала (т.е. \(l \leq i \leq r\)) \(n\) кратно \(i\).

Если вам даны два целых числа \(l\le r\), то размер интервала \([l, r]\) равен \(r-l+1\) (т.е. совпадает с количеством целых чисел, принадлежащих интервалу).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных вывести одно целое число: максимальный размер допустимого интервала.

Примечание

В первом наборе входных данных допустимым интервалом с максимальным размером является \([1, 1]\) (он допустим, так как \(n = 1\) кратно \(1\)) и его размер равен \(1\).

Во втором наборе входных данных допустимым интервалом с максимальным размером является \([4, 5]\) (он допустим, так как \(n = 40\) кратно \(4\) и \(5\)), а его размер равен \(2\).

В третьем наборе входных данных допустимым интервалом с максимальным размером является \([9, 11]\).

В четвертом наборе входных данных допустимым интервалом с максимальным размером является \([8, 13]\).

В седьмом наборе входных данных допустимым интервалом с максимальным размером является \([327869, 327871]\).

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\).

Дерево в третьем примере:

Дерево в четвёртом примере:

A. Раскраска массива

жадные алгоритмы математика *800

Вам дан массив, состоящий из \(n\) целых чисел. Ваша задача — ответить, можно ли раскрасить все его элементы в два цвета так, чтобы суммы элементов обоих цветов имели одинаковую четность и в каждый цвет был покрашен хотя бы один элемент.

Например, если массив равен [\(1,2,4,3,2,3,5,4\)], мы можем раскрасить его следующим образом: [\(\color{blue}{1},\color{blue}{2},\color{red}{4},\color{blue}{3},\color{red}{2},\color{red}{3},\color{red}{5},\color{red}{4}\)], где сумма элементов синего цвета равна \(6\), а сумма элементов красного цвета равна \(18\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 50\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2, \dots, a_n\) (\(1 \le a_i \le 50\)) — массив \(a\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно раскрасить массив в два цвета так, чтобы суммы элементов обоих цветов имели одинаковую четность и в каждый цвет был покрашен хотя бы один элемент, и «NO» в противном случае.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как правильный ответ).

Примечание

Первый пример входных данных разобран в условии.

Во втором примере существует только две раскраски \([\color{blue}{4},\color{red}{7}]\) и \([\color{red}{4},\color{blue}{7}]\), но в обоих случаях четность сумм разная.

Во третьем примере можно покрасить \([\color{blue}{3},\color{blue}{9},\color{red}{8}]\) и тогда \(12\) и \(8\) оба четные.

B. Максимальное округление

жадные алгоритмы математика реализация *1100

Дано натуральное число \(x\). Вы можете выполнить следующую операцию:

  • выбрать положительное целое число \(k\) и округлить \(x\) до \(k\)-го разряда

Обратите внимание, что числовые разряды нумеруются справа налево и начинаются с нуля. Если запись числа имеет \(k\) разрядов, то считается, что цифра на \(k\)-м разряде равна \(0\).

Округление происходит следующим образом:

  • если цифра на \((k-1)\)-м разряде больше или равна \(5\), то цифра на \(k\)-м разряде увеличивается на \(1\), иначе цифра на \(k\)-м разряде не меняется (используется математическое округление).

  • если до выполнения операций цифра на \(k\)-м разряде равнялась \(9\), и она должна увеличиться на \(1\), то мы ищем наименьший такой разряд \(k'\) (\(k'>k\)), где цифра на \(k'\)-м разряде меньше \(9\) и прибавляем \(1\) к цифре на \(k'\)-м разряде. Затем мы присваиваем \(k=k'\).

  • после этого все цифры, разряды которых меньше \(k\), заменяются нулями.

Ваша задача - сделать \(x\) максимально возможным, если вы можете выполнять операцию столько раз, сколько хотите.

Например, если \(x\) равно \(3451\), то если последовательно выбрать:

  • \(k=1\), то после операции \(x\) станет равным \(3450\)
  • \(k=2\), то после операции \(x\) станет равным \(3500\)
  • \(k=3\), то после операции \(x\) станет равным \(4000\)
  • \(k=4\), то после операции \(x\) станет равным \(0\)
Для максимизации ответа нужно сначала выбрать \(k=2\), а затем \(k=3\), тогда число станет равным \(4000\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

В каждом наборе входных данных дано натуральное число \(x\) длиной до \(2 \cdot 10^5\), гарантируется, что в записи числа нет ведущих нулей.

Гарантируется, что сумма длин чисел \(x\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимально возможное значение \(x\) после операций. В записи числа не должно быть ведущих нулей.

Примечание

В первом примере лучше не выполнять никаких операций.

Во втором примере вы можете выполнить одну операцию и получить \(10\).

В третьем примере можно выбрать \(k=1\) или \(k=2\). В обоих случаях ответ будет \(100\).

C. Построение по минимумам

жадные алгоритмы сортировки *1200

У мальчика Саши есть массив \(a\) из \(n\) целых чисел. Ему стало скучно, и для всех \(i\), \(j\) (\(i < j\)) он записал минимальное значение из \(a_i\) и \(a_j\). Он получил новый массив \(b\) размером \(\frac{n\cdot (n-1)}{2}\).

Например, если \(a=\) [\(2,3,5,1\)], он запишет [\(\min(2, 3), \min(2, 5), \min(2, 1), \min(3, 5), \min(3, 1), min(5, 1)\)] \(=\) [\(2, 2, 1, 3, 1, 1\)].

Также, он случайным образом перемешал все элементы массива \(b\).

К сожалению, он забыл массив \(a\), и ваша задача — восстановить любой возможный массив \(a\), из которого мог быть получен массив \(b\).

Элементы массива \(a\) должны находиться в диапазоне \([-10^9,10^9]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 200\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\le n\le 10^3\)) — длина массива \(a\).

Вторая строка каждого набора содержит \(\frac{n\cdot (n-1)}{2}\) целых чисел \(b_1,b_2,\dots,b_{\frac{n\cdot (n-1)}{2}}\) (\(−10^9\le b_i\le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) для всех тестов не превышает \(10^3\) и для каждого из данных массивов \(b\) существует исходный массив.

Выходные данные

Для каждого теста выведите любой возможный массив \(a\) длиной \(n\).

Примечание

В первом примере Саша выбрал массив \([1,3,3]\), тогда массив \(b\) будет выглядеть как \([\min(a_1,a_2)=1, \min(a_1,a_3)=1, \min(a_2,a_3)=3]\), после перемешивания его элементов, массив может выглядеть как \([1,3,1]\).

Во втором примере есть только одна пара, поэтому подходит массив \([10,10]\). Другим подходящим массивом может быть \([15,10]\).

G. Подсчет графов

графы Деревья жадные алгоритмы Комбинаторика разделяй и властвуй снм сортировки *2000

Дано дерево, состоящее из \(n\) вершин. Дерево — это связный неориентированный граф без циклов. Каждое ребро дерева имеет свой вес, \(w_i\).

Ваша задача — подсчитать количество различных графов, для которых одновременно выполняются четыре условия:

  1. В графе нет петель и кратных ребер.
  2. Веса на ребрах графа целые числа и не превышают \(S\).
  3. Граф имеет ровно одно минимальное остовное дерево.
  4. Минимальное остовное дерево графа является заданным деревом.

Два графа считаются различными, если их наборы рёбер различны с учётом весов рёбер.

Ответ может быть большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(S\) (\(2 \le n \le 2 \cdot 10^5, 1\le S\le 10^9\)) — количество вершин и верхняя граница весов.

Затем следуют \(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 S\)) — ребро в дереве с весом \(w_i\).

Гарантируется, что сумма \(n\) для всех тестов не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста выведите количество различных графов, удовлетворяющих условиям, по модулю \(998244353\).

Примечание

В первом примере существует единственный граф, который и является заданным деревом.

Во втором примере заданное дерево выглядит так:

Ниже изображены все возможные графы для второго примера, красным цветом выделено минимальное остовное дерево:

A. Кнопки

жадные алгоритмы игры математика *800

Аня и Катя попали в секретную лабораторию.

В секретной лаборатории есть \(a+b+c\) кнопок. Оказалось, что на \(a\) кнопок может нажать только Аня, на \(b\) кнопок может нажать только Катя, а на \(c\) кнопок могут нажать обе девочки. Аня и Катя решили сыграть в игру, нажимая по очереди на эти кнопки. Первой нажимает на кнопку Аня. Каждую кнопку можно нажать не более одного раза, поэтому в какой-то момент одна из девочек не сможет нажать на кнопку.

Та из девочек, которая первой не сможет нажать на кнопку, проиграет. Определите, кто из девочек выиграет, если каждая из них будет играть оптимально.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех целых чисел \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10^9\)) — количества кнопок, на которые может нажать только Аня, количества кнопок, на которые может нажать только Катя и количества кнопок, на которые могут нажать обе девочки, соответственно.

Выходные данные

Для каждого набора входных данных выведите «First», если выиграет Аня, или «Second», если выиграет Катя.

Примечание

Для удобства объяснения будем считать, что кнопки пронумерованы целыми числами от \(1\) до \(a+b+c\): на первые \(a\) кнопок может нажать только Аня, на следующие \(b\) кнопок может нажать только Катя, а на последние \(c\) кнопок могут нажать обе девочки.

В первом наборе входных данных Аня может первым ходом нажать на \(3\)-ю кнопку. Тогда Катя сможет нажать только на \(2\)-ю кнопку на своём ходе, а Аня потом нажмёт на \(1\)-ю кнопку. У Кати не будет возможного хода, поэтому Аня победит.

Во втором наборе входных данных Аня может нажимать на одну из первых девяти кнопок на своём ходе (не нажимая на одну кнопку более одного раза). Тогда вне зависимости от действий Кати, после первых \(12\) ходов все кнопки с \(10\)-й по \(15\)-ю будут нажаты. На \(13\)-м ходе Аня сможет нажать на одну из первых девяти кнопок, после чего Катя не сможет сделать ход, поэтому победит Аня.

В третьем наборе входных данных один из возможных вариантов развития игры приведён ниже:

  • На \(1\)-м ходе Аня нажмёт на \(5\)-ю кнопку.
  • На \(2\)-м ходе Катя нажмёт на \(4\)-ю кнопку.
  • На \(3\)-м ходе Аня нажмёт на \(6\)-ю кнопку.
  • На \(4\)-м ходе Катя нажмёт на \(3\)-ю кнопку.
  • На \(5\)-м ходе Аня нажмёт на \(1\)-ю кнопку.
  • На \(6\)-м ходе Катя нажмёт на \(2\)-ю кнопку.
  • Аня не сможет сделать ход, поэтому выиграет Катя.

Можно показать, что Катя может выиграть вне зависимости от действий Ани.

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\) вафли вне зависимости от вашего выбора.

Обратите внимание, что Петя не заинтересован в минимизации количества вафель, которые он съест, поэтому он будет есть вафли строго в соответствии с правилом, описанным в условии.

C. Очередная задача на перестановки

жадные алгоритмы Конструктив математика теория чисел *1000

Леше подарили новую игру «НОД-перестановки». Каждый раунд этой игры проходит следующим образом:

  • Сначала Леша выбирает перестановку\(^{\dagger}\) \(a_1, a_2, \ldots, a_n\) целых чисел от \(1\) до \(n\).
  • После этого для всех \(i\) от \(1\) до \(n\) вычисляется целое число \(d_i = \gcd(a_i, a_{(i \bmod n) + 1})\).
  • Счёт раунда равен количеству различных чисел среди \(d_1, d_2, \ldots, d_n\).

Лёша уже сыграл несколько раундов и ему захотелось найти такую перестановку \(a_1, a_2, \ldots, a_n\), что его счёт будет максимально возможным.

Напомним, что \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\), а \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

\(^{\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 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных целых чисел \(a_{1},a_{2},\ldots,a_{n}\) (\(1 \le a_i \le n\)) — искомую перестановку.

Если существует несколько перестановок, на которых достигается максимальный счёт, вы можете вывести любую.

Примечание

В первом наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(5\). Для перестановки \(a=[1,2,4,3,5]\) массив \(d\) равен \([1,2,1,1,1]\). Он содержит \(2\) различных числа, что является максимумом среди всех перестановок из \(5\) чисел. Существуют и другие ответы для этого набора входных данных.

Во втором наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(2\). Всего существует две такие перестановки — \(a=[1,2]\) и \(a=[2,1]\). В обоих случаях массив \(d\) равен \([1,1]\), поэтому обе перестановки являются корректным ответом.

В третьем наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(7\). Для перестановки \(a=[1,2,3,6,4,5,7]\) массив \(d\) равен \([1,1,3,2,1,1,1]\). Он содержит \(3\) различных числа, а значит и счёт раунда с такой перестановкой равен \(3\). Можно показать, что не существует перестановки чисел от \(1\) до \(7\), счёт которой будет больше \(3\).

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\).

B. Оля и игра с массивами

жадные алгоритмы Конструктив математика сортировки *1000

Артём предложил девочке Оле сыграть в следующую игру. Есть список из \(n\) массивов, \(i\)-й массив содержит \(m_i \ge 2\) целых положительных чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m_i}\).

Оля может переместить из каждого массива не более одного (возможно, \(0\)) числа в другой массив. Обратите внимание, перемещать числа из одного массива можно не более одного раза, однако добавлять числа в один массив можно несколько раз, а также, все перемещения выполняются одновременно.

Назовем красотой списка массивов величину \(\sum_{i=1}^n \min_{j=1}^{m_i} a_{i,j}\). Иными словами, для каждого массива мы находим значение минимального элемента в нём, после чего суммируем получившиеся значения.

Суть игры — сделать красоту списка массивов максимально возможной. Помогите Оле победить в этой нелегкой игре!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 25000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 25000\)) — количество массивов в списке.

Далее следуют описания массивов. Каждое описание массива состоит из двух строк.

Первая строка содержит одно целое число \(m_i\) (\(2 \le m_i \le 50000\)) — количество чисел в \(i\)-м массиве.

В следующей строке даны \(m_i\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m_i}\) (\(1 \le a_{i,j} \le 10^9\)) — элементы \(i\)-го массива.

Гарантируется, что сумма \(m_i\) по всем наборам входных данных не превосходит \(50000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную красоту списка массивов, которую Оля может получить.

Примечание

В первом наборе входных данных можно переместить число \(3\) из второго массива в первый. Тогда красота равна \(\min(1, 2, 3) + \min(4) = 5\). Можно показать, что это максимально возможная красота.

Во втором наборе входных данных есть всего один массив, поэтому независимо от перемещений красота равна \(\min(100, 1, 6) = 1\).

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. Сделаем те же самые действия что и из первой позиции.

B. Грибоводство

жадные алгоритмы сортировки *1200

Каждый год в замке Короля Гномов проходит состязание в выращивании грибов среди гномов. Соревнование является одним из самых престижных, а за победу в нем дают деревянную салатницу. В этом году на мероприятие собрались лучшие грибоводы со всего мира, поэтому пришлось немного изменить правила, чтобы зрителям было интереснее наблюдать.

У каждого грибовода есть свой гриб, который он будет выращивать на состязании. По новым правилам состязание будет состоять из двух частей. Первая часть длится t1 секунд, а вторая t2 секунд, между первой и второй частью есть небольшой перерыв.

После стартового свистка начинается первая часть состязания, и все грибоводы одновременно начинают выращивать грибы, каждый со своей скоростью vi метров в секунду. Спустя t1 секунд, грибоводы прекращают выращивать грибы и уходят на перерыв. Во время перерыва, по необъяснимым причинам, рост всех грибов уменьшается на k процентов. После перерыва стартует вторая часть состязания и все грибоводы одновременно продолжают выращивать грибы, каждый со своей скоростью ui метров в секунду. Спустя t2 секунд после окончания перерыва состязание заканчивается. Обратите внимание, что скорости до перерыва и после перерыва могут отличаться.

Перед состязанием гном Паша узнал у всех участников, какие две скорости они выбрали. Но участники, не захотели раскрывать ему всю свою стратегию и поэтому не сказали в каком порядке они будут использовать эти скорости. То есть если участник выбрал скорости ai и bi, то возможны два варианта: либо до перерыва он использует скорость ai, а после bi, либо наоборот.

Гном Паша очень хочет выиграть тотализатор. Он знает, что каждый участник выберет стратегию максимизирующую высоту своего гриба. Помогите гному Паше составить финальную таблицу результатов соревнования.

Участники сортируются в таблице результатов по высоте гриба (участники с более высокими грибами стоят в таблице раньше). При равенстве высот грибов участники сортируются по их номеру (участники с меньшим номером стоят раньше).

Входные данные

В первой строке входных данных записано четыре целых числа n, t1, t2, k (1 ≤ n, t1, t2 ≤ 1000; 1 ≤ k ≤ 100) — количество участников, время до перерыва, время после перерыва и процент, на который падает рост грибов за перерыв, соответственно.

В каждой из следующих n строк записано по два целых числа. В i-ой (1 ≤ i ≤ n) строке записаны через пробел целые числа ai, bi (1 ≤ ai, bi ≤ 1000) — скорости, которые выбрал учаcтник c номером i.

Выходные данные

Выведите финальную таблицу результатов: n строк, каждая строка должна содержать номер соответствующего гнома и итоговую максимальную величину его гриба ровно с двумя знаками после точки. Ответ будет считаться правильным, если он абсолютно точный.

Примечание
  • Первый пример: Обоим участникам удобнее сначала использовать скорость 2, а потом скорость 4, так как 2·3·0.5 + 4·3 > 4·3·0.5 + 2·3.

B. Юбилейные монеты

Бинарный поиск жадные алгоритмы математика Перебор *1200

Монокарп собирается сделать покупку на ровно \(m\) бурлей.

У него есть два типа монет в следующем количестве:

  • монеты номиналом \(1\) бурль: \(a_1\) обычных монет и бесконечно много юбилейных монет;
  • монеты номиналом \(k\) бурлей: \(a_k\) обычных монет и бесконечно много юбилейных монет.

Монокарп планирует совершить покупку так, чтобы не получить сдачи — суммарный номинал предоставленных монет должен быть ровно \(m\). Он может использовать и обычные, и юбилейные монеты. Однако, он хочет потратить как можно меньше юбилейных монет.

Какое наименьшее суммарное количество юбилейных монет Монокарп может потратить на покупку?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны четыре целых числа \(m, k, a_1\) и \(a_k\) (\(1 \le m \le 10^8\); \(2 \le k \le 10^8\); \(0 \le a_1, a_k \le 10^8\)) — стоимость покупки, номинал второго типа монет и количества обычных монет каждого из двух типов, соответственно.

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее суммарное количество юбилейных монет, которые Монокарп может потратить на покупку.

Примечание

В первом наборе входных данных нет обычных монет ни одного из типов. Монокарп может использовать \(2\) юбилейные монеты номиналом \(1\) бурль и \(3\) юбилейные монеты номиналом \(3\) (так как \(k=3\)) бурля, чтобы получить суммарно \(11\) бурлей за \(5\) юбилейных монет.

Во втором наборе у Монокарпа очень много обычных монет обоих типов. Он может использовать \(11\) монет номиналом \(1\) бурль, например. Обратите внимание, что Монокарп не обязан минимизировать суммарное количество использованных монет. Таким образом, он использует \(0\) юбилейных монет.

В третьем наборе Монокарп может использовать \(5\) обычных монет номиналом \(1\) бурль и \(1\) обычную монету номиналом \(3\) бурля. Так он получит \(8\) бурлей суммарно, когда ему нужно \(11\). Так что \(1\) юбилейной монеты номиналом \(3\) бурля хватит.

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\)-й элемент — счастливые.

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\) уже отсортирован.

F. Четыре масти

Бинарный поиск битмаски жадные алгоритмы Потоки *3200

Игра в берландский покер проводится следующим образом. Участвуют \(n+1\) человек: \(n\) игроков, пронумерованных от \(1\) до \(n\), и дилер. У дилера есть колода, содержащая карты четырех разных мастей (количество карт каждой масти необязательно одинаковое); количество карт в колоде нацело делится на \(n\). Дилер раздает все карты игрокам, что каждый игрок получает одинаковое количество карт, и все карты колоды розданы.

После раздачи карт каждый игрок выбирает одну из четырех мастей (независимо) и сбрасывает все карты из своей руки, которые не принадлежат к выбранной им масти. Победителем игры становится игрок, у которого на руках осталось максимальное количество карт. Количество очков, которые получает победитель, равно \(x - y\), где \(x\) — количество карт в руке победителя, а \(y\) — максимальное количество карт среди всех других игроков; все остальные получают \(0\) очков. Обратите внимание, это означает, что если есть несколько игроков с максимальным количеством карт, каждый получает \(0\) очков.

Поскольку каждый игрок хочет максимизировать свои шансы на победу, он выберет масть с максимальным количеством карт в своей руке.

Монокарп — дилер. Он уже раздал несколько карт игрокам; \(i\)-й игрок получил \(a_{i,j}\) карт масти \(j\). Обратите внимание, что количество карт на руках игроков в данный момент необязательно должно быть одинаковым. У Монокарпа в колоде осталось \(b_1, b_2, b_3, b_4\) карт мастей \(1, 2, 3, 4\) соответственно. Он должен раздать их игрокам таким образом, чтобы после раздачи всех карт у каждого игрока стало одинаковое количество карт.

Для каждого игрока подсчитайте максимальное количество очков, которое он может получить среди всех возможных способов раздачи оставшихся карт в соответствии с правилами игры.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество игроков.

Затем следуют \(n\) строк, \(i\)-я из них содержит четыре целых числа \(a_{i,1}, a_{i,2}, a_{i,3}, a_{i,4}\) (\(0 \le a_{i,j} \le 10^6\)), где \(a_{i,j}\) — это количество карт \(j\)-й масти, которые в данный момент есть у \(i\)-го игрока.

Последняя строка содержит \(4\) целых числа \(b_1, b_2, b_3, b_4\) (\(0 \le b_j \le 10^6\)), где \(b_j\) — это количество карт \(j\)-й масти, которые Монокарп еще должен раздать.

Дополнительное ограничение на входные данные: оставшиеся карты можно раздать таким образом, чтобы у каждого игрока стало одинаковое количество карт.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них — максимальное количество очков, которое может получить \(i\)-й игрок среди всех возможных способов раздачи оставшихся карт.

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», поэтому ковёр ей не понравится.

E. Коля и кинотеатр

жадные алгоритмы Конструктив Структуры данных *1600

Недавно Коля узнал, что скоро в его городе откроется новый кинотеатр, который будет показывать новый фильм каждый день на протяжении \(n\) дней. Так, в день номер \(1 \le i \le n\), кинотеатр покажет премьеру \(i\)-го фильма. Коля узнал расписание фильмов и сопоставил каждому фильму его интересность — целую величину \(a_i\).

Однако даже самые интересные фильмы не будут казаться такими, если фильмы долго не смотреть, поэтому интересность очередного фильма снизится на \(d \cdot cnt\), где \(d\) — заранее определенная величина, а \(cnt\) — кол-во дней с последнего посещения кинотеатра. Также известно, что Коля успел посетить другой кинотеатр за день до открытия нового — в день номер \(0\). Так, если мы впервые посетим кинотеатр в день с номером \(i\), то \(cnt\) — кол-во дней с последнего посещения кинотеатра будет равно \(i\).

Так, например, если \(d = 2\), а \(a = [3, 2, 5, 4, 6]\), то посетив фильмы с номерами \(1\) и \(3\), значение \(cnt\) для дня номер \(1\) будет равно \(1 - 0 = 1\), а значение \(cnt\) для дня номер \(3\) будет равно \(3 - 1 = 2\), так суммарная интересность фильмов будет \(a_1 - d \cdot 1 + a_3 - d \cdot 2 = 3 - 2 \cdot 1 + 5 - 2 \cdot 2 = 2\).

К несчастью, у Коли есть время только на то, чтобы посетить не более \(m\) фильмов. Помогите ему составить план посещения кинотеатра так, чтобы суммарная интересность всех посещенных им фильмов была максимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le n\), \(1 \le d \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — интересность фильмов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальную суммарную интересность просмотренных фильмов.

Примечание

Первый пример разобран в условии.

Во втором примере, оптимально не посещать никакие фильмы.

В третьем наборе входных данных оптимально посетить фильмы с номерами \(2\), \(3\), \(5\), \(6\), тогда суммарная интересность посещенных фильмов составит \(45 - 6 \cdot 2 + 1 - 6 \cdot 1 + 39 - 6 \cdot 2 + 11 - 6 \cdot 1 = 60\).

A. Канал

жадные алгоритмы реализация *800

Петя — администратор канала в одном мессенджере. Всего на канал подписано \(n\) человек, причём Петя не считается подписчиком.

Петя опубликовал в канале новое сообщение. В момент его публикации в сети находилось \(a\) человек. Будем считать, что подписчики обязательно читают все сообщения канала, если они в сети.

Затем Петя следил за числом подписчиков, находящихся в сети. Ему последовательно пришло \(q\) уведомлений вида «пользователь вышел из сети» или «пользователь зашёл в сеть». Какой именно пользователь заходит или выходит, Пете неизвестно. Гарантируется, что такая последовательность уведомлений действительно могла прийти Пете.

Пете интересно, все ли пользователи канала прочли его сообщение. Помогите ему, сообщите одно из следующего:

  • не может быть такого, что все \(n\) подписчиков прочли сообщение;
  • возможно, что все \(n\) подписчиков прочли сообщение;
  • гарантированно все \(n\) подписчиков прочли сообщение.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(q\) (\(1 \le n \le 100\), \(0 \le a \le n\), \(1 \le q \le 100\)) — число подписчиков канала, изначальное число подписчиков в сети, а также число поступивших уведомлений.

Вторая строка каждого набора входных данных содержит одну строку длины \(q\), состоящую из символов '+' и '-'. В этой строке \(i\)-й символ равен '+', если при \(i\)-м оповещении пользователь заходит в сеть, и '-' иначе.

Выходные данные

Для каждого набора входных данных выведите одну строку: «YES», если все \(n\) подписчиков гарантированно прочитали сообщение, «NO», если гарантированно не все \(n\) подписчиков прочитали сообщение, и «MAYBE» иначе.

Примечание

В первом наборе входных данных изначально в сети находятся все \(5\) из \(5\) подписчиков, так что они сразу читают сообщение. Ответ — «YES».

Во втором наборе входных данных после первых двух уведомлений число подписчиков в сети станет равно \(4\), а затем кто-то выйдет из сети, так что пятый подписчик точно не может прочитать сообщение. Не может быть такого, что все подписчики прочли сообщение, так что ответ — «NO».

В третьем наборе входных данных, с одной стороны, выйти и зайти может один и тот же человек (и тогда только \(4\) из \(5\) подписчиков прочли сообщение), с другой стороны, при последнем уведомлении зайти может пятый подписчик, ранее не бывший в сети (тогда все подписчики прочтут сообщение). Однозначно заключить нельзя, поэтому ответ — «MAYBE».

В четвёртом наборе входных данных после всех уведомлений в сети гарантированно находится пять пользователей. Все они прочтут сообщение, поэтому ответ — «YES».

B. Сортировка разбиением

жадные алгоритмы математика сортировки *1100

Дана перестановка\(^{\dagger}\) \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\).

Вы можете изменять текущую перестановку, применяя к ней следующую операцию несколько (возможно, ноль) раз:

  • выбрать произвольное \(x\) (\(2 \le x \le n\));
  • создать новую перестановку так:
    • сначала выписать все элементы \(p\), значения которых меньше \(x\), без изменения их порядка;
    • затем выписать все элементы \(p\), значения которых больше или равны \(x\), без изменения их порядка;
  • заменить \(p\) этой полученной перестановкой.

Например, если изначально перестановка была \([6, 4, 3, 5, 2, 1]\) и выбрано \(x = 4\), то сначала нужно выписать \([3, 2, 1]\), затем справа дописать \([6, 4, 5]\). Так, изначальная перестановка будет заменена на \([3, 2, 1, 6, 4, 5]\).

Найдите наименьшее число операций, необходимое для того, чтобы достичь равенства \(p_i = i\) для всех \(i = 1, 2, \ldots, 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 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)). Гарантируется, что \(p_1, p_2, \ldots, p_n\) является перестановкой.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Примечание

В первом наборе входных данных \(n = 1\) и \(p_1 = 1\), так что делать нечего.

Во втором наборе входных данных можно выбрать \(x = 2\), и мы сразу получим \(p_1 = 1\), \(p_2 = 2\).

В третьем наборе входных данных кратчайшей последовательностью операций является, например, следующая:

  1. \(x = 4\): \([6, 4, 3, 5, 2, 1] \rightarrow [3, 2, 1, 6, 4, 5]\);
  2. \(x = 6\): \([3, 2, 1, 6, 4, 5] \rightarrow [3, 2, 1, 4, 5, 6]\);
  3. \(x = 3\): \([3, 2, 1, 4, 5, 6] \rightarrow [2, 1, 3, 4, 5, 6]\);
  4. \(x = 2\): \([2, 1, 3, 4, 5, 6] \rightarrow [1, 2, 3, 4, 5, 6]\).

D. Двухцветные доминошки

жадные алгоритмы Конструктив *1400

Доска \(n\times m\) разделена на клетки. На этой доске также расположено несколько доминошек. Каждая доминошка покрывает две соседние клетки (то есть две клетки с общей стороной), и никакие две доминошки не пересекаются.

Пит считает, что эта доска очень скучная и что её надо покрасить. Он покрасит клетки доминошек в чёрный и белый цвета. Полученную раскраску он назовёт красивой, если будут выполнены все следующие условия:

  • у каждой доминошки одна клетка покрашена в чёрный цвет, а другая — в белый;
  • для каждой строки число чёрных клеток в этой строке равно числу белых клеток в этой строке;
  • для каждого столбца число чёрных клеток в этом столбце равно числу белых клеток в этом столбце.

Заметьте, что клетки, не покрытые доминошками, не покрашены вовсе и не считаются ни чёрными, ни белыми.

Помогите Питу получить красивую раскраску или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2\le n, m\le 500\)).

Следующие \(n\) строк описывают покрытие доски доминошками, ряд за рядом сверху вниз. Каждая из этих строк содержит \(m\) символов, описывающих клетки в соответствующем ряду слева направо. Каждый символ равен U, D, L, R или ., если клетка покрыта верхней, нижней, левой, правой половиной доминошки или не покрыта доминошкой, соответственно. Гарантируется, что заданное покрытие корректно.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), eсли красивой раскраски не существует. В противном случае выведите \(n\) строк, каждая из которых состоит из \(m\) символов и описывает цвета клеток в соответствующем ряду красивой раскраски. Каждый символ, соответствующий клетке, не покрытой доминошками, должен равняться . (точке), а каждый другой символ должен быть равен B, если соответствующая клетка чёрная, или W, если она белая.

Если существует несколько решений, выведите любое из них.

Примечание

Ответ к первому набору входных данных изображён ниже:

Во втором наборе входных данных не существует правильной раскраски клеток.

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\).

A. Возрастание и убывание

жадные алгоритмы Конструктив математика реализация *800

Даны три целых числа \(x\), \(y\), и \(n\).

Вам нужно построить массив \(a\), состоящий из \(n\) целых чисел, который удовлетворял бы следующим условиям:

  1. \(a_1=x\), \(a_n=y\);
  2. \(a\) строго возрастает (т.е. \(a_1 < a_2 < \ldots < a_n\));
  3. если обозначать \(b_i=a_{i+1}-a_{i}\) для всех \(1 \leq i \leq n-1\), то \(b\) строго убывает (т.е. \(b_1 > b_2 > \ldots > b_{n-1}\)).

Если искомого массива \(a\) не существует, выведите одно целое число \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(x\), \(y\), \(n\) (\(1 \le x < y \le 1000,3 \le n \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\). Если существует несколько решений, выведите любое из них.

Если решения не существует, выведите одно целое число \(-1\).

Примечание

В первом наборе входных данных \(a=[1,3,4]\), и этот массив строго возрастает. Далее, \(b_1=a_2-a_1=3-1=2\), \(b_2=a_3-a_2=4-3=1\), так что \(b=[2,1]\), и этот массив строго убывает.

Во втором наборе входных данных, не существует такого массива \(a\), который удовлетворял был всем вышеописанным условиям.

B. Обмен и разворот

жадные алгоритмы Конструктив сортировки Строки *1100

Дана строка \(s\) длины \(n\), состоящая из строчных латинских букв, а также целое число \(k\). За один шаг вы можете выполнить одну любую операцию из следующих двух:

  • Выбрать индекс \(i\) (\(1 \le i \le n - 2\)), затем поменять местами \(s_{i}\) и \(s_{i+2}\).
  • Выбрать индекс \(i\) (\(1 \le i \le n-k+1\)), затем развернуть порядок следования букв на отрезке \([i,i+k-1]\) строки. Формально, если строка в текущий момент равна \(s_1\ldots s_{i-1}s_is_{i+1}\ldots s_{i+k-2}s_{i+k-1}s_{i+k}\ldots s_{n-1}s_n\), то она заменяется на \(s_1\ldots s_{i-1}s_{i+k-1}s_{i+k-2}\ldots s_{i+1}s_is_{i+k}\ldots s_{n-1}s_n\).

Вы можете сделать произвольное (возможно, нулевое) число шагов. Найдите лексикографически наименьшую строку, которую можно получить после какого-либо числа шагов.

Строка \(a\) лексикографически меньше строки \(b\) такой же длины, если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k < n \le 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьшую строку, которую можно получить после какого-либо (возможно, нулевого) числа шагов.

Примечание

В первом наборе входных данных можно получить строку «aimn», выполняя следующие операции:

  1. Развернуть отрезок \([3,4]\). Строка превратится в «niam».
  2. Поменять местами \(s_1\) и \(s_3\). Строка превратится в «ainm».
  3. Развернуть отрезок \([3,4]\). Строка превратится в «aimn».

Можно доказать, что невозможно получить строку, лексикографически меньшую, чем «aimn». Значит, «aimn» и является ответом.

Во втором наборе входных данных можно получить строку «aandp», выполняя следующие операции:

  1. Поменять местами \(s_3\) и \(s_5\). Строка превратится в «paadn».
  2. Поменять местами \(s_1\) и \(s_3\). Строка превратится в «aapdn».
  3. Поменять местами \(s_3\) и \(s_5\). Строка превратится в «aandp».

Можно доказать, что невозможно получить строку, лексикографически меньшую, чем «aandp». Значит, «aandp» и является ответом.

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\).

I. Будущие доминаторы

графы жадные алгоритмы *3500

Dhruvil и amenotiomoi живут в разных странах и общаются онлайн. Изначально у amenotiomoi есть пустая доска размера \(n \times n\), а у Dhruvil'а есть последовательность целых чисел \(1, 2, \ldots, n^2\), каждое число в которой встречается по одному разу. Эти числа могут быть расположены в клетках доски, каждая клетка — либо пустая, либо содержит ровно одно число.

Текущее состояние доски назовём хорошим, если существует способ расположить оставшиеся числа в пустые клетки доски так, что у каждого числа, кроме \(1\), будет сосед с меньшим значением. Две клетки считаются соседними, если они имеют общую сторону.

Строки доски пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

В процессе общения amenotiomoi задаёт Dhruvil'у \(q\) запросов. Каждый раз он сообщает Dhruvil'у координаты некоторой пустой клетки \((x, y)\). Dhruvil должен расположить в этой клетке одно из оставшихся чисел таким образом, чтобы доска осталась хорошей. Среди всех возможных способов это сделать он выберет самое большое число, которое он может расположить в этой клетке, и отправит его amenotiomoi в качестве ответа на запрос.

Поскольку amenotiomoi заранее знает ответы на все запросы, он сообщает Dhruvil'у \((x \oplus k,y \oplus k)\) вместо \((x, y)\), где \(k\) — ответ на предыдущий запрос. Когда amenotiomoi отправляет свой первый запрос, он считает, что \(k = 0\). На каждом запросе Dhruvil должен декодировать сообщение и отправить ответ amenotiomoi. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Помогите Dhruvil ответить на все запросы amenotiomoi.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 10^3\), \(1 \le q \le n^2\)).

В \(i\)-й из следующих \(q\) строк содержится два целых числа \(x_i'\) и \(y_i'\). Соответствующий запрос задаёт клетку \((x_i, y_i)\), где \(x_i'=x_i \oplus k\) и \(y_i' = y_i \oplus k\), где \(k\) — корректный ответ на предыдущий запрос. Если \(i = 1\), то используется \(k = 0\). Гарантируется, что \(1 \le x_i, y_i \le n\) и \((x_i, y_i)\) — пустая клетка в момент \(i\)-го запроса.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, выведите ответы на все запросы через пробел на одной строке.

Примечание

В первом наборе входных данных, первый запрос задаёт клетку \((1, 1)\), Dhruvil располагает в ней число \(4\).

Второй запрос поступает как \((6, 6)\), Dhruvil декодирует его в \((2, 2)\), используя предыдущий ответ (\(2 \oplus 4 = 6\)). Если Dhruvil расположит \(3\) в клетке \((2, 2)\), то доска перестанет быть хорошей. Поэтому, Dhruvil может расположить в ней только число \(2\).

Третий запрос поступает как \((3, 0)\), Dhruvil декодирует его в \((1, 2)\), используя предыдущий ответ (\(1 \oplus 2 = 3\), \(2 \oplus 2 = 0\)). Dhruvil может расположить в этой клетке число \(3\).

Четвёртый запрос поступает как \((1, 2)\), Dhruvil декодирует его в \((2, 1)\), используя предыдущий ответ (\(2 \oplus 3 = 1\), \(1 \oplus 3 = 2\)). В последовательности осталось только число \(1\), и если поместить \(1\) в эту клетку, доска останется хорошей.

Ниже представлено история всех изменений доски:

Во втором наборе входных данных итоговое состояние доски выглядит так:

\(8\)\(7\)\(5\)
\(9\)\(3\)\(4\)
\(1\)\(2\)\(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\).

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]\).

C. salyg1n и игра с MEX

жадные алгоритмы игры интерактив Конструктив Структуры данных *1300

Это интерактивная задача!

salyg1n подарил Алисе множество \(S\) из \(n\) различных целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq 10^9\)). Алиса решила сыграть против Боба в игру с этим множеством. Правила игры таковы:

  • Игроки ходят по очереди, первой ходит Алиса.

  • Алиса за один ход добавляет в множество \(S\) одно число \(x\) (\(0 \leq x \leq 10^9\)). Множество \(S\) не должно содержать число \(x\) на момент хода.
  • Боб за один ход удаляет из множества \(S\) одно число \(y\). Множество \(S\) должно содержать число \(y\) на момент хода. Также число \(y\) должно быть строго меньше последнего добавленного Алисой числа.
  • Игра заканчивается, когда Боб не может сделать ход или спустя \(2 \cdot n + 1\) ходов (в таком случае последним ходом будет ход Алисы).
  • Результатом игры назовем \(\operatorname{MEX}\dagger(S)\) (\(S\) на момент конца игры).
  • Алиса стремится максимизировать результат, а Боб минимизировать.

Пусть \(R\) — результат при оптимальной игре обоих игроков. В этой задаче вы играете за Алису против программы жюри, играющей за Боба. Ваша задача — реализовать стратегию Алисы, при которой результат игры всегда будет не меньше \(R\).

\(\dagger\) \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}(\{0, 1, 2, 4\})\) \(=\) \(3\).

Входные данные

В первой задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания целого числа \(n\) (\(1 \leq n \leq 10^5\)) — размера множества \(S\) до начала игры.

Затем считайте одну строку — \(n\) различных целых чисел \(s_i\) \((0 \leq s_1 < s_2 < \ldots < s_n \leq 10^9)\) — множество \(S\) подаренное Алисе.

Чтобы сделать ход выведите целое число \(x\) (\(0 \leq x \leq 10^9\)) — число которое вы хотите добавить в множество \(S\). \(S\) не должно содержать \(x\) на момент хода. Затем считайте одно целое число \(y\) \((-2 \leq y \leq 10^9)\).

  • Если \(0 \leq y \leq 10^9\) — Боб удаляет число \(y\) из множества \(S\). Ваш ход!
  • Если \(y\) \(=\) \(-1\) — игра закончена. После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай.
  • Иначе \(y\) \(=\) \(-2\). Это значит, что вы сделали некорректный запрос. Ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

По этой задаче нельзя делать взломы.

Примечание

В первом наборе входных данных множество \(S\) менялось так:

{\(1, 2, 3, 5, 7\)} \(\to\) {\(1, 2, 3, 5, 7, 8\)} \(\to\) {\(1, 2, 3, 5, 8\)} \(\to\) {\(1, 2, 3, 5, 8, 57\)} \(\to\) {\(1, 2, 3, 8, 57\)} \(\to\) {\(0, 1, 2, 3, 8, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

Во втором наборе входных данных множество \(S\) менялось так:

{\(0, 1, 2\)} \(\to\) {\(0, 1, 2, 3\)} \(\to\) {\(1, 2, 3\)} \(\to\) {\(0, 1, 2, 3\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

В третьем наборе входных данных множество \(S\) менялось так:

{\(5, 7, 57\)} \(\to\) {\(0, 5, 7, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 1\), \(R = 1\).

D. Циклические операции

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *1800

У Егора был массив \(a\) длины \(n\), изначально состоящий из нулей. Однако он захотел сделать из него другой массив \(b\) длины \(n\).

Поскольку Егор не ищет легких путей, разрешено использовать только такую операцию (возможно ноль или несколько раз):

  • выбрать массив \(l\) длины \(k\) (\(1 \leq l_i \leq n\), все \(l_i\) различны) и поменять каждый элемент \(a_{l_i}\) на \(l_{(i\%k)+1}\) (\(1 \leq i \leq k\)).

Ему стало интересно, а можно ли вообще получить массив \(b\) с помощью таких операций. Поскольку Егор еще только начинающий программист, он попросил Вас помочь ему решить эту задачу.

Операция \(\%\) означает взятие по модулю, то есть \(a\%b\) равно остатку от деления числа \(a\) на число \(b\).

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \leq t \leq 10^5\)) - количество наборов входных данных.

Каждый набор состоит из двух строк. В первой строке даны целые числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^5\)).

Во второй строке вводится массив \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ получить массив \(b\), используя только заданную операцию. Иначе выведите «NO» (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим первый пример:

  • Применим операцию с \(l\) = \([1,2,3]\). Теперь \(a\) = \([2,3,1,0,0]\).
  • Применим операцию с \(l\) = \([3,5,4]\). Теперь \(a\) = \([2,3,5,3,4]\) = \(b\).
Мы видим, что получить массив \(b\) можно. Следовательно ответ YES.

Во втором примере можно доказать, что массив \(b\) получить нельзя, следовательно ответ NO.

F. Максимально не похожее дерево

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное хэши *2700

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), обозначим его за \(G\). Также обозначим за \(P(G)\) мультимножество поддеревьев всех вершин дерева \(G\). Вам надо найти дерево \(G'\) размера \(n\) с корнем в вершине \(1\) такое, что количество поддеревьев в \(P(G')\) к которым есть изоморфные в \(P(G)\) было минимально.

Поддерево вершины \(v\) - это граф, который содержит все вершины, для которых вершина \(v\) лежит на пути от корня дерева до нее самой, а так же все ребра между этими вершинами.

Два корневых дерева считаются изоморфными если можно так перенумеровать вершины одного из них, чтобы оно стало равно второму, при этом корень первого дерева должен получить номер корня второго дерева.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) - количество вершин в дереве \(G\). Каждая из следующих \(n-1\) строк содержит два целых числа \(a\) и \(b\) \((1 \leq a,b \leq n)\), означающие, что между вершинами \(a\) и \(b\) в дереве есть ребро.

Выходные данные

Выведите \(n-1\) строку, каждая строка содержит два числа \(a\), \(b\) \((1 \leq a,b \leq n)\) - рёбра дерева \(G'\). Если существует несколько оптимальных ответов, выведите любой.

B1. Конфетная вечеринка (простая версия)

битмаски графы жадные алгоритмы Конструктив математика реализация *1700

Это простая версия задачи. Единственное отличие состоит в том, что в этой версии каждый должен дать конфеты ровно одному человеку и получить конфеты ровно от одного человека. Обратите внимание, что посылка не может пройти обе версии задачи одновременно. Вы можете делать взломы, только если обе версии задачи решены.

После экзамена 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\) конфету третьему человеку;
  • Второй человек даёт \(2\) конфеты первому человеку;
  • Третий человек даёт \(1\) конфету второму человеку.

Тогда у всех трёх человек есть по \(3\) конфеты.

Во втором наборе входных данных:

  • Пятый человек даёт \(4\) конфеты первому человеку, и теперь у первого человека есть \(5\) конфет;
  • Первый человек даёт \(2\) конфеты третьему человеку;
  • Третий человек даёт \(2\) конфеты пятому человеку;
  • Четвёртый человек даёт \(2\) конфеты второму человеку;
  • Второй человек даёт \(1\) конфету четвёртому человеку.

Тогда у всех трёх людей есть по \(3\) конфеты. Обратите внимание, что вначале первый человек не может дать \(2\) конфеты третьему человеку, потому что у него есть только \(a_1=1\) конфета. Но после того, как пятый человек дал ему \(4\) конфеты, он может это сделать, потому что сейчас у него есть \(1+4=5\) конфет.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных первый человек даёт второму человеку \(1024\) конфеты, и второй также даёт \(1024\) конфеты первому человеку.

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\) конфеты.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных двум людям не нужно ничего делать.

D. Цветочное псевдодерево

графы Деревья жадные алгоритмы Конструктив реализация *3000

Псевдодеревом называется связный граф, который имеет ровно один цикл и не имеет петель. Обратите внимание, что псевдодерево может содержать кратные рёбра. Можно доказать, что псевдодерево с \(n\) вершинами всегда содержит \(n\) рёбер.

После удаления всех рёбер на цикле в псевдодереве образуется лес\(^{\dagger}\). Можно доказать, что каждое дерево в лесу будет содержать ровно одну вершину, которая находится на цикле до удаления рёбер. Если все деревья в лесу имеют одинаковую глубину\(^{\ddagger}\) при выборе вершины на цикле в качестве корня, мы называем исходное псевдодерево цветочным.

У нашего друга sszcdjr, было цветочное псевдодерево с \(n\) вершинами и \(n\) рёбрами. Однако, он забыл все рёбра в псевдодереве. К счастью, он все ещё помнит степени вершин. В частности, степень \(i\)-й вершины равна \(d_i\).

Вы должны помочь sszcdjr построить возможное цветочное псевдодерево с \(n\) вершинами, где степень \(i\)-й вершины строго равна \(d_i\), или сообщить ему, что это невозможно.

\(^{\dagger}\) Лесом называется граф, в котором все компоненты связности являются деревьями. Деревом называется связный граф без циклов и петель.

\(^{\ddagger}\) Глубиной дерева с корнем называется максимальное расстояние от корня до вершины этого дерева.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t\leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 10^6\)) — количество вершин.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1,d_2,\ldots,d_n\) (\(1\leq d_i\leq n\)) — степень каждой вершины.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных, если существует возможное цветочное псевдодерево:

  • Выведите «Yes» (без кавычек) в первой строке.
  • Затем выведите \(n\) строк, в каждой строке выведите два целых числа \(u_i\) и \(v_i\) — две вершины, которые соединяет \(i\)-е ребро.

Если есть несколько ответов, вы можете вывести любой из них.

В противном случае, выведите «No» (без кавычек) в единственной строке вывода.

Вы можете выводить первую строку для каждого набора входных данных в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных единственным возможным цветочным псевдодеревом является:

После удаления всех рёбер на цикле в псевдодереве каждое дерево имеет глубину \(0\).

Во втором наборе входных данных можно доказать, что не существует такого цветочного псевдодерева.

В третьем наборе входных данных одним из возможных цветочных псевдодеревьев является:

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 может получить только один подотрезок.

F. НСП?

жадные алгоритмы реализация Структуры данных *3500

Став старшеклассником, Tom увлекся задачами о массивах, причем не только задачей о наибольшей возрастающей подпоследовательности, но и задачей о наибольшей сумме на подотрезке. Он получил от своего друга Daniel очень интересную задачу. Однако ему кажется, что она очень сложная, поэтому он просит вас помочь.

Дан массив \(a\), состоящий из \(n\) целых чисел.

За одну операцию нужно сделать следующее:

  • Выбрать подотрезок \([l,r]\) (\(1\le l\le r\le n\)) такой, что сумма на этом подотрезке наибольшая среди всех подотрезков в массиве \(a\). Более формально, \(\displaystyle\sum_{i=l}^r a_i=\max_{1\le l'\le r'\le n}\sum_{i=l'}^{r'} a_i\).
  • Затем вычесть \(1\) из всех элементов \(a_l,a_{l+1},\ldots,a_r\).

Найдите минимальное количество операций, которые нужно выполнить, чтобы сделать \(a_i<0\) для всех \(1\le i\le n\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^6\le a_i\le 10^6\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — минимальное количество операций.

Примечание

В первом примере вы можете выполнить операции на подотрезках \([1,5],[1,5],[2,5],[3,5],[4,5],[5,5]\) в таком порядке. Ещё вы можете выполнить операции на подотрезках \([1,5],[2,5],[3,5],[4,5],[5,5],[1,5]\) в таком порядке.

Во втором примере уже выполнено условие \(a_i<0\) для всех \(1\le i\le n\). Поэтому вам не нужно выполнять никаких операций.

A. Перестановки

жадные алгоритмы *1500

Счастливый PMP учится в ВУЗе на первом курсе, где он изучает алгоритмические задачи. PMP обожает алгоритмические игры.

Один студент постарше дал счастливому PMP занятную игру. PMP даны две перестановки чисел от 1 до n, от него требуется преобразовать первую перестановку во вторую. За один шаг можно убрать из перестановки чисел последнее число и вставить его обратно в произвольное место. Другими словами, можно либо вставить последнее число между любыми двумя числами, идущими одно за другим, либо вставить число в начало перестановки.

Счастливый PMP знает алгоритм, решающий эту задачу, но он слишком медленный. PMP хочет знать минимальное количество шагов, за которое он может преобразовать первую перестановку во вторую.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 2·105) количество чисел в каждой из двух заданных перестановок.

В следующей строке записано n целых чисел, разделенных пробелом — первая перестановка. Каждое число от 1 до n встретится в перестановке ровно один раз.

Следующая строка описывает вторую перестановку в аналогичном формате.

Выходные данные

Выведите единственное целое число, обозначающее минимальное количество шагов, необходимых для преобразования первой перестановки во вторую.

Примечание

В первом примере PMP берет с конца списка число 1 и вставляет его в начало. Потом берет число 2 и вставляет его между 1 и 3.

Во втором примере он берет число 5 и вставляет его после 1.

В третьем примере последовательность шагов выглядит следующим образом:

  • 1 5 2 3 4
  • 1 4 5 2 3
  • 1 3 4 5 2
  • 1 2 3 4 5
Так что ему надо три хода.

E. Райский Тур

жадные алгоритмы Структуры данных *2900

История не была закончена, как думал PMP. Бог предложил ему еще один шанс перевоплотиться и вернуться к жизни. Но прежде чем он сможет вернуться, Бог сказал ему, что PMP должен расспросить n великих людей, включая выдающихся программистов, об их жизненном опыте.

Эти люди стоят на одной прямой. Они пронумерованы от 1 до n слева направо. Человек номер i стоит в точке с координатой xi (xi < xi + 1, i < n). PMP должен посетить всех этих людей одного за другим в произвольном порядке. Каждого человека надо посетить ровно один раз. PMP начинает обход, подойдя к месту s-го человека, после чего вступает с ним в разговор и перенимает его опыт.

Каждый раз, когда PMP хочет изменить свою позицию, он должен дать билет ангелу, и ангел относит его к месту назначения. Ангелы берут PMP в одном месте, летят к пункту назначения и приземляют его там. При перемещении они никого не посещают. Перелет от i-го до j-го человека занимает |xi - xj| времени. PMP может вернуться к жизни, как только он посетит всех людей.

Есть два вида ангелов: некоторые ангелы летают вправо и принимают только билеты направо. Другие летят налево и принимают только билеты налево. Есть неограниченное количество ангелов каждого типа. PMP имеет l левых билетов и n - 1 - l правых билетов.

PMP хочет вернуться к жизни как можно скорее, чтобы не упустить возможность поучаствовать в финале этого года вместо прошлогоднего финала, который он пропустил. Он хочет узнать самый быстрый способ посетить всех людей ровно по одному разу. Он также должен знать точную последовательность передвижений, которые он должен выполнить.

Входные данные

Первая строка входного файла содержит через пробел три целых числа n, l, s (2 ≤ n ≤ 105, 0 ≤ l < n, 1 ≤ s ≤ n) — количество людей, которых надо посетить, количество билетов налево в распоряжении PMP и его изначальное положение. Следующая строка содержит n целых чисел через пробел. На этой строке i-ое целое число — xi (0 = x1 < x2 < ... < xn ≤ 109) — позиция i-го человека.

Выходные данные

Если PMP не сможет посетить всех людей с билетами, которые у него есть, выведите -1 в единственной строке выходного файла. В противном случае, выведите на первой строке минимальное количество времени, за которое PMP может посетить всех людей. На второй строке выведите n - 1 целых чисел — номера людей, которых должен посетить PMP в порядке, формирующем оптимальное решение. Если ответов несколько, выведите любой.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

Помянем величайшего программиста всех времен, который покинул нас около года назад. Покойся с миром, Ренат Муллаханов.

A. МЕХанизированный массив

жадные алгоритмы Конструктив математика *800

Вам даны три целых неотрицательных числа \(n\), \(k\) и \(x\). Найдите максимальную возможную сумму элементов массива, состоящего из целых неотрицательных чисел, который состоит из \(n\) элементов, его MEX равен \(k\), и все его элементы не превосходят \(x\). Если такого массива не существует, то выведите \(-1\).

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 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \leq n, k, x \leq 200\)).

Выходные данные

На каждый набор входных данных выведите одно число — максимальную сумму элементов подходящего массива, или \(-1\), если такого массива не существует.

Примечание

В первом наборе входных данных максимальная сумма равна \(7\), один из подходящих массивов — это \([0, 1, 2, 2, 2]\).

Во втором наборе входных данных не существует подходящих массивов длины \(n\).

В третьем наборе входных данных максимальная сумма равна \(57\), один из подходящих массивов — это \([0, 1, 28, 28]\).

B. Дружные массивы

битмаски жадные алгоритмы математика *1200

Вам даны два массива целых чисел — \(a_1, \ldots, a_n\) длины \(n\), и \(b_1, \ldots, b_m\) длины \(m\). Вы можете выбрать любой элемент \(b_j\) из массива \(b\) (\(1 \leq j \leq m\)), и для всех \(1 \leq i \leq n\) сделать \(a_i = a_i | b_j\). Вы можете сделать произвольное число таких операций.

После всех операций будет посчитано число \(x = a_1 \oplus a_2 \oplus \ldots \oplus a_n\). Найдите наименьшее и наибольшее значения \(x\), которые могли получиться после произвольного набора набора операций.

Выше \(|\) обозначает операцию побитового ИЛИ (OR), а \(\oplus\)операцию побитового исключающего ИЛИ (XOR).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)) — размеры массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \leq b_i \leq 10^9\)) — массив \(b\).

Гарантируется, что суммы значений \(n\) и \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(2\) числа — наименьшее и наибольшее возможное значение \(x\) после произвольного набора операций.

Примечание

В первом наборе входных данных при применении операции с элементом \(b_1 = 1\) массив \(a\) станет равен \([1, 1]\), и \(x\) будет равен \(0\). Если не применять никаких операций, то \(x = 1\).

Во втором наборе входных данных если не применять никаких операций, то \(x = 2\). Если применить операцию с \(b_1 = 1\), то \(a = [1, 1, 3]\), и \(x = 3\).

D. Покупка префиксов

жадные алгоритмы реализация сортировки *1800

У вас есть массив \(a\) размера \(n\), изначально заполненный нулями (\(a_1 = a_2 = \ldots = a_n = 0\)). Также у вас есть массив целых чисел \(c\) размера \(n\).

Изначально у вас есть \(k\) монет. Заплатив \(c_i\) монет, вы можете прибавить \(1\) ко всем элементам массива \(a\) с первого по \(i\)-й (\(a_j \mathrel{+}= 1\) для всех \(1 \leq j \leq i\)). Покупать любое \(c_i\) можно произвольное число раз. Покупка возможна только при \(k \geq c_i\), то есть в любой момент должно выполняться \(k \geq 0\).

Найдите лексикографически наибольший массив \(a\), который возможно получить.

Массив \(a\) лексикографически меньше массива \(b\) такой же длины, если и только если в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массивов \(a\) и \(c\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 10^9\)) — массив \(c\).

Третья строка каждого набора входных данных содержит одно целое число \(k\) (\(1 \leq k \leq 10^9\)) — количество монет, которое у вас есть.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — лексикографически наибольший массив \(a\), который можно получить.

Примечание

В первом наборе входных данных \(a_1\) не может быть больше \(5\), а если пять раз купить \(c_1\), то у нас не останется денег, поэтому \(a = [5, 0, 0]\).

Во втором наборе входных данных \(a_1\) не может быть больше \(2\), при этом мы можем купить \(c_1\) и \(c_2\) по одному разу (купить \(c_2\) дважды не получится), поэтому \(a = [2, 1]\).

H. Стандартная задача на графы

графы Деревья жадные алгоритмы Структуры данных *3500

Вам дан взвешенный ориентированный граф, содержащий \(n\) вершин и \(m\) ребер. Каждая вершина графа может быть выделенной или обычной, изначально все вершины обычные. Ценой графа назовём минимальную суммарную цену рёбер, которые нужно взять, чтобы из каждой обычной вершины была достижима по взятым ребрам хотя бы одна любая выделенная вершина. Если такого набора рёбер не существует, то цена равна \(-1\).

Вам предстоит вычислить цену графа после каждого из \(q\) запросов. Запросы бывают двух типов:

  • \(+\;v_i\) делает вершину \(v_i\) выделенной; гарантируется, что перед запросом вершина была обычной.
  • \(-\;v_i\) делает вершину \(v_i\) обычной; гарантируется, что перед запросом вершина была выделенной.

Выведите цену графа после каждого из \(q\) запросов.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \le n \le 2 \cdot 10^5, 1 \le m, q \le 2 \cdot 10^5\)) — количество вершин графа, количество рёбер и число запросов.

Следующие \(m\) строк содержат рёбра графа, по одному ребру в каждой строке. \(i\)-я строка содержит три целых числа \(u_i\), \(v_i\) и \(c_i\) (\(1 \leq u_i, v_i \leq n, u_i \ne v_i, 1 \leq c_i \leq 10^6\)) — концы \(i\)-го ребра (из \(u_i\) в \(v_i\)), а также его вес (\(c_i\)).

Следующие \(q\) строк содержат запросы, по одному запросу в каждой строке. \(i\)-я строка содержит \(+\;v_i\), если это операция первого типа, и \(-\;v_i\), если это операция второго типа (\(1 \leq v_i \leq n\)).

Выходные данные

Выведите \(q\) чисел. \(i\)-е число — это цена графа после первых \(i\) запросов.

Примечание

В первом тесте:

  • Посыле первого запроса выгоднее всего взять ребра с номерами \(3, 4, 5\), сумма их цен равна \(15\).
  • После второго запроса, нет ни одной выделенной вершины, а значит, не существует подходящих наборов ребер, цена графа \(-1\).
  • После третьего запроса выгоднее всего взять ребра с номерами \(1, 2, 5\), сумма их цен равна \(14\).
  • После четвертого запроса выгоднее всего взять ребра с номерами \(4\) и \(5\), сумма их цен равна \(12\).
  • После пятого запроса выгоднее всего взять только ребро номер \(5\), его цена равна \(4\).
  • После шестого запроса все вершины выделенные и можно не брать ребер, цена графа равна \(0\).

A. Два сосуда

жадные алгоритмы математика Перебор *800

У вас есть два сосуда с водой. В первом сосуде сейчас находится \(a\) грамм воды, во втором сосуде сейчас находится \(b\) грамм воды. Оба сосуда очень большие, в каждый из них может поместиться любое количество воды.

Также у вас есть пустая чашка, в которую может поместиться не более \(c\) грамм воды.

За один ход вы можете зачерпнуть из любого сосуда не более \(c\) грамм воды и перелить её в другой сосуд. Заметим, что масса перелитой за один ход воды — не обязательно целое число.

Какое минимальное количество ходов потребуется, чтобы массы воды в сосудах стали равны? Обратите внимание, что производить какие-либо действия помимо описанных ходов нельзя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 100\)) — масса воды в сосудах и вместимость чашки, соответственно.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество ходов, необходимое для того, чтобы в сосудах стало одинаковое количество воды. Можно показать, что это всегда возможно.

Примечание

В первом наборе входных данных примера достаточно одного хода: если перелить \(2\) грамма воды из второго сосуда в первый, то в каждом из них окажется по \(5\) грамм воды.

Во втором наборе входных данных примера достаточно совершить три хода:

  • перельём \(3\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(17 - 3 = 14\) грамм воды, а во втором \(4 + 3 = 7\) грамм;
  • перельём \(2\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(14 - 2 = 12\) грамм воды, а во втором \(7 + 2 = 9\) грамм;
  • наконец перельём \(1.5\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(12 - 1.5 = 10.5\) грамм воды, а во втором \(9 + 1.5 = 10.5\) грамм.

Заметьте, что это не единственный способ уравнять сосуды за \(3\) хода, но не существует способа сделать это за \(2\) хода.

В третьем наборе входных данных примера сосуды изначально содержат одинаковое количество воды, следовательно, совершать ходы не нужно. Ответ — \(0\).

B. Коридор или туда и обратно

жадные алгоритмы реализация *900

Вы находитесь в бесконечном коридоре, который простирается бесконечно вправо и разделен на квадратные комнаты. Вы начинаете в комнате \(1\), перемещаетесь в комнату \(k\) и затем возвращаетесь в комнату \(1\). Вы можете выбрать значение \(k\). Переход в соседнюю комнату занимает \(1\) секунду.

Кроме того, в коридоре находится \(n\) ловушек: \(i\)-я ловушка находится в комнате \(d_i\) и активируется через \(s_i\) секунд после вашего входа в комнату \(\boldsymbol{d_i}\). После активации ловушки вы не можете ни войти в комнату с этой ловушкой, ни выйти из неё.

Схематическое изображение возможного коридора и вашего пути к комнате \(k\) и обратно.

Определите максимальное значение \(k\), которое позволяет вам безопасно переместиться из комнаты \(1\) в комнату \(k\) и затем вернуться в комнату \(1\).

Например, если \(n=1\) и \(d_1=2, s_1=2\), вы можете переместиться в комнату \(k=2\) и вернуться безопасно (ловушка активируется в момент \(1+s_1=1+2=3\), она не может помешать вам вернуться назад). Но если вы попытаетесь достичь комнаты \(k=3\), ловушка активируется в момент \(1+s_1=1+2=3\), что помешает вашему возвращению (вы попытаетесь войти в комнату \(2\) на обратном пути в \(3\) секунду, но активированная ловушка заблокирует вас). Любое большее значение для \(k\) также невозможно. Таким образом, ответом является \(k=2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 100\)) — количество ловушек.

Следующие \(n\) строк каждого набора содержат по два целых числа \(d_i\) и \(s_i\) (\(1 \le d_i, s_i \le 200\)) — параметры ловушки (вы должны покинуть комнату \(d_i\) строго до того, как пройдет \(s_i\) секунд с момента входа в эту комнату). Возможно, что несколько ловушек могут находиться в одной комнате (значения \(d_i\) могут повторяться).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(k\), которое позволяет вам переместиться в комнату \(k\) и вернуться в комнату \(1\) без столкновения с активной ловушкой.

Примечание

Первый набор входных данных примера разобран в условии задачи выше.

Во втором наборе входных данных вторая ловушка мешает вам достигнуть \(k\ge6\). Если \(k\ge6\), вторая ловушка активируется в момент \(3+s_2=3+3=6\) (время, когда вы входите в комнату \(4\) плюс \(s_2\)). В случае \(k\ge6\) вы вернетесь в комнату \(4\) в момент времени \(7\) или позже. Ловушка будет активна в это время. Можно показать, что комната \(k=5\) может быть достигнута без столкновения с активной ловушкой.

В третьем наборе входных данных примера вы можете добраться до комнаты \(299\) и сразу вернуться в комнату \(1\).

G. Замените на произведение

жадные алгоритмы математика Перебор *2000

Дан массив \(a\) из \(n\) целых положительных чисел. Вам нужно ровно один раз сделать следующую операцию:

  • Выбрать \(2\) целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) и заменить подотрезок \(a[l \ldots r]\) на единственный элемент: произведение элементов этого отрезка \((a_l \cdot \ldots \cdot a_r)\).

Например, если к массиву \([5, 4, 3, 2, 1]\) применить операцию с параметрами \(l = 2, r = 4\), массив превратится в \([5, 24, 1]\).

Ваша задача — максимизировать сумму массива после применения данной операции. Найдите оптимальный отрезок для применения этой операции.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — границы заменяемого на произведение отрезка.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, после применения операции с параметрами \(l = 2, r = 4\), массив из \([1, 3, 1, 3]\) превращается в \([1, 9]\), с суммой \(10\). Несложно видеть, что при замене любого другого отрезка на произведение, сумма будет меньше \(10\).

Во втором наборе входных данных, после применения операции с параметрами \(l = 3, r = 4\), массив из \([1, 1, 2, 3]\) превращается в \([1, 1, 6]\), с суммой \(8\). Несложно видеть, что при замене любого другого отрезка на произведение, сумма будет меньше \(8\).

В третьем наборе входных данных, оптимально будет выбрать любую операцию с \(l = r\), тогда сумма массива останется равна \(5\), а при применении любой другой операции сумма массива уменьшится.

B. Хороший ребенок

жадные алгоритмы математика Перебор *800

Славик готовит подарок для дня рождения друга. У него есть массив \(a\) из \(n\) цифр, и подарком будет произведение всех этих цифр. Поскольку Славик - хороший ребенок, он хочет сделать наибольшее возможное произведение, для этого он может добавить \(1\) к ровно одной из своих цифр.

Какое максимальное произведение может получить Славик?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 9\)) — количество цифр.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелом, \(a_i\) (\(0 \leq a_i \leq 9\)) — цифры в массиве.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное произведение, которое может получить Славик, добавив \(1\) к ровно одной из своих цифр.

D. 1D Ластик

жадные алгоритмы реализация *800

У вас есть полоска бумаги \(s\), которая имеет длину \(n\) ячеек. Каждая ячейка может быть либо черной, либо белой. За одну операцию вы можете выбрать любые \(k\) последовательных ячеек и сделать их все белыми.

Найдите минимальное количество операций, необходимых для удаления всех черных ячеек.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\)) — длина полоски бумаги и целое число, используемое в операции.

Вторая строка каждого набора содержит строку \(s\) длиной \(n\), состоящую из символов \(\texttt{B}\) (представляющего черную ячейку) и \(\texttt{W}\) (представляющего белую ячейку).

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для удаления всех черных ячеек.

Примечание

В первом наборе входных данных примера вы можете выполнить следующие операции: \(\)\color{red}{\texttt{WBW}}\texttt{WWB} \to \texttt{WWW}\color{red}{\texttt{WWB}} \to \texttt{WWWWWW}\(\)

Во втором наборе входных данных примера вы можете выполнить следующие операции: \(\)\texttt{WW}\color{red}{\texttt{BWB}}\texttt{WW} \to \texttt{WWWWWWW}\(\)

В третьем наборе входных данных примера вы можете выполнить следующие операции: \(\)\texttt{B}\color{red}{\texttt{WBWB}} \to \color{red}{\texttt{BWWW}}\texttt{W} \to \texttt{WWWWW}\(\)

F. Деревья с деньгами

Бинарный поиск жадные алгоритмы математика *1300

Лука стоит перед рядом из \(n\) деревьев. У \(i\)-го дерева есть \(a_i\) фруктов и высота \(h_i\).

Он хочет выбрать непрерывный подмассив массива \([h_l, h_{l+1}, \dots, h_r]\), такой что для каждого \(i\) (\(l \leq i < r\)), \(h_i\) делится\(^{\dagger}\) на \(h_{i+1}\). Он соберет все фрукты с каждого дерева в подмассиве (то есть, он соберет \(a_l + a_{l+1} + \dots + a_r\) фруктов). Однако, если он соберет больше \(k\) фруктов в общей сложности, его поймают.

Какова максимальная длина подмассива, который Лука может выбрать, чтобы не попасться?

\(^{\dagger}\) \(x\) делится на \(y\), если отношение \(\frac{x}{y}\) является целым числом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа, разделенных пробелом: \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq k \leq 10^9\)) — количество деревьев и максимальное количество фруктов, которое Лука может собрать, не попавшись.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелом: \(a_i\) (\(1 \leq a_i \leq 10^4\)) — количество фруктов в \(i\)-м дереве.

Третья строка каждого набора содержит \(n\) целых чисел, разделенных пробелом: \(h_i\) (\(1 \leq h_i \leq 10^9\)) — высота \(i\)-го дерева.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, длину максимального непрерывного подмассива, удовлетворяющего условиям, или \(0\), если такого подмассива нет.

Примечание

В первом примере Лука может выбрать подмассив с \(l=1\) и \(r=3\).

Во втором примере Лука может выбрать подмассив с \(l=3\) и \(r=4\).

В третьем примере Лука может выбрать подмассив с \(l=2\) и \(r=2\).

G. ABBC или BACB

жадные алгоритмы Конструктив *1500

Дана строка \(s\), состоящая из символов \(\texttt{A}\) и \(\texttt{B}\). Изначально у вас нет монет. Вы можете выполнять два типа операций:

  • Выберите подстроку\(^\dagger\) \(\texttt{AB}\), замените ее на \(\texttt{BC}\) и получите монету.
  • Выберите подстроку\(^\dagger\) \(\texttt{BA}\), замените ее на \(\texttt{CB}\) и получите монету.
Какое максимальное количество монет вы можете получить?

\(^\dagger\) Подстрока длины \(2\) - это последовательность из двух соседних символов строки.

Входные данные

Ввод состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)). Все символы \(s\) являются либо \(\texttt{A}\), либо \(\texttt{B}\).

Сумма длин \(s\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете получить.

Примечание

В первом примере вы можете выполнить следующие операции, чтобы получить \(2\) монеты: \(\)\color{red}{\texttt{AB}}\texttt{BA} \to \texttt{BC}\color{red}{\texttt{BA}} \to \texttt{BCCB}\(\)

Во втором примере вы можете выполнить следующую операцию, чтобы получить \(1\) монету: \(\)\color{red}{\texttt{AB}}\texttt{A} \to \texttt{BCA}\(\)

В третьем примере вы можете выполнить следующие операции, чтобы получить \(3\) монеты: \(\)\color{red}{\texttt{BA}}\texttt{ABA} \to \texttt{CBA}\color{red}{\texttt{BA}} \to \texttt{C}\color{red}{\texttt{BA}}\texttt{CB} \to \texttt{CCBCB}\(\)

A. Медуза и игра

жадные алгоритмы игры Перебор реализация *1200

У Медузы есть \(n\) зеленых яблок со значениями \(a_1, a_2, \dots, a_n\), а у Гедузы есть \(m\) зеленых яблок со значениями \(b_1,b_2,\ldots,b_m\).

Они будут играть в игру, состоящую из \(k\) раундов. Для \(i=1,2,\ldots,k\) в этом порядке они будут выполнять следующие действия:

  • Если \(i\) нечетное, то Медуза может поменять одно свое яблоко на одно яблоко Гедузы или ничего не делать.
  • Если \(i\) четное, то Гедуза может поменять одно из своих яблок на одно из яблок Медузы или ничего не делать.

Оба игрока хотят максимизировать сумму стоимостей своих яблок.

Поскольку вы — один из самых умных людей в мире, Медуза хочет, чтобы вы сообщили ей окончательную сумму стоимости ее яблок после всех \(k\) раундов игры. Предположим, что и Медуза, и Гедуза играют оптимально, стремясь максимизировать сумму стоимостей своих яблок.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа, \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 50\), \(1 \leq k \leq 10^9\)) — количество зеленых яблок у Медузы, количество зеленых яблок у Гедузы и количество раундов игры соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — значения зеленых яблок Медузы.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \leq b_i \leq 10^9\)) — значения зеленых яблок Гедузы.

Заметим, что суммы \(n\) и \(m\) по всем наборам входных данных не ограничены.

Выходные данные

Для каждого набора входных данных выведите одно целое число — конечную сумму значений яблок Медузы.

Примечание

В первом наборе входных данных Медуза поменяет местами яблоки стоимостью \(1\) и \(4\).

Во втором наборе входных данных оба игрока поменяют местами два яблока \(10,000\) раз.

В четвертом наборе входных данных Медуза ничего не будет делать.

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\).

A. Медуза и Undertale

жадные алгоритмы Перебор *900

Медуза установила бомбу в Сноудине!

Бомба оснащена таймером, который первоначально установлен на \(b\). Каждую секунду таймер будет уменьшаться на \(1\). Когда таймер достигнет отметки \(0\), бомба взорвется! Чтобы дать жителям Сноудина достаточно времени для эвакуации, необходимо как можно дольше задержать взрыв бомбы.

У вас есть \(n\) инструментов. Каждый инструмент может быть использован не более одного раза. Если Вы используете \(i\)-й инструмент, то таймер увеличится на \(x_i\). Однако, если после изменения значение таймера становится больше \(a\), то из-за ошибки таймер будет установлен на \(a\).

Более конкретно, каждую секунду будут происходить следующие события в следующем порядке:

  1. Вы выберете некоторые (возможно, ни одного) из своих инструментов, которые не использовались ранее. Если вы выбрали \(i\)-й инструмент, а таймер бомбы в данный момент установлен на \(c\), то таймер будет изменен на \(\min(c + x_i, a)\).
  2. Таймер уменьшается на \(1\).
  3. Если таймер достигнет \(0\), бомба взорвется.

Теперь Медуза хочет узнать максимальное время в секундах до взрыва бомбы при оптимальном использовании инструментов.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(a\), \(b\) и \(n\) (\(1 \leq b \leq a \leq 10^9\), \(1 \leq n \leq 100\)) — максимальное значение таймера бомбы, начальное значение таймера бомбы и количество инструментов.

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^9\)) — число, на которое может увеличиться таймер при использовании \(i\)-го инструмента.

Следует отметить, что сумма \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное время в секундах до взрыва бомбы.

Примечание

Пусть \(c\) обозначает значение таймера бомбы. В первом наборе входных данных:

  • Секунда \(1\): выбираем инструменты \(1\) и \(2\) в эту секунду, получаем \(c=5\); таймер уменьшается на \(1\), получаем \(c=4\).
  • Секунда \(2\): таймер уменьшается на \(1\), получаем \(c=3\).
  • Секунда \(3\): таймер уменьшается на \(1\), получаем \(c=2\).
  • Секунда \(4\): таймер уменьшается на \(1\), получаем \(c=1\).
  • Секунда \(5\): выбераем инструмент \(3\), получаем \(c=5\); таймер уменьшается на \(1\), получаем \(c=4\).
  • Секунда \(6\): таймер уменьшается на \(1\), получаем \(c=3\).
  • Секунда \(7\): таймер уменьшается на \(1\), получаем \(c=2\).
  • Секунда \(8\): таймер уменьшается на \(1\), получаем \(c=1\).
  • Секунда \(9\): таймер уменьшается на \(1\), получаем \(c=0\). Бомба взрывается.

Можно показать, что не существует способа использовать инструменты так, чтобы бомба взорвалась более чем через \(9\) секунд.

C. Медуза и зеленое яблоко

битмаски жадные алгоритмы математика теория чисел *1400

У медузы есть \(n\) кусочков зеленого яблока. Каждый кусочек весит \(1~\text{кг}\). Медуза хочет разделить эти кусочки зеленого яблока поровну между \(m\) людьми.

У Медузы есть волшебный нож. Каждый раз Медуза может выбрать один кусок зеленого яблока и разделить его на два меньших куска, причем каждый кусок будет иметь массу, равную половине массы исходного куска.

Медуза хочет узнать минимальное количество операций, необходимых для того, чтобы она могла разделить кусочки зеленого яблока так, чтобы общий вес кусочков яблока, полученных каждым человеком, был одинаковым.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)). Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^9\)) — количество исходных кусочков зеленого яблока и количество людей.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы разделить все зеленые яблоки поровну между \(m\) людьми. Если это невозможно сделать с помощью конечного числа операций, то вместо этого выведите \(-1\).

Примечание

В первом наборе входных данных нам не нужно делить кусочки яблок. Каждый человек получит \(2\) кусочка по \(1~\text{кг}\), а общий вес кусочков яблок, полученных каждым человеком, составит \(2~\text{кг}\).

Во втором наборе входных данных разделить яблоки поровну с помощью конечного числа операций невозможно.

В третьем наборе входных данных мы можем разделить два яблока массой \(1~\text{кг}\), получив \(4\) кусочка массой \(0,5~\text{кг}\). Каждый человек получит \(1\) кусочек яблока массой \(0,5~\text{кг}\) и \(2\) кусочка яблока массой \(1~\text{кг}\). Общий вес кусочков яблок, полученных каждым человеком, составляет \(2,5~\text{кг}\).

В четвертом наборе входных данных сначала делим все \(3\) кусочка массой \(1~\text{кг}\), получая \(6\) кусочков массой \(0,5~\text{кг}\). Затем еще разделим два кусочка массой \(0,5~\text{кг}\), получив \(4\) кусочка массой \(0,25~\text{кг}\). Каждый человек получит \(1\) кусочек яблока массой \(0,5~\text{кг}\) и \(1\) кусочек яблока массой \(0,25~\text{кг}\). Общий вес яблок, полученных каждым человеком, составляет \(0,75~\text{кг}\).

A. Шлемы в светлой ночи

жадные алгоритмы сортировки *1000

Пак Чанек — староста деревни Кхунтиен. В одну из ночей, наполненную светом, Пак Чанек неожиданно получил важное объявление, которое необходимо сообщить всем \(n\) жителям Кхунтиена.

Сначала Пак Чанек передает объявление непосредственно одному или нескольким жителям, заплатив \(p\) за каждого человека. После этого жители могут передать объявление другим жителям с помощью волшебного устройства в виде шлема. Однако за использование шлема придется заплатить. Для каждого \(i\), если \(i\)-й житель хотя бы раз получал объявление (либо непосредственно от Пак Чанека, либо от другого жителя), то он может передать его не более чем \(a_i\) другим жителям, заплатив \(b_i\) за каждую передачу.

Если Пак Чанек может также контролировать, как жители передают объявление другим жителям, то какова минимальная стоимость того, чтобы Пак Чанек оповестил всех \(n\) жителей Кхунтиена об объявлении?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(p\) (\(1 \leq n \leq 10^5\); \(1 \leq p \leq 10^5\)) — количество жителей и стоимость того, чтобы Пак Чанек передал объявление непосредственно одному жителю.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq10^5\)) — максимальное количество жителей, которым каждый житель может передать объявление.

Третья строка каждого набора содержит \(n\) целых чисел \(b_1,b_2,b_3,\ldots,b_n\) (\(1\leq b_i\leq10^5\)) — стоимость передачи объявления одним жителем другому.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке минимальную стоимость уведомления всех \(n\) жителей Хунтина об объявлении.

Примечание

В первом наборе исходных данных возможной оптимальной стратегией является следующая:

  1. Пак Чанек передает объявление непосредственно \(3\)-му, \(5\)-му и \(6\)-му жителю. Это требует затрат в размере \(p+p+p=3+3+3=9\).
  2. Житель \(3\) передает сообщение жителям \(1\) и \(2\). Это требует затрат в размере \(b_3+b_3=2+2=4\).
  3. \(2\)-й житель передает объявление \(4\)-му. Это требует затрат \(b_2=3\).

Общая стоимость составляет \(9+4+3=16\). Можно показать, что не существует стратегии с меньшими затратами.

C. Автосинтез

графы жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *2100

Ханека написала массив \(a\) из \(n\) целых положительных чисел. Изначально ни один элемент не обведён. За одну операцию Ханека может обвести один элемент. Один и тот же элемент можно обвести несколько раз.

После выполнения всех операций Ханека составляет последовательность \(r\), состоящую из всех не обведенных элементов \(a\) в порядке возрастания их индексов.

Также Ханека составляет другую последовательность \(p\), длина которой равна количеству выполненных операций, а \(p_i\) — индекс элемента, обведенного в кружок при выполнении \(i\)-й операции.

Ханека хочет выполнить несколько операций так, чтобы последовательность \(r\) была равна последовательности \(p\). Помогите ей добиться этого или сообщите, если это невозможно! Обратите внимание, что если решений несколько, то можно вывести любое из них.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq n\)).

Выходные данные

Выведите одно число \(-1\), если это невозможно.

В противном случае вывод состоит из двух строк. Первая строка содержит целое число \(z\), равное количеству выполненных операций. Вторая строка содержит \(z\) целых чисел, причем \(i\)-е целое число представляет собой индекс элемента, обведенного кружком в \(i\)-й операции. Если решений несколько, то можно вывести любое из них.

Примечание

В первом примере выполнение операций, аналогичных приведенным в примере, дает следующие результаты:

  • Элемент \(a_2\) обводится \(1\) раз.
  • Элемент \(a_3\) обводится \(2\) раза.
  • Необведёнными элементами (упорядоченными по индексам) являются \(a_1\), \(a_4\) и \(a_5\). Таким образом, \(r=[3,2,3]\).
  • \(p=[3,2,3]\)

Следовательно, \(r=p\).

Во втором примере это невозможно.

G. Clubstep

Бинарный поиск Деревья жадные алгоритмы Перебор Структуры данных *3500

Существует чрезвычайно сложная видеоигра, которая является одной из любимых видеоигр Чанеки. Один из самых трудных уровней в игре называется Clubstep. Clubstep состоит из \(n\) частей, пронумерованных от \(1\) до \(n\). Чанека хорошо натренировалась в прохождении уровня, поэтому на данный момент ее уровень знакомства с каждой частью \(i\) составляет \(a_i\).

После этого Чанека может сделать несколько (возможно, ноль) попыток пройти Clubstep. В каждой попытке она погибает на одной из \(n\) частей. Если попытка заканчивается на части \(p\), то это означает, что она успешно проходит только через каждую часть \(k\) для всех \(1 \leq k \leq p-1\) и не достигает ни одной части \(k\) для всех \(p+1 \leq k \leq n\). Попытка, закончившаяся на части \(p\), занимает \(p\) секунд.

Известно, что Чанека улучшает ту часть, на которой она погибает, гораздо больше, чем все остальные. Известно также, что во время попытки Чанека не успевает потренироваться на тех частях, до которых она не дошла. Таким образом, эффект от попытки, которая заканчивается на части \(p\), будет следующим:

  • Значение знакомства Чанеки с частью \(p\) увеличивается на \(2\).
  • Значение знакомства Чанеки с каждой частью \(k\) для всех \(1 \leq k \leq p-1\) увеличивается на \(1\).
Имеется \(q\) вопросов. В \(j\)-м вопросе Вам даются три целых числа \(l_j\), \(r_j\) и \(x_j\). Затем требуется найти минимальное время (в секундах), которое потребуется Чанеке для того, чтобы значение знакомства с каждой частью \(p\) (\(l_j \leq p \leq r_j\)) стало не меньше \(x_j\).

Заметим, что каждый запрос является независимым, поэтому попытка, которую предпринимает Чанека в одном запросе, не влияет на значения знакомства в других запросах.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot10^5\)) — количество частей в Clubstep.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq10^9\)) — значение знакомства Чанеки с каждой частью.

Третья строка содержит одно целое число \(q\) (\(1\leq q\leq3\cdot10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк содержатся три целых числа \(l_j\), \(r_j\) и \(x_j\) (\(1\leq l_j\leq r_j\leq n\); \(1\leq x_j\leq10^9\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел в отдельных строках. Число в \(j\)-й строке равняется минимальнму времени (в секундах), за которое Чанека может сделать так, чтобы значение знакомства для каждой части \(p\) (\(l_j \leq p \leq r_j\)) было не менее \(x_j\).

Примечание

Для ответа на \(1\)-й вопрос можно поступить следующим образом:

  1. Сделать \(1\) попытку, которая заканчивается на части \(1\). Это занимает \(1\) секунду. Значения знакомства становятся \([3, 3, 2, 1, 2]\).
  2. Выполнить \(1\) попытку, которая заканчивается на части \(4\). Это занимает \(4\) секунды. Значения знакомства становятся \([4, 4, 3, 3, 2]\).
  3. Выполнить \(2\) попытки, которые заканчиваются на части \(5\). Это занимает \(10\) секунд. Значения знакомства становятся \([6, 6, 5, 5, 6]\).

Общее время (в секундах) составляет \(1+4+10=15\).

Для ответа на \(2\)-й вопрос можно поступить следующим образом:

  1. Сделать попытку \(1\), которая заканчивается на части \(3\). Это занимает \(3\) секунды. Значения знакомства становятся \([2, 4, 4, 1, 2]\).
  2. Выполнить \(2\) попытки, которые заканчиваются на части \(4\). Это занимает \(8\) секунд. Значения знакомства становятся \([4, 6, 6, 5, 2]\).

Общее время (в секундах) составляет \(3+8=11\).

A. Сколько стоит Daytona?

жадные алгоритмы *800

Мы определяем целое число как самое частое в отрезке, если количество его вхождений больше, чем количество вхождений любого другого целого числа в этом отрезке. Отрезок массива — это последовательный отрезок элементов в массиве \(a\).

Дан массив \(a\) размера \(n\) и целое число \(k\). Определите, существует ли непустой отрезок \(a\), в котором \(k\) является самым частым числом.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(1 \le k \le 100\)) — количество элементов в массиве и элемент, который должен быть самым частым.

Вторая строка каждого тестового случая содержит \(n\) различных целых чисел \(a_1\), \(a_2\), \(a_3\), \(\dots\), \(a_n\) (\(1 \le a_i \le 100\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите «YES», если существует отрезок, в котором \(k\) является самым частым элементом, и «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных примера нам нужно проверить, существует ли отрезок, в котором самым частым элементом является \(4\).

На отрезке \([2,5]\) элементы равны \(4, \ 3, \ 4, \ 1\).

  • \(4\) встречается \(2\) раза;
  • \(1\) встречается \(1\) раз;
  • \(3\) встречается \(1\) раз.

Это означает, что \(4\) является самым распространенным элементом на отрезке \([2, 5]\), поэтому существует отрезок, в котором \(4\) является самым распространенным элементом.

D. Безумные развороты

жадные алгоритмы Структуры данных *1600

Дана строка \(s\) длиной \(n\), состоящая их строчных латинских букв.

Затем вам будут даны положительное целое число \(k\) и два массива \(l\) и \(r\) длиной \(k\).

Гарантируется, что для этих двух массивов выполняются следующие условия:

  • \(l_1 = 1\);
  • \(r_k = n\);
  • \(l_i \le r_i\), для каждого целого числа \(i\), такого что \(1 \le i \le k\);
  • \(l_i = r_{i-1}+1\), для каждого целого числа \(i\), такого что \(2 \le i \le k\);

Затем вам будет дано положительное целое число \(q\) — количество операций, которые вам нужно сделать с \(s\).

Каждая операция определяется одним положительным целым числом \(x\), вам нужно сделать следующее:

  • Найти индекс \(i\), такой что \(l_i \le x \le r_i\), (обратите внимание, что существует только один такой индекс \(i\));
  • присвоить \(a=\min(x, r_i+l_i-x)\) и \(b=\max(x, r_i+l_i-x)\);
  • перевернуть подстроку \(s\) с индекса \(a\) до индекса \(b\).

Переворачивание подстроки \([a, b]\) строки \(s\) означает, что \(s\) становится равной \(s_1, s_2, \dots, s_{a-1},\ s_b, s_{b-1}, \dots, s_{a+1}, s_a,\ s_{b+1}, s_{b+2}, \dots, s_{n-1}, s_n\).

Выведите \(s\) после выполнения всех операций.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2\cdot 10^5\)) — длина строки \(s\) и длина массивов \(l\) и \(r\).

Вторая строка каждого набора содержит строку \(s\) (\( |s| = n\)), содержащую строчные латинские буквы — исходная строка.

Третья строка каждого набора содержит \(k\) положительных целых чисел \(l_1, l_2, \dots, l_k\) (\(1 \le l_i \le n\)) — массив \(l\).

Четвертая строка каждого набора содержит \(k\) положительных целых чисел \(r_1, r_2, \dots, r_k\) (\(1 \le r_i \le n\)) — массив \(r\).

Пятая строка каждого набора содержит положительное целое число \(q\) (\(1 \le q \le 2 \cdot 10^5 \)) — количество операций, которые нужно сделать с \(s\).

Шестая строка каждого набора содержит \(q\) положительных целых чисел \(x_1, x_2, \dots, x_q\) (\(1\le x_i \le n\)) — описание операций.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot10^5\).

Гарантируется, что сумма \(q\) по всем наборам не превышает \(2\cdot10^5\).

Гарантируется, что условия, описанные в условии, выполняются для массивов \(l\) и \(r\).

Выходные данные

Для каждого набора входных данных, в отдельной строке выведите строку \(s\) после выполнения всех операций.

Примечание

В первом наборе входных данных:

Исходная строка — «abcd». В первой операции \(x=1\). Поскольку \(l_1=1\leq x \leq r_1=2\), мы находим индекс \(i = 1\). Мы переворачиваем подстроку с индекса \(x=1\) до \(l_1+r_1-x=1+2-1=2\). После этой операции наша строка становится «bacd».

Во второй операции \(x=3\). Поскольку \(l_2=3\leq x \leq r_2=4\), мы находим индекс \(i = 2\). Мы переворачиваем подстроку с индекса \(x=3\) до \(l_2+r_2-x=3+4-3=4\). После этой операции наша строка становится «badc».

Во втором наборе входных данных:

Исходная строка — «abcde». В первой операции \(x=1\). Поскольку \(l_1=1\leq x \leq r_1=1\), мы находим индекс \(i = 1\). Мы переворачиваем подстроку с индекса \(x=1\) до \(l_1+r_1-x=1+1-1=1\). После этой операции наша строка не изменилась («abcde»).

Во второй операции \(x=2\). Поскольку \(l_2=2\leq x \leq r_2=2\), мы находим индекс \(i = 2\). Мы переворачиваем подстроку с индекса \(x=2\) до \(l_2+r_2-x=2+2-2=2\). После этой операции наша строка не изменилась («abcde»).

В третьей операции \(x=3\). Поскольку \(l_3=3\leq x \leq r_3=5\), мы находим индекс \(i = 3\). Мы переворачиваем подстроку с индекса \(x=3\) до \(l_3+r_3-x=3+5-3=5\). После этой операции наша строка становится «abedc».

E. Ива и Пав

Бинарный поиск битмаски жадные алгоритмы Структуры данных *1400

Ива дала Паву массив \(a\) из \(n\) элементов.

Пусть \(f(l, r) = a_l \ \& \ a_{l+1} \ \& \dots \& \ a_r\) (здесь \(\&\) обозначает побитовое И).

Обратите внимание, что \(f(l, r)\) не определено, если \(l>r\).

Ива также дала Паву \(q\) запросов.

Каждый запрос состоит из 2 чисел, \(k\) и \(l\), и она хочет, чтобы Пав нашел наибольший индекс \(r\) (\(l \le r \le n\)), такой что \(f(l, r) \ge k\).

Пав хочет решить эту задачу быстро, потому что он не хочет расстроить Иву. Он нуждается в вашей помощи.

Входные данные

Первая строка содержит одно целое число \(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\).

Третья строка каждого набора содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов, которые Ива дала Паву.

Следующие \(q\) строк каждого набора содержат по два числа, \(l\) и \(k\) (\(1 \le l \le n\), \(1 \le k \le 10^9\)) — левая граница для отрезка и целое число \(k\), описанное в условии.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\). Также гарантируется, что сумма \(q\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите максимальный индекс \(r\) (\(l \le r \le n\)) такой, что \(a_l \ \& \ a_{l+1} \ \& \dots \& \ a_r \ \ge \ k\).

Если такого \(r\) не существует, выведите \(-1\).

Примечание

В первом наборе примера \(n=5\), и массив \(a = [15, 14, 17, 42, 34]\)

Первый запрос просит найти наибольший индекс \(r\), такой что \(f(1, r) \ge 7\).

\(f(1,1) = 15, \ f(1, 2) = 14, \ f(1,3)=0 \ f(1, 4)=0 \ f(1, 5)=0\), поэтому ответ \(r=2\).

Второй запрос просит найти \(f(2, r) \ge 15\). Поскольку такой \(r\) не существует, ответ \(-1\).

Третий запрос просит найти \(f(4, r) \ge 5\). \(f(4, 4) = 42, \ f(4, 5) = 34\), поэтому ответ \(r=5\).

Во втором наборе примера \(n=5\), и массив \(a= [7, 5, 3, 1, 7]\).

Для первого запроса, \(f(1, r) \ge 7\).

\(f(1, 1)=7, \ f(1, 2)=5, \ f(1, 3) = 1, \ f(1,4) = 1, \ f(1, 5)=1\), поэтому ответ на этот запрос \(1\).

Для второго запроса, \(f(5, r) \ge 7\).

\(f(5, 5) = 7\), поэтому ответ \(5\).

Для третьего запроса, \(f(2, r) \ge 3\).

\(f(2, 2) = 5, \ f(2, 3) = 1, \ f(2, 4) = 1, \ f(2, 5) = 1\), поэтому ответ \(2\).

A. Подстроено!

жадные алгоритмы *800

Монокарп организует соревнование по тяжелой атлетике. В соревновании участвуют \(n\) спортсменов, сила \(i\)-го спортсмена равна \(s_i\), а его выносливость равна \(e_i\). Спортсмен под номером \(1\) — Поликарп, друг Монокарпа, и Монокарп очень хочет, чтобы Поликарп победил.

Соревнование будет проводиться следующим образом. Жюри выберет положительное (больше нуля) целое число \(w\), которое обозначает вес штанги, используемой в соревновании. Цель каждого спортсмена — поднять штангу как можно больше раз. Спортсмен, который поднимет штангу наибольшее количество раз, будет объявлен победителем (если есть несколько таких спортсменов — победителя нет).

Если вес штанги \(w\) строго больше силы \(i\)-го спортсмена \(s_i\), то \(i\)-й спортсмен не сможет поднять штангу ни разу. В противном случае \(i\)-й спортсмен сможет поднять штангу, и количество раз, которое он это сделает, будет равно его выносливости \(e_i\).

Например, предположим, что есть \(4\) спортсмена с параметрами \(s_1 = 7, e_1 = 4\); \(s_2 = 9, e_2 = 3\); \(s_3 = 4, e_3 = 6\); \(s_4 = 2, e_4 = 2\). Если вес штанги равен \(5\), то:

  • первый спортсмен сможет поднять штангу \(4\) раза;
  • второй спортсмен сможет поднять штангу \(3\) раза;
  • третий спортсмен не сможет поднять штангу;
  • четвертый спортсмен не сможет поднять штангу.

Монокарп хочет выбрать \(w\) таким образом, чтобы Поликарп (спортсмен под номером \(1\)) выиграл соревнование. Помогите ему выбрать значение \(w\), или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — количество спортсменов. Затем следуют \(n\) строк, \(i\)-я из которых содержит два целых числа \(s_i\) и \(e_i\) (\(1 \le s_i \le 10^9\); \(1 \le e_i \le 100\)) — сила и выносливость \(i\)-го спортсмена.

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если ответ существует, выведите одно целое число — значение \(w\), удовлетворяющее ограничениям. Выведенное целое число должно удовлетворять условию \(1 \le w \le 10^9\). Можно показать, что если ответ существует, то существует хотя бы одно такое значение \(w\). Если ответов несколько, вы можете вывести любой из них;
  • в противном случае выведите одно целое число \(-1\).
Примечание

Первый набор входных данных примера разобран в условии.

B. Фишки на доске

жадные алгоритмы Конструктив *900

У вас есть доска размером \(n \times n\) (\(n\) строк и \(n\) столбцов) и два массива положительных целых чисел \(a\) и \(b\) размера \(n\).

Ваша задача — разместить фишки на этой доске таким образом, чтобы для каждой клетки \((i, j)\) выполнялось следующее условие:

  • есть хотя бы одна клетка с фишкой либо в том же столбце, либо в той же строке, что и \((i, j)\). Иными словами, существует такая клетка с фишкой \((x, y)\), что \(x = i\) или \(y = j\) (или выполняются оба условия).

Стоимость размещения фишки в клетке \((i, j)\) равна \(a_i + b_j\).

Например, для \(n=3\), \(a=[1, 4, 1]\) и \(b=[3, 2, 2]\) один из способов расставить фишки следующий:

Свободные клетки обозначены белым цветом

Суммарная стоимость для такого размещения равна \((1+3) + (1+2) + (1+2) = 10\).

Вычислите минимально возможную суммарную стоимость размещения фишек в соответствии с вышеописанными правилами.

Входные данные

Первая строка содержит одно целое число \(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 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную суммарную стоимость размещения фишек в соответствии с правилами.

Примечание

Первый набор входных данных примера разобран в условии.

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]\).

В третьем наборе входных данных примера единственной кратчайшей последовательностью операций является \([]\) (пустая последовательность).

A. Возрастающая последовательность

жадные алгоритмы *800

Дана последовательность \(a_{1}, a_{2}, \ldots, a_{n}\). Последовательность \(b_{1}, b_{2}, \ldots, b_{n}\) назовём хорошей, если она удовлетворяет всем следующим условиям:

  • \(b_{i}\) — целое положительное число для всех \(i = 1, 2, \ldots, n\);
  • \(b_{i} \neq a_{i}\) для всех \(i = 1, 2, \ldots, n\);
  • \(b_{1} < b_{2} < \ldots < b_{n}\).
Найдите наименьшее значение \(b_{n}\) среди всех хороших последовательностей \(b_{1}, b_{2}, \ldots, b_{n}\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее значение \(b_{n}\) среди всех хороших последовательностей \(b\).

Примечание

В первом наборе входных данных \(b = [2, 4, 5, 7, 8]\) является хорошей последовательностью. Можно доказать, что не существует хорошей последовательности \(b\), в которой \(b_{5} < 8\).

Во втором наборе входных данных \(b = [1, 2, 3, 4]\) является оптимальной хорошей последовательностью.

В третьем наборе входных данных \(b = [2]\) является оптимальной хорошей последовательностью.

B. Объединение множеств

битмаски жадные алгоритмы Конструктив Перебор *1300

Даны \(n\) множеств \(S_{1}, S_{2}, \ldots, S_{n}\), состоящих из целых чисел. Назовём множество \(S\) доступным, если можно выбрать некоторые из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) (возможно, ни одного) так, что \(S\) равно их объединению\(^{\dagger}\). Если ни одно из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) не выбрано, то объединение равно пустому множеству.

Найдите наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

\(^{\dagger}\) Объединение множеств \(A_1, A_2, \ldots, A_k\) определяется как множество элементов, присутствующих по крайней мере в одном из этих множеств. Результат обозначается через \(A_1 \cup A_2 \cup \ldots \cup A_k\). Например, \(\{2, 4, 6\} \cup \{2, 3\} \cup \{3, 6, 7\} = \{2, 3, 4, 6, 7\}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Следующие \(n\) строк каждого набора входных данных описывают множества \(S_1, S_2, \ldots, S_n\). В \(i\)-й из этих строк содержится целое число \(k_{i}\) (\(1 \le k_{i} \le 50\)) — число элементов в \(S_{i}\), а затем \(k_{i}\) целых чисел \(s_{i, 1}, s_{i, 2}, \ldots, s_{i, k_{i}}\) (\(1 \le s_{i, 1} < s_{i, 2} < \ldots < s_{i, k_{i}} \le 50\)) — элементы \(S_{i}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

Примечание

В первом наборе входных данных \(S = S_{1} \cup S_{3} = \{1, 2, 3, 4\}\) — самое большое доступное множество, не равное \(S_1 \cup S_2 \cup S_3 = \{1, 2, 3, 4, 5\}\).

Во втором наборе входных данных можно выбрать \(S = S_{2} \cup S_{3} \cup S_{4} = \{2, 3, 4, 5, 6\}\).

В третьем наборе входных данных можно выбрать \(S = S_{2} \cup S_{5} = S_{2} \cup S_{3} \cup S_{5} = \{3, 5, 6, 8, 9, 10\}\).

В четвёртом наборе входных данных единственным доступным множеством является \(S = \varnothing\).

C. Карточная игра

жадные алгоритмы Перебор *1500

Колода состоит из \(n\) карт. Изначально на \(i\)-й сверху карте написано число \(a_{i}\). Числа, записанные на картах, не изменяются.

Вы играете в следующую игру. Изначально ваш счёт равен \(0\). На каждом шаге вы производите одну из следующих операций:

  • Выбрать нечётное\(^{\dagger}\) целое положительное число \(i\), не превосходящее числа карт в колоде на данный момент. Убрать \(i\)-ю сверху карту из колоды и прибавить число, записанное на этой карте, к вашему счёту. Оставшиеся карты нумеруются заново, начиная сверху.
  • Выбрать чётное\(^{\ddagger}\) целое положительное \(i\), не превосходящее числа карт в колоде на данный момент. Убрать \(i\)-ю сверху карту из колоды. Оставшиеся карты нумеруются заново, начиная сверху.
  • Завершить игру. Завершить игру можно в любой момент, вы не обязаны убирать все карты из изначальной колоды.

Чему равен максимальный счёт, который можно получить по окончании игры?

\(^{\dagger}\) Целое число \(i\) называется нечётным, если существует целое \(k\), такое что \(i = 2k + 1\).

\(^{\ddagger}\) Целое число \(i\) называется чётным, если существует целое \(k\), такое что \(i = 2k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{9} \le a_i \le 10^{9}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольший возможный счёт, достижимый к концу игры.

Примечание

В первом наборе входных данных можно получить итоговый счёт \(5\) следующим образом:

  1. На первом шаге выбрать \(i=2\). Счёт остаётся равным \(0\), а числа, записанные на картах, образуют последовательность \([-4, -3, 5]\).
  2. На втором шаге выбрать \(i=3\). Счёт становится равным \(5\), а числа, записанные на картах, образуют последовательность \([-4, -3]\).
  3. На третьем шаге завершить игру с итоговым счётом \(5\).

Во втором наборе входных данных можно получить итоговый счёт \(4\) следующим образом:

  1. На первом шаге выбрать \(i=3\). Счёт становится равным \(3\), а числа, записанные на картах, образуют последовательность \([1, -2, -4]\).
  2. На втором шаге выбрать \(i=1\). Счёт становится равным \(4\), а числа, записанные на картах, образуют последовательность \([-2, -4]\).
  3. На третьем шаге завершить игру с итоговым счётом \(4\).

В третьем наборе входных данных можно получить итоговый счёт \(2\) следующим образом:

  1. На первом шаге выбрать \(i=1\). Счёт становится равным \(-1\), а числа, записанные на картах, образуют последовательность \([3, -5]\).
  2. На втором шаге выбрать \(i=1\). Счёт становится равным \(2\), а числа, записанные на картах, образуют последовательность \([-5]\).
  3. На третьем шаге завершить игру с итоговым счётом \(2\).

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\) находятся аналогично.

Во втором наборе входных данных цель уже достигнута, поскольку в дереве всего одна вершина.

E1. Две перестановки (простая версия)

жадные алгоритмы Конструктив Перебор теория чисел *2400

Это простая версия задачи. Различие между двумя версиями заключается в том, что в этой версии не нужно минимизировать число выполняемых операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Даны две перестановки\(^{\dagger}\) \(p_{1}, p_{2}, \ldots, p_{n}\) (чисел от \(1\) до \(n\)) и \(q_{1}, q_{2}, \ldots, q_{m}\) (чисел от \(1\) до \(m\)). Изначально \(p_{i}=a_{i}\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = b_{j}\) для всех \(j = 1, 2, \ldots, m\). Вы можете применять к перестановкам следующую операцию несколько раз (возможно, ни одного).

За одну операцию \(p\) и \(q\) меняются в соответствии с тремя следующими шагами:

  • Вы выбираете целые числа \(i\), \(j\), такие что \(1 \le i \le n\) and \(1 \le j \le m\).
  • Перестановка \(p\) разбивается на три части, получающиеся пр и рассмотрении \(p_i\) в качестве разделителя: левая часть состоит из \(p_1, p_2, \ldots, p_{i-1}\) (эта часть может быть пустой), средняя часть состоит из одного числа \(p_i\), а правая часть состоит из \(p_{i+1}, p_{i+2}, \ldots, p_n\) (эта часть может быть пустой). Далее, нужно переставить местами левую и правую часть в этом разбиении. Формально, после этого шага \(p\) становится равной \(p_{i+1}, p_{i+2}, \ldots, p_{n}, p_{i}, p_{1}, p_{2}, \ldots, p_{i-1}\). Элементы вновь образованной \(p\) нумеруются заново, начиная с \(1\).
  • Проделайте то же преобразование над \(q\) с индексом \(j\). Формально, после этого шага \(q\) становится равной \(q_{j+1}, q_{j+2}, \ldots, q_{m}, q_{j}, q_{1}, q_{2}, \ldots, q_{j-1}\). Элементы вновь образованной \(q\) нумеруются заново, начиная с \(1\).

Ваша цель — добиться одновременного выполнения равенств \(p_{i}=i\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = j\) для всех \(j = 1, 2, \ldots, m\).

Найдите произвольный способ добиться этого, используя не более \(10\,000\) операций, или сообщите, что это невозможно. Обратите внимание: вам не нужно минимизировать число выполненных операций.

Можно показать, что если цель достижима, то существует способ добиться её, используя не более \(10\,000\) операций.

\(^{\dagger}\) Перестановкой длины \(k\) является массив, состоящий из \(k\) различных целых чисел от \(1\) до \(k\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(k=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2500\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le m\)).

Гарантируется, что \(a\) и \(b\) являются перестановками.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\).

Иначе сначала выведите целое число \(k\) (\(0 \le k \le 10\,000\)) — число выполняемых операций, а в каждой из последующих \(k\) строк выведите два числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — числа, выбранные на очередной итерации.

Если существует несколько решений, выведите любое из них.

Обратите внимание: вам не нужно минимизировать число выполненных операций.

Примечание

В первом тесте можно достичь цели за \(2\) операции:

  1. На первой операции выбрать \(i = 3\), \(j = 4\). После этого \(p\) станет \([3, 2, 1]\), а \(q\) станет \([3, 4, 5, 2, 1]\).
  2. На второй операции выбрать \(i = 2\), \(j = 4\). После этого \(p\) станет \([1, 2, 3]\), а \(q\) станет \([1, 2, 3, 4, 5]\).

В третьем тесте достичь цели невозможно.

D. Влюблино

жадные алгоритмы Структуры данных *1500

Изначально у вас пустое мультимножество отрезков. Вам нужно обработать \(q\) операций двух типов:

  • \(+\) \(l\) \(r\) — Добавить в мультимножество отрезок прямой \((l, r)\),
  • \(-\) \(l\) \(r\) — Удалить из мультимножества ровно один отрезок прямой \((l, r)\). Гарантируется, что этот отрезок есть в мультимножестве.

После каждой операции нужно определить, существует ли пара отрезков из мультимножества, которая не пересекается. Пара отрезков \((l, r)\) и \((a, b)\) не пересекается, если не существует точки \(x\), для которой \(l \leq x \leq r\) и \(a \leq x \leq b\).

Входные данные

Первая строка каждого теста содержит целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество операций.

Следующие \(q\) строк описывают операции двух типов. Если это операция добавления, то она задается в формате \(+\) \(l\) \(r\). Если это операций удаления, то она задается в формате \(-\) \(l\) \(r\) (\(1 \leq l \leq r \leq 10^9\)).

Выходные данные

После каждой операции выведите «YES», если существует пара отрезков из мультимножества, которая не пересекается, и «NO» иначе.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные. ответы.

Примечание

В примере после второй, третьей, четвертой и пятой операций, существует пара отрезков \((1, 2)\) и \((3, 4)\), которая не пересекается.

Дальше мы удаляем ровно один отрезок \((3, 4)\), а у нас их к этому моменту было два. Поэтому после этой операции также существует пара непересекающихся отрезков.

E. Оглянись

битмаски жадные алгоритмы *1700

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\). Вам нужно сделать его неубывающим за наименьшее количество операций. За одну операцию вы делаете следующее:

  • Выберите индекс \(1 \leq i \leq n\),
  • Сделайте \(a_i = a_i \cdot 2\).

Массив \(b_1, b_2, \ldots, b_n\) является неубывающим, если \(b_i \leq b_{i+1}\) для всех \(1 \leq i < n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы массив стал неубывающим.

Примечание

В первом наборе входных данных операции не нужно делать.

Во втором наборе входных данных нужно выбрать \(i = 2\), после чего массив будет равен \([2, 2]\).

В третьем наборе входных данных можно применить следующие операции:

  • Выбрать \(i = 3\), после чего массив будет равен \([3, 2, 2]\),
  • Выбрать \(i = 3\), после чего массив будет равен \([3, 2, 4]\),
  • Выбрать \(i = 2\), после чего массив будет равен \([3, 4, 4]\).

G1. Танцы (простая версия)

Бинарный поиск жадные алгоритмы *1400

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(m = 1\).

Вам даны два массива целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). До начала применения операций вы можете переупорядочить элементы каждого из массивов как угодно. Дальше за одну операцию вы делаете оба следующих действия, если массивы не пусты:

  • Выбрать любой элемент из массива \(a\) и удалить его (все остальные элементы в том же порядке сдвигаются в один новый массив \(a\)),
  • Выбрать любой элемент из массива \(b\) и удалить его (все остальные элементы в том же порядке сдвигаются в один новый массив \(b\)).

Пусть \(k\) — итоговый размер обоих массивов. Вам нужно найти наименьшее количество операций, чтобы выполнялось \(a_i < b_i\) для всех \(1 \leq i \leq k\).

Эта задача была слишком проста и автор задачи решил ее усложнить. Вам также дано натуральное число \(m\). Теперь вам нужно найти сумму ответов на задачу для \(m\) пар массивов \((c[i], b)\), где \(1 \leq i \leq m\). Массив \(c[i]\) получается из \(a\) следующим образом:

  • \(c[i]_1 = i\),
  • \(c[i]_j = a_j\), для \(2 \leq j \leq n\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(m = 1\)) — размер массивов \(a\) и \(b\) и ограничения на значения элемента \(a_1\).

Вторая строка каждого набора входных данных содержит \(n - 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\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите суммарное количество наименьших операций по всем парам массивов \((c_i, b)\).

Примечание

В первом наборе входных данных для пары массивов \(([1, 1], [3, 2])\) ответ \(0\). Можно не применять операции и не переставлять элементы.

G2. Танцы (сложная версия)

Бинарный поиск жадные алгоритмы сортировки *1900

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(m \leq 10^9\).

Вам даны два массива целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). До начала применения операций вы можете переупорядочить элементы каждого из массивов как угодно. Дальше за одну операцию вы делаете оба следующих действия, если массивы не пусты:

  • Выбрать любой элемент из массива \(a\) и удалить его (все остальные элементы в том же порядке сдвигаются в один новый массив \(a\)),
  • Выбрать любой элемент из массива \(b\) и удалить его (все остальные элементы в том же порядке сдвигаются в один новый массив \(b\)).

Пусть \(k\) — итоговый размер обоих массивов. Вам нужно найти наименьшее количество операций, чтобы выполнялось \(a_i < b_i\) для всех \(1 \leq i \leq k\).

Эта задача была слишком проста и автор задачи решил ее усложнить. Вам также дано натуральное число \(m\). Теперь вам нужно найти сумму ответов на задачу для \(m\) пар массивов \((c[i], b)\), где \(1 \leq i \leq m\). Массив \(c[i]\) получается из \(a\) следующим образом:

  • \(c[i]_1 = i\),
  • \(c[i]_j = a_j\), для \(2 \leq j \leq n\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq 10^9\)) — размер массивов \(a\) и \(b\) и ограничения на значения элемента \(a_1\).

Вторая строка каждого набора входных данных содержит \(n - 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\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите суммарное количество наименьших операций по всем парам массивов \((c_i, b)\).

Примечание

В первом наборе входных данных:

  • Для пары массивов \(([1, 1], [3, 2])\) ответ \(0\). Можно не применять операции и не переставлять элементы.
  • Для пары массивов \(([2, 1], [3, 2])\) ответ \(0\). Можно переставить элементы первого массива, получить \([1, 2)\). Операции применять не нужно.
  • Для пары массивов \(([3, 1], [3, 2])\) ответ \(1\). Можно удалить \(3\) из первого массива и \(2\) из второго.
  • Для пары массивов \(([4, 1], [3, 2])\) ответ \(1\). Можно удалить \(4\) из первого массива и \(3\) из второго.

A. Простая конструкция

жадные алгоритмы математика Перебор *800

Целое положительное число назовем \(k\)-красивым, если сумма цифр этого числа в десятичной записи делится на \(k^{\dagger}\). Например, \(9272\) является \(5\)-красивым, поскольку сумма цифр числа \(9272\) равна \(9 + 2 + 7 + 2 = 20\).

Вам даны два числа \(x\) и \(k\). Найдите наименьшее целое число \(y \ge x\), которое является \(k\)-красивым.

\(^{\dagger}\) Целое число \(n\) делится на \(k\), если существует целое \(m\), такое что \(n = k \cdot m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(k\) (\(1 \le x \le 10^9\), \(1 \le k \le 10\)).

Выходные данные

Для каждого набора входных данных выведите наименьшее целое число \(y \ge x\), которое является \(k\)-красивым.

Примечание

В первом наборе входных данных числа от \(1\) до \(4\) состоят из одной цифры и, значит, сумма цифр числа равна его значению. Ни одно из чисел от \(1\) до \(4\) не делится на \(5\).

В четвертом наборе входных данных сумма цифр числа \(777\) равна \(7 + 7 + 7 = 21\), что уже делится на \(3\).

B. Дом с привидениями

Бинарный поиск жадные алгоритмы математика *1100

Дано число в двоичной системе счисления, состоящее из \(n\) битов, возможно, с лидирующими нулями. Например, для \(n = 5\) число \(6\) задается как \(00110\), а для \(n = 4\) число \(9\) задается как \(1001\).

Фиксируем некоторое целое \(i\), такое что \(1 \le i \le n\). За одну операцию вы можете поменять местами любые два соседних элемента битовой записи. Ваша цель — найти наименьшее количество операций, за которое можно превратить исходное число в делящееся на \(2^i\), или сказать, что это невозможно.

Обратите внимание, что для каждого \(1 \le i \le n\) вы решаете задачу независимо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину битовой записи числа.

Вторая строка каждого набора входных данных содержит строку длины \(n\), состоящую из \(0\) и \(1\), — описание числа в двоичной системе счисления.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

В каждом наборе входных данных для каждого \(1 \le i \le n\) выведите наименьшее количество операций, необходимое для того, чтобы сделать число делящимся на \(2^i\), или выведите \(-1\), если это нельзя сделать.

Примечание

В первом наборе входных данных мы не можем менять элементы местами, и число \(1\) не делится на \(2\).

Во втором наборе входных данных исходное число равно \(1\). Оно не делится на \(2\), но если применить операцию, то получится число, в двоичной записи равное \(10\), что в десятичной системе равно \(2\), а значит, делится на \(2\). Но на \(4\) это число не делится, а с помощью операции нельзя получить других чисел.

В третьем наборе входных данных исходное число равно \(2\). Для \(i = 1\) операции применять не нужно, так как исходное число делится на \(2\). Для \(i = 2\) можно применить одну операцию, поменяв первые два бита местами (в двоичном представлении получим число \(100\), которое задает число \(4\)). Для \(i = 3\) ответа не существует.

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\).

E. Сложная конструкция

жадные алгоритмы математика реализация *2800

Рассмотрим массив целых чисел \(b_0, b_1, \ldots, b_{n-1}\). Ваша цель — сделать все элементы в нем равными. Для этого вы можете выполнять следующую операцию несколько раз (возможно, ни одного):

  • Выбрать пару индексов \(0 \le l \le r \le n-1\) и для каждого \(l \le i \le r\) увеличить \(b_i\) на \(1\) (то есть заменить \(b_i\) на \(b_i + 1\)).
  • За выполнение такой операции вы получаете \((r - l + 1)^2\) монет.

Значение \(f(b)\) определяется как пара чисел \((cnt, cost)\), где \(cnt\) — это наименьшее количество операций, необходимых для того, чтобы сделать все числа массива равными, а \(cost\) — это наибольшее суммарное количество монет, которые можно получить, среди всех возможных вариантов сделать все элементы равными за \(cnt\) операций. Иными словами, в первую очередь нужно минимизировать число операций, во вторую — максимизировать число получаемых монет.

Вам дан массив целых чисел \(a_0, a_1, \ldots, a_{n-1}\). Найдите значение \(f\) для всех циклических сдвигов массива \(a\).

Формально, для каждого \(0 \le i \le n-1\) нужно сделать следующее:

  • Пусть \(c_j = a_{(j + i) \pmod{n}}\) для всех \(0 \le j \le n-1\).
  • Найдите значение \(f(c)\). Поскольку \(cost\) может быть большим числом, выведите его по модулю \((10^9 + 7)\).

Обратите внимание: при фиксированном \(cnt\) нужно максимизировать суммарную стоимость \(cost\), а не ее остаток по модулю \((10^9 + 7)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_0, a_1, \ldots, a_{n-1}\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных для каждого \(0 \le i \le n-1\) выведите значение \(f\) для \(i\)-го циклического сдвига массива \(a\): сначала выведите \(cnt\) (наименьшее количество операций), затем \(cost\) (наибольшее суммарное число монет, которое могут принести эти операции) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных есть всего один циклический сдвиг, задающийся массивом \([1]\), и в нем все элементы уже равны.

Во втором наборе входных данных нужно найти ответ на трех массивах:

  1. \(f([1, 3, 2]) = (3, 3)\).
  2. \(f([3, 2, 1]) = (2, 5)\).
  3. \(f([2, 1, 3]) = (2, 5)\).

Рассмотрим детально случай \([2, 1, 3]\). Чтобы сделать все элементы равными, на первой операции можно выбрать \(l = 1\) и \(r = 1\), получив массив \([2, 2, 3]\). На второй операции можно выбрать \(l = 0\) и \(r = 1\), получив массив \([3, 3, 3]\). Мы использовали \(2\) операции, суммарная стоимость которых равна \(1^2 + 2^2 = 5\).

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\)-й проект: сначала количество программистов, затем их индексы в произвольном порядке.

Если есть несколько ответов, выведите любой из них.

F. Кража бриллиантов

жадные алгоритмы Структуры данных *3300

Монокарп — самый известный вор в Берляндии. В этот раз он решил украсть два бриллианта. К несчастью для Монокарпа, за бриллиантами следят \(n\) камер. У каждой из камер есть два параметра \(t_i\) и \(s_i\). Первый параметр определяет, следит ли камера только за первым бриллиантом (\(t_i=1\)), только за вторым (\(t_i=2\)), или за обоими (\(t_i=3\)). Второй параметр определяет количество секунд, которое камера будет отключена после ее взлома.

Монокарп каждую секунду может выполнять одно из трех действий:

  • ничего не делать;
  • выбрать любую камеру и взломать ее; если взломать \(i\)-ю камеру, она будет отключена в следующие \(s_i\) секунд (если номер текущей секунды — \(T\), то камера будет отключена в секунды с \((T+1)\) по \((T+s_i)\), включительно);
  • украсть бриллиант, если все камеры, которые следили за ним, отключены в эту секунду. Второй бриллиант можно красть только после того, как украден первый.

Обратите внимание, что Монокарп может взламывать камеру повторно, даже если она отключена.

Ваша задача — определить минимальное время, за которое Монокарп украдет сначала первый бриллиант, а затем второй, или сообщить, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(0 \le n \le 1500\)) — количество камер.

Далее следует \(n\) строк, \(i\)-я из них содержит два целых числа \(t_i\) и \(s_i\) (\(1 \le t_i \le 3\); \(1 \le s_i \le 2n\)) — параметры \(i\)-й камеры.

Выходные данные

Выведите одно целое число — минимальное время, за которое Монокарп украдет сначала первый бриллиант, а затем второй. Если это невозможно, выведите -1.

C. Минимальный массив

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных хэши *2400

Дан массив \(a\) длины \(n\), состоящий из целых чисел. Далее к нему последовательно \(q\) раз применяют следующую операцию:

  • Выбирают индексы \(l\) и \(r\) (\(1 \le l \le r \le n\)) и целое число \(x\);
  • Ко всем элементам массива \(a\) на отрезке \([l, r]\) прибавляют \(x\). Более формально, присваивают \(a_i := a_i + x\) для всех \(l \le i \le r\).

Пусть \(b_j\) — массив \(a\), полученный после применения первых \(j\) операций (\(0 \le j \le q\)). Обратите внимание, что \(b_0\) — это массив \(a\) до применения всех операций.

Вам нужно найти лексикографически минимальный\(^{\dagger}\) массив среди всех \(b_j\).

\(^{\dagger}\)Массив \(x\) лексикографически меньше чем массив \(y\), если есть индекс \(i\) такой, что \(x_i < y_i\), и \(x_j = y_j\) для всех \(j < i\). Иными словами, для первого такого индекса \(i\), где массивы различны, \(x_i < y_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(0 \le q \le 5 \cdot 10^5\)) — количество операций с массивом.

В каждой из следующих \(q\) строк находятся по три целых числа \(l_j\), \(r_j\) и \(x_j\) \((1 \le l_j \le r_j \le n, -10^9 \le x_j \le 10^9)\) — описание каждой операции. Операции следуют в порядке их применения.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальный массив среди всех \(b_j\).

Примечание

В первом наборе входных данных:

  • \(b_0 = [1,2,3,4]\);
  • \(b_1 = [1,2,3,4]\);
  • \(b_2 = [-99,-98,-97,4]\).

Таким образом, лексикографически минимальным является массив \(b_2\).

Во втором наборе входных данных лексикографически минимальным является массив \(b_0\).

A. Циншань любит строки 2

жадные алгоритмы Конструктив реализация *1300

У Циншань есть строка \(s\), которая содержит только \(\texttt{0}\) и \(\texttt{1}\).

Строка \(a\) длины \(k\) является хорошей тогда и только тогда, когда

  • \(a_i \ne a_{k-i+1}\) для всех \(i=1,2,\ldots,k\).

Для участников Div. 2: обратите внимание, что это условие отличается от условия в задаче B.

Например, \(\texttt{10}\), \(\texttt{1010}\), \(\texttt{111000}\) — хорошие строки, а \(\texttt{11}\), \(\texttt{101}\), \(\texttt{001}\), \(\texttt{001100}\) — плохие.

Циншань хочет сделать \(s\) хорошей. Для этого она может проделать следующую операцию не более \(300\) раз (возможно, ноль):

  • вставить \(\texttt{01}\) в любое место строки \(s\) (получив новую строку \(s\)).

Скажите, возможно ли сделать \(s\) хорошей. Если это возможно, то приведите последовательность операций, которая делает строку \(s\) хорошей.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n\le 100\)) — длину строки \(s\), соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\).

Гарантируется, что \(s\) состоит только из \(\texttt{0}\) и \(\texttt{1}\).

Выходные данные

Для каждого набора входных данных, если невозможно сделать \(s\) хорошей, выведите \(-1\).

В противном случае в первой строке выведите \(p\) (\(0 \le p \le 300\)) — количество операций.

Затем выведите \(p\) целых чисел во второй строке. Целое число \(i\) должно быть индексом \(x_i\) (\(0 \le x_i \le n+2i-2\)) — позицией, в которую необходимо вставить \(\texttt{01}\) в текущем \(s\). Если \(x_i=0\), то \(\texttt{01}\) вставляется в начало \(s\). В противном случае, \(\texttt{01}\) вставляется сразу после \(x_i\)-го символа \(s\).

Можно показать, что при данных ограничениях, если ответ существует, то всегда найдется ответ, требующий не более \(300\) операций.

Примечание

В первом наборе входных данных можно выполнить ноль операций и получить \(s=\texttt{01}\), что является хорошей строкой.

Другим правильным решением является выполнение одной операции: (вставленная \(\texttt{01}\) подчеркнута)

  1. \(\texttt{0}\underline{\texttt{01}}\texttt{1}\)

получаем \(s = \texttt{0011}\), что является хорошей строкой.

Во втором и третьем наборах входных данных сделать \(s\) хорошей невозможно.

В четвертом наборе входных данных можно выполнить две операции:

  1. \(\texttt{001110}\underline{\texttt{01}}\)
  2. \(\texttt{0011100}\underline{\texttt{01}}\texttt{1}\)

и получить \(s = \texttt{0011100011}\), что является хорошей строкой.

B. План подключения от Дореми

жадные алгоритмы Конструктив математика сортировки *1700

Дореми живёт в стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\), причём в \(i\)-м городе живёт \(a_i\) человек. Страну можно смоделировать в виде неориентированного графа с \(n\) вершинами.

Изначально в графе нет рёбер. Дореми хочет сделать граф связным.

Для этого она может добавить ребро между \(i\) и \(j\), если

\(\) \sum_{k \in S} a_k \ge i\cdot j \cdot c, \(\)

где \(S\) — множество всех вершин, которые в данный момент находятся в одной компоненте связности либо с \(i\) или с \(j\), а \(c\) — фиксированная константа.

Может ли Дореми сделать граф связным?

Две вершины \((i, j)\) находятся в одной компоненте связности, если существует путь из \(i\) в \(j\). Граф является связным, если все его вершины находятся в одной компоненте связности.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\), \(c\) (\(2\le n\le 2\cdot 10^5\), \(1 \le c \le 10^6\)) — количество вершин и константу.

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1,a_2,\ldots,a_n \) (\(0 \le a_i \le 10^{12}\)) — количество людей, проживающих в \(i\)-м городе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно сделать граф связным, и «NO» (без кавычек) в противном случае.

Буквы можно выводить в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных Дореми может добавлять ребра в следующем порядке:

  1. Добавить \((1,2)\). Эта операция допустима, так как \(a_1 + a_2 = 20 \ge i\cdot j \cdot c = 20\).
  2. Добавить \((1,3)\). Эта операция допустима, так как \(a_1 + a_2 + a_3 = 35 \ge i \cdot j \cdot c = 30\).
  3. Добавить \((1,4)\). Эта операция допустима, так как \(a_1 + a_2 + a_3 + a_4 = 45 \ge i \cdot j \cdot c = 40\).

Во втором наборе входных данных Дореми может добавить ребро \((1,2)\), так как \(a_1 + a_2 =2 \ge 1 \cdot 2 \cdot 1\). После этого граф становится связным.

В третьем наборе входных данных Дореми может добавлять ребра в порядке \((5,4)\), \((5,3)\), \((5,2)\) и \((5,1)\).

В четвертом наборе входных данных Дореми вообще не может добавить ни одного ребра.

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\) дня дождя, которые промочат все города, вне зависимости от использования силы.

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\).

C. Смайло и монстры

Бинарный поиск жадные алгоритмы Конструктив сортировки *1500

Мальчик Смайло играет в новую игру! В игре есть \(n\) орд монстров, в \(i\)-й орде \(a_i\) монстров. Цель игры — уничтожить всех монстров. Для этого у вас есть два типа атак и счетчик комбо \(x\), изначально равный \(0\):

  • Первый тип атаки: вы выбираете число \(i\) от \(1\) до \(n\) такое, что в орде с номером \(i\) остался хотя бы один монстр. Затем вы убиваете одного монстра из орды с номером \(i\), и счетчик комбо \(x\) увеличивается на \(1\).
  • Второй тип атаки: вы выбираете число \(i\) от \(1\) до \(n\) такое, что в орде с номером \(i\) осталось хотя бы \(x\) монстров. Затем вы применяете ультимейт и убиваете \(x\) монстров из орды под номером \(i\). После этого \(x\) обнуляется.

Ваша задача — зачистить всех монстров, то есть сделать так, чтобы ни в одной орде не осталось ни одного монстра. Смайло хочет как можно скорее победить, поэтому скажите, какое минимальное число атак можно применить?

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — число орд монстров.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количества монстров в каждой орде.

Гарантируется, что сумма \(n\) по всем тестовым наборам не превосходит \(2 \cdot {10^5}\).

Выходные данные

Для каждого набора входных данных выведите минимальное число атак, которое нужно, чтобы убить всех монстров.

Примечание

В первом наборе входных данных можно применить атаку первого типа по одному разу на \(1\)-ю, \(3\)-ю и \(4\)-ю орду, затем добить атакой второго типа \(2\)-ю орду. Итого нужно \(4\) атаки.

Во втором наборе входных данных можно применить атаку первого типа по одному разу на \(1\)-ю, \(3\)-ю орду, затем добить атакой второго типа \(2\)-ю орду, затем применить атаку первого типа один раз на \(4\)-ю орду. Итого нужно \(4\) атаки.

В четвёртом наборе входных данных можно применить атаку первого типа один раз на \(1\)-ю орду, два раза на \(2\)-ю орду, затем применить один раз атаку второго типа на \(2\)-ю орду, затем применить один раз атаку первого типа на \(2\)-ю орду. Итого нужно \(5\) атак.

E. Брухович и контрольные

жадные алгоритмы математика Перебор реализация сортировки *2500

Мальчик Смайло учится алгоритмам у учителя по имени Брухович.

В течение года Брухович проведет \(n\) контрольных. Для каждой контрольной известна ее сложность \(a_i\) — неотрицательное целое число. Смайло не нравится, когда у двух последовательных контрольных наибольший общий делитель их сложностей равен \(1\). Поэтому он считает грустностью учебного года количество таких пар контрольных. Формально, грустность — это количество таких индексов \(i\) (\(1 \leq i \leq n - 1\)), что \(gcd(a_i, a_{i+1}) = 1\), где \(gcd(x, y)\) — наибольший общий делитель чисел \(x\) и \(y\).

Брухович хочет минимизировать грустность учебного года для Смайло. Для этого он может сделать сложность любой контрольной равной \(0\). Понятно, что Брухович не хочет слишком сильно облегчать жизнь своим ученикам. Поэтому он выполнит описанное выше действие не более \(k\) раз.

Помогите Смайло узнать, какой минимальной грустности может добиться Брухович, если применит не более \(k\) операций.

Напоминаем, что наибольшим общим делителем (НОД) двух неотрицательных целых чисел \(x\) и \(y\) называется максимальное такое число, которое является делителем и \(x\), и \(y\), обозначается как \(gcd(x, y)\). В частности, \(gcd(x, 0) = gcd(0, x) = x\) для любого целого неотрицательного \(x\).

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^5\)) — количество контрольных всего и количество контрольных, сложности которых можно обнулить, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) — элементы массива \(a\), которые являются сложностями контрольных (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем тестовым наборам не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную возможную грустность, которую можно достичь, выполнив не более \(k\) операций.

Примечание

В первом наборе входных данных можно достичь грустности, равной \(1\). Для этого нужно упростить вторую и четвертую контрольные. После этого будет только одна пара соседних контрольных, имеющая НОД, равный единице - это первая и вторая контрольные.

Во втором наборе входных данных можно достичь грустности, равной \(0\), упростив вторую и четвертую контрольные.

B. Нейтральная тональность

жадные алгоритмы Конструктив сортировки *1700

Вам дан массив \(a\) из \(n\) целых положительных чисел, а также массив \(b\) из \(m\) целых положительных чисел.

Пусть \(\text{LIS}(c)\) обозначает длину самой длинной строго возрастающей подпоследовательности массива \(c\). Например, \(\text{LIS}([2, \underline{1}, 1, \underline{3}])\) = \(2\), \(\text{LIS}([\underline{1}, \underline{7}, \underline{9}])\) = \(3\), \(\text{LIS}([3, \underline{1}, \underline{2}, \underline{4}])\) = \(3\).

Вам нужно вставить числа \(b_1, b_2, \ldots, b_m\) в массив \(a\), в любые места, в любом порядке. Пусть после вставки массив будет равен \(c_1, c_2, \ldots, c_{n+m}\). Вам нужно выбрать места для вставки так, чтобы минимизировать \(\text{LIS}(c)\).

Формально, вам нужно найти такой массив \(c_1, c_2, \ldots, c_{n+m}\), для которого одновременно выполняются следующие условия:

  • Массив \(a_1, a_2, \ldots, a_n\) является подпоследовательностью массива \(c_1, c_2, \ldots, c_{n+m}\).
  • Массив \(c_1, c_2, \ldots, c_{n+m}\) состоит из чисел \(a_1, a_2, \ldots, a_n, b_1, b_2, \ldots, b_m\), возможно, переставленных в другом порядке.
  • Значение \(\text{LIS}(c)\) минимально возможное среди всех подходящих массивов \(c\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, m\) \((1 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5)\) — длину массива \(a\) и длину массива \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 10^9)\) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) \((1 \leq b_i \leq 10^9)\) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\), а также сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + m\) чисел — элементы итогового массива \(c_1, c_2, \ldots, c_{n+m}\), для которого значение \(\text{LIS}(c)\) является минимальным из возможных. Если подходящих массивов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(\text{LIS}(a) = \text{LIS}([6, 4]) = 1\). Можно вставить число \(5\) между \(6\) и \(4\), тогда \(\text{LIS}(c) = \text{LIS}([6, 5, 4]) = 1\).

Во втором наборе входных данных \(\text{LIS}([\underline{1}, 7, \underline{2}, \underline{4}, \underline{5}])\) = \(4\). После вставки, \(c = [1, 1, 7, 7, 2, 2, 4, 4, 5, 5]\). Несложно видеть, что \(\text{LIS}(c) = 4\). Можно показать, что значения \(\text{LIS}(c)\), меньшего чем \(4\), добиться невозможно.

C. Свобода выбора

жадные алгоритмы Перебор реализация *2000

Определим анти-красоту мультимножества \(\{b_1, b_2, \ldots, b_{len}\}\) как количество вхождений числа \(len\) в это мультимножество.

Вам дано \(m\) мультимножеств, \(i\)-е мультимножество содержит \(n_i\) различных элементов, а конкретно: \(c_{i, 1}\) копий числа \(a_{i,1}\), \(c_{i, 2}\) копий числа \(a_{i,2}, \ldots, c_{i, n_i}\) копий числа \(a_{i, n_i}\). Гарантируется, что \(a_{i, 1} < a_{i, 2} < \ldots < a_{i, n_i}\). Также вам даны числа \(l_1, l_2, \ldots, l_m\) и \(r_1, r_2, \ldots, r_m\) такие, что \(1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i}\).

Создадим мультимножество \(X\), изначально пустое. Далее, для всех \(i\) от \(1\) до \(m\) вы должны совершить следующее действие ровно один раз:

  1. Выбрать некое \(v_i\) такое, что \(l_i \le v_i \le r_i\)
  2. Выбрать \(v_i\) любых чисел из \(i\)-го мультимножества и добавить их в мультимножество \(X\).

Ваша задача выбрать \(v_1, \ldots, v_m\) и добавленные числа так, чтобы в итоге мультимножество \(X\) имело минимально возможную анти-красоту.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество мультимножеств.

Далее для каждого \(i\) от \(1\) до \(m\) следует блок данных из трёх строк.

Первая строка каждого блока содержит целые числа \(n_i, l_i, r_i\) (\(1 \le n_i \le 10^5, 1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i} \le 10^{17}\)) — количество различных чисел в \(i\)-м мультимножестве и границы на количество чисел, которое надо добавить из \(i\)-го мультимножества в \(X\).

Вторая строка каждого блока содержит \(n_i\) целых чисел \(a_{i, 1}, \ldots, a_{i, n_i}\) (\(1 \le a_{i, 1} < \ldots < a_{i, n_i} \le 10^{17}\)) — различные элементы \(i\)-го мультимножества.

Третья строка каждого блока содержит \(n_i\) целых чисел \(c_{i, 1}, \ldots, c_{i, n_i}\) (\(1 \le c_{i, j} \le 10^{12}\)) — количества копий элементов в \(i\)-м мультимножестве.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^5\), а также сумма \(n_i\) по всем блокам всех наборов входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможную анти-красоту мультимножества \(X\), которой вы можете добиться.

Примечание

В первом наборе входных данных мультимножества имеют следующий вид:

  1. \(\{10, 10, 10, 11, 11, 11, 12\}\). Из этого мультимножества нужно выбрать от \(5\) до \(6\) чисел.
  2. \(\{12, 12, 12, 12\}\). Из этого мультимножества нужно выбрать от \(1\) до \(3\) чисел.
  3. \(\{12, 13, 13, 13, 13, 13\}\). Из этого мультимножества нужно выбрать \(4\) числа.

Можно выбрать из первого мультимножества элементы \(\{10, 11, 11, 11, 12\}\), из второго: \(\{12\}\), из третьего: \(\{13, 13, 13, 13\}\). Итого \(X = \{10, 11, 11, 11, 12, 12, 13, 13, 13, 13\}\). Размер \(X\) равен \(10\), число \(10\) входит в \(X\) ровно \(1\) раз, а значит анти-красота \(X\) равна \(1\). Можно показать, что анти-красоты меньшей чем \(1\), добиться не получится.

D. Разноцветный конструктив

жадные алгоритмы Конструктив Структуры данных *2600

У вас есть \(n\) цветных кубиков, \(i\)-й кубик имеет цвет \(a_i\).

Вам надо разложить все кубики по полкам. Всего есть \(m\) полок, \(i\)-я из которых вмещает \(s_i\) кубиков. Также, \(s_1 + s_2 + \ldots + s_m = n\).

Допустим, на полке размера \(k\) лежат, в этом порядке, кубики цветов \(c_1, c_2, \ldots, c_k\). Тогда определим разноцветность полки как минимальное расстояние между двумя разными кубиками одного цвета, лежащими на полке, а если все кубики на полке имеют различные цвета, то разноцветность считается равной размеру полки, то есть числу \(k\).

Более формально, разноцветность \(c_1, c_2, \ldots, c_k\) определяется следующим образом:

  • Если все цвета \(c_1, c_2, \ldots, c_k\) различны, разноцветность считается равной \(k\);
  • Иначе разноцветность определяется как минимальное целое число \(x \geq 1\), для которого найдётся индекс \(i\) \((1 \le i \le k - x)\) такой, что \(c_i = c_{i+x}\).

Для каждой полки вам задана минимальная необходимая разноцветность, то есть вам даны числа \(d_1, d_2, \ldots, d_m\), означающие, что необходимо, чтобы полка \(i\) имела разноцветность \(\geq d_i\) для всех \(i\).

Распределите имеющиеся кубики по полкам, чтобы обеспечить необходимую разноцветность, или сообщите, что это невозможно.

Входные данные

Каждый тест состоят из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, m\) \((1 \leq m \leq n \leq 2 \cdot 10^5)\) — количество кубиков и количество полок, на которые их надо разложить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq n)\) — цвета кубиков.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) \((1 \leq s_i \leq n)\) — размеры полок. Гарантируется, что \(s_1 + \ldots + s_m = n\).

Четвёртая строка каждого набора входных данных содержит \(m\) целых чисел \(d_1, d_2, \ldots, d_m\) \((1 \leq d_i \leq s_i)\) — минимальные необходимые разноцветности полок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно распределить кубики по полкам, выполнив все требования. Иначе, выведите \(m\) строк, \(i\)-я из которых содержит \(s_i\) чисел — цвета кубиков, лежащих на \(i\)-й полке, в подходящем порядке.

B. Точки и минимальное расстояние

жадные алгоритмы математика сортировки *800

Вам задана последовательность целых чисел \(a\) длины \(2n\). Вам нужно разбить эти \(2n\) целых чисел на \(n\) пар; каждая пара будет задавать координаты точки на плоскости. Каждое число из последовательности \(a\) должно стать \(x\) или \(y\) координатой ровно одной точки. Обратите внимание, что точки могут быть одинаковыми.

После составления точек вам нужно выбрать путь \(s\), который начинается в какой-то из этих точек, заканчивается в какой-то из этих точек, при этом посещает все \(n\) точек хотя бы по одному разу.

Длина пути \(s\) — это сумма расстояний между всеми соседними точками пути. В данной задаче будем считать, что расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1-x_2| + |y_1-y_2|\).

Перед вами стоит задача составить \(n\) точек и выбрать путь \(s\) таким образом, чтобы длина пути \(s\) была минимально возможной.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек, которые нужно составить.

Во второй строке записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(0 \le a_i \le 1\,000\)) — описание последовательности \(a\).

Выходные данные

На каждый набор входных данных в первую строку выведите минимально возможную длину пути \(s\).

В \(i\)-ю из следующих \(n\) строк выведите два целых числа \(x_i\) и \(y_i\) — координаты точки, которую нужно посетить \(i\)-й по счету.

Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных можно, например, составить точки \((10, 1)\) и \((15, 5)\) и начать путь \(s\), например, в первой точке и завершить его во второй точке. Тогда длина пути будет равна \(|10 - 15| + |1 - 5| = 5 + 4 = 9\).

Во втором наборе можно, например, составить точки \((20, 20)\), \((10, 30)\) и \((10, 30)\), посетив их именно в таком порядке. Тогда длина пути будет равна \(|20 - 10| + |20 - 30| + |10 - 10| + |30 - 30| = 10 + 10 + 0 + 0 = 20\).

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\).

Выходные данные

Для каждого набора входных данных выведите три целых числа:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.

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\).

B. AB-обмен

жадные алгоритмы Строки *900

Дана строка \(s\) длины \(n\), состоящая из символов \(\texttt{A}\) и \(\texttt{B}\). Вам разрешено выполнять следующую операцию:

  • Выбрать индекс \(1 \le i \le n - 1\) такой, что \(s_i = \texttt{A}\) и \(s_{i + 1} = \texttt{B}\), и поменять местами \(s_i\) и \(s_{i+1}\).

Для каждого индекса \(1 \le i \le n - 1\) вам разрешается выполнить данную операцию не более одного раза. Однако вы можете делать это в любом порядке. Найдите максимальное количество операций, которое вы можете выполнить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) (\(s_i=\texttt{A}\) или \(s_i=\texttt{B}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которое можно выполнить.

Примечание

В первом наборе входных данных можно выполнить операцию ровно один раз для \(i=1\), так как \(s_1=\texttt{A}\) и \(s_2=\texttt{B}\).

Во втором наборе входных данных можно показать, что для любого индекса выполнить операцию невозможно.

В третьем наборе входных данных можно выполнить операцию с \(i=2\) и получить \(\texttt{ABAB}\). Затем еще одну операцию с \(i=3\), чтобы получить \(\texttt{ABBA}\). И, наконец, еще одну операцию с \(i=1\), чтобы получить \(\texttt{BABA}\). Заметим, что хотя в конце \(s_2 = \texttt{A}\) и \(s_3 = \texttt{B}\), мы не можем повторно выполнить операцию с \(i=2\), так как для каждого индекса операция может быть выполнена не более одного раза.

C. Сопоставление массивов

Бинарный поиск жадные алгоритмы Конструктив сортировки *1400

Даны два массива \(a\) и \(b\) длины \(n\). Назовём красотой массивов \(a\) и \(b\) количество индексов \(i\) таких, что \(a_i > b_i\).

Вам также дано целое число \(x\). Определите, можно ли переставить элементы \(b\) так, чтобы красота массивов стала равна \(x\). Если это возможно, то выведите любой подходящий массив, который можно получить из \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2\cdot 10^5\), \(0 \le x \le n\)) — длину массивов \(a\) и \(b\) и желаемую красоту массивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2n\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 2n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если невозможно переставить \(b\) так, чтобы красота массивов стала равна \(x\).

В противном случае выведите «YES». Затем, в следующей строке выведите \(n\) целых чисел, которые представляют собой перестановку массива \(b\).

Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В наборах входных данных 1 и 2 красота массивов может быть равна только \(0\), так как \(a_1 = 1 \le 2 = b_1\).

В наборах входных данных 3, 4, 5 и 6 возможны следующие красоты массивов: \(x = 1\) и \(x = 2\). В частности, если \(b\) сделать равным \([2, 4, 1]\), то \(a_3 = 3 > 1 = b_3\), поэтому красота массивов равна \(1\). Если же \(b\) не менять, то \(a_2 = 4 > b_2 = 1\) и \(a_3 = 3 > 2 = b_3\), так что красота массивов равна \(2\).

F. Инвертирование скобок

жадные алгоритмы Конструктив математика реализация *2600

Дана бинарная строка \(s\) длины \(2n\), каждый элемент которой равняется \(\mathtt{0}\) или \(\mathtt{1}\). Вы можете выполнять следующую операцию:

  1. Выбрать правильную скобочную последовательность\(^\dagger\) \(b\) длины \(2n\).
  2. Пройти по всем индексам \(i\) от \(1\) до \(2n\) по порядку. Если \(b_i\) — открывающая скобка, то обозначим за \(p_i\) минимальный индекс такой, что \(b[i,p_i]\) — правильная скобочная последовательность. Тогда к подотрезку с \(i\) по \(p_i\) из бинарной строки \(s\) применяется операция инвертирования\(^\ddagger\). Заметим, что поскольку правильная скобочная последовательность длины \(2n\) будет иметь \(n\) открывающих скобок, то мы выполним \(n\) операций инвертирования подотрезка над \(s\).

Ваша задача — найти последовательность из не более чем \(10\) операций, изменяющую все элементы \(s\) на \(\mathtt{0}\), или определить, что это невозможно. Заметим, что минимизировать количество операций не обязательно.

При заданных ограничениях можно доказать, что если существует способ изменить все элементы \(s\) на \(\mathtt{0}\), то существует способ, требующий не более \(10\) операций.

\(^\dagger\) Скобочная последовательность называется правильной, если ее можно превратить в корректное математическое выражение, добавив символы \(+\) и \(1\). Например, последовательности «(()()», «()» и «(()(())» являются правильными, а «)(», «(()» и «(())(» — не являются.

\(^\ddagger\) Если мы выполним операцию инвертирования для подотрезка с \(l\) по \(r\) бинарной строки \(s\), то мы инвертируем все значения \(s_i\) такие, что \(l \leq i \leq r\). Если \(s_i\) инвертируется, то мы присваиваем \(s_i := \mathtt{0}\), если изначально было \(s_i = \mathtt{1}\), и наоборот. Например, если \(s=\mathtt{1000101}\) и мы выполняем операцию инвертирования подотрезка с \(3\) по \(5\), то \(s\) изменится на \(s=\mathtt{1011001}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — где \(2n\) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(2n\) (\(s_i = \mathtt{0}\) или \(s_i = \mathtt{1}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке \(-1\), если невозможно изменить все элементы \(s\) на \(\mathtt{0}\).

В противном случае выведите одно целое число \(k\) (\(0 \le k \le 10\)), равняющееся количеству операций, необходимому для изменения всех элементов \(s\) на \(\mathtt{0}\). Затем в следующих \(k\) строках выведите правильные скобочные последовательности длины \(2n\), представляющие собой операции, необходимые для изменения всех элементов \(s\) на \(0\).

Если существует несколько способов изменить все элементы \(s\) на \(\mathtt{0}\), требующих не более \(10\) операций, то можно вывести любой из них.

Примечание

В первом наборе входных данных можно показать, что невозможно изменить все элементы \(s\) на \(\mathtt{0}\).

Во втором наборе входных данных первая операция с использованием последовательности скобок \(b = \mathtt{()()}\) преобразует двоичную строку \(s=\mathtt{0000}\) в \(s=\mathtt{1111}\). Затем вторая операция с использованием той же последовательности скобок \(b = \mathtt{()()}\) преобразует двоичную строку \(s=\mathtt{1111}\) обратно в \(s=\mathtt{0000}\). Заметим, что поскольку все элементы \(s\) изначально уже равнялись \(\mathtt{0}\), то использование \(0\) операций также является правильным ответом.

В третьем наборе входных данных одна операция с использованием последовательности скобок \(b = \mathtt{(())()}\) изменит все элементы \(s\) на \(\mathtt{0}\). Операция будет происходить следующим образом:

  1. \(b_1\) — открывающая скобка, а \(p_1 = 4\), так как \(b[1,4]=\mathtt{(())}\) — правильная скобочная последовательность. Следовательно, выполнив операцию инвертирования подотрезка с \(1\) по \(4\) на бинарной строке \(s = \mathtt{100111}\), мы получим \(s = \mathtt{011011}\).
  2. \(b_2\) является открывающей скобкой, а \(p_2 = 3\), так как \(b[2,3]=\mathtt{()}\) является правильной скобочной последовательностью. Следовательно, выполнив операцию инвертирования подотрезка с \(2\) по \(3\) на бинарной строке \(s = \mathtt{011011}\), мы получим \(s = \mathtt{000011}\).
  3. \(b_3\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.
  4. \(b_4\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.
  5. \(b_5\) является открывающей скобкой, а \(p_5 = 6\), так как \(b[5,6]=\mathtt{()}\) является правильной скобочной последовательностью. Следовательно, выполнив операцию инвертирования подотрезка с \(5\) по \(6\) для бинарной строки \(s = \mathtt{000011}\), мы получим \(s = \mathtt{000000}\).
  6. \(b_6\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.

В четвертом наборе входных данных первая операция с использованием скобочной последовательности \(b = \mathtt{(((())))}\) преобразует бинарную строку \(s = \mathtt{01011100}\) в \(s = \mathtt{11111001}\). Затем, вторая операция с использованием скобочной последовательности \(b = \mathtt{()()(())}\) преобразует бинарную строку \(s = \mathtt{11111001}\) в \(s=\mathtt{00000000}\).

B. Милена и поклонник

жадные алгоритмы математика *1500

Милена получила массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) от тайного поклонника. Она думает, что сделав этот массив неубывающим, она сможет узнать личность тайного поклонника.

Она может использовать следующую операцию, чтобы сделать этот массив неубывающим.

  • Выбрать элемент \(a_i\) массива \(a\) и целое число \(x\) такое, что \(1 \le x < a_i\). После этого заменить \(a_i\) в массиве \(a\) на два числа \(x\) и \(a_i - x\). Новые элементы (\(x\) и \(a_i - x\)) записываются в массив \(a\) вместо элемента \(a_i\) именно в таком порядке.

    Более формально, пусть массив \(a\) равен \(a_1, a_2, \ldots, a_i, \ldots, a_k\) перед операцией. После операции он становится равным \(a_1, a_2, \ldots, a_{i-1}, x, a_i - x, a_{i+1}, \ldots, a_k\). Обратите внимание, что на каждой операции длина массива \(a\) увеличивается на \(1\).

Милена может выполнить эту операцию несколько раз (возможно, ноль). Она хочет, чтобы вы нашли минимальное количество раз, которое нужно выполнить эту операцию, чтобы сделать массив \(a\) неубывающим.

Массив \(x_1, x_2, \ldots, x_k\) длины \(k\) называется неубывающим, если \(x_i \le x_{i+1}\) для всех \(1 \le i < k\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(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\) всегда можно сделать неубывающим за конечное число операций.

Примечание

В первом наборе входных данных Милена может заменить второй элемент массива \(a\) на числа \(1\) и \(2\), в результате чего массив станет равен \([\, 1, \, \underline{1}, \, \underline{2}, \, 2 \,]\). Достаточно \(1\) операции.

Во втором наборе входных данных массив \(a\) уже неубывающий, поэтому ответ \(0\).

В третьем наборе входных данных Милена может сделать массив \(a\) неубывающим за \(3\) операции следующим образом:

  • Выбрать \(i=1\) и \(x=2\) и заменить \(a_1\) на \(2\) и \(1\). Массив \(a\) становится равным \([\, \underline{2}, \, \underline{1}, \, 2, \, 1 \, ]\).
  • Выбрать \(i=3\) и \(x=1\) и заменить \(a_3\) на \(1\) и \(1\). Массив \(a\) становится равным \([\, 2, \, 1, \, \underline{1}, \, \underline{1}, \, 1 \,]\).
  • Выбрать \(i=1\) и \(x=1\) и заменить \(a_1\) на \(2\) и \(1\). Массив \(a\) становится равным \([\, \underline{1}, \, \underline{1}, \, 1, \, 1, \, 1, \, 1 \,]\).

Можно показать, что это невозможно сделать за \(2\) или менее операции, поэтому ответ \(3\).

D. Абсолютная красота

жадные алгоритмы математика *1900

У Кирилла есть два массива целых чисел \(a_1,a_2,\ldots,a_n\) и \(b_1,b_2,\ldots,b_n\) длины \(n\). Абсолютная красота массива \(b\) определяется как \(\)\sum_{i=1}^{n} |a_i - b_i|.\(\) Здесь \(|x|\) обозначает модуль числа \(x\).

Кирилл может выполнить следующую операцию не более одного раза:

  • выбрать два индекса \(i\) и \(j\) (\(1 \leq i < j \leq n\)) и поменять местами значения \(b_i\) и \(b_j\).

Помогите ему найти максимальную возможную красоту массива \(b\) после не более чем одного обмена.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(2\leq n\leq 2\cdot 10^5\)) — длина массивов \(a\) и \(b\).

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\leq a_i\leq 10^9\)) — массив \(a\).

В третьей строке дано \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1\leq b_i\leq 10^9\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: максимальную возможную абсолютную красоту массива \(b\) после не более чем одного обмена.

Примечание

В первом наборе входных данных любой возможный обмен не изменяет массив \(b\).

Во втором наборе входных данных абсолютная красота массива \(b\) будет равна \(|1-1| + |2-2| = 0\), если не делать единственный возможный обмен. Если же поменять местами первый и второй элементы массива \(b\), абсолютная красота будет равна \(|1-2| + |2-1| = 2\). Таким образом, ответ равен \(2\).

В третьем наборе входных данных Кириллу оптимально не выполнять обмен. Ответ равен \(2\) по аналогии с предыдущим набором входных данных.

В четвёртом наборе входных данных вне зависимости от действий Кирилла абсолютная красота массива \(b\) будет равна \(16\).

E. София и строки

жадные алгоритмы сортировки Строки Структуры данных *2200

У Софии есть строка \(s\) длины \(n\), состоящая из строчных латинских букв. Она может выполнять следующие операции с этой строкой.

  1. Выбрать позицию \(1 \le i \le |s|\) и удалить \(s_i\) из строки.
  2. Выбрать пару позиций \((l, r)\) (\(1 \le l \le r \le |s|\)) и отсортировать подстроку \(s_{l} s_{l+1} \ldots s_r\) в алфавитном порядке.
Здесь \(|s|\) обозначает текущую длину строки \(s\). В частности, \(|s| = n\) перед первой операцией. Например, если \(s = \mathtt{sofia}\), то, применив операцию первого типа с \(i=4\), мы сделаем строку \(s\) равной \(\mathtt{sofa}\). Применив после этого операцию второго типа с \((l, r) = (2, 4)\), получим строку \(s\), равную \(\mathtt{safo}\).

София хочет получить строку \(t\) длины \(m\) из строки \(s\), используя операции, описанные выше, несколько раз (возможно, ноль). Определите, возможно ли это.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два целых числа \(n\) и \(m\) (\(1\leq m \leq n \leq 2\cdot 10^5\)) — длины строк \(s\) и \(t\) соответственно.

Во второй строке дана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Во третьей строке дана строка \(t\) длины \(m\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если София может получить строку \(t\) из строки \(s\), используя операции из условия. Иначе, выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных София может сделать следующую операцию:

  1. операция второго типа с \(l=1\) и \(r=5\): строка \(s\) станет равной \(\mathtt{afios}\) после операции.

Во втором наборе входных данных София может сделать следующие операции:

  1. операция второго типа с \(l=1\) и \(r=2\): строка \(s\) станет равной \(\mathtt{bca}\) после операции;
  2. операция первого типа с \(i=3\): строка \(s\) станет равной \(\mathtt{bc}\) после операции.

В третьем наборе входных данных можно показать, что невозможно получить строку \(t\) из строки \(s\) используя операции из условия.

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\).

Выходные данные

Для каждого набора данных выведите одно число — ответ на задачу.

E. Очередная сортировка

жадные алгоритмы реализация сортировки *1300

Влад нашёл массив \(a\) из \(n\) чисел и решил его отсортировать в порядке неубывания.

Для этого Влад может применить следующую операцию любое количество раз:

  • Извлечь первый элемент массива и вставить его в конец;
  • Обменивать этот элемент с предыдущим, пока он не станет первым или не станет строго больше предыдущего.

Обратите внимание, что оба действия являются частью операции и за одну операцию вы должны применить оба действия.

Например, если применить операцию к массиву [\(4, 3, 1, 2, 6, 4\)], то он будет изменяться следующим образом:

  • [\(\color{red}{4}, 3, 1, 2, 6, 4\)];
  • [\(3, 1, 2, 6, 4, \color{red}{4}\)];
  • [\(3, 1, 2, 6, \color{red}{4}, 4\)];
  • [\(3, 1, 2, \color{red}{4}, 6, 4\)].

У Влада нет времени проделывать все операции, поэтому он просит вас определить, какое минимальное число операций нужно применить, чтобы отсортировать массив, или сообщить, что это невозможно.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов массива.

Вторая строка каждого набора содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное число операций, необходимое для сортировки массива. Если это сделать невозможно, в качестве ответа выведите \(-1\).

F. Лёшины капризы

графы Деревья жадные алгоритмы Конструктив кратчайшие пути *1600

Дерево — связный граф без циклов. Можно показать, что любое дерево из \(n\) вершин имеет ровно \(n - 1\) ребро.

Лист — вершина в дереве, из которой выходит ровно одно ребро.

Расстояние между двумя вершинами \(u\) и \(v\) в дереве — минимальное количество рёбер, которое нужно пройти, чтобы из вершины \(u\) прийти в вершину \(v\).

У Лёши скоро день рождения, и Тимофею хотелось бы подарить ему дерево из \(n\) вершин. Однако Лёша очень капризный мальчик. Каждый день на протяжении \(q\) дней он будет выбирать целое число, обозначим выбранное в \(i\)-й день число \(d_i\). Если в \(i\)-й день в дереве не будет двух листов на расстоянии ровно \(d_i\), то Лёша будет разочарован.

Тимофей решил подарить Лёше конструктор, чтобы он сам мог менять своё дерево, как ему хочется. Тимофей знает, что Лёша ещё и ленив (ужас, а не человек), поэтому в начале каждого дня он может выполнить не более одной операции следующего вида:

  • Выбрать вершины \(u\), \(v_1\) и \(v_2\), такие, что между \(u\) и \(v_1\) есть ребро, а между \(u\) и \(v_2\) нет ребра. После этого удалить ребро между \(u\) и \(v_1\) и добавить ребро между \(u\) и \(v_2\). Эту операцию нельзя выполнить, если после неё граф перестанет быть деревом.

Чудесным образом Тимофею удалось узнать все \(d_i\). После этого его посетила ещё одна гениальная мысль — на всякий случай сделать инструкцию к набору, при этом такую, чтобы Лёша не был разочарован.

Тимофей не такой ленивый, как Лёша, но когда он увидел число \(n\), у него резко пропало желание разрабатывать инструкцию и придумывать изначальное дерево, поэтому он поручил эту задачу вам. Можно показать, что дерево и последовательность операций, удовлетворяющие описанным условиям, всегда существуют.

Вот пример операции, где были выбраны вершины: \(u\) — \(6\), \(v_1\) — \(1\), \(v_2\) — \(4\).

Входные данные

В первой строке дано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны целые числа \(n\) (\(3 \leq n \leq 500\)) и \(q\) (\(1 \leq q \leq 500\)) — количество вершин в дереве и количество дней соответственно.

В \(i\)-й из следующих \(q\) строк дано целое число \(d_i\) (\(2 \leq d_i \leq n - 1\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\). То же самое гарантируется для \(q\).

Можно показать, что дерево и последовательность операций, удовлетворяющие описанным условиям, всегда существуют.

Выходные данные

Для каждого набора входных данных сначала выведите \(n - 1\) строку с описанием рёбер дерева. Если вы хотите, чтобы в дереве было ребро между вершинами \(u\) и \(v\), то среди этих \(n - 1\) строк должна быть строка \(v\) \(u\) или \(u\) \(v\).

В следующих \(q\) строках выведите по три целых числа \(u\) \(v_1\) \(v_2\) — описание операций. Если Лёше не нужно выполнять операцию, выведите \(-1\) \(-1\) \(-1\).

C. Удаление повторов

жадные алгоритмы строковые суфф. структуры хэши *2200

Однажды Вася увидел строку. В ней было настолько много разных букв, что они обозначались числами, но при этом каждая буква встречалась в строке не более 10 раз. Эта строка не понравилась Васе, потому что в ней были повторы: повтором длины x называется такая подстрока длины 2x, что ее первая половина совпадает посимвольно со второй. Вася стал удалять из строки все повторы. Он делает это следующим образом: пока это возможно, Вася берет самый короткий повтор, если таких несколько — самый левый, и удаляет его левую половину и все, что находится левее этого повтора.

Вам дана строка, которую увидел Вася. Выясните, что от нее останется после того как Вася удалит все повторы описанным выше методом.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 105) — длина строки. Следующая строка содержит n целых чисел от 0 до 109 включительно, разделенных пробелами — буквы строки, обозначенные числами. Гарантируется, что каждая буква встречается в строке не более 10 раз.

Выходные данные

В первую строку выведите длину оставшейся части строки. Во вторую строку выведите, разделяя пробелами, все буквы строки, которая останется после того как Вася удалит все повторы описанным выше способом.

A. Вася и автобусы

жадные алгоритмы математика *1100

Однажды Васе рассказывали историю: «В городе Верхнеберляндске отъезжал от конечной остановки автобус номер 62. В нем было n взрослых и m детей...»

Что было дальше, нам, собственно, и не важно. Вася — бухгалтер и любит считать деньги. Поэтому он захотел узнать, какую максимальную и минимальную сумму денег могли заплатить пассажиры этого автобуса за проезд.

Цена проезда в автобусах Верхнеберляндска — один берляндский рубль. Однако, не все так просто — каждый взрослый пассажир имеет право провезти бесплатно не более одного ребенка. Это значит, что взрослый пассажир, который провозит с собой k (k > 0) детей, платит всего k рублей: за один билет для себя и за (k - 1) билетов для своих детей. Также взрослый может ехать без детей, в этом случае он платит всего один рубль.

Известно, что в Верхнеберляндске дети не могут проезжать в автобусе без сопровождения взрослых.

Помогите Васе посчитать минимальную и максимальную сумму в берляндских рублях, которую могли заплатить пассажиры этого автобуса суммарно.

Входные данные

Входные данные состоят из одной строки, в которой через пробел заданы два целых числа n и m (0 ≤ n, m ≤ 105) — количество взрослых и количество детей в автобусе, соответственно.

Выходные данные

Если в автобусе могли ехать n взрослых и m детей в единственной строке выведите через пробел два числа — минимальную и максимальную возможную стоимость проезда этих людей, соответственно.

В противном случае выведите «Impossible» (без кавычек).

Примечание

В первом примере один взрослый едет с двумя детьми и платит два рубля.

Во втором примере в автобусе только дети, чего случиться не могло.

    В третьем примере могло быть два случая:
  • Каждый из двух пассажиров провозил одного ребенка и заплатил по одному рублю. В этом случае суммарная стоимость проезда — два рубля.
  • Один из пассажиров вез двоих детей и заплатил два рубля, а другой ехал один и заплатил один рубль. Суммарная стоимость — три рубля.

A. Заполните водой

жадные алгоритмы Конструктив реализация Строки *800

У Филиппа есть ряд клеток, некоторые из которых заблокированы, а остальные — пусты. Он хочет, чтобы во всех пустых клетках оказалась вода. Для этого он может применять 2 типа операций:

  • \(1\) — поместить воду в пустую клетку.
  • \(2\) — переместить воду из клетки с водой в любую другую пустую клетку. Обратите внимание, что при перемещении воды из одной клетки в другую Филипп удаляет воду из начальной клетки.

Если клетка \(i\) (\(2 \le i \le n-1\)) пустая, а клетки \(i-1\) и \(i+1\) содержат воду, то она заполняется водой.

Найдите минимальное количество раз, которое ему нужно выполнить операцию \(1\) типа, чтобы заполнить все пустые клетки водой.

Заметим, что минимизировать использование операций \(2\) типа не нужно. Также заметим, что заблокированные клетки не содержат воду, и Филипп не может поместить в них воду.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество клеток.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\). \(i\)-й символ \(s\) равен '.', если клетка \(i\) пуста, и '#', если клетка \(i\) заблокирована.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество операций \(1\) типа, необходимое для заполнения всех пустых клеток водой.

Примечание

Набор входных данных 1

В первом наборе входных данных Филипп может поместить воду в клетки \(1\) и \(3\). Поскольку клетка \(2\) находится между \(2\) клетками с водой, она тоже заполняется водой.

Набор входных данных 2

Во втором наборе он может поместить источники воды в клетки \(3\) и \(5\). В результате клетка \(4\) заполнится водой. Затем он удалит воду из клетки \(5\) и поместит ее в клетку \(6\). Поскольку соседи клетки \(5\) — клетки \(4\) и \(6\) — имеют воду, клетка \(5\) также заполняется водой. Иллюстрация этого процесса приведена ниже.

Операции во втором наборе входных данных. Белые клетки — пустые, серые — заблокированные, синие — вода.

Набор входных данных 3

В третьем наборе входных данных он может поместить воду во все пустые клетки. Для этого требуется \(5\) операций \(1\) типа.

Набор входных данных 4

В четвертом наборе пустых клеток нет. Следовательно, ни одной операции применять не нужно.

Набор входных данных 5

В пятом наборе входных данных существует последовательность операций, которая требует только \(2\) операции типа \(1\).

A. Поездка

жадные алгоритмы математика *800

Рассмотрим дорогу, которую можно представить в виде числовой прямой. Вы находитесь в точке \(0\) числовой прямой и хотите добраться из точки \(0\) в точку \(x\) и обратно в точку \(0\).

Вы путешествуете на автомобиле, который расходует \(1\) литр бензина за \(1\) единицу пройденного расстояния. Когда вы стартуете из точки \(0\), ваш автомобиль полностью заправлен (в его бензобаке находится максимально возможное количество топлива).

Вдоль дороги есть \(n\) заправочных станций, расположенных в точках \(a_1, a_2, \dots, a_n\). Приезжая на заправку, вы полностью заправляете свой автомобиль. Обратите внимание, что вы можете заправляться только на заправочных станциях, а в точках \(0\) и \(x\) заправок нет.

Ваша задача — посчитать минимально возможный объем бензобака автомобиля (в литрах), который позволит вам проехать из точки \(0\) в точку \(x\) и обратно в точку \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк:

  • первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 50\); \(2 \le x \le 100\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 < a_1 < a_2 < \dots < a_n < x\)).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможный объем бензобака автомобиля (в литрах), который позволит вам проехать из точки \(0\) в точку \(x\) и обратно.

Примечание

В первом наборе входных данных примера, если бензобак автомобиля имеет объем \(4\) литра, то доехать до \(x\) и обратно можно следующим образом:

  • доехать до точки \(1\), тогда в бензобаке вашего автомобиля останется \(3\) литра топлива;
  • заправиться в точке \(1\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(2\), тогда в бензобаке вашего автомобиля останется \(3\) литра топлива;
  • заправиться в точке \(2\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(5\), тогда в бензобаке вашего автомобиля останется \(1\) литр топлива;
  • заправиться в точке \(5\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(7\), тогда в бензобаке вашего автомобиля останется \(2\) литра топлива;
  • доехать до точки \(5\), тогда в бензобаке вашего автомобиля останется \(0\) литров топлива;
  • заправиться в точке \(5\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(2\), тогда в бензобаке вашего автомобиля останется \(1\) литр топлива;
  • заправиться в точке \(2\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(1\), тогда в бензобаке вашего автомобиля останется \(3\) литра топлива;
  • заправиться в точке \(1\), тогда в бензобаке вашего автомобиля останется \(4\) литра топлива;
  • доехать до точки \(0\), тогда в бензобаке вашего автомобиля останется \(3\) литра топлива.

B. Фишка и лента

жадные алгоритмы математика *1100

Рассмотрим ленту, разделенную на \(n\) клеток, пронумерованных от \(1\) до \(n\) слева направо. Изначально в каждой клетке записано число \(0\).

Монокарп играет в игру с фишкой. Игра состоит из нескольких ходов. Во время первого хода Монокарп помещает фишку в \(1\)-ю клетку ленты. Во время каждого хода, за исключением первого, Монокарп выполняет ровно одно из двух следующих действий:

  • переместить фишку в следующую клетку (т. е. если фишка находится в клетке \(i\), то она перемещается в клетку \(i+1\)). Это действие невозможно, если фишка находится в последней клетке;
  • выбрать любую клетку \(x\) и телепортировать фишку в эту клетку. Можно выбрать ту же самую клетку, в которой сейчас находится фишка.

В конце каждого хода число, записанное в клетке с фишкой, увеличивается на \(1\).

Цель Монокарпа — сделать какое-то количество ходов так, чтобы в \(1\)-й клетке было записано число \(c_1\), во \(2\)-й клетке — число \(c_2\), ..., в \(n\)-й клетке — число \(c_n\). Он хочет телепортировать фишку как можно меньше раз.

Помогите Монокарпу вычислить минимальное количество раз, которое он должен телепортировать фишку.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\));
  • во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le 10^9\); \(c_1 \ge 1\)).

Можно доказать, что при таких ограничениях всегда можно за конечное число ходов добиться того, чтобы в клетках были записаны числа \(c_1, c_2, \dots, c_n\).

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество раз, которое Монокарп должен телепортировать фишку.

Примечание

В первом наборе входных данных примера Monocarp может выполнять ходы следующим образом:

  • поместить фишку в \(1\)-ю клетку; числа в клетках равны \([1, 0, 0, 0]\);
  • переместить фишку в следующую (\(2\)-ю) клетку; числа в клетках равны \([1, 1, 0, 0]\);
  • переместить фишку в следующую (\(3\)-ю) клетку; числа в клетках равны \([1, 1, 1, 0]\);
  • телепортировать фишку в \(2\)-ю клетку; числа в клетках равны \([1, 2, 1, 0]\);
  • переместить фишку в следующую (\(3\)-ю) клетку; числа в клетках равны \([1, 2, 2, 0]\);
  • переместить фишку в следующую (\(4\)-ю) клетку; числа в клетках равны \([1, 2, 2, 1]\).

C. Прибавь, раздели и округли

жадные алгоритмы Конструктив математика *1400

Задан массив целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)). За одну операцию можно выбрать целое число \(x\) (\(0 \le x \le 10^{18}\)) и заменить \(a_i\) на \(\lfloor \frac{a_i + x}{2} \rfloor\) (\(\lfloor y \rfloor\) означает округление \(y\) вниз до ближайшего целого числа) для всех \(i\) от \(1\) до \(n\). Обратите внимание, что каждая операция затрагивает все элементы массива.

Выведите наименьшее количество операций, необходимое, чтобы сделать все элементы массива равными.

Если количество операций меньше или равно \(n\), то выведите выбранный \(x\) для каждой операции. Если есть несколько правильных ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите наименьшее количество операций, необходимое, чтобы сделать все элементы массива равными.

Если количество операций меньше или равно \(n\), то выведите выбранный \(x\) для каждой операции. Если есть несколько правильных ответов, то выведите любой из них.

Примечание

В первом наборе входных данных все элементы уже равны, поэтому достаточно \(0\) операций. Не важно, выведете ли вы потом пустую строку или нет.

Во втором наборе нельзя сделать меньше \(2\) операций. Ответов несколько, рассмотрим последовательность ответов \([2, 5]\). После применения операции с \(x = 2\) массив станет равен \([\lfloor \frac{4 + 2}{2} \rfloor, \lfloor \frac{6 + 2}{2} \rfloor] = [3, 4]\). После применения операции с \(x = 5\) массив станет равен \([\lfloor \frac{3 + 5}{2} \rfloor, \lfloor \frac{4 + 5}{2} \rfloor] = [4, 4]\). Оба элемента одинаковые, поэтому мы закончили.

В последнем наборе нельзя сделать меньше \(6\) операций. Так как \(6\) больше \(n\), не требуется выводить их. Одна из возможных последовательностей ответов — \([0, 0, 0, 0, 0, 0]\). Мы просто делим второй элемент на \(2\) каждый раз и не изменяем первый элемент.

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\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимально возможную сумму чисел, записанных на вершинах, после применения вышеописанной операции любое количество раз, а затем сжатия дерева.

B. Зарабатывание баллов

Бинарный поиск жадные алгоритмы Перебор *1100

Монокарп — студент Берландского государственного университета. Из-за недавних изменений в системе образования Берландии, Монокарпу приходится изучать только один предмет — программирование.

Учебный семестр состоит из \(n\) дней, и чтобы не быть отчисленным, Монокарп должен заработать как минимум \(P\) баллов в течение этих \(n\) дней. Есть два способа заработать баллы — выполнение практических заданий и посещение лекций. За каждое выполненное практическое задание Монокарп получает \(t\) баллов, а за каждую посещенную лекцию — \(l\) баллов.

Практические задания становятся доступными «каждую неделю» по мере продвижения семестра: первое задание становится доступным в день \(1\) (и может быть выполнено в любой день с \(1\) по \(n\)), второе задание становится доступным в день \(8\) (и может быть выполнено в любой день с \(8\) по \(n\)), третье задание становится доступным в день \(15\), и так далее.

Каждый день с \(1\) по \(n\) проходит лекция, на которую может прийти Монокарп. И каждый день Монокарп выбирает, учиться ему сегодня или отдыхать весь день. Когда Монокарп решает учиться, он посещает лекцию и может выполнить не более \(2\) заданий, которые уже доступны и еще не выполнены. Если Монокарп отдыхает весь день, он пропускает лекцию и игнорирует задания.

Монокарп хочет иметь как можно больше выходных, то есть максимизировать количество дней, которые он может отдыхать. Помогите ему вычислить максимальное количество дней, которые он может отдыхать!

Входные данные

Первая строка содержит одно целое число \(tc\) (\(1 \le tc \le 10^4\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В единственной строке каждого набора входных данных задано четыре целых числа \(n\), \(P\), \(l\) и \(t\) (\(1 \le n, l, t \le 10^9\); \(1 \le P \le 10^{18}\)) — количество дней, минимальное суммарное количество баллов, которое должен заработать Монокарп, баллы за посещение одной лекции и баллы за выполнение одного задания.

Для каждого набора гарантируется, что Монокарп не будет отчислен, если будет посещать все лекции и выполнять все задания.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество дней, которые Монокарп может отдыхать, не будучи отчисленным из университета.

Примечание

В первом наборе семестр длится \(1\) день, поэтому Монокарп должен посетить лекцию в день \(1\). Поскольку посещение одной лекции уже дает \(5\) баллов (\(5 \ge P\)), не имеет значения, выполнит ли Монокарп задание или нет.

Во втором наборе Монокарп может, например, учиться в дни \(8\) и \(9\): в день \(8\) он посетит лекцию за \(10^9\) баллов и выполнит два задания еще на \(5 \cdot 10^8 + 5 \cdot 10^8\) баллов. А в день \(9\) он посетит только лекцию еще на \(10^9\) баллов.

В третьем наборе Монокарп может, например, учиться только в день \(42\): посещение лекции дает ему \(1\) балл, а решение \(2\) из \(6\) доступных заданий дает ему еще \(2 \cdot 10\) баллов.

В четвертом наборе Монокарп должен посетить все лекции и выполнить все задания, чтобы получить \(8 \cdot 10 + 2 \cdot 20 = 120\) баллов.

В пятом наборе Монокарп может, например, учиться в дни: \(8\) — одна лекция и первое и второе задания; \(15\) — одна лекция и третье задание; \(22\) — одна лекция и четвертое задание; \(29\) — одна лекция и пятое задание; \(36\) — одна лекция и шестое задание.

C. Вставь и приравняй

жадные алгоритмы Конструктив математика Перебор теория чисел *1300

Задан массив целых чисел \(a_1, a_2, \dots, a_n\), все его элементы различны.

Сначала вы вставляете в этот массив еще одно целое число \(a_{n+1}\). \(a_{n+1}\) не должно быть равно ни одному из \(a_1, a_2, \dots, a_n\).

Затем все элементы массива надо будет сделать равными. Для этого вы выбираете положительное целое число \(x\) (\(x > 0\)). После этого за одну операцию вы прибавляете \(x\) ровно к одному элементу массива. Обратите внимание, что \(x\) одинаковый для всех операций.

Какое наименьшее количество операций вам потребуется, чтобы сделать все элементы равными, после выбора \(a_{n+1}\) и \(x\)?

Входные данные

В первой строке записано одно целое число \(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\)). Все \(a_i\) различны.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество операций, которое вам потребуется, чтобы сделать все элементы равными, после выбора целых чисел \(a_{n+1}\) и \(x\).

Примечание

В первом наборе входных данных вы можете выбрать \(a_{n+1} = 4\), массив станет \([1, 2, 3, 4]\). Затем вы можете выбрать \(x = 1\) и применить операцию \(3\) раза к первому элементу, \(2\) раза ко второму элементу, \(1\) раз к третьему элементу и \(0\) раз к четвертому элементу.

Во втором наборе вы можете выбрать \(a_{n+1} = 13, x = 4\).

В третьем наборе вы можете выбрать \(a_{n+1} = 9, x = 1\). Затем применить операцию один раз к \(a_{n+1}\).

A. Коробкии халлуми

жадные алгоритмы Перебор сортировки *800

Теофанис очень занят после предыдущего контеста, ведь теперь ему нужно доставлять халлуми по всему миру. Он сложил сыр в \(n\) коробок, на каждой из которых написано некоторое число \(a_i\).

Теофанис хочет отсортировать коробки по неубыванию чисел на коробках, но его машина работает странным образом. Она может только разворачивать подмассивы\(^{\dagger}\) ящиков длины не более \(k\).

Найдите, можно ли отсортировать ящики за любое число разворотов.

\(^{\dagger}\) Развернуть подмассив массива — значит выбрать два индекса \(i\) и \(j\) (где \(1 \le i \le j \le n\)) и изменить массив \(a_1, a_2, \ldots, a_n\) на \(a_1, a_2, \ldots, a_{i-1}, \; a_j, a_{j-1}, \ldots, a_i, \; a_{j+1}, \ldots, a_{n-1}, a_n\). Тогда длина подмассива равна \(j - i + 1\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — количество ящиков и максимальную длину подмассива, который может развернуть Теофанис.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{9}\)) — числа, написанные на коробках.

Выходные данные

Для каждого набора входных данных выведите YES (в любом регистре), если массив может быть отсортирован в неубывающем порядке, или NO (в любом регистре) в противном случае.

Примечание

В первых двух наборах входных данных коробки уже отсортированы в неубывающем порядке.

В третьем наборе входных данных мы можем развернуть весь массив.

В четвертом наборе входных данных мы можем развернуть первые два ящика и последние два ящика.

В пятом наборе входных данных можно показать, что отсортировать ящики невозможно.

B. ХранИЛИще

битмаски жадные алгоритмы Конструктив Перебор *1200

На Кипре стоит довольно жаркая погода. Поэтому Теофанис увидел в этом возможность создать компанию по производству мороженого.

Он хранит мороженое в безопасности от других производителей мороженого, запирая его в больших складских помещениях. Однако он забыл пароль. К счастью, у замка есть специальная функция для забывчивых людей!

Дана таблица \(M\) с \(n\) строками и \(n\) столбцами неотрицательных целых чисел, и, чтобы открыть замок, вам нужно найти массив \(a\) из \(n\) элементов такой, что:

  • \(0 \le a_i < 2^{30}\), и
  • \(M_{i,j} = a_i | a_j\) для всех \(i \neq j\), где \(|\) обозначает операцию побитового ИЛИ.

Замок может иногда выдавать таблицы, для которых нет решения. В этом случае мороженое останется замороженным до конца времен.

Сможете ли вы найти массив, чтобы открыть замок?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{3}\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{3}\)) — размер искомого массива.

Следующие \(n\) строк описывают строки таблицы \(M\), строка \(i\) содержит значения \(M_{i,1}, M_{i,2}, \ldots, M_{i,n}\) (\(0 \le M_{i,j} < 2^{30}\)).

Гарантируется, что \(M_{i,i} = 0\) и \(M_{i,j} = M_{j,i}\) для всех \(1 \le i,j \le n\).

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^{3}\).

Выходные данные

Для каждого набора входных данных, если существует решение, выведите в отдельных строках YES и искомый массив, в противном случае выведите NO.

Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

C. Кошмар Теофаниса

жадные алгоритмы Конструктив *1400

Теофанис легко зацикливается на задачах перед сном, и они часто снятся ему в кошмарах. Чтобы справиться с этим, он обратился к своему врачу, доктору Эмиксу.

В последнем кошмаре у него был массив \(a\) длины \(n\), и он хотел разбить его на непустые подмассивы\(^{\dagger}\) так, чтобы каждый элемент находился ровно в одном из подмассивов.

Например, массив \([1,-3,7,-6,2,5]\) можно разбить на \([1] [-3,7] [-6,2] [5]\).

Киприотское значение такого разбиения равняется \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i\), где \(k\) — количество подмассивов, на которое мы разделили массив, а \(\mathrm{sum}_i\) — сумма \(i\)-го подмассива.

Киприотское значение разбиения массива \([1] [-3,7] [-6,2] [5] = 1 \cdot 1 + 2 \cdot (-3 + 7) + 3 \cdot (-6 + 2) + 4 \cdot 5 = 17\).

Теофанису интересно, каково максимальное киприотское значение среди всех разбиений массива.

\(^{\dagger}\) Массив \(b\) является подмассивом массива \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца. В частности, массив является подмассивом самого себя.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^8 \le a_i \le 10^{8}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное киприотское значение среди всех разбиений массива \(a\).

Примечание

В первом наборе входных данных для получения максимального киприотского значения мы разобьём массив на \([1][-3][7][-6][2][5]\), что даст нам: \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i = 1 \cdot 1 + 2 \cdot (-3) + 3 \cdot 7 + 4 \cdot (-6) + 5 \cdot 2 + 6 \cdot 5 = 32\).

Аналогично, во втором наборе входных данных мы разбиваем массив на \([2][9,-5,-3]\), что дает нам \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i = 1 \cdot 2 + 2 \cdot (9 + (-5) + (-3)) = 4\).

D1. Максимум и запросы (простая версия)

Бинарный поиск битмаски жадные алгоритмы Перебор *1700

Это простая версия задачи. Единственное различие между двумя версиями — это ограничения на \(n\) и \(q\), а также ограничения по времени и памяти. Вы можете делать взломы, только если обе версии задачи решены.

Теофанису очень нравится играть с битами чисел. У него есть массив \(a\) длины \(n\) и целое число \(k\). Он может совершить не более \(k\) операций с массивом, в каждой из которых он выбирает один элемент и увеличивает его на \(1\).

Он нашел максимальное побитовое И, которое может иметь массив \(a\) после выполнения не более чем \(k\) операций.

Теофанис приложил много усилий, чтобы найти это значение, и был очень доволен своим результатом. К сожалению, Адас, будучи злым человеком, решил поиздеваться над ним, неоднократно меняя значение \(k\).

Помогите Теофанису, вычислив максимально возможное побитовое И для \(q\) различных значений \(k\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\) и \(n \cdot q \le 10^5\)) — длину массива и количество запросов.

Вторая строка содержит \(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\).

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\).

E. Гео-игра

жадные алгоритмы интерактив математика *2000

Это интерактивная задача.

Теофанис и его сестра играют в следующую игру.

У них есть \(n\) точек на двумерной плоскости и начальная точка \((s_x,s_y)\). Каждый игрок (начиная с первого) выбирает одну из \(n\) точек, которая не была выбрана ранее, и прибавляет к сумме (которая изначально равна \(0\)) квадрат евклидова расстояния между предыдущей точкой (которая либо является начальной, либо была выбрана другим игроком) и новой точкой (которую он выбрал).

Игра заканчивается после ровно \(n\) ходов (когда все точки выбраны). Первый игрок выигрывает, если в итоге сумма четна. В противном случае побеждает второй игрок.

Теофанис — очень соревновательный человек и ненавидит проигрывать. Поэтому он хочет выбрать, играть ему первым или вторым. Можете ли вы показать ему, какого игрока выбрать, и как он должен играть, чтобы победить сестру?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Входные данные для каждого набора доступны только после завершения взаимодействия (окончания игры) для всех предыдущих наборов данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество точек.

Вторая строка каждого набора входных данных содержит два целых числа \(s_x\), \(s_y\) (\(0 \le s_x, s_y \le 10^{9}\)) — координаты начальной точки.

В \(i\)-й из следующих \(n\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^{9}\)) — координаты \(i\)-й точки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^{5}\).

Протокол взаимодействия

Для каждого набора входных данных, после считывания входных данных, вы должны сначала вывести игрока, за которого вы хотите играть (First, если вы хотите играть за первого игрока, или Second, если за второго).

Затем необходимо выиграть в игре. Когда наступает ваша очередь ходить, вы должны вывести индекс \(j\) (\(1 \le j \le n\)) точки, которую вы хотите выбрать. Когда наступает очередь другого игрока, считайте индекс, который выбрал ваш соперник.

Когда все ходы сделаны, переходите к считыванию входных данных для следующего набора, или завершите программу, если больше наборов входных данных нет.

Если вместо индекса или допустимого значения \(n\) вы получаете целое число \(-1\), это означает, что ваша программа сделала неверный ход или проиграла партию в предыдущем наборе входных данных. Ваша программа должна немедленно завершиться, чтобы получить вердикт «Неправильный ответ». В противном случае вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.

После вывода игрока, за которого будете играть, а также каждого хода, не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество точек.

Вторая строка каждого набора входных данных содержит два целых числа \(s_x\), \(s_y\) (\(0 \le s_x, s_y \le 10^{9}\)) — координаты начальной точки.

В \(i\)-й из следующих \(n\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^{9}\)) — координаты точки \(i\).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^{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\).

D1. Присвоить максимум (простая версия)

жадные алгоритмы Конструктив Перебор *1600

Это простая версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — длину массивов.

Вторая строка содержит \(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^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

Во втором наборе входных данных можно показать, что мы не можем получить массив \(b\) ни при каком количестве операций.

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

В четвертом и пятом наборах входных данных можно показать, что массив \(b\) не может быть получен ни при каком количестве операций.

D2. Присвоить максимум (сложная версия)

жадные алгоритмы Конструктив разделяй и властвуй реализация сортировки Структуры данных *1800

Это сложная версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 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\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

Во втором наборе входных данных можно показать, что мы не можем получить массив \(b\) ни при каком количестве операций.

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

В четвертом и пятом наборах входных данных можно показать, что массив \(b\) не может быть получен ни при каком количестве операций.

B. Зельда для новичков

Деревья жадные алгоритмы *1100

Вам дано дерево\(^{\dagger}\). За одну зельда-операцию вы можете сделать следующее:

  • Выбрать две вершины дерева \(u\) и \(v\);
  • Сжать все вершины на пути от \(u\) до \(v\) в одну вершину. Другими словами, все вершины на пути от \(u\) до \(v\) будут удалены из дерева, будет создана новая вершина \(w\). Затем каждая вершина \(s\), которая имела ребро с какой-то вершиной на пути от \(u\) до \(v\), будет иметь ребро с вершиной \(w\).
Иллюстрация результата зельда-операции для вершин \(1\) и \(5\).

Определите минимальное количество зельда-операций, необходимых для того, чтобы в дереве осталась только одна вершина.

\(^{\dagger}\)Дерево — это неориентированный связный граф без циклов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин.

\(i\)-я из следующих \(n − 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n, u_i \ne v_i\)) — номера вершин, соединенных \(i\)-м ребром.

Гарантируется, что заданные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество зельда-операций, необходимых для того, чтобы в дереве осталась только одна вершина.

Примечание

В первом наборе входных данных достаточно выполнить одну зельда-операцию для вершин \(2\) и \(4\).

Во втором наборе входных данных мы можем выполнить следующие зельда-операции:

  1. \(u = 2, v = 1\). Пусть добавленная вершина будет обозначена как \(w = 10\);
  2. \(u = 4, v = 9\). Пусть добавленная вершина будет обозначена как \(w = 11\);
  3. \(u = 8, v = 10\). После этой операции дерево состоит из одной вершины.

C. Наибольшая подпоследовательность

жадные алгоритмы Строки *1400

Дана строка \(s\) длины \(n\). За одну операцию можно выбрать лексикографически наибольшую\(^\dagger\) подпоследовательность строки \(s\) и циклически сдвинуть её вправо\(^\ddagger\).

Ваша задача — вычислить минимальное количество операций, необходимых для того, чтобы \(s\) стала отсортированной, или сообщить, что она никогда не достигнет отсортированного состояния.

\(^\dagger\)Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a \ne b\);
  • В первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая встречается раньше в алфавите, чем соответствующая буква в \(b\).

\(^\ddagger\)Циклическим сдвигом строки \(t_1t_2\ldots t_m\) вправо называется строка \(t_mt_1\ldots t_{m-1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит одну строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, необходимых для того, чтобы сделать \(s\) отсортированной, или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных строка \(s\) уже отсортирована, поэтому нам не нужны операции.

Во втором наборе входных данных, сделав одну операцию, мы выберем cb и циклически сдвинем её. Теперь строка \(s\) становится равной abc, которая отсортирована.

В третьем наборе входных данных \(s\) не может быть отсортирована.

В четвертом наборе входных данных мы сделаем следующие операции:

  • Лексикографически наибольшая подпоследовательность равна zca. Тогда \(s\) становится равной abzc.
  • Лексикографически наибольшая подпоследовательность равна zc. Тогда \(s\) становится равной abcz. Строка становится отсортированной.

Таким образом, нам нужно \(2\) операции.

M. Triangle Construction

жадные алгоритмы математика *1700

You are given a regular \(N\)-sided polygon. Label one arbitrary side as side \(1\), then label the next sides in clockwise order as side \(2\), \(3\), \(\dots\), \(N\). There are \(A_i\) special points on side \(i\). These points are positioned such that side \(i\) is divided into \(A_i + 1\) segments with equal length.

For instance, suppose that you have a regular \(4\)-sided polygon, i.e., a square. The following illustration shows how the special points are located within each side when \(A = [3, 1, 4, 6]\). The uppermost side is labelled as side \(1\).

You want to create as many non-degenerate triangles as possible while satisfying the following requirements. Each triangle consists of \(3\) distinct special points (not necessarily from different sides) as its corners. Each special point can only become the corner of at most \(1\) triangle. All triangles must not intersect with each other.

Determine the maximum number of non-degenerate triangles that you can create.

A triangle is non-degenerate if it has a positive area.

Input

The first line consists of an integer \(N\) (\(3 \leq N \leq 200\,000\)).

The following line consists of \(N\) integers \(A_i\) (\(1 \leq A_i \leq 2 \cdot 10^9\)).

Output

Output a single integer representing the maximum number of non-degenerate triangles that you can create.

Note

Explanation for the sample input/output #1

One possible construction which achieves maximum number of non-degenerate triangles can be seen in the following illustration.

Explanation for the sample input/output #2

One possible construction which achieves maximum number of non-degenerate triangles can be seen in the following illustration.

C. Удаление некрасивых пар

жадные алгоритмы Конструктив математика Строки *1200

Влад нашёл строку \(s\) из \(n\) строчных латинских букв, и он хочет сделать её как можно короче.

Для этого он может любое число раз удалять из \(s\) любые два соседних символа, если они различны. Например, если \(s\)=racoon, то удалив одну пару символов, он может получить строку coon, roon, raon и raco, но не может получить racn (потому что удалённые буквы были одинаковы) или rcon (потому что удалённые буквы не были соседними).

Какой минимальной длины может добиться Влад, применив любое число удалений?

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) из \(n\) строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите единственное число — минимальную длину строки \(s\), после удаления пар соседних символов, значения которых различны.

Примечание

В первом наборе выходных данных примера нужно действовать следующим образом «aabc» \(\rightarrow\) «ac» \(\rightarrow\) «». Обратите внимание, что при другом порядке удалений строка не станет пустой.

F. Сдвиг и разворот

жадные алгоритмы сортировки *1800

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\). Вы можете выполнять два типа операций с этим массивом:

  • Сдвиг: переместить последний элемент массива на первое место и сдвинуть все остальные элементы вправо, таким образом получится массив \(a_n, a_1, a_2, \ldots, a_{n-1}\).
  • Разворот: перевернуть весь массив, таким образом получится массив \(a_n, a_{n-1}, \ldots, a_1\).

Ваша задача — отсортировать массив в порядке неубывания с использованием минимального количества операций или определить, что это невозможно.

Входные данные

Первая строка ввода содержит одно целое число \(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^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите число \(k\) — минимальное количество операций, необходимых для сортировки массива. Если невозможно отсортировать массив с помощью этих операций, выведите \(-1\).

Примечание

В первом наборе входных данных примера, чтобы отсортировать массив [\(3, 2, 1, 5, 4\)] нужно выполнить \(3\) операции:

  • Сдвиг, чтобы получить массив [\(4, 3, 2, 1, 5\)];
  • Сдвиг, чтобы получить массив [\(5, 4, 3, 2, 1\)];
  • Разворот, чтобы получить массив [\(1, 2, 3, 4, 5\)].

В третьем наборе входных данных примера можно показать, что массив невозможно отсортировать с помощью данных операций.

В седьмом наборе входных данных примера, чтобы отсортировать массив [\(4, 1, 3, 4, 4\)] нужно выполнить \(3\) операции:

  • Разворот, чтобы получить массив [\(4, 4, 3, 1, 4\)];
  • Сдвиг, чтобы получить массив [\(4, 4, 4, 3, 1\)];
  • Разворот, чтобы получить массив [\(1, 3, 4, 4, 4\)].

G. Освещение

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2200

В конце дня Анне нужно выключить свет в офисе. Есть \(n\) ламп и \(n\) выключателей, но схема их работы довольно странная. Выключатель \(i\) меняет состояние лампы \(i\), но также меняет состояние другой лампы \(a_i\) (изменение состояния означает, что если лампа была включена, она выключается, и наоборот).

Помогите Анне выключить все лампы, используя минимальное количество выключателей, или скажите, что это невозможно.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 10^5\)) — количество ламп.

Вторая строка каждого набора содержит строку из \(n\) символов — начальное состояние ламп. Символ «0» означает, что соответствующая лампа выключена, а «1» означает, что она включена.

Третья строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le n\), \(a_i \neq i\)) — выключатель \(i\) меняет состояние лампы \(i\) и лампы \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — минимальное количество выключателей, которое нужно использовать, затем в отдельной строке выведите список из \(k\) выключателей.

Если невозможно выключить все лампы, выведите одно целое число \(-1\).

C. Тяжелые интервалы

жадные алгоритмы Конструктив математика снм сортировки Структуры данных *1400

У вас есть \(n\) интервалов \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\) таких, что \(l_i < r_i\) для каждого \(i\), и все конечные точки интервалов различны.

Вес \(i\)-го интервала составляет \(c_i\) на единицу длины. Поэтому вес \(i\)-го интервала равен \(c_i \cdot (r_i - l_i)\).

Вам не нравятся большие веса, поэтому вы хотите сделать сумму весов всех интервалов как можно меньше. Оказывается, вы можете выполнять следующие три типа операций:

  • переставить элементы массива \(l\) в любом порядке;
  • переставить элементы массива \(r\) в любом порядке;
  • переставить элементы массива \(c\) в любом порядке.

Однако после выполнения всех операций интервалы должны оставаться корректными (т.е. для каждого \(i\) должно выполняться условие \(l_i < r_i\)).

Какова минимально возможная сумма весов интервалов после выполнения этих операций?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество интервалов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2 \cdot 10^5\)) — левые конечные точки начальных интервалов.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i < r_i \le 2 \cdot 10^5\)) — правые конечные точки начальных интервалов.

Гарантируется, что все \(\{l_1, l_2, \dots, l_n, r_1, r_2, \dots, r_n\}\) различны.

Четвертая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^7\)) — начальные веса интервалов на единицу длины.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимально возможную сумму всех весов интервалов после ваших операций.

Примечание

В первом наборе входных данных вы можете сделать так

  • \(l = [8, 3]\);
  • \(r = [23, 12]\);
  • \(c = [100, 100]\).

В этом случае будет два интервала:

  • интервал \([8, 23]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (23-8) = 1500\);
  • интервал \([3, 12]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (12-3) = 900\);

Сумма весов составляет \(2400\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(2400\).

Во втором наборе входных данных можно сделать так

  • \(l = [1, 2, 5, 20]\);
  • \(r = [3, 4, 10, 30]\);
  • \(c = [3, 3, 2, 2]\).

В этом случае будет четыре интервала:

  • интервал \([1, 3]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (3-1) = 6\);
  • интервал \([2, 4]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (4-2) = 6\);
  • интервал \([5, 10]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (10-5) = 10\);
  • интервал \([20, 30]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (30-20) = 20\).

Сумма весов равна \(42\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(42\).

D. Разделить и плюс K

жадные алгоритмы математика теория чисел *1900

На доске написаны \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\). Вам также дано целое положительное число \(k\). Вы можете выполнить следующую операцию несколько (возможно, \(0\)) раз:

  • выбрать на доске число \(x\);
  • стереть одно вхождение \(x\);
  • написать на доске два положительных целых числа \(y\), \(z\) таких, что \(y+z = x+k\).

Можно ли сделать так, чтобы все числа на доске стали равны? Если да, то какое минимальное количество операций вам потребуется?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \leq k \leq 10^{12}\)) — количество целых чисел, изначально записанных на доске, и константу \(k\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{12}\)) — изначальный набор чисел на доске.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: минимальное количество операций, необходимых для того, чтобы все числа на доске стали равными, или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных \(k = 1\). Вы можете сделать все числа на доске равными \(2\) с помощью следующих операций:

  • Стереть \(x = 4\) и написать \((y, z) = (2, 3)\). Обратите внимание, что \(y+z=x+k\). Теперь на доске написано мультимножество \(\{3, 2, 3\}\).
  • Стереть \(x = 3\) и написать \((y, z) = (2, 2)\). Заметьте, что \(y+z=x+k\). Теперь на доске написано \(\{2, 2, 2, 3\}\).
  • Стереть \(x = 3\) и написать \((y, z) = (2, 2)\). Заметьте, что \(y+z=x+k\). Теперь на доске написано \(\{2, 2, 2, 2, 2\}\).

Это делает все числа равными за \(3\) операции. Можно показать, что нельзя сделать все числа равными менее чем за \(3\) операции.

Во втором наборе входных данных \(k = 3\). Вы можете сделать все числа на доске равными \(7\) с помощью следующей операции:

  • Стереть \(x = 11\) и написать \((y, z) = (7, 7)\). Обратите внимание, что \(y+z=x+k\). Теперь на доске написано \(\{7, 7, 7\}\).

В третьем наборе входных данных \(k = 10\). Вы можете сделать все числа на доске равными \(40\) с помощью следующих операций:

  • Стереть \(x = 100\) и написать \((y, z) = (70, 40)\). Обратите внимание, что \(y+z=x+k\). Теперь на доске написано \(\{70, 40, 40, 100\}\).
  • Стереть \(x = 70\) и написать \((y, z) = (40, 40)\). Обратите внимание, что \(y+z=x+k\). Теперь на доске написано \(\{40, 40, 40, 40, 100\}\).
  • Стереть \(x = 100\) и написать \((y, z) = (40, 70)\). Заметьте, что \(y+z=x+k\). Теперь на доске написано \(\{40, 40, 40, 40, 40, 70\}\).
  • Стереть \(x = 70\) и написать \((y, z) = (40, 40)\). Заметьте, что \(y+z=x+k\). Теперь на доске написано \(\{40, 40, 40, 40, 40, 40, 40\}\).

В четвертом и пятом наборе входных данных можно показать, что невозможно сделать все числа на доске одинаковыми.

B. Митинг

жадные алгоритмы *1700

В столице Берляндии городе Берляндске проходят митинги против недавно прошедших выборов Царя Берляндии. Берляндская оппозиция под предводительством мистера Овального считает, что выборы были недостаточно честными и хочет организовать митинг на одной из площадей.

В Берляндске есть n площадей, пронумерованных от 1 до n, причем площади пронумерованы в порядке их удаления от центра города, то есть площадь номер 1 является центральной, а площадь номер n наиболее удалена от центра. Естественно, оппозиция хочет провести митинг как можно ближе к центру города (то есть на площади с минимальным номером).

До митинга осталось ровно k (k < n) дней. Сейчас все площади свободны. Но мэрия Берляндска не дремлет, и согласование заявки на митинг грозит стать очень сложным процессом. Процесс согласования длится несколько дней, а каждый день происходит следующая процедура:

  • Оппозиция подает заявку на проведение митинга на одной из еще не занятых мэрией площадей.
  • Мэрия пытается перенести митинг на худшую площадь из еще не занятых. Для этого мэрия оплачивает проведение долгосрочного мероприятия на той площади, которая указана в заявке оппозиции, то есть занимает эту площадь, и предлагает оппозиции перенести митинг на худшую из незанятых площадей. Если оппозиция подала заявку на худшую площадь из незанятых, то мэрия не организует там свое мероприятие и заявка оппозиции принимается. Если у мэрии не хватает денег на проведение мероприятия на соответствующей площади, то все деньги мэрии тратятся, а мероприятие не проводится. В таком случае заявка считается принятой.
  • Если заявка не принята, то оппозиция может согласиться на предложение мэрии (то есть на худшую из незанятых площадей) или отозвать текущую заявку и попробовать подать другую на следующий день. Если дней до митинга не осталось, оппозиции ничего не остается, как согласиться на предложение мэрии. Если заявка принята, оппозиция также может отозвать текущую заявку и попробовать подать другую на следующий день. В этом случае площадь остается свободной.

Для того, чтобы организовать свое мероприятие на площади i, мэрии нужно потратить ai бурлей. Из-за кризиса у мэрии есть всего лишь b бурлей, чтобы противостоять оппозиции. Какую лучшую площадь может занять оппозиция, если мэрия каждый раз будет пытаться занимать площадь, на которую оппозиция подала заявку? Обратите внимание, действия мэрии всегда зависят только от действий оппозиции.

Входные данные

В первой строке записаны два целых числа n и k — количество площадей и дней до митинга соответственно (1 ≤ k < n ≤ 105).

Во второй строке записано целое число b — количество бурлей у мэрии (1 ≤ b ≤ 1018).

В третьей строке записано n целых чисел ai, разделенных пробелами, — количество денег, необходимых для проведения мероприятия на площади i (1 ≤ ai ≤ 109).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Выведите одно число — минимальный номер площади, на которой сможет провести митинг оппозиция.

Примечание

В первом примере оппозиция может действовать следующим образом. В первый день она займет площадь номер 3. Мэрия будет вынуждена организовать там мероприятие, после чего у нее останется 3 бурля. Если на второй день оппозиция подаст заявку на вторую площадь, то у мэрии не хватит денег, чтобы ее туда не пустить.

Во втором примере у оппозиции есть шансы только на последнюю площадь. Если первым ходом она занимают одну из первых четырех площадей, то у мэрии остается как минимум 4 бурля, и следующим ходом у нее хватит денег, чтобы перенести заявку с любой площади на последнюю.

В третьем примере у мэрии очень много денег, так что оппозиция может занять только последнюю площадь.

D. Схема метро

графы жадные алгоритмы *2700

В Берляндии очень беспокоятся о секретности, поэтому почти все планы и схемы всего и вся засекречены. Несмотря на это, шпиону соседнего государства удалось украсть схему метрополитена Берляндска.

В метро Берляндска есть n станций, пронумерованных от 1 до n, и m двусторонних тоннелей, их соединяющие. Все берляндское метро состоит из линий. Если быть более точным, есть два типа линий: кольцевые и радиальные.

Радиальная линия — это последовательность станций v1, ..., vk (k > 1), где станции vi и vi + 1 (i < k) соединены тоннелем, причем никакая станция не входит в состав линии более одного раза (vi ≠ vj при i ≠ j).

Кольцевая линия — это последовательность станций v1, ..., vk (k > 2), где станции vi и vi + 1 соединены тоннелем. Кроме того, станции v1 и vk тоже соединены тоннелем. Никакая станция не входит в кольцевую линию более одного раза.

Заметим, что через одну станцию может проходить любое количество линий.

Согласно берляндским нормативам между двумя станциями не может быть более одного тоннеля и каждый тоннель принадлежит ровно одной линии. Естественно, на каждой линии есть хоть один тоннель. Между любыми двумя станциями есть путь по тоннелям метро. Кроме того, с точки зрения теории графов, метрополитен является вершинным кактусом: если рассмотреть метро как граф, в котором станции являются вершинами, а тоннели — ребрами, то каждая вершина лежит не более чем на одном простом цикле.

К сожалению, на схеме, украденной шпионом, были изображены только станции и тоннели. По ней было невозможно определить, к какой линии относится каждый тоннель. Но для совершения диверсии шпиону необходимо знать, какое минимальное и максимальное количество линий может быть в метро Берляндска.

Помогите ему!

Входные данные

На первой строке записаны два целых числа n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ 3·105) — количество станций и тоннелей, соответственно.

На следующих m строках содержатся по два целых числа — номера станций, которые соединяет соответствующий тоннель. Станции нумеруются целыми числами от 1 до n.

Гарантируется, что в графе, который соответствует метро, нет кратных ребер и петель, что он связен и что он является вершинным кактусом.

Выходные данные

Выведите два числа — минимальное и максимальное количество линий, соответственно.

Примечание

Схема метро с минимально возможным количеством линий для второго примера:

B. Охранник

*особая задача жадные алгоритмы *1600

Монокарп работает охранником в Берляндском Государственном Университете. Каждый день он отслеживает, сколько людей и в какое время входят и выходят из университета. Он записывает эту информацию следующим образом:

  • когда кто-то входит в университет, Монокарп пишет знак плюса «+»;
  • когда кто-то покидает университет, Монокарп пишет знак минуса «-».

В начале текущего дня в университете нет людей, кроме Монокарпа. В течение дня Монокарп записал последовательность \(s\). Символы в \(s\) перечислены в том порядке, в котором Монокарп их записал.

Внезапно начальник Монокарпа решил проверить его работу. К сожалению, Монокарп немного небрежен. Поэтому записанная им последовательность \(s\) может быть невозможной. Например, последовательность «+--» не может произойти, так как она представляет сценарий, когда один человек входит в университет, а выходят двое.

Прежде чем его начальник начнет проверять последовательность, у Монокарпа есть время поменять местами максимум одну пару символов в ней. Может ли он сделать это таким образом, чтобы результирующая последовательность была правдоподобной? Обратите внимание, что если данная последовательность уже правдоподобна, Монокарпу не нужно ничего менять.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одну строку \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящую только из символов '+' и/или '-'. Знак плюса '+' представляет человека, входящего в университет. Знак минуса '-' представляет человека, покидающего университет.

Сумма всех \(|s|\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ.

Если невозможно поменять местами максимум одну пару символов так, чтобы результирующая последовательность была правдоподобной, выведите -1.

В противном случае выведите два целых числа. Если вы меняете местами одну пару символов, выведите два различных целых числа от \(1\) до \(n\) — индексы символов для обмена. Если вы не меняете местами, выведите одно и то же целое число от \(1\) до \(n\) дважды — поменяйте символ сам с собой.

Если есть несколько ответов, выведите любой из них.

D. Удали и прибавь

*особая задача жадные алгоритмы *1800

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) целых чисел.

Ваша цель — его сделать строго возрастающим. Чтобы этого достичь, вы совершаете каждую из следующих операций ровно по одному разу:

  • сначала удалить любой элемент;
  • затем выбрать любое количество элементов (в том числе ни одного или все \(n-1\)) и прибавить ко всем \(1\).

Обратите внимание, что запрещено переставлять местами элементы массива.

Для полученного массива \(a'\) должно выполняться \(a'_1 < a'_2 < \dots < a'_{n-1}\). Определите, возможно ли это сделать.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов массива.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите YES, если возможно удалить один элемент и прибавить \(1\) к нескольким элементам (возможно, ни к одному или ко всем) так, чтобы массив стал строго возрастающим. Иначе выведите NO.

Примечание

В первом наборе входных данных можно удалить третий элемент и прибавить \(1\) ко второму и к последнему. \(a'\) станет \([4, 5, 6]\), что является строго возрастающим.

Во втором наборе нет способа так применить операции, чтобы результат был строго возрастающий.

В третьем наборе можно удалить любой из элементов.

В четвертом наборе уже дан строго возрастающий массив, но удалить хоть какой-нибудь элемент все равно надо. Результат \(a'\) может быть \([1, 3]\), например.

F. Постройте вокзалы

*особая задача Деревья жадные алгоритмы *2000

Монокарп играет в компьютерную игру, в которой он управляет империей. Империя состоит из \(n\) городов, соединенных \(n - 1\) дорогой. Города пронумерованы от \(1\) до \(n\). Из каждого города можно добраться до любого другого по дорогам.

Поездка по одной дороге занимает \(2\) часа. Однако, это можно улучшить. Монокарп может построить вокзалы в не более чем \(k\) городах. После того, как они построены, все существующие дороги, которые соединяют два города с вокзалами, превращаются в железные дороги, поездка по которым занимает \(1\) час.

Пусть \(f(x, y)\) будет суммарным временем, которое потребуется, чтобы проехать по дорогам на кратчайшем пути между городами \(x\) и \(y\).

Монокарп хочет построить не более \(k\) вокзалов таким образом, чтобы минимизировать следующее значение: \(\sum \limits_{v=1}^{n} \sum \limits_{u=1}^{v-1} f(v, u)\) (суммарное время, необходимое, чтобы добраться из каждого города до каждого другого города). Какое наименьшее значение он может получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Во первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\)) — количество городов и максимальное количество вокзалов, которые может построить Монокарп.

В каждой из следующих \(n-1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\); \(v \neq u\)) — дорога, соединяющая города \(v\) и \(u\).

Из каждого города можно добраться до любого другого по дорогам. Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее суммарное время, необходимое, чтобы добраться из каждого города до каждого другого города, которое Монокарп может получить, если построит не более \(k\) вокзалов.

G. Бассейн и записи

*особая задача жадные алгоритмы *2700

Алиса и Боб плавают в бассейне под руководством своего инструктора Монокарпа.

Бассейн можно представить как отрезок на оси OX от \(0\) по \(50\). И Алиса, и Боб начали в момент \(0\) в точке \(0\) с положительными вещественными скоростями \(v_A\) и \(v_B\) соответственно.

И Алиса, и Боб плывут от \(0\) до \(50\), затем мгновенно разворачиваются и плывут от \(50\) до \(0\). В точке \(0\) они снова поворачивают и плывут к \(50\) и так далее.

Монокарп записал различную информацию о том, как плавали Алиса и Боб, включая моменты времени, когда они встречались в одной точке (Алиса и Боб плавают по параллельным дорожкам, так что они не мешают друг другу). Давайте назовем эти моменты времени последовательностью \(t_1, t_2, \dots, t_n\).

Из-за некоторого инцидента Монокарп потерял почти все записанные данные, и все, что у него осталось,— это массив \(t\). Монокарп помнит, что Алиса и Боб плавали с различными положительными вещественными скоростями \(v_A\) и \(v_B\) (\(v_A > 0\); \(v_B > 0\); \(v_A \neq v_B\)) и что последовательность \(t\) содержит первые \(n\) моментов встреч.

Но, глядя на последовательность \(t\), он заметил, что все \(t_i\) являются целыми числами. И теперь он сомневается, возможна ли такая последовательность \(t\) или в ней есть какие-то ошибки. Помогите Монокарпу проверить массив \(t\)!

Входные данные

В первой строке задано одно целое число \(c\) (\(1 \le c \le 10^4\)) — количество наборов входных данных. Затем следуют сами \(c\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива \(t\).

Во второй строке каждого набора заданы \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_1 < t_2 < \dots < t_n \le 10^9\)) — моменты встреч в порядке возрастания.

Гарантируется, что сумма всех \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите VALID, если массив \(t\) можно было получить, или, другими словами, существуют такие вещественные значения \(v_A\) и \(v_B\) (\(v_A, v_B > 0\); \(v_A \neq v_B\)), что массив \(t\) содержит первые \(n\) моментов встреч Алисы и Боба в бассейне.

В противном случае выведите INVALID.

Ответ можно выводить в любом регистре (верхнем или нижнем). Например, строки «vALid», «valid», «Valid» и «VALID» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных представим следующую ситуацию: длина бассейна \(v_A = 1\) и \(v_B = \frac{29}{21}\). Тогда в момент \(42\) Алиса и Боб будут в точке \(42\).

Во втором наборе представим, что \(v_A = \frac{175}{6}\) и \(v_B = \frac{25}{6}\). Тогда в момент \(3\) Алиса и Боб встретятся в точке \(12.5\), в \(4\) они встретятся в точке \(\frac{50}{3}\), в \(6\) они встретятся в точке \(25\) и в момент \(8\) — в точке \(\frac{100}{3}\). Поскольку это — в точности первые \(4\) момента встреч, то массив \(t\) — valid.

В третьем набора одна из возможных ситуаций: \(v_A = 25\) и \(v_B = 75\).

C. Игра с мультимножеством

Бинарный поиск битмаски жадные алгоритмы Перебор *1300

В этой задаче вам изначально дано пустое мультимножество. Вам нужно обработать два типа запросов:

  1. ADD \(x\) — добавить элемент, равный \(2^{x}\), в мультимножество;
  2. GET \(w\) — сказать, возможно ли взять сумму некоторого подмножества текущего мультимножества и получить значение, равное \(w\).
Входные данные

Первая строка содержит одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество запросов.

Затем следуют \(m\) строк, каждая из которых содержит два целых числа \(t_i\), \(v_i\), обозначающих \(i\)-й запрос. Если \(t_i = 1\), то \(i\)-й запрос — ADD \(v_i\) (\(0 \le v_i \le 29\)). Если \(t_i = 2\), то \(i\)-й запрос — GET \(v_i\) (\(0 \le v_i \le 10^9\)).

Выходные данные

Для каждого запроса GET выведите YES, если возможно выбрать подмножество с суммой, равной \(w\), или NO, если это невозможно.

C. Квесты

жадные алгоритмы математика *1100

Монокарп играет в компьютерную игру. Чтобы повысить уровень персонажа, он может выполнять квесты. В игре есть \(n\) квестов, пронумерованных от \(1\) до \(n\).

Монокарп может выполнять квесты согласно следующим правилам:

  • \(1\)-й квест всегда доступен для выполнения;
  • \(i\)-й квест доступен для выполнения, если каждый квест \(j < i\) был выполнен хотя бы раз.

Обратите внимание, что Монокарп может выполнять один и тот же квест несколько раз.

За каждое выполнение персонаж получает некоторое количество опыта:

  • за первое выполнение \(i\)-го квеста он получает \(a_i\) очков опыта;
  • за каждое последующее выполнение \(i\)-го квеста он получает \(b_i\) очков опыта.

Монокарп очень занятой человек, поэтому у него есть свободное время, чтобы выполнить не более \(k\) квестов. Ваша задача — посчитайте максимально возможный суммарный опыт, который Монокарп может получить, если он может выполнить не более \(k\) квестов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 2 \cdot 10^5\)) — количество квестов и максимальное количество квестов, которые Монокарп может выполнить, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^3\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^3\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный суммарный опыт, который Монокарп может получить, если он может выполнить не более \(k\) квестов.

Примечание

В первом примере одна из возможных последовательностей выполнения квестов следующая: \(1, 1, 2, 3, 2, 4, 4\); суммарный опыт равен \(\underline{4} + 1 + \underline{3} + \underline{1} + 1 + \underline{2} + 1 = 13\) (подчеркнутые числа соответствуют первому выполнению квеста).

Во втором примере одна из возможных последовательностей выполнения квестов следующая: \(1, 1\); суммарный опыт равен \(\underline{1} + 3 = 4\).

В третьем примере одна из возможных последовательностей выполнения квестов следующая: \(1, 2, 2, 2, 3\); суммарный опыт равен \(\underline{3} + \underline{2} + 3 + 3 + \underline{4} = 15\).

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\) друзей.

E1. Игра с шариками (простая версия)

жадные алгоритмы игры Перебор сортировки *1400

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на количество наборов входных данных и \(n\). В простой версии количество наборов входных данных не превосходит \(10^3\), а \(n\) не превосходит \(6\).

Недавно Алисе и Бобу родители подарили шарики \(n\) различных цветов: получилось, что у Алисы \(a_1\) шариков цвета \(1\), \(a_2\) шариков цвета \(2\),..., \(a_n\) шариков цвета \(n\). У Боба: \(b_1\) шариков цвета \(1\), \(b_2\) шариков цвета \(2\), ..., \(b_n\) шариков цвета \(n\). Все \(a_i\) и \(b_i\) от \(1\) до \(10^9\).

Посовещавшись, Алиса и Боб придумали следующую игру: игроки ходят по очереди, начиная с Алисы. На своём ходу игрок выбирает такой цвет \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета. Он выбрасывает один шарик цвета \(i\), а его противник — все шарики цвета \(i\). Игра заканчивается, когда не существует такого цвета \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета.

Счёт в игре — это количество оставшихся шариков у Алисы минус количество оставшихся шариков у Боба по окончании игры. То есть счёт равен \((A-B)\), где \(A\) — количество шариков у Алисы, а \(B\) — количество шариков у Боба в конце игры. Алиса хочет максимизировать счёт, а Боб — минимизировать.

Посчитайте, какой счёт будет в конце игры, если оба игрока играют оптимально.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке задано одно целое число \(n\) (\(2 \le n \le 6\)) — количество цветов шариков;
  • во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество шариков \(i\)-го цвета у Алисы;
  • в третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)), где \(b_i\) — количество шариков \(i\)-го цвета у Боба.
Выходные данные

Для каждого набора входных данных выведите одно целое число — счёт в конце игры, если и Алиса и Боб будут действовать оптимально.

Примечание

В первом примере один из способов получить счёт \(1\) — следующий:

  1. Алиса выбирает цвет \(1\), выбрасывает \(1\) шарик. Боб также выбрасывает \(1\) шарик;
  2. Боб выбирает цвет \(3\), выбрасывает \(1\) шарик. Алиса также выбрасывает \(1\) шарик;
  3. Алиса выбирает цвет \(2\), выбрасывает \(1\) шарик, а Боб — \(2\) шарика.

В результате у Алисы остается \(a = [3, 1, 0]\), а у Боба — \(b = [0, 0, 3]\). Счёт равен \(3 + 1 - 3 = 1\).

Можно показать, что ни Алиса ни Боб не могут получить лучший счёт, если оба играют оптимально.

Во втором примере Алиса может сначала выбрать цвет \(1\), далее Боб выберет цвет \(4\), после этого Алиса выберет цвет \(2\), и Боб — цвет \(3\). Можно показать, что это оптимальная игра.

E2. Игра с шариками (сложная версия)

жадные алгоритмы игры сортировки *1400

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на количество наборов входных данных и \(n\). В сложной версии количество наборов входных данных не превосходит \(10^4\), а сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Кроме того, никаких дополнительных ограничений на значение \(n\) в одиночном наборе входных данных нет.

Недавно Алисе и Бобу родители подарили шарики \(n\) различных цветов: получилось, что у Алисы \(a_1\) шариков цвета \(1\), \(a_2\) шариков цвета \(2\),..., \(a_n\) шариков цвета \(n\). У Боба: \(b_1\) шариков цвета \(1\), \(b_2\) шариков цвета \(2\), ..., \(b_n\) шариков цвета \(n\). Все \(a_i\) и \(b_i\) от \(1\) до \(10^9\).

Посовещавшись, Алиса и Боб придумали следующую игру: игроки ходят по очереди, начиная с Алисы. На своём ходу игрок выбирает такой цвет \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета. Он выбрасывает один шарик цвета \(i\), а его противник — все шарики цвета \(i\). Игра заканчивается, когда не существует такого цвета \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета.

Счёт в игре — это количество оставшихся шариков у Алисы минус количество оставшихся шариков у Боба по окончании игры. То есть счёт равен \((A-B)\), где \(A\) — количество шариков у Алисы, а \(B\) — количество шариков у Боба в конце игры. Алиса хочет максимизировать счёт, а Боб — минимизировать.

Посчитайте, какой счёт будет в конце игры, если оба игрока играют оптимально.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке задано одно целое число \(n\) (\(2 \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\)-го цвета у Алисы;
  • в третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)), где \(b_i\) — количество шариков \(i\)-го цвета у Боба.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — счёт в конце игры, если и Алиса и Боб будут действовать оптимально.

Примечание

В первом примере один из способов получить счёт \(1\) — следующий:

  1. Алиса выбирает цвет \(1\), выбрасывает \(1\) шарик. Боб также выбрасывает \(1\) шарик;
  2. Боб выбирает цвет \(3\), выбрасывает \(1\) шарик. Алиса также выбрасывает \(1\) шарик;
  3. Алиса выбирает цвет \(2\), выбрасывает \(1\) шарик, а Боб — \(2\) шарика.

В результате у Алисы остается \(a = [3, 1, 0]\), а у Боба — \(b = [0, 0, 3]\). Счёт равен \(3 + 1 - 3 = 1\).

Можно показать, что ни Алиса ни Боб не могут получить лучший счёт, если оба играют оптимально.

Во втором примере Алиса может сначала выбрать цвет \(1\), далее Боб выберет цвет \(4\), после этого Алиса выберет цвет \(2\), и Боб — цвет \(3\). Можно показать, что это оптимальная игра.

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)\).

D. Нестандартная обработка языка

жадные алгоритмы реализация Строки *900

Лура скучала и решила создать простой язык, используя пять букв \(\texttt{a}\), \(\texttt{b}\), \(\texttt{c}\), \(\texttt{d}\), \(\texttt{e}\). Существуют два типа букв:

  • гласные — буквы \(\texttt{a}\) и \(\texttt{e}\). Они обозначаются как \(\textsf{V}\).
  • согласные — буквы \(\texttt{b}\), \(\texttt{c}\), \(\texttt{d}\). Они обозначаются как \(\textsf{C}\).
В языке существуют два типа слогов: \(\textsf{CV}\) (согласная, за которой следует гласная) или \(\textsf{CVC}\) (гласная с согласной до и после). Например, \(\texttt{ba}\), \(\texttt{ced}\), \(\texttt{bab}\) являются слогами, но \(\texttt{aa}\), \(\texttt{eda}\), \(\texttt{baba}\) — нет.

Слово в языке — это последовательность слогов. Лура написала слово на этом языке, но не знает, как разбить его на слоги. Помогите ей разбить слово на слоги.

Например, для слова \(\texttt{bacedbab}\) оно будет разбито на слоги как \(\texttt{ba.ced.bab}\) (точка \(\texttt{.}\) обозначает границу слога).

Входные данные

Ввод состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина слова.

Вторая строка каждого набора содержит строку, состоящую из \(n\) строчных латинских символов — слово.

Все предоставленные слова являются допустимыми словами в языке; то есть, они используют только буквы \(\texttt{a}\), \(\texttt{b}\), \(\texttt{c}\), \(\texttt{d}\), \(\texttt{e}\), и каждое слово состоит из нескольких слогов.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, обозначающую слово, разбитое на слоги, вставив точку \(\texttt{.}\) между каждой парой смежных слогов.

Если существует несколько возможных разбиений, выведите любое из них. Ввод предоставлен таким образом, что по крайней мере одно возможное разбиение существует.

E. Романтические стаканы

жадные алгоритмы математика Структуры данных *1300

У Юлии есть \(n\) стаканов, расположенных в линию. В \(i\)-м стакане \(a_i\) единиц сока. Юлия пьет только из стаканов с нечетными номерами, в то время как ее партнер пьет только из стаканов с четными номерами.

Чтобы произвести впечатление на своего партнера, Юлия хочет найти непрерывный подмассив этих стаканов, такой, что у Юлии и ее партнера будет одинаковое количество сока, если учитывать только стаканы в этом подмассиве. Пожалуйста, помогите ей в этом.

Формально, определите, существуют ли два индекса \(l\), \(r\) такие, что \(1 \leq l \leq r \leq n\), и \(a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r} = a_{l + 1} + a_{l + 3} + \dots + a_{r-1}\), если \(l\) и \(r\) имеют одинаковую четность, и \(a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r - 1} = a_{l + 1} + a_{l + 3} + \dots + a_{r}\) в противном случае.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — общее количество стаканов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество сока в каждом стакане.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует подмассив, удовлетворяющий условию, и «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом тесте Юлия может выбрать \(l=1\) и \(r=3\). Затем она выпьет \(a_1+a_3=1+2=3\) единиц, а ее партнер выпьет \(a_2=3\) единиц сока.

Во втором тесте Юлия может выбрать \(l=2\) и \(r=5\). Затем она выпьет \(a_3+a_5=1+1=2\) единиц, а ее партнер выпьет \(a_2+a_4=1+1=2\) единиц сока.

В третьем тесте ни один такой непрерывный подмассив не подходит.

В четвертом тесте Юлия может выбрать \(l=2\) и \(r=8\). Затем она выпьет \(a_3+a_5+a_7=11+1+1=13\) единиц, а ее партнер выпьет \(a_2+a_4+a_6+a_8=2+4+5+2=13\) единиц сока.

G. Велосипеды

графы жадные алгоритмы кратчайшие пути реализация сортировки *1800

Все друзья Славика планируют отправиться на вечеринку на своих велосипедах из места, где они живут. У всех есть велосипеды, кроме Славика. Есть \(n\) городов, через которые они могут путешествовать. Все живут в городе \(1\) и хотят пойти на вечеринку, которая находится в городе \(n\). Карту городов можно рассматривать как ненаправленный граф с \(n\) узлами и \(m\) ребрами. Ребро \(i\) соединяет города \(u_i\) и \(v_i\) и имеет длину \(w_i\).

У Славика нет велосипеда, но у него есть деньги. В каждом городе есть ровно один велосипед, который можно купить. У велосипеда в \(i\)-м городе есть коэффициент медлительности \(s_{i}\). Как только Славик купит велосипед, он может использовать его, чтобы путешествовать из города, в котором он находится, в любой город. Проезд по ребру \(i\) с использованием велосипеда \(j\) занимает время \(w_i \cdot s_j\).

Славик может купить столько велосипедов, сколько захочет, так как деньги для него не проблема. Славик ненавидит путешествовать на велосипеде, поэтому он хочет добраться на вечеринку за минимальное время. И поскольку он уже подзабыл информатику, он просит вас ему помочь.

Какое минимальное количество времени потребуется Славику, чтобы добраться из города \(1\) в город \(n\)? Славик не может путешествовать без велосипеда. Гарантируется, что возможно добраться от города \(1\) до любого другого города.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание самих наборов.

Первая строка каждого набора содержит два целых числа, разделенных пробелом: \(n\) и \(m\) (\(2 \leq n \leq 1000\); \(n - 1 \leq m \leq 1000\)) — количество городов и количество дорог, соответственно.

\(i\)-я из следующих \(m\) строк содержит три целых числа \(u_i\), \(v_i\), \(w_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\); \(1 \leq w_i \leq 10^5\)), обозначающих, что есть дорога между городами \(u_i\) и \(v_i\) длиной \(w_i\).

Следующая строка содержит \(n\) целых чисел \(s_1, \ldots, s_n\) (\(1 \leq s_i \leq 1000\)) — коэффициент медлительности каждого велосипеда. Одну и ту же пару городов может соединять больше, чем одна дорога.

Сумма \(n\) по всем наборам не превышает \(1000\), и сумма \(m\) по всем наборам не превышает \(1000\).

Дополнительное ограничение на ввод: возможно путешествовать от города \(1\) до любого другого города.

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество времени, за которое Славик может добраться из города \(1\) в город \(n\).

C. Тренировка перед олимпиадой

жадные алгоритмы игры Конструктив математика реализация *1200

У Маши и Оли скоро важная командная олимпиада. В честь этого Маша, для разминки, предложила сыграть Оле в следующую игру:

Есть массив \(a\) размера \(n\). Первой ходит Маша, игроки ходят по-очереди. Каждый ход описывается следующей последовательностью действий:

\(\bullet\) Если размер массива равен \(1\) — игра завершается.

\(\bullet\) Игрок, который сейчас ходит, выбирает два различных индекса \(i\), \(j\) (\(1 \le i, j \le |a|\)), и проделывает следующую операцию — удаляет \(a_i\) и \(a_j\) из массива и добавляет в массив число равное \(\lfloor \frac{a_i + a_j}{2} \rfloor \cdot 2\). Иными словами, сначала делит сумму чисел \(a_i\), \(a_j\) на \(2\) с округлением вниз, после чего результат умножает на \(2\).

Маша стремится максимизировать итоговое число, Оля же — минимизировать.

Маша и Оля решили сыграть на каждом непустом префиксе первоначального массива \(a\), и попросили вас об одной помощи.

Для каждого \(k = 1, 2, \ldots, n\) ответьте на следующий вопрос. Пусть в игре присутствуют только первые \(k\) элементов массива \(a\), соответственно с индексами \(1, 2, \ldots, k\). Какое число тогда останется при оптимальной игре обоих игроков?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива.

Во второй строке содержится \(n\) целых чисел \(a_1,a_2, \ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — массив, на котором играют Маша и Оля.

Гарантируется, что сумма \(n\) по всем входным данным не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(k\)-е из этих чисел должно быть равно числу, которое останется в конце при оптимальной игре обоих, на массиве, состоящем из первых \(k\) элементов массива \(a\).

Примечание

В третьем наборе входных данных для префикса длины \(1\) ответ \(3\). Для префикса длины \(2\) у Маши есть один вариант для хода, поэтому ответ \(12\). Для префикса длины \(3\) у Маши есть три возможных хода: она выбирает \(3\) и \(10\), тогда число в конце \(22\), \(3\) и \(11\), тогда число в конце \(24\), \(10\) и \(11\), тогда число в конце \(22\), значит Маша выберет \(3\) и \(11\) и получит \(24\).

E. Весёлая жизнь в университете

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

Егор и его друг Арсений в этом году заканчивают учиться в школе и уже скоро поступят университет. И так как они очень ответственные ребята, они начали готовиться к поступлению уже сейчас.

Прежде всего они решили позаботиться о том, где будут жить долгие четыре года обучения, и зайдя на сайт университета, выяснили, что общежитие университета можно представить в виде корневого дерева из \(n\) вершин с корнем в вершине \(1\). В дереве каждая вершина представляет собой рекреацию с некоторым видом активности \(a_i\). Друзьям нужно выбрать \(2\) рекреации (не обязательно различные), в которых они поселятся. Ребята убеждены, что тем будет веселее их жизнь, чем больше значение следующей функции \(f(u, v) = diff(u, lca(u, v)) \cdot diff(v, lca(u, v))\). Помогите Егору и Арсению и найдите максимальное значение \(f(u, v)\) среди всех пар рекреаций!

\(^{\dagger} diff(u, v)\) — количество различных активностей, выписанных на простом пути от вершины \(u\) до вершины \(v\).

\(^{\dagger} lca(u, v)\) — такая вершина \(p\), что она находится на максимальном расстоянии от корня и является предком и вершины \(u\), и вершины \(v\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \({n - 1}\) целых чисел \(p_2, p_3, \ldots,p_n\) (\(1 \le p_i \le i - 1\)), где \(p_i\) — предок вершины \(i\).

Третья строка каждого набора входных данных содержит \({n}\) целых чисел \(a_1, a_2, \ldots,a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — номер активности, которая находится в вершине \(i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(f(u, v)\), по всем парам рекреаций \((u, v)\).

Примечание

Рассмотрим четвертый набор входных данных. Дерево имеет такой вид:

Все рекреации раскрашены в цвета. Одинаковые цвета означает что активности в рекреациях совпадают. Рассмотрим пару вершин \((11, 12)\), \(lca(11, 12) = 1\). Выпишем все активности на пути от \(11\) до \(1\) — \([11, 5, 1, 11]\), среди них различных активностей \(3\), то есть \(diff(11, 1) = 3\). Также выпишем все активности на пути от \(12\) до \(1\) — \([7, 8, 2, 11]\), среди них различных активностей \(4\), то есть \(diff(12, 1) = 4\). Получаем что \(f(11, 12) = diff(12, 1) \cdot diff(11, 1) = 4 \cdot 3 = 12\), что и является ответом для данного дерева. Можно показать, что ответ лучше получить невозможно.

F. Разделение на группы

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2900

В \(31\) лицее существовало две группы олимпиадников: информатики и математики. Численность информатиков составляла \(n_1\), математиков — \(n_2\). Точно неизвестно кто какой именно группе принадлежал, но известно, что между некоторыми парами людей существовали дружественные связи (причем они могли образовываться как между парой людей одной группы, так и двух различных).

Связи были настолько крепкими, что даже если убрать одного человека, а вместе с ним убрать все его дружественные связи, то любая пара людей всё равно оставалась знакома либо напрямую, либо через общих приятелей.

\(^{\dagger}\) Более формально, два человека \((x, y)\) знакомы в следующем случае: найдутся такие люди \(a_1, a_2, \ldots,a_n\) (\(1 \le a_i \le n_1 + n_2\)), что одновременно выполняются следующие условия:

\(\bullet\) Человек \(x\) напрямую знаком с \(a_1\).

\(\bullet\) Человек \(a_n\) напрямую знаком с \(y\).

\(\bullet\) Человек \(a_i\) напрямую знаком с \(a_{i + 1}\) для любого (\(1 \le i \le n - 1\)).

Преподаватели были недовольны тем, что информатики дружат с математиками и наоборот, и поэтому они решили разделить школьников на две группы таким образом, чтобы выполнялось два условия:

\(\bullet\) В группе информатиков было \(n_1\) человек, а в группе математиков — \(n_2\) человек.

\(\bullet\) Любая пара информатиков должна быть знакома (допускается знакомство при участии общих знакомых, которые обязаны быть из той же группы, что и люди из этой пары), тоже самое должно выполняться и для математиков.

Помогите им разрешить эту задачу и найдите, кто к какой группе относится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n_1\), \(n_2\) и \(m\) (\(1 \le n_1, n_2 \le 2000\), \(1 \le m \le 5000\)). \(n_1\), \(n_2\) являются размерами двух групп, описанных в задаче, \(m\) — количество дружественных связей изначально.

В следующих \(m\) строках дано описание дружественных связей: в \(i\)-й (\(1 \le i \le m\)) из них дана пара чисел \((a, b)\), которая означает, что человек с номером \(a\) дружит с человеком с номером \(b\) (и обратно).

Гарантируется, что для каждого набора входных данных все дружественные связи различные.

Гарантируется, что сумма \(n_1 + n_2\) по всем наборам входных данных не превосходит \(2000\), а сумма \(m\) по всем наборам входных данных не превосходит \(5000\).

Также гарантируется, что для каждого набора входных данных ответ существует.

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите \(n_1\) различных чисел \(a_i\) (\(1 \le a_i \le n_1 + n_2\)) — люди, принадлежащие первой группе.

Во второй строке выведите \(n_2\) различных чисел \(b_i\) (\(1 \le b_i \le n_1 + n_2\)) — люди, принадлежащие второй группе.

Все числа должны быть различные.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Рассмотрим третий набор входных данных. Разделение на группы выглядит следующим образом:

В зелёный цвет покрашены школьники, которые были выбраны информатиками, в синий же цвет покрашены те, кто были выбраны математиками.

Рассмотрим все пары информатиков и то, как они знакомы:

Пары \((4, 5), (4, 6)\) знакомы напрямую.

Пара \((5, 6)\) знакома через информатика с номером \(4\).

Рассмотрим все пары математиков и то, как они знакомы:

Пары \((1, 2), (2, 3)\) знакомы напрямую.

Пара \((1, 3)\) знакома через математика с номером \(2\).

Получаем, что любая пара людей, принадлежащих одной группе, знакомы друг с другом, а значит разбиение на две группы верное.

C. Поливка массива

жадные алгоритмы математика Перебор реализация *1600

У вас есть массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\). В \(i\)-й из следующих \(d\) дней вы собираетесь выполнить ровно одно из следующих двух действий:

  • Прибавить \(1\) к каждому из первых \(b_i\) элементов массива \(a\) (т.е. присвоить \(a_j := a_j + 1\) для всех \(1 \le j \le b_i\)).
  • Посчитаем количество элементов, которые равны своей позиции (т.е. \(a_j = j\)). Обозначим количество таких элементов за \(c\). Затем нужно прибавить \(c\) к своему счету и сбросить весь массив \(a\) к \(0\)-массиву длины \(n\) (т.е. присвоить \([a_1, a_2, \ldots, a_n] := [0, 0, \ldots, 0]\)).

Изначально ваш счет равен \(0\). Обратите внимание, что в каждый день вы должны выполнить ровно одно из указанных выше действий: нельзя пропустить день или выполнить оба действия в один и тот же день.

Какой максимальный счет вы можете получить в конце?

Поскольку \(d\) может быть довольно большим, последовательность \(b\) дается вам в сжатом виде:

  • Вам дана последовательность целых чисел \(v_1, v_2, \ldots, v_k\). Последовательность \(b\) является конкатенацией бесконечного числа копий \(v\): \(b = [v_1, v_2, \ldots, v_k, v_1, v_2, \ldots, v_k, \ldots]\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(d\) (\(1 \le n \le 2000\), \(1 \le k \le 10^5\), \(k \le d \le 10^9\)) — длину массива \(a\), длину последовательности \(v\) и количество дней, в течение которых будут выполняться операции.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(k\) целых чисел \(v_1, v_2, \ldots, v_k\) (\(1 \le v_i \le n\)) — последовательность \(v\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\), а сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный счет, который вы можете получить в конце \(d\)-го дня.

Примечание

В первом наборе входных данных последовательность \(b\) равняется \([1, 3, 2, 3, 1, 3, 2, 3, \ldots]\) и одно из оптимальных решений выглядит следующим образом:

  • Выполнить операцию второго типа в \(1\)-й день: счет увеличится на \(3\), а массив \(a\) станет равным \([0, 0, 0]\).
  • Выполнить операцию первого типа во \(2\)-й день: массив \(a\) станет равным \([1, 1, 1]\).
  • Выполнить операцию первого типа в \(3\)-й день: массив \(a\) станет равным \([2, 2, 1]\).
  • Выполнить операцию второго типа в \(4\)-й день: счет увеличится на \(1\), а массив \(a\) станет равным \([0, 0, 0]\).

Можно показать, что набрать больше \(4\) невозможно, поэтому ответ — \(4\).

Во втором наборе входных данных последовательность \(b\) равняется \([6, 6, 6, 6, \ldots]\). Один из способов набрать \(3\) — это выполнить операции первого типа в \(1\)-й и \(3\)-й дни и выполнить операцию второго типа во \(2\)-й день.

A. Кирпичная стена

жадные алгоритмы Конструктив математика реализация *800

Кирпич — это полоска \(1 \times k\), расположенная горизонтально или вертикально, где \(k\) может быть произвольным числом не менее \(2\) (\(k \ge 2\)).

Кирпичная стена размера \(n \times m\) — это такой способ разместить некоторое количество кирпичей внутри прямоугольника \(n \times m\), чтобы кирпичи располагались по клеткам горизонтально или вертикально, не вылезали за границы прямоугольника \(n \times m\), и чтобы каждая клетка принадлежала ровно одному кирпичу. Здесь \(n\) — это высота прямоугольника \(n \times m\), а \(m\) — ширина. Обратите внимание, что в одной кирпичной стене могут быть кирпичи с разными значениями k.

Устойчивость стены — это число кирпичей, расположенных горизонтально, минус число кирпичей, расположенных вертикально. Обратите внимание, что если вы использовали \(0\) горизонтальных кирпичей и \(2\) вертикальных, то получится устойчивость \(-2\), а не \(2\).

Какую максимальную устойчивость может иметь стена \(n \times m\)?

Гарантируется, что при ограничениях задачи существует хотя бы одна кирпичная стена \(n \times m\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n,\,m \le 10^4\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную устойчивость стены размера \(n \times m\).

Примечание

В 1-м тестовом случае максимальная прочность \(2\) получается, если положить два горизонтальных кирпича \(1 \times 2\) друг на друга.

Во 2-м тестовом случае можно получить максимальную прочность \(28\), если разместить в каждом из \(7\) рядов по \(4\) горизонтальных кирпича \(1 \times 2\).

B. Минимизируйте инверсии

жадные алгоритмы Конструктив реализация сортировки Структуры данных *900

Вам даны две перестановки \(a\) и \(b\) длины \(n\). Перестановкой называется массив из \(n\) элементов от \(1\) до \(n\), в котором все элементы различны. К примеру, массив [\(2,1,3\)] является перестановкой, а [\(0,1\)] и [\(1,3,1\)] не являются.

Вы можете сколько угодно раз выбрать два индекса \(i\) и \(j\), а затем поменять местами элементы \(a_i\) с \(a_j\) и \(b_i\) с \(b_j\) одновременно.

Вы ненавидите инверсии и поэтому хотите минимизировать суммарное число инверсий в обеих перестановках.

Инверсией в перестановке \(p\) называется пара индексов \((i, j)\), такая что \(i < j\) и \(p_i > p_j\). Например, если \(p=[3,1,4,2,5]\), то количество инверсий в этой перестановке равно \(3\) (искомые пары индексов: \((1,2)\), \((1,4)\) и \((3,4)\)).

Входные данные

В первой строке входных данных вводится одно число \(t\) (\(1 \leq t \leq 20\,000\)) — количество запросов.

Каждый набор входных данных состоит из трех строк. В первой строке вводится число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина перестановок \(a\) и \(b\). Во второй строке вводится \(n\) элементов \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — перестановка \(a\). В третьей строке в аналогичном формате вводится перестановка \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите две перестановки \(a'\) и \(b'\) — перестановки после применения операций. Суммарное количество инверсий в \(a'\) и \(b'\) должно быть минимально возможным среди всех пар перестановок, которые возможно получить с помощью операций из условия.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тесте минимальное достижимое количество инверсий равно \(10\).

Во втором наборе входных данных можно отсортировать обе перестановки одновременно. Для этого можно применить следующие операции:

  • Поменять элементы на позициях \(1\) и \(3\) в обеих перестановках. После операции \(a =\) [\(2,1,3\)], \(b =\) [\(2,1,3\)].
  • Поменять элементы на позициях \(1\) и \(2\). После операции \(a\) и \(b\) отсортированы.

В третьем тесте минимальное достижимое количество инверсий равно \(7\).

C. XOR-расстояние

битмаски жадные алгоритмы математика реализация *1400

Вам даны целые числа \(a\), \(b\), \(r\). Найдите наименьшее значение величины \(|({a \oplus x}) - ({b \oplus x})|\) по всем \(0 \leq x \leq r\).

\(\oplus\) это операция побитового исключающего ИЛИ, а \(|y|\) — абсолютная величина числа \(y\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит целые числа \(a\), \(b\), \(r\) (\(0 \le a, b, r \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее возможное значение.

Примечание

В первом тесте \(r = 0\), то есть \(x\) точно равен \(0\), поэтому ответ \(|{4 \oplus 0} - {6 \oplus 0}| = |4 - 6| = 2\).

Во втором тесте:

  • при \(x = 0\), \(|{0 \oplus 0} - {3 \oplus 0}| = |0 - 3| = 3\);
  • при \(x = 1\), \(|{0 \oplus 1} - {3 \oplus 1}| = |1 - 2| = 1\);
  • при \(x = 2\), \(|{0 \oplus 2} - {3 \oplus 2}| = |2 - 1| = 1\).

Следовательно, ответ равен \(1\).

В третьем тесте минимум достигается при \(x = 1\).

F. Гусеница на дереве

графы Деревья жадные алгоритмы поиск в глубину и подобное реализация сортировки *2500

Гусеница решила побывать в каждой вершине дерева. Изначально она сидит в корне.

Дерево представлено как корневое дерево с корнем в вершине \(1\). Каждое переползание в соседнюю вершину у неё занимает \(1\) минуту.

А под деревом стоит батут. Если гусеница отцепится от дерева и упадёт на батут, то за \(0\) секунд окажется в корне дерева. Но батут старый и выдержит не более \(k\) падений гусеницы.

За какое минимальное время гусеница сможет обойти дерево?

Более формально — надо найти минимальное время, нужное, чтобы посетить все вершины дерева, если гусеница начинает в корне (вершине \(1\)) и двигается с помощью двух способов.

  1. Перейти по ребру в одну из соседних вершин: тратит \(1\) минуту.
  2. Телепортироваться в корень: не тратит времени, никакие новые вершины не становятся посещёнными.

Второй способ (телепортацию) можно применить не более \(k\) раз. Гусеница может закончить путешествие в любой вершине.

Входные данные

В первой строке входных данных находятся два целых числа: \(n\) (\(2 \le n \le 2\cdot 10^5\)) — количество вершин в дереве, и \(k\) (\(0 \le k \le 10^9\)) — максимальное число телепортаций в корень.

Во второй строке записаны \(n-1\) целых чисел \(p_2\), \(p_3\), ..., \(p_n\) (\(1 \le p_i \le n\)) — предки в дереве для вершин \(2, 3, \ldots, n\); вершина \(1\) — корень.

Выходные данные

В единственной строке выведите одно число — минимальное число минут, за которое можно побывать во всех вершинах дерева.

Примечание

На картинке показан один из способов обойти дерево из первого теста за 9 минут.

B. Плюс-минус разделение

жадные алгоритмы *800

Вам дана строка \(s\) длины \(n\), состоящая из символов «+» и «-». По строке \(s\) можно построить массив \(a\) длины \(n\), в котором \(a_i=1\), если \(s_i=\) «+» и \(a_i=-1\), если \(s_i=\) «-».

Чтобы вычислить штраф, нужно выполнить следующие действия:

  1. Разбить массив \(a\) на непустые массивы \(b_1,b_2,\ldots,b_k\) такие, что \(b_1+b_2+\ldots+b_k=a^\dagger\), где \(+\) обозначает конкатенацию массивов.
  2. Штраф одного массива — это модуль его суммы, умноженный на его длину. Другими словами, для некоторого массива \(c\) длины \(m\) его штраф вычисляется как \(p(c)=|c_1+c_2+\ldots+c_m| \cdot m\).
  3. Общий штраф всего массива равняется \(p(b_1)+p(b_2)+\ldots+p(b_k)\).

Найдите минимальный возможный штраф, который вы можете получить, если вы выполните вышеописанные действия оптимально.

\(^\dagger\) Некоторые допустимые способы разбить \(a=[3,1,4,1,5]\) на \((b_1,b_2,\ldots,b_k)\) — \(([3],[1],[4],[1],[5])\), \(([3,1],[4,1,5])\) и \(([3,1,4,1,5])\), в то время как некоторыми недопустимыми способами разбиения \(a\) являются \(([3,1],[1,5])\), \(([3],[\,],[1,4],[1,5])\) и \(([3,4],[5,1,1])\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) (\(s_i \in \{ \mathtt{+}, \mathtt{-} \}\), \(|s| = n\)).

Отметим, что на сумму \(n\) по всем наборам входных данных не накладываются дополнительные ограничения.

Выходные данные

Для каждого набора входных данных выведите одно целое число, представляющее собой минимальный возможный штраф, который вы можете получить.

Примечание

В первом наборе входных данных \(a=[1]\). Мы можем разбить массив \(a\) на один подмассив \(([1])\). Тогда сумма штрафов равна \(p([1]) = 1\).

Во втором наборе входных данных имеем \(a=[-1,-1,-1,-1,-1]\). Мы можем разбить массив \(a\) на массивы \(([-1],[-1],[-1],[-1],[-1])\). Тогда сумма штрафов подмассивов равна \(p([-1]) + p([-1]) + p([-1]) + p([-1]) + p([-1]) = 1 + 1 + 1 + 1 + 1 = 5\).

В третьем наборе входных данных \(a=[1,-1,1,-1,1,-1]\). Мы можем разбить массив \(a\) на \(([1,-1,1,-1],[1,-1])\). Тогда сумма штрафов подмассивов равна \(p([1,-1,1,-1]) + p([1,-1]) = 0 + 0 = 0\).

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\).

D. 01-дерево

Деревья жадные алгоритмы Конструктив снм сортировки Структуры данных *2100

Есть ребро-взвешенное полное двоичное дерево с \(n\) листьями. Полное двоичное дерево определяется как дерево, в котором каждая нелистовая вершина имеет ровно 2 дочерних вершины. Для каждой нелистовой вершины обозначим одного из ее детей как левого ребенка, а другого — как правого.

Это двоичное дерево обладает очень странным свойством. Для каждой нелистовой вершины одно из ребер к ее детям имеет вес \(0\), а другое ребро — вес \(1\). Обратите внимание, что ребро с весом \(0\) может идти как к левому ребенку, так и к правому.

Вы забыли, как выглядит дерево, но, к счастью, вы помните некоторую информацию о листьях в виде массива \(a\) длины \(n\). Для каждого \(i\) от \(1\) до \(n\), \(a_i\) представляет собой расстояние\(^\dagger\) от корня до \(i\)-го листа (в порядке обхода dfs\(^\ddagger\)). Определите, существует ли полное двоичное дерево, удовлетворяющее массиву \(a\). Обратите внимание, что восстанавливать дерево не нужно.

\(^\dagger\) Расстояние от вершины \(u\) до вершины \(v\) определяется как сумма весов ребер на пути от вершины \(u\) до вершины \(v\).

\(^\ddagger\) Порядок листьев в dfs определяется вызовом следующей функции \(\texttt{dfs}\) на корне бинарного дерева.


dfs_order = [] — порядок обхода dfs

функция dfs(v):
если v — лист:
добавить v в конец dfs_order
иначе:
dfs(левый ребенок v)
dfs(правый ребенок v)

dfs(корень)
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n - 1\)) — расстояние от корня до \(i\)-го листа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует полное двоичное дерево, удовлетворяющее массиву \(a\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных массиву удовлетворяет следующее дерево.

Для второго набора входных данных можно доказать, что не существует полного двоичного дерева, удовлетворяющего массиву.

F1. Винный завод (простая версия)

жадные алгоритмы Структуры данных *2300

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(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}\) (\(c_i \color{red}{=} 10^{18}\)) — пропускная способность трубы, соединяющей водонапорную башню \(i\) с \(i + 1\).

Каждая из следующих \(q\) строк содержит четыре целых числа \(p\), \(x\), \(y\) и \(z\) (\(1 \le p \le n\), \(0 \le x, y \le 10^9\), \(z \color{red}{=} 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.
  • Для \(i = 4\), в башне 4 находится \(5\) литров воды. Все \(5\) литров воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 4 + 2 + 5 = 12\) после первого обновления.

Второе обновление изменяет массивы на \(a = [3, 5, 3, 3]\), \(b = [1, 1, 2, 8]\) и \(c = [10^{18}, 10^{18}, 10^{18}]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 3.
  • Для \(i = 3\), в башне 3 находится \(9\) литров воды и \(2\) литра воды превращается в вино. Оставшиеся \(7\) литров воды попадают в башню 4.
  • Для \(i = 4\), в башне 4 находится \(10\) литров воды. Только \(8\) литров воды превращается в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 2 + 8 = 12\) после второго обновления.

Третье обновление изменяет массивы на \(a = [3, 5, 0, 3]\), \(b = [1, 1, 0, 8]\) и \(c = [10^{18}, 10^{18}, 10^{18}]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 3.
  • Для \(i = 3\), в башне 3 находится \(6\) литров воды, и \(0\) литров воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 4.
  • Для \(i = 4\), в башне 4 находится \(9\) литров воды. Только \(8\) литров воды превращается в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 0 + 8 = 10\) после третьего обновления.

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\) после третьего обновления.

A. Выполнение условий

жадные алгоритмы математика Перебор *800

Алекс решает задачу. У него есть \(n\) ограничений на то, каким может быть целое число \(k\). Существует три типа ограничений:

  1. \(k\) должно быть больше или равно некоторому целому числу \(x\);
  2. \(k\) должно быть меньше или равно некоторому целому числу \(x\);
  3. \(k\) должно быть не равно некоторому целому числу \(x\).

Помогите Алексу найти количество целых чисел \(k\), которые удовлетворяют всем \(n\) ограничениям. Гарантируется, что ответ конечен (существует хотя бы одно ограничение типа \(1\) и хотя бы одно ограничение типа \(2\)). Также гарантируется, что ни одно из ограничений не совпадает в точности с другим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество ограничений.

Следующие \(n\) строк описывают ограничения. Каждая строка содержит два целых числа \(a\) и \(x\) (\(a \in \{1,2,3\}, \, 1 \leq x \leq 10^9\)). Число \(a\) обозначает тип ограничения. Если \(a=1\), то \(k\) должно быть больше или равно \(x\). Если \(a=2\), то \(k\) должно быть меньше или равно \(x\). Если \(a=3\), то \(k\) должно быть не равно \(x\).

Гарантируется, что существует конечное количество целых чисел, удовлетворяющих всем \(n\) ограничениям (существует хотя бы одно ограничение типа \(1\) и хотя бы одно ограничение типа \(2\)). Также гарантируется, что ни одно из ограничений не совпадает в точности с другим (другими словами, все пары \((a, x)\) различны).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество целых чисел \(k\), удовлетворяющих всем \(n\) ограничениям.

Примечание

В первом наборе входных данных \(k \geq 3\) и \(k \leq 10\). Кроме того, \(k \neq 1\) и \(k \neq 5\). Возможные целые числа \(k\), удовлетворяющие ограничениям: \(3,4,6,7,8,9,10\). Поэтому ответ равен \(7\).

Во втором наборе входных данных \(k \ge 5\) и \(k \le 4\), что невозможно. Поэтому ответ равен \(0\).

B. Игра в суммирование

жадные алгоритмы игры математика сортировки *1100

Алиса и Боб играют в игру. У них есть массив \(a_1, a_2,\ldots,a_n\). Игра состоит из двух шагов:

  • Сначала Алиса удаляет не более \(k\) элементов из массива.
  • Затем Боб умножает не более \(x\) элементов массива на \(-1\).

Алиса хочет максимизировать сумму элементов массива, в то время как Боб хочет её минимизировать. Найдите сумму элементов массива после игры, если оба игрока играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq x,k \leq n\)) — количество элементов в массиве, ограничение на количество элементов массива, которые может удалить Алиса, и ограничение на количество элементов массива, которые Боб может умножить на \(-1\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \leq a_i \leq 1000\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму элементов массива после игры, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных для Алисы оптимально удалить единственный элемент массива. Тогда сумма элементов массива будет равна \(0\) после окончания игры.

Во втором наборе входных данных для Алисы оптимально не удалять никакие элементы. Тогда Боб умножит \(4\) на \(-1\). Таким образом, итоговая сумма элементов массива будет равна \(3+1+2-4=2\).

В пятом наборе входных данных для Алисы оптимально удалить \(9, 9\). Затем Боб умножит \(5, 5, 3\) на \(-1\). Таким образом, итоговая сумма элементов массива будет равна \(-5-5-3+3+3+2=-5\).

A. Квадрат

жадные алгоритмы математика *800

На координатной плоскости расположен квадрат положительной (строго большей \(0\)) площади, со сторонами, параллельными осям координат. Вам даны координаты его углов в случайном порядке. Ваша задача — найти площадь квадрата.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит четыре строки, каждая строка содержит два целых числа \(x_i, y_i\) (\(-1000\le x_i, y_i\le 1000\)), координаты углов квадрата.

Гарантируется, что существует квадрат со сторонами, параллельными осям координат, с положительной (строго большей \(0\)) площадью, углы которого находятся в заданных точках.

Выходные данные

Для каждого набора входных данных выведите одно целое число — площадь квадрата.

B. Рассадить котов

жадные алгоритмы реализация *800

Чтобы проверить гипотезу о котах, ученые должны рассадить котов по коробкам определенным образом. Они, конечно, хотели бы проверить гипотезу и опубликовать сенсационную статью как можно быстрее, потому что слишком увлечены следующей гипотезой — о заряде телефона.

У ученых есть \(n\) коробок, в которых могут сидеть или не сидеть коты. Обозначим текущее состояние коробок последовательностью \(b_1, \dots, b_n\): \(b_i = 1\), если в коробке с номером \(i\) сидит кот, и \(b_i = 0\) иначе.

К счастью, неограниченное производство котов уже налажено, поэтому за один день ученые могут провести одну из следующих операций:

  • Взять нового кота и поместить его в коробку (для некоторого \(i\), такого что \(b_i = 0\), присвоить \(b_i = 1\)).
  • Изъять кота из коробки и отправить его на пенсию (для некоторого \(i\), такого что \(b_i = 1\), присвоить \(b_i = 0\)).
  • Переместить кота из одной коробки в другую (для некоторых \(i, j\), таких что \(b_i = 1, b_j = 0\), присвоить \(b_i = 0, b_j = 1\)).

Также оказалось, что некоторые коробки были сразу укомплектованы котами. Таким образом, ученым известно начальное положение котов в коробках \(s_1, \dots, s_n\) и желаемое \(f_1, \dots, f_n\).

Из-за большого количества бумажной работы у ученых нет времени на решение этой задачи. Помогите им во благо науки и подскажите, через какое минимальное количество дней гипотеза может быть проверена.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Каждый набор входных данных состоит из трех строк.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество коробок.

Вторая строка каждого набора входных данных содержит строку \(s\) из \(n\) символов, \(i\)-й символ равен '1', если в \(i\)-й коробке сидит кот и '0' иначе.

Третья строка каждого набора входных данных содержит строку \(f\) из \(n\) символов, \(i\)-й символ равен '1', если в \(i\)-й коробке должен будет сидеть кот и '0' иначе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число на отдельной строке — минимальное количество операций, требуемое для того, чтобы из начальной позиции получить желаемую. Можно показать, что решение всегда существует.

Примечание

В первом наборе входных данных можно сначала переместить кота из первой коробки в пятую, а затем изъять кота из четвертой коробки.

Во втором наборе входных данных ничего делать не приходится — единственный кот уже сидит в нужной коробке.

В третьем наборе входных данных надо потратить три дня, чтобы в каждую коробку посадить по коту.

C. Разослать сообщения

жадные алгоритмы математика *900

Степан — очень занятой человек, сегодня ему нужно отправить \(n\) сообщений в моменты времени \(m_1, m_2, \dots m_n\) (\(m_i < m_{i + 1}\)). Но, к сожалению, к моменту времени \(0\) на его телефоне осталось всего \(f\) единиц заряда. В момент времени \(0\) телефон включен.

За одну единицу времени включенный телефон теряет \(a\) единиц заряда. Также в любой момент времени Степан может выключить телефон и включить его позже. Это действие израсходует \(b\) единиц энергии за раз. Считайте включение и выключение моментальным, то есть вы можете включить его в момент \(x\) и послать сообщение в тот же момент и наоборот, послать сообщение в момент \(x\) и выключить телефон в тот же момент.

Если в какой-то момент уровень заряда опускается до \(0\) (становится \(\le 0\)), то отправить сообщение в этот момент времени невозможно.

Так как все сообщения очень важны для Степана, он хочет узнать, сможет ли он отправить все сообщения, без возможности зарядить телефон.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания наборов.

Первая строка каждого набора содержит четыре целых числа \(n\), \(f\), \(a\) и \(b\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le f, a, b \le 10^9\)) — количество сообщений, изначальный заряд телефона, расход заряда за единицу времени и расход при последовательном выключении и включении.

Вторая строка каждого набора содержит \(n\) целых чисел \(m_1, m_2, \dots, m_n\) (\(1 \le m_i \le 10^9\), \(m_i < m_{i + 1}\)) — моменты времени, в которые нужно отправить сообщения.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если Степан сможет отправить все сообщения и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных примера в момент времени \(0\) заряд телефона равен \(3\). При отправке сообщения в момент времени \(3\) без выключения будет потрачено \((3 - 0) \cdot 1 = 3\) единицы заряда, в таком случае заряд упадёт до \(0\) и Степан не сможет отправить это сообщение. При выключении и включении заряд телефона уменьшится на \(5\), а значит и таким образом отправить сообщение не получится.

Во третьем наборе входных данных примера в момент времени \(0\) заряд телефона равен \(10\), за одну единицу времени телефон теряет \(1\) единицу заряда, а при выключении и включении — \(2\) единицы заряда. Чтобы отправить все сообщения можно действовать следующим образом:

  • Выключить телефон в момент времени \(0\) и включить в момент времени \(1\), после этого останется \(10 - 2 = 8\) единиц заряда;
  • отправить сообщение в момент времени \(1\);
  • отправить сообщение в момент времени \(2\), после этого останется \(8 - (2 - 1) \cdot 1 = 7\) единиц заряда;
  • Выключить телефон в момент времени \(2\) и включить в момент времени \(3\), после этого останется \(7 - 2 = 5\) единиц заряда;
  • отправить сообщение в момент времени \(3\);
  • Выключить телефон в момент времени \(3\) и включить в момент времени \(4\), после этого останется \(5 - 2 = 3\) единиц заряда;
  • отправить сообщение в момент времени \(4\);
  • Выключить телефон в момент времени \(4\) и включить в момент времени \(5\), после этого останется \(3 - 2 = 1\) единиц заряда;
  • отправить сообщение в момент времени \(5\).

Последний (шестой) набор примера может упасть, если в вашем решении есть переполнение целочисленного типа.

D. Сильно отличающийся массив

жадные алгоритмы сортировки Структуры данных *1100

У Пети есть массив \(a_i\) из \(n\) целых чисел. Его брату Васе стало завидно, и он решил сделать свой массив из \(n\) чисел.

Для этого он нашел \(m\) целых чисел \(b_i\) (\(m\ge n\)), теперь он хочет выбрать из них какие-то \(n\) чисел, и расставить их в некотором порядке так, чтобы получился массив \(c_i\) длины \(n\).

Чтобы не быть похожим на брата, Вася хочет сделать так, чтобы его массив максимально отличался от массива Пети. А именно, он хочет, чтобы суммарная разница \(D = \sum_{i=1}^{n} |a_i - c_i|\) была максимально возможной.

Помогите Васе узнать, какую наибольшую разницу \(D\) он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит числа \(n\) и \(m\) (\(1\le n\le m\le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_i\) (\(1\le a_i\le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) чисел \(b_i\) (\(1\le b_i\le 10^9\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальную суммарную разность \(D\), которую можно получить.

Примечание

В первом примере Вася может, например, сделать массив \((1, 5, 7, 2)\). Тогда суммарная разность будет равна \(D = |6-1|+|1-5|+|2-7|+|4-2| = 5+4+5+2 = 16\).

Во втором примере все числа, доступные Васе, равны 1, поэтому он может собрать только массив \((1, 1, 1)\), для которого разность \(D = 0\).

В третьем примере Вася может, например, сделать массив \((5, 4, 3, 2, 1)\). Тогда суммарная разность будет равна \(D = |1-5|+|2-4|+|3-3|+|4-2|+|5-1| = 4+2+0+2+4 = 12\).

E. Съесть фишку

жадные алгоритмы игры математика Перебор *1600

Алиса и Боб играют в игру на клетчатой доске. Доска имеет \(h\) строк, пронумерованных сверху вниз, и \(w\) столбцов, пронумерованных слева направо. Оба игрока имеют по фишке. Изначально фишка Алисы стоит в клетке с координатами \((x_a, y_a)\) (строка \(x_a\), столбец \(y_a\)), а фишка Боба — в \((x_b, y_b)\). Гарантируется, что начальные позиции фишек не совпадают. Игроки делают ходы по очереди, начинает Алиса.

Алиса в свой ход может подвинуть свою фишку на одну клетку вниз либо на одну клетку вниз-вправо или вниз-влево (по диагонали). Боб же двигает фишку вверх, вверх-вправо или вверх-влево. При этом запрещается делать ходы, выходящие за пределы доски.

Более формально, если в начале хода Алиса стоит в клетке с координатами \((x_a, y_a)\), то она может переместить свою фишку в одну из клеток \((x_a + 1, y_a)\), \((x_a + 1, y_a - 1)\) или \((x_a + 1, y_a + 1)\). Боб же, в свою очередь, из клетки \((x_b, y_b)\) может переместиться в \((x_b - 1, y_b)\), \((x_b - 1, y_b - 1)\) или \((x_b - 1, y_b + 1)\). При этом новые координаты фишки \((x', y')\) должны удовлетворять условиям \(1 \le x' \le h\) и \(1 \le y' \le w\).

Пример состояния игры. Алиса играет белой фишкой, Боб — черной. Стрелками обозначены возможные ходы.

Игрок немедленно побеждает, если ставит свою фишку в клетку, занятую фишкой другого игрока. Если какой-либо из игроков не может сделать ход (Алиса — если находится в последней строке, т. е. \(x_a = h\), Боб — если в первой, т. е. \(x_b = 1\)), игра сразу же завершается ничьей.

Каким будет исход игры при оптимальной игре обоих противников?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей шесть целых чисел \(h\), \(w\), \(x_a\), \(y_a\), \(x_b\), \(y_b\) (\(1 \le x_a, x_b \le h \le 10^6\), \(1 \le y_a, y_b \le w \le 10^9\)) — размеры доски и координаты начальных позиций фишек Алисы и Боба. Гарантируется, что: либо \(x_a \ne x_b\), либо \(y_a \ne y_b\).

Сумма \(h\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «Alice», если побеждает Алиса, «Bob», если побеждает Боб, и «Draw», если никто из игроков не может обеспечить себе победу. Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «bOb», «bob», «Bob» и «BOB» будут приняты как победа Боба.

C. Ближайшие города

жадные алгоритмы математика реализация *1300

На числовой прямой расположены \(n\) городов, \(i\)-й город находится в точке \(a_i\). Координаты городов заданы в порядке возрастания, т. е. \(a_1 < a_2 < \dots < a_n\).

Расстояние между двумя городами \(x\) и \(y\) равно \(|a_x - a_y|\).

Для каждого города \(i\) определим ближайший город \(j\) как город, для которого расстояние между \(i\) и \(j\) не больше, чем расстояние между \(i\) и каждым другим городом \(k\). Например, если города расположены в точках \([0, 8, 12, 15, 20]\), то:

  • ближайший город к городу \(1\) — город \(2\);
  • ближайший город к городу \(2\) — город \(3\);
  • ближайший город к городу \(3\) — город \(4\);
  • ближайший город к городу \(4\) — город \(3\);
  • ближайший город к городу \(5\) — город \(4\).

Города расположены таким образом, что для каждого города ближайший город уникален. Например, невозможно, чтобы города находились в точках \([1, 2, 3]\), так как это означало бы, что у города \(2\) два ближайших города (\(1\) и \(3\)), оба на расстоянии \(1\).

Вы можете перемещаться между городами. Предположим, что вы находитесь в городе \(x\). Тогда вы можете выполнить одно из следующих действий:

  • переместиться в любой другой город \(y\), заплатив \(|a_x - a_y|\) монет;
  • переместиться в ближайший к \(x\) город, заплатив \(1\) монету.

Вам даны \(m\) запросов. В каждом запросе вам будут даны два города, и вам нужно вычислить минимальное количество монет, которое придется потратить, чтобы переместиться из одного города в другой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных задается в следующем формате:

  • первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_1 < a_2 < \dots < a_n \le 10^9\));
  • третья строка содержит одно целое число \(m\) (\(1 \le m \le 10^5\));
  • затем следуют \(m\) строк; \(i\)-я из них содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)), что означает, что в \(i\)-м запросе вам нужно вычислить минимальное количество монет, которое придется потратить, чтобы переместиться из города \(x_i\) в город \(y_i\).

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных для каждого города ближайший город определяется однозначно;
  • сумма \(n\) по всем наборам входных данных не превышает \(10^5\);
  • сумма \(m\) по всем наборам входных данных не превышает \(10^5\).
Выходные данные

Для каждого запроса выведите одно целое число — минимальное количество монет, которое придется потратить.

Примечание

Рассмотрим первые два запроса в примере из условия:

  • в первом запросе вы изначально находитесь в городе \(1\). Вы можете переместиться в ближайший город (который является городом \(2\)), заплатив \(1\) монету. Затем вы снова перемещаетесь в ближайший город (который является городом \(3\)), заплатив \(1\) монету. Затем вы снова перемещаетесь в ближайший город (который является городом \(4\)), заплатив \(1\) монету. Всего вы потратите \(3\) монеты, чтобы попасть из города \(1\) в город \(4\);
  • во втором запросе вы можете использовать тот же способ, чтобы попасть из города \(1\) в город \(4\), а затем потратить \(5\) монет, чтобы переместиться из города \(4\) в город \(5\).

E. Возрастающие подпоследовательности

битмаски жадные алгоритмы Конструктив математика разделяй и властвуй *1800

Напомним, что возрастающая подпоследовательность массива \(a\) — это последовательность, которую можно получить из массива, удалив некоторые элементы, не изменяя порядок оставшихся элементов, и оставшиеся элементы строго возрастают (т.е. \(a_{b_1} < a_{b_2} < \dots < a_{b_k}\) и \(b_1 < b_2 < \dots < b_k\)). Обратите внимание, что пустая подпоследовательность также является возрастающей.

Вам дано положительное целое число \(X\). Ваша задача — найти массив целых чисел длиной не более \(200\), такой, что у него ровно \(X\) возрастающих подпоследовательностей, или сообщить, что такого массива нет. Если есть несколько ответов, вы можете вывести любой из них.

Если две подпоследовательности состоят из одинаковых чисел, но позиции элементов исходного массива, входящих в подпоследовательность, отличаются, то эти подпоследовательности считаются различными (например, у массива \([2, 2]\) две разных подпоследовательности, равных \([2]\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(X\) (\(2 \le X \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите ответ для него. Если невозможно найти требуемый массив, выведите -1 в первой строке. В противном случае выведите положительное целое число \(n\) в первой строке — длину массива. Во второй строке выведите \(n\) целых чисел — элементы искомого массив. Если есть несколько ответов, вы можете вывести любой из них. Все элементы массива должны находиться в диапазоне \([-10^9; 10^9]\).

A. Перемещение фишек

жадные алгоритмы реализация *800

Есть лента, разделенная на \(n\) ячеек, пронумерованных слева направо от \(1\) до \(n\). Каждая ячейка либо содержит фишку, либо свободна.

Вы можете выполнять следующую операцию любое количество раз (возможно, ноль): выбрать фишку и переместить ее в ближайшую свободную ячейку слева. Вы можете выбрать любую фишку, при условии, что слева от нее есть хотя бы одна свободная ячейка. При перемещении фишки ячейка, где она находилась до операции, становится свободной.

Ваша цель — переместить фишки таким образом, чтобы они шли подряд, образовывали единый блок без свободных ячеек между ними. Какое минимальное количество операций вам нужно выполнить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)) — количество ячеек;
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 1\)); \(a_i = 0\) означает, что \(i\)-я ячейка свободна; \(a_i = 1\) означает, что \(i\)-я ячейка содержит фишку.

Дополнительное ограничение на входные данные: в каждом наборе входных данных хотя бы одна ячейка содержит фишку.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которые вам нужно выполнить, чтобы все фишки образовали единый блок без свободных ячеек между ними.

Примечание

В первом примере вы можете выполнить операцию с фишкой в \(7\)-й ячейке. Ближайшая свободная ячейка слева — \(5\)-я ячейка, поэтому фишка перемещается туда. После этого все фишки образуют единый блок.

Во втором примере все фишки уже находятся в одном блоке без свободных ячеек между ними. То же самое касается и третьего примера.

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\)-й секунды. Затем оставшийся монстр приближается и убивает вашего персонажа.

C. Найти B

жадные алгоритмы Конструктив *1400

Массив \(a\) длины \(m\) назовем красивым, если существует массив \(b\) из \(m\) целых чисел, для которого выполняются следующие условия:

  1. \(\sum\limits_{i=1}^{m} a_i = \sum\limits_{i=1}^{m} b_i\);
  2. \(a_i \neq b_i\) для каждого индекса \(i\) от \(1\) до \(m\);
  3. \(b_i > 0\) для каждого индекса \(i\) от \(1\) до \(m\).

Дан массив \(c\) длины \(n\). Каждый элемент этого массива больше \(0\).

Вам нужно ответить на \(q\) запросов. Во время \(i\)-го запроса вам нужно определить, является ли подмассив \(c_{l_{i}}, c_{l_{i}+1}, \dots, c_{r_{i}}\) красивым.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — длину массива \(c\) и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)).

Затем следуют \(q\) строк. \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы \(i\)-го подмассива.

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\); сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите YES, если подмассив красивый. В противном случае выведите NO.

Вы можете выводить каждую букву в любом регистре (как строчную или как заглавную). Например, строки yEs, yes, Yes и YES будут приняты как положительный ответ.

D. Слизни

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

В линию расположено \(n\) слизней. Слизни нумеруются от \(1\) до \(n\) слева направо. Размер \(i\)-го слизня равен \(a_i\).

Каждую секунду происходит следующее: ровно один слизень съедает одного из своих соседей и увеличивает свой размер на значение размера соседа. Слизень может съесть своего соседа, только если он строго больше этого соседа. Если нет такого слизня, который больше хотя бы одного из его соседей — процесс завершается.

Например, предположим, что \(n = 5\), \(a = [2, 2, 3, 1, 4]\). Процесс может пройти следующим образом:

  • сначала \(3\)-й слизень съедает \(2\)-го. Размер \(3\)-го слизня становится равным \(5\), \(2\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(1\)-го (они соседи, так как \(2\)-й уже съеден). Размер \(3\)-го слизня становится равным \(7\), \(1\)-й слизень съеден.
  • затем \(5\)-й слизень съедает \(4\)-го. Размер \(5\)-го слизня становится равным \(5\), \(4\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(5\)-го (они соседи, так как \(4\)-й уже съеден). Размер \(3\)-го слизня становится равным \(12\), \(5\)-й слизень съеден.

Для каждого слизня вычислите минимальное количество секунд, за которое он может оказаться съеден каким-то другим слизнем (среди всех возможных вариантов, как может происходить процесс), или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(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 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, где \(i\)-е число должно быть равно минимальному количеству секунд, необходимому для того, чтобы \(i\)-й слизень был съеден другим слизнем, или -1, если это невозможно.

F. Shrink-Reverse

Бинарный поиск жадные алгоритмы Перебор реализация Строки строковые суфф. структуры хэши *2800

Вам задана бинарная строка \(s\) длины \(n\) (строка, состоящая из \(n\) символов, и каждый символ — либо 0, либо 1).

Посмотрим на строку \(s\) как на двоичное представление некоторого числа, и назовем это число значением строки \(s\). Например, значение строки 000 равно \(0\), значение 01101 равно \(13\), значение 100000 — это \(32\), и так далее.

Вы можете применить не более \(k\) операций к \(s\). Каждая операция должна иметь один из следующих двух типов:

  • SWAP: выбрать два индекса \(i < j\) в \(s\) и поменять местами \(s_i\) и \(s_j\);
  • SHRINK-REVERSE: удалить все лидирующие нули из \(s\) и перевернуть строку \(s\).
Например, после применения SHRINK-REVERSE к строке 000101100 вы получите строку 001101.

Какое минимальное значение строки \(s\) вы можете получить, применив не более \(k\) операций к \(s\)?

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 5 \cdot 10^5\); \(1 \le k \le n\)) — длина строки \(s\) и максимальное количество операций.

Во второй строке задана строка \(s\) длины \(n\), состоящая из символов 0 и/или 1.

Дополнительное ограничение на входные данные: в строке \(s\) есть хотя бы одна цифра 1.

Выходные данные

Выведите одно целое число — наименьшее возможное значение строки \(s\), которое вы можете получить, применив не более \(k\) операций. Так как ответ может быть слишком большим, выведите его по модулю \(10^{9} + 7\).

Заметим, что вы должны минимизировать само значение, а не его остаток.

Примечание

В первом примере, одна из оптимальных стратегий — следующая:

  1. 10010010 \(\xrightarrow{\texttt{SWAP}}\) 00010110;
  2. 00010110 \(\xrightarrow{\texttt{SWAP}}\) 00000111.
Значение строки 00000111 равно \(7\).

Во втором примере, одна из оптимальных стратегий — следующая:

  1. 01101000 \(\xrightarrow{\texttt{SHRINK}}\) 1101000 \(\xrightarrow{\texttt{REVERSE}}\) 0001011;
  2. 0001011 \(\xrightarrow{\texttt{SWAP}}\) 0000111.
Значение строки 0000111 равно \(7\).

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.

A. Покрыть всё!

жадные алгоритмы Конструктив Строки *800

Вам дано два положительных целых числа \(n\) и \(k\).

Ваша задача найти строку \(s\) такую, что все возможные строки длины \(n\), которые состоят из первых \(k\) прописных букв латинского алфавита, присутствуют в \(s\) как подпоследовательность.

Если существует несколько ответов, выведите ответ минимальной длины. Если таких ответов существует несколько — можно вывести любой.

Примечание: Строка \(a\) называется подпоследовательностью другой строки \(b\), если \(a\) может быть получена удалением нескольких (возможно нуля) символов из \(b\) без изменения порядка оставшихся символов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t\leq 676\)) означающее количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) (\(1\leq n\leq 26\)) и \(k\) (\(1\leq k\leq 26\)).

Выходные данные

Для каждого набора входных данных выведите одну строку \(s\) которая удовлетворяет условиям. Если существует несколько ответов, выведите ответ минимальной длины. Если таких ответов существует несколько — можно вывести любой.

Примечание

В первом наборе входных данных существует две строки длины \(1\) которые могут быть получены используя первые \(2\) прописные буквы латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{a}: {\color{red}{\texttt{a}}}\texttt{b}\)
  • \(\texttt{b}: \texttt{a}{\color{red}{\texttt{b}}}\)

Во втором наборе входных данных существует только одна строка длины \(2\) которая может быть получена используя лишь первую прописную букву латинского алфавита, и она входит в \(s\) как подпоследовательность:

  • \(\texttt{aa}: {\color{red}{\texttt{aa}}}\)

В третьем наборе входных данных существует \(4\) строки длины \(2\) которые могут быть получены с использованием первых \(2\) прописных букв латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{aa}: \texttt{b}{\color{red}{\texttt{aa}}}\texttt{b}\)
  • \(\texttt{ab}: \texttt{ba}{\color{red}{\texttt{ab}}}\)
  • \(\texttt{ba}: {\color{red}{\texttt{ba}}}\texttt{ab}\)
  • \(\texttt{bb}: {\color{red}{\texttt{b}}}\texttt{aa}{\color{red}{\texttt{b}}}\)

В четвертом наборе входных данных существует \(9\) строк длины \(2\) которые могут быть получены с использованием первых \(3\) прописных букв латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{aa}: {\color{red}{\texttt{a}}}\texttt{bcb}{\color{red}{\texttt{a}}}\texttt{c}\)
  • \(\texttt{ab}: {\color{red}{\texttt{ab}}}\texttt{cbac}\)
  • \(\texttt{ac}: \texttt{abcb}{\color{red}{\texttt{ac}}}\)
  • \(\texttt{ba}: \texttt{abc}{\color{red}{\texttt{ba}}}\texttt{c}\)
  • \(\texttt{bb}: \texttt{a}{\color{red}{\texttt{b}}}\texttt{c}{\color{red}{\texttt{b}}}\texttt{ac}\)
  • \(\texttt{bc}: \texttt{a}{\color{red}{\texttt{bc}}}\texttt{bac}\)
  • \(\texttt{ca}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{b}{\color{red}{\texttt{a}}}\texttt{c}\)
  • \(\texttt{cb}: \texttt{ab}{\color{red}{\texttt{cb}}}\texttt{ac}\)
  • \(\texttt{cc}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{ba}{\color{red}{\texttt{c}}}\)

B. Сбалансированный набор задач?

жадные алгоритмы математика Перебор теория чисел *1200

Jay удалось создать задачу сложности \(x\) и он решил сделать ее второй в Codeforces Round #921.

Но Yash опасается, что это сделает раунд несбалансированным, и координатор отклонит её. Чтобы избежать этого, он хочет разбить ее на \(n\) подзадач таким образом, чтобы сложность каждой подзадачи была положительным целым числом, а их сумма была равна \(x\).

Координатор Aleksey определяет сбалансированность набора задач как НОД всех их сложностей.

Найдите максимальную сбалансированность, которую Yash может достичь.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t\leq 10^3\)), означающее количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(x\) (\(1\leq x\leq 10^8\)) и \(n\) (\(1\leq n\leq x\)).

Выходные данные

Для каждого тестового примера выведите одну строку, содержащую одно целое число, обозначающее максимальную сбалансированность набора задач, которую может достичь Yash.

Примечание

В первом наборе входных данных один из возможных способов разбить задачу сложности \(10\) на набор из трех подзадач сложности \(4\), \(2\) и \(4\) соответственно, дает сбалансированность \(2\).

Во втором наборе входных данных существует единственный способ разбить задачу сложности \(5\) на набор из \(5\) подзадач, взяв все их сложности по \(1\), дает сбалансированность \(1\).

D. Влад и разделение

битмаски жадные алгоритмы *1300

У Владислава есть \(n\) неотрицательных целых чисел, и он хочет разделить их все на несколько групп так, чтобы в любой группе любая пара чисел не имела совпадающих значений битов среди битов от \(1\)-го до \(31\)-го (то есть рассматриваем \(31\) младший бит двоичной записи).

Для целого числа \(k\) пусть \(k_2(i)\) обозначает \(i\)-й бит в его двоичном представлении (справа налево, индексация с 1). Например, если \(k=43\), так как \(43=101011_2\), то \(43_2(1)=1\), \(43_2(2)=1\), \(43_2(3)=0\), \(43_2(4)=1\), \(43_2(5)=0\), \(43_2(6)=1\), \(43_2(7)=0\), \(43_2(8)=0, \dots, 43_2(31)=0\).

Формально, для любых двух чисел \(x\) и \(y\) в группе должно выполняться условие \(x_2(i) \neq y_2(i)\) для всех \(1 \leq i < 32\).

Какое минимальное количество групп Владу нужно, чтобы достичь своей цели? Каждое число должно попасть ровно в одну группу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество заданных чисел.

Вторая строка каждого набора входных данных содержит \(n\) заданных целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_j < 2^{31}\)).

Сумма \(n\) по всем наборам входных данных теста не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число  — минимальное количество групп, необходимое для удовлетворения условия.

Примечание

В первом наборе входных данных любые два числа имеют одинаковые биты среди последних \(31\) бит, поэтому нам нужно поместить каждое число в свою собственную группу.

Во втором наборе входных данных \(a_1=0000000000000000000000000000000_2\), \(a_2=1111111111111111111111111111111_2\), таким образом, их можно поместить в одну группу, так как \(a_1(i) \ne a_2(i)\) для всех \(i\) от \(1\) до \(31\), включительно.

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\). Существуют и другие допустимые решения.

A. Сделайте белой

жадные алгоритмы Строки *800

У вас есть полоска из \(n\) клеток. Каждая клетка либо белая, либо чёрная.

Вы можете один раз выбрать непрерывный отрезок клеток и покрасить их все в белый цвет. После этого действия все чёрные клетки этого отрезка станут белыми, а белые останутся белыми.

Какое минимальное количество подряд идущих клеток нужно покрасить в белый цвет, чтобы все \(n\) клеток стали белыми.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10\)) — длину полоски.

Вторая строка каждого набора содержит строку \(s\), состоящую из \(n\) символов, каждый из которых либо 'W', либо 'B'. Символ 'W' обозначает белую клетку, а 'B' — чёрную. Гарантируется, что хотя бы одна клетка заданной полоски является чёрной.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальную длину непрерывного отрезка клеток, который нужно покрасить в белый цвет, чтобы вся полоска стала белой.

Примечание

В первом наборе входных данных для полоски «WBBWBW» минимальная длина отрезка для перекрашивания в белый цвет равна \(4\). Необходимо перекрасить отрезок от \(2\)-й до \(5\)-й клетки в белый цвет (клетки нумеруются от \(1\) слева направо).

B. По следам строки

жадные алгоритмы Конструктив Строки *900

Поликарп потерял строку \(s\) из \(n\) строчных латинских букв, но у него остался её след.

Следом строки \(s\) называется массив \(a\) из \(n\) целых чисел, в котором \(a_i\) равен количеству таких \(j\) (\(j < i\)), что \(s_i=s_j\). Например, следом строки abracadabra является массив [\(0, 0, 0, 1, 0, 2, 0, 3, 1, 1, 4\)].

По заданному следу строки найдите любую строку \(s\), из которой он мог быть получен. Строка \(s\) должна состоять только из строчных латинских букв a-z.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину потерянной строки.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < n\)) — след строки. Гарантируется, что для заданного следа существует подходящая строка \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку \(s\), которой соответствует данный след. Если таких строк \(s\) несколько, то выведите любую из них.

Строка \(s\) должна состоять из строчных латинских букв a-z.

Гарантируется, что для каждого набора входных данных ответ существует.

C. Выбери различные!

жадные алгоритмы математика Перебор *1000

Даны массив \(a\) из \(n\) целых чисел, массив \(b\) из \(m\) целых чисел и чётное число \(k\).

Ваша задача определить, возможно ли выбрать ровно \(\frac{k}{2}\) элементов из обоих массивов так, чтобы среди выбранных элементов встречалось каждое целое число от \(1\) до \(k\).

Например:

  • Если \(a=[2, 3, 8, 5, 6, 5]\), \(b=[1, 3, 4, 10, 5]\), \(k=6\), то можно выбрать элементы со значениями \(2, 3, 6\) из массива \(a\) и элементы со значениями \(1, 4, 5\) из массива \(b\). В таком случае, среди выбранных элементов будут встречаться все числа от \(1\) до \(k=6\).
  • Если \(a=[2, 3, 4, 5, 6, 5]\), \(b=[1, 3, 8, 10, 3]\), \(k=6\), то выбрать элементы таким образом невозможно.

Обратите внимание, что от вас не требуется найти способ выбора элементов — ваша программа должна лишь проверять, возможно ли выбрать элементы требуемым образом.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 2\cdot10^5\), \(2 \le k \le 2 \cdot \min(n, m)\), \(k\) — чётное число) — длину массива \(a\), длину массива \(b\) и количество элементов, которое нужно выбрать, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_j \le 10^6\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) и \(m\) по всем наборам входных данных теста не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если существует способ выбрать по \(\frac{k}{2}\) чисел из каждого массива так, чтобы среди выбранных элементов встречалось каждое целочисленное значение от \(1\) до \(k\). Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных примера можно выбрать элементы, равные \(2\), \(3\) и \(6\) из массива \(a\) и элементы равные \(1\), \(4\) и \(5\) из массива \(b\). Таким образом, среди выбранных элементов встречается каждое число от \(1\) до \(k=6\).

Во втором наборе входных данных примера можно показать, что выбрать ровно три элемента из каждого массива требуемым образом невозможно.

В третьем наборе входных данных примера можно выбрать элементы, равные \(1\) и \(3\) из массива \(a\) и элементы равные \(2\) и \(4\) из массива \(b\). Таким образом, среди выбранных элементов встречается каждое число от \(1\) до \(k=4\).

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\).

Вы можете разделять выводы для наборов входных данных пустыми строками. Это не является обязательным требованием.

F. Микроцикл

графы Деревья жадные алгоритмы поиск в глубину и подобное реализация снм сортировки Структуры данных *1900

Дан неориентированный взвешенный граф из \(n\) вершин и \(m\) рёбер. Между каждой парой вершин в графе существует не более одного ребра, граф не содержит петель (рёбер из вершины в себя же). Граф не обязательно связный.

Цикл в графе называется простым, если он не проходит через одну и ту же вершину дважды и не содержит одно и то же ребро дважды.

Найдите любой простой цикл этого графа, в котором вес самого лёгкого ребра минимален.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(3 \le n \le m \le \min(\frac{n\cdot(n - 1)}{2}, 2 \cdot 10^5)\)) — размер графа и количество рёбер.

Следующие \(m\) строк набора содержат по три целых числа \(u\), \(v\) и \(w\) (\(1 \le u, v \le n\), \(u \ne v\), \(1 \le w \le 10^6\)) — вершины \(u\) и \(v\) соединены ребром веса \(w\).

Гарантируется, что между каждой парой вершин существует не более одного ребра. Обратите внимание, что при заданных ограничениях в графе всегда есть хотя бы один простой цикл.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(b\) и \(k\), где:

  • \(b\) — минимальный вес ребра в найденном цикле,
  • \(k\) — количество вершин в найденном цикле.

В следующей строке выведите \(k\) чисел от \(1\) до \(n\)  — вершины цикла в порядке обхода.

Обратите внимание, что ответ всегда существует, так как при заданных ограничениях в графе всегда есть хотя бы один простой цикл.

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\)-й.

B. Уравняй

Бинарный поиск жадные алгоритмы сортировки *1200

У Васи есть два хобби — прибавлять перестановки\(^{\dagger}\) к массивам и находить самый часто встречающийся элемент. Недавно он нашел массив \(a\) и решил узнать, какое максимальное количество элементов равных одинаковому числу в массиве \(a\) он может получить после того, как прибавит какую-то перестановку к массиву \(a\).

Более формально, Вася может выбрать какую-то перестановку \(p_1, p_2, p_3, \ldots, p_n\) длины \(n\), после чего изменить элементы массива \(a\) по правилу \(a_i := a_i + p_i\). После этого Вася считает, сколько раз каждое число встречается в массиве \(a\), и берёт максимум по этим значениям. Вам нужно определить, какое максимальное значение он может получить.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 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\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное количество элементов, равных одинаковому числу, после операции прибавления перестановки.

Примечание

В первом наборе входных данных оптимально выбрать \(p = [2, 1]\). Тогда после применения операции массив \(a\) будет равен \([3, 3]\), в котором число \(3\) встречается дважды, поэтому ответ равен \(2\).

Во втором наборе входных данных одним из оптимальных вариантов является \(p = [2, 3, 1, 4]\). После применения операции массив \(a\) будет равен \([9, 4, 5, 5]\). Так как число \(5\) встречается дважды, то ответ равен \(2\).

D. Подземелья Одинокой горы

жадные алгоритмы математика Перебор Структуры данных Тернарный поиск *1900

Однажды, люди, эльфы, гномы и другие жители Средиземья собрались отнять у Смога украденные у них сокровища. Во имя этой великой цели они сплотились вокруг сильного эльфа Тимофея и начали планировать свержение правителя Одинокой горы.

Армия жителей Средиземья будет состоять из нескольких отрядов. Известно, что каждая пара существ одной расы, которые находятся в разных отрядах, прибавляет \(b\) единиц к суммарной силе армии. Но так как Тимофею будет сложно руководить армией, состоящей из большого числа отрядов, то суммарная сила армии, состоящей из \(k\) отрядов, уменьшается на \((k - 1) \cdot x\) единиц. Обратите внимание, что армия всегда состоит из хотя бы одного отряда.

Известно, что в Средиземье проживают \(n\) рас, и количество существ \(i\)-й расы равно \(c_i\). Помогите жителям Средиземья определить максимальную силу армии, которую они могут составить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(b\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le b \le 10^6, 0 \le x \le 10^9\))— количество рас и константы \(b\) и \(x\), описанные выше.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количества существ каждой из \(n\) рас.

Гарантируется, что сумма значений \(c_1 + c_2 + \ldots + c_n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную силу армии, которую могут составить жители Средиземья.

Примечание

В первом наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 0\), то сила армии не уменьшится из-за количества отрядов. Жителей по отрядам можно распределить так:

  • Единственного представителя первой расы можно отправить в первый отряд.
  • Первого представителя второй расы можно отправить в первый отряд, второго представителя второй расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 1\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 3\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(4\).

Во втором наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 10\), то сила армии уменьшится на \(20\). Жителей по отрядам можно распределить так:

  • Первого представителя первой расы можно отправить в первый отряд, второго представителя первой расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 5\).
  • Первого и второго представителя второй расы можно отправить в первый отряд, третьего и четвёртого представителя второй расы можно отправить во второй отряд, пятого представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(8 \cdot b = 40\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 15\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(5 + 40 + 15 - 20 = 40\).

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]\) не подходит.

A. Саша и красивый массив

жадные алгоритмы Конструктив математика сортировки *800

Саша решил подарить своей девушке массив \(a_1, a_2, \ldots, a_n\). Он узнал, что его девушка оценивает красоту массива как сумму значений \((a_i - a_{i - 1})\) для всех целых чисел \(i\) от \(2\) до \(n\).

Помогите Саше и скажите, какую максимальную красоту массива \(a\) можно получить, если он может как угодно переставить местами его элементы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную красоту массива \(a\), которую можно получить.

Примечание

В первом наборе входных данных можно переставить элементы массива \(a\) местами так, чтобы сделать \(a = [1, 2, 3]\). Тогда его красота будет равна \((a_2 - a_1) + (a_3 - a_2) = (2 - 1) + (3 - 2) = 2\).

Во втором наборе входных данных можно не переставлять местами элементы массива \(a\). Тогда его красота будет равна \(0\).

B. Саша и рисование

жадные алгоритмы Конструктив математика *800

Уже в детском саду Саше понравилась одна девочка. Поэтому он захотел подарить ей рисунок и привлечь её внимание.

В качестве рисунка он решил нарисовать клетчатый квадрат \(n \times n\), в котором закрашены некоторые клетки. Но закрашивать клетки сложно, поэтому он хочет закрасить как можно меньше клеток. При этом он хочет, чтобы хотя бы в \(k\) диагоналях была закрашена хотя бы одна клетка. Обратите внимание, что всего квадрат \(n \times n\) имеет \(4n - 2\) диагонали.

Помогите маленькому Саше влюбить в себя девочку и скажите, какое минимальное количество клеток ему нужно закрасить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^8\), \(1 \leq k \leq 4n - 2\))— размер квадрата и минимальное количество диагоналей, в которых должна быть хотя бы одна закрашенная клетка.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество клеток, которые нужно закрасить.

Примечание

На картинках снизу чёрным цветом отмечены закрашенные клетки, фиолетовым цветом отмечены все диагонали.

В первом наборе входных данных можно закрасить \(2\) клетки так, чтобы \(4\) диагонали содержали хотя бы одну закрашенную клетку:

В третьем наборе входных данных можно закрасить \(6\) клеток так, чтобы все \(10\) диагоналей содержали хотя бы одну закрашенную клетку:

C. Саша и казино

Бинарный поиск жадные алгоритмы игры Конструктив математика Перебор *1400

Саша решил подарить лучшую сумочку своей девушке, но, к несчастью для Саши, она очень дорогая. Поэтому Саша хочет на неё заработать. Посмотрев советы по заработку в интернете, он решил пойти в казино.

Саша знает, что казино работает по следующим правилам. Если Саша сделает ставку в \(y\) монет (где \(y\) — положительное целое число), то в случае победы он получит \(y \cdot k\) монет (то есть количество его монет увеличится на \(y \cdot (k - 1)\)). А в случае поражения он потеряет всю сумму ставки (то есть количество его монет уменьшится на \(y\)).

Обратите внимание, что сумма ставки всегда должна быть положительным (\(> 0\)) целым числом и не может превышать текущее количество монет у Саши.

Также Саше известно, что в казино действует акция: он не может проиграть более \(x\) раз подряд.

Изначально у Саши есть \(a\) монет. Ему интересно, может ли он делать ставки так, чтобы у него гарантированно получилось выиграть сколь угодно много монет. Другими словами, правда ли, что для любого целого числа \(n\), Саша сможет делать ставки так, чтобы при любых их результатах, не противоречащих описанным выше правилам, в какой-то момент времени у него было хотя бы \(n\) монет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(k, x\) и \(a\) (\(2 \leq k \leq 30\), \(1 \leq x \leq 100\), \(1 \leq a \leq 10^9\)) — количество раз, в которое увеличивается ставка при выигрыше, максимальное количество проигрышей подряд и изначальное количество монет у Саши.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Саша сможет получить сколь угодно много монет и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Саша может действовать следующим образом:

  • Если Саша делает ставку в первый раз или в предыдущий раз он выиграл, то он ставит \(1\) монету.
  • Если в предыдущий раз Саша проиграл, то он ставит \(2\) монеты.

Обратите внимание, что Саша не может проиграть более одного раза подряд.

Можно доказать, что при такой стратегии Саша может получить сколько угодно много монет.

Во втором наборе входных данных Саша может в первый раз поставить только \(1\) монету. Но в случае проигрыша он больше не сможет делать ставки, поэтому он не сможет сделать так, чтобы у него гарантированно оказалось сколь угодно много монет.

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)\).

C. Расстояние Хемминга

жадные алгоритмы Конструктив математика матрицы *2400

Расстоянием Хемминга между строками a и b равной длины называется число h(a, b) равное количеству различных целых i (1 ≤ i ≤ |a|) таких, что ai ≠ bi, где aii-й символ строки a, bii-й символ строки b. К примеру, расстояние Хемминга между строками «aba» и «bba» равно 1, в них различаются первые символы. Для строк «bbba» и «aaab» расстояние Хемминга равно 4.

У Джона Доу были записаны на бумажке четыре строки s1, s2, s3 и s4 равной длины. Каждая строка si состояла только из строчных букв «a» и «b». Джон нашел расстояния Хемминга между всеми парами имеющихся строк, после чего он потерял бумажку со строками. Расстояния Хемминга между всеми парами у него сохранились.

Помогите Джону восстановить строки; найдите какие-нибудь четыре строки s'1, s'2, s'3, s'4 равной длины, состоящие только из строчных букв «a» и «b», такие, что попарные расстояния Хемминга между ними такие же, как и у строк Джона. Более формально, набор s'i должен удовлетворять условию .

Чтобы строки было легче записать на бумажке, требуется из всех подходящих наборов строк выбрать набор, состоящий из строк минимальной длины.

Входные данные

В первой строке через пробел записаны целые числа h(s1, s2), h(s1, s3), h(s1, s4). Во второй строке через пробел записаны целые числа h(s2, s3) и h(s2, s4). В третьей строке записано единственное целое число h(s3, s4).

Все заданные целые числа h(si, sj) неотрицательные и не превосходят 105. Гарантируется, что хотя бы одно из чисел h(si, sj) положительно.

Выходные данные

Выведите -1, если подходящего набора строк не существует.

В противном случае выведите в первой строке число len — длину каждой из строк. В i-й из следующих четырех строк выведите строку s'i. Если возможных наборов с минимальной длиной строк несколько — выведите любой из них.

A. Максимизируйте счет

жадные алгоритмы сортировки *800

На доске записано \(2n\) целых положительных чисел. От скуки вы решили сыграть в одиночную игру с числами на доске.

Вы начинаете игру со счетом \(0\). Вы увеличите свой счет, выполняя следующую операцию ровно \(n\) раз:

  • Выбрать два целых числа \(x\) и \(y\), которые записаны на доске.
  • Прибавить \(\min(x,y)\) к своему счету.
  • Стереть \(x\) и \(y\) с доски.

Обратите внимание, что после того, как вы выполните этот ход \(n\) раз, на доске больше не будет записано ни одного числа.

Найдите максимальный итоговый счет, который вы можете получить, если оптимально выполните \(n\) ходов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 50\)), означающее, что на доске написано \(2n\) целых чисел.

Вторая строка каждого набора входных данных содержит \(2n\) целых чисел \(a_1,a_2,\ldots,a_{2n}\) (\(1 \leq a_i \leq 10^7\)) — числа, написанные на доске.

Выходные данные

Для каждого набора входных данных выведите максимальный итоговый счет, который вы можете получить.

Примечание

В первом наборе входных данных вы можете сделать только один ход. Вы выбираете \(x=2\) и \(y=3\), и ваш счет будет \(\min(x,y)=2\).

Во втором наборе входных данных ниже приведена последовательность ходов, которая позволяет получить итоговый счет \(2\):

  • На первом ходу выберите \(x=1\) и \(y=1\). Затем добавьте к счету \(\min(x,y)=1\). После стирания \(x\) и \(y\) на доске останутся целые числа \(1\) и \(2\).
  • На втором ходу выберите \(x=1\) и \(y=2\). Затем добавьте к счету \(\min(x,y)=1\). После удаления \(x\) и \(y\) на доске больше не останется целых чисел.
Можно доказать, что получить счет больше \(2\) невозможно.

В третьем наборе входных данных выполните ход трижды, каждый раз прибавляя к счету \(1\).

C. Лексикографически наибольший

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1700

У Стека есть массив \(a\) длины \(n\). У него также есть пустое множество \(S\). Заметим, что \(S\) не является мультимножеством.

Он выполнит следующую трехшаговую операцию ровно \(n\) раз:

  1. Выбрать индекс \(i\) такой, что \(1 \leq i \leq |a|\).
  2. Вставить\(^\dagger\) \(a_i + i\) в \(S\).
  3. Удалить \(a_i\) из \(a\). Обратите внимание, что индексы всех элементов справа от \(a_i\) уменьшаются на \(1\).

Обратите внимание, что после \(n\) операций массив \(a\) станет пустым.

После Стек построит новый массив \(b\), который является \(S\), отсортированным в порядке убывания. Формально, \(b\) — это массив длины \(|S|\), где \(b_i\) — \(i\)-й наибольший элемент \(S\) для всех \(1 \leq i \leq |S|\).

Найдите лексикографически наибольший\(^\ddagger\) массив \(b\), который может получить Стек.

\(^\dagger\) Множество может содержать только уникальные элементы. Вставка элемента, который уже присутствует в множестве, не изменит множество.

\(^\ddagger\) Массив \(p\) лексикографически больше массива \(q\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(q\) является префиксом \(p\), но \(p \ne q\); или
  • в первой позиции, где \(p\) и \(q\) различаются, массив \(p\) имеет больший элемент, чем соответствующий элемент в \(q\).

Заметим, что \([3,1,4,1,5]\) лексикографически больше, чем \([3,1,3]\), \([\,]\) и \([3,1,4,1]\), но не больше \([3,1,4,1,5,9]\), \([3,1,4,1,5]\) и \([4]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — длину массивов \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_{n}\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наибольшее значение \(b\).

Примечание

В первом наборе входных данных выберите \(i=1\) в первой операции, вставьте \(a_1 + 1 = 3\) в \(S\) и удалите \(a_1\) из \(a\). После первой операции массив \(a\) станет \(a=[1]\). Во второй операции снова выберите \(i=1\) и вставьте \(a_1 + 1 = 2\) в \(S\). Таким образом, \(S=\{2, 3\}\), и \(b = [3, 2]\).

Обратите внимание, что если в первой операции выбрать \(i=2\), а во второй выбрать \(i=1\), то \(S=\{3\}\), так как \(3\) будет вставлено дважды, в результате чего \(b=[3]\).

Поскольку \([3,2]\) лексикографически больше \([3]\), то в первой операции следует выбрать \(i=1\).

Во втором примере в каждой операции нужно выбирать последний элемент.

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\).

B. Сделай равными

жадные алгоритмы *800

В ряду стоят \(n\) сосудов с водой, пронумерованных слева направо от \(1\) до \(n\). В каждый сосуд может поместиться любое количество воды, изначально \(i\)-й сосуд содержит \(a_i\) единиц воды. Сумма \(a_i\) делится нацело на \(n\).

Вы можете любое (возможно нулевое) количество раз применить следующую операцию: перелить любое количество воды из \(i\)-го сосуда в \(j\)-й, причём \(i\) должно быть меньше \(j\) (т.е., \(i<j\)). Любой индекс может быть выбран в качестве \(i\) или \(j\) любое количество раз.

Определите, возможно ли с помощью этой операции сделать количество воды во всех сосудах одинаковым.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество сосудов с водой.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — количества воды в сосудах. Гарантируется, что сумма \(a_i\) в каждом наборе входных данных не превосходит \(2 \cdot 10^9\). Кроме того, сумма \(a_i\) делится на \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если возможно с помощью применения описанной операции сделать количество воды во всех сосудах одинаковым. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В третьем наборе входных данных примера (\(a=[4, 5, 2, 1, 3]\)) можно поступить следующим образом:

  • перелить из первого сосуда в четвёртый \(1\) единицу воды, тогда \(a=[3, 5, 2, 2, 3]\);
  • перелить из второго сосуда в третий \(1\) единицу воды, тогда \(a=[3, 4, 3, 2, 3]\);
  • перелить из второго сосуда в четвёртый \(1\) единицу воды, тогда \(a=[3, 3, 3, 3, 3]\).

C. Снова сделай равными

жадные алгоритмы математика Перебор *1000

У вас есть массив \(a\) из \(n\) целых чисел.

Вы можете не более одного раза применить следующую операцию: выбрать три целых числа \(i\), \(j\), \(x\) (\(1 \le i \le j \le n\)) и присвоить всем элементам массива с индексами от \(i\) до \(j\) значение \(x\). Цена данной операции зависит от выбранных индексов и равна \((j - i + 1)\) бурлей.

Например, массив равен \([1, 2, 3, 4, 5, 1]\). Если мы выберем \(i = 2, j = 4, x = 8\), то после применения данной операции массив будет равен \([1, 8, 8, 8, 5, 1]\).

Какое наименьшее количество бурлей нужно потратить, чтобы сделать все элементы массива равными?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10 ^ 5\)) — размер массива.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество бурлей, которое придётся потратить, чтобы сделать все элементы массива равными. Можно показать, что это всегда можно сделать.

E. Аня и подарок на День святого Валентина

жадные алгоритмы игры математика сортировки *1400

Саша подарил Ане на День святого Валентина массив \(a\) из \(n\) целых чисел. Ане не нужен этот массив, поэтому она предлагает его уничтожить, сыграв в игру.

Игроки ходят по очереди. Саша джентльмен, поэтому уступает право первого хода Ане.

  • Аня в свой ход должна выбрать элемент \(a_i\) из массива и развернуть последовательность цифр его значения. Например, если Аня выбрала элемент со значением \(42\), он превратится в \(24\); если Аня выбрала элемент со значением \(1580\), он превратится в \(851\). Обратите внимание, что ведущие нули удаляются. После этого хода количество элементов в массиве не изменится.
  • Саша в свой ход должен извлечь два элемента \(a_i\) и \(a_j\) (\(i \ne j\)) из массива, склеить их в любом порядке и вставить результат в массив. Например, если Саша выбрал элементы равные \(2007\) и \(19\), то он удалит эти два элемента из массива и добавит значение \(200719\) или \(192007\). После этого хода количество элементов в массиве уменьшится на \(1\).

Пропускать ходы игроки не могут. Игра заканчивается, когда Саша не может сделать ход, то есть после хода Ани осталось ровно одно число. Если это число не меньше \(10^m\) (т.е., \(\ge 10^m\)), побеждает Саша. В противном случае побеждает Аня.

Можно показать, что игра всегда закончится. Сообщите, кто выиграет, если оба игрока играют оптимально.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описание наборов.

В первой строке каждого набора даны целые числа \(n\), \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^6\)) — количество чисел в массиве и параметр, определяющий, когда побеждает Саша.

Во второй строке каждого набора даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив, который Саша подарил Ане.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «Sasha», если при оптимальной игре побеждает Саша;
  • «Anna», если при оптимальной игре побеждает Аня.
Примечание

Рассмотрим первый набор входных данных.

Аня может развернуть число \(2\), тогда Саша склеит числа \(2\) и \(14\), получив число \(214\), что больше \(10^2 = 100\). Если бы Аня развернула число \(14\), Саша бы склеил числа \(41\) и \(2\), получив число \(412\), что больше \(10^2 = 100\). Других возможных ходов у Ани нет, поэтому она проигрывает.

A. Шипы и монеты

дп жадные алгоритмы реализация *800

Во время вашего путешествия по компьютерным вселенным вы наткнулись на очень интересный мир. Это путь с \(n\) последовательными ячейками, каждая из которых может быть пустой, содержать шипы или монету. За один ход вы можете переместиться на одну или две ячейки вдоль пути, при условии, что конечная ячейка не содержит шипов (и принадлежит пути). Если вы перемещаетесь на ячейку с монетой, вы ее забираете.

Здесь зеленые стрелки соответствуют допустимым ходам, а красная стрелка соответствует недопустимому ходу.

Вы хотите собрать как можно больше монет. Найдите максимальное количество монет, которое вы можете собрать в этом мире, если начнете с самой левой ячейки пути.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длина пути.

Вторая строка каждого набора входных данных содержит строку из \(n\) символов, описание пути. Символ '.' обозначает пустую ячейку, '@' обозначает ячейку с монетой, а '*' обозначает ячейку с шипами. Гарантируется, что первая ячейка пуста.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете собрать.

Примечание

Иллюстрацию первого примера показана в условии задачи.

Вот иллюстрация второго примера:

И иллюстрация третьего примера:

D. Карточная игра

жадные алгоритмы реализация *1400

Два игрока играют в карточную онлайн-игру. Игра играется с использованием колоды из 32 карт. У каждой карты есть масть и ранг. Существует четыре масти: трефы, бубны, червы и пики. Мы закодируем их символами 'C', 'D', 'H', и 'S' соответственно. И существует 8 рангов, в порядке возрастания: '2', '3', '4', '5', '6', '7', '8', '9'.

Каждая карта обозначается двумя буквами: ее рангом и мастью. Например, восьмёрка червей обозначается как 8H.

В начале игры выбирается одна масть как козырная масть.

На каждом ходу игроки делают ходы следующим образом: первый игрок кладет одну из своих карт на стол, и второй игрок должен побить эту карту одной из своих карт. После этого обе карты перемещаются на сброс.

Карта может побить другую карту, если обе карты имеют одинаковую масть, и у первой карты ранг выше, чем у второй. Например, 8S может побить 4S. Кроме того, козырная карта может побить любую некозырную карту, независимо от ранга карт, например, если козырная масть — трефы ('C'), то 3C может побить 9D. Обратите внимание, что козырные карты могут быть побиты только козырными картами более высокого ранга.

В игре было сыграно \(n\) раундов, поэтому в сбросе теперь находится \(2n\) карт. Вы хотите восстановить раунды, сыгранные в игре, но карты в сбросе перемешаны. Найдите любую возможную последовательность из \(n\) раундов, которая могла быть сыграна в игре.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1\le n\le 16\)).

Вторая строка набора входных данных содержит один символ, козырная масть. Она является одной из «CDHS».

Третья строка набора входных данных содержит описание \(2n\) карт. Каждая карта описывается двухсимвольной строкой, первый символ — ранг карты, который является одним из «23456789», и второй — масть карты, которая является одной из «CDHS». Все карты различны.

Выходные данные

Для каждого теста выведите ответ на него:

  • Выведите \(n\) строк. В каждой строке выведите описание двух карт, в том же формате, что и во входном файле: первая карта, сыгранная первым игроком, и вторая карта — карта, использованная вторым игроком, чтобы ее побить.
  • Если нет решения, выведите одну строку «IMPOSSIBLE».

Если существует несколько ответов, выведите любой из них.

A. Переставь и измени знак

жадные алгоритмы математика сортировки *800

Вам дан массив \(a\) из \(n\) целых чисел. Вы должны выполнить следующие две операции с массивом (сначала первую, затем вторую):

  1. Произвольно переставить элементы массива или оставить порядок его элементов без изменений.
  2. Выбрать не более одного отрезка подряд идущих элементов и заменить знаки всех элементов на этом отрезке на противоположные. Формально, вы можете выбрать пару индексов \(l, r\) такие, что \(1 \le l \le r \le n\) и присвоить \(a_i = -a_i\) для всех \(l \le i \le r\). Заметим, что вы можете не выбирать пару индексов и оставить все знаки элементов без изменений.

Какова максимальная сумма элементов массива после последовательного выполнения двух операций (сначала первой, затем второй)?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100 \le a_i \le 100\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите максимальную сумму элементов массива после последовательного выполнения двух заданных операций.

Примечание

В первом наборе входных данных вы можете сначала переставить массив, чтобы получился \([3,-2,-3]\) (операция 1), затем выбрать \(l = 2, r = 3\) и получить сумму \(3 + -((-2) + (-3)) = 8\) (операция 2).

Во втором наборе входных данных вы можете ничего не делать при выполнении обеих операций и получить сумму \(0\).

В третьем наборе входных данных вы можете ничего не делать при выполнении обеих операций и получить сумму \(0 + 1 = 1\).

В четвертом наборе входных данных вы можете сначала оставить порядок неизменным (операция 1), затем выбрать \(l = 1, r = 1\) и получить сумму \(-(-99) = 99\) (операция 2).

В пятом наборе входных данных вы можете сначала оставить порядок неизменным (операция 1), затем выбрать \(l = 2, r = 3\) и получить сумму \(10 + -((-2) + (-3)) + 7 = 22\) (операция 2).

В шестом наборе входных данных вы можете сначала оставить порядок неизменным (операция 1), затем выбрать \(l = 1, r = 5\) и получить сумму \(-((-1)+(-2)+(-3)+(-4)+(-5))=15\) (операция 2).

D. Цепные остатки

жадные алгоритмы Конструктив математика сортировки теория чисел *1200

Дан массив \(a_1, a_2, \ldots, a_n\), определите, возможно ли переставить его элементы в \(b_1, b_2, \ldots, b_n\), так чтобы \(b_1 \bmod b_2 \bmod \ldots \bmod b_n \neq 0\).

Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\). Кроме того, операции по модулю вычисляются слева направо. То есть, \(x \bmod y \bmod z = (x \bmod y) \bmod z\). Например, \(2024 \bmod 1000 \bmod 8 = (2024 \bmod 1000) \bmod 8 = 24 \bmod 8 = 0\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Вторая строка каждого теста содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите «YES», если это возможно, в противном случае «NO».

Вы можете вывести ответ в любом регистре (верхний или нижний). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительные ответы.

Примечание

В первом тесте, перестановка массива в \(b = [1, 2, 3, 4, 5, 6]\) (ничего не делая) приведет к \(1 \bmod 2 \bmod 3 \bmod 4 \bmod 5 \bmod 6 = 1\). Следовательно, это возможно.

Во втором тесте, массив \(b\) должен быть равен \([3, 3, 3, 3, 3]\), что приведет к \(3 \bmod 3 \bmod 3 \bmod 3 \bmod 3 = 0\). Следовательно, это невозможно.

В третьем тесте, перестановка массива в \(b = [3, 2, 2]\) приведет к \(3 \bmod 2 \bmod 2 = 1\). Следовательно, это возможно.

A. Слишком Мин Слишком Макс

жадные алгоритмы математика *800

Вам дан массив \(a\) из \(n\) элементов, найдите максимально возможное значение выражения:

\(\)|a_i - a_j| + |a_j - a_k| + |a_k - a_l| + |a_l - a_i|\(\)

где \(i\), \(j\), \(k\) и \(l\) — четыре различных индекса массива \(a\), и \(1 \le i, j, k, l \le n\).

Здесь \(|x|\) обозначает абсолютное значение числа \(x\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 100\)) — количество элементов в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \le a_i \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение.

Примечание

В первом наборе входных данных для любого выбора \(i\), \(j\), \(k\), \(l\) ответ будет \(0\). Например, \(|a_1 - a_2| + |a_2 - a_3| + |a_3 - a_4| + |a_4 - a_1| = |1 - 1| + |1 - 1| + |1 - 1| + |1 - 1| = 0 + 0 + 0 + 0 = 0\).

Во втором наборе входных данных для \(i = 1\), \(j = 3\), \(k = 2\) и \(l = 5\) ответ будет \(6\). \(|a_1 - a_3| + |a_3 - a_2| + |a_2 - a_5| + |a_5 - a_1| = |1 - 2| + |2 - 1| + |1 - 3| + |3 - 1| = 1 + 1 + 2 + 2 = 6\).

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. Найдите мину

Бинарный поиск геометрия жадные алгоритмы интерактив Конструктив математика *1700

Это интерактивная задача.

Вам дано клетчатое поле из \(n\) строк и \(m\) столбцов. Координаты \((x, y)\) обозначают клетку на поле, где \(x\) (\(1 \leq x \leq n\)) — номер строки, начиная сверху, и \(y\) (\(1 \leq y \leq m\)) — номер столбца, начиная слева. Гарантируется, что на поле ровно \(2\) мины в различных клетках, обозначенных \((x_1, y_1)\) и \((x_2, y_2)\). Вы можете сделать не более \(4\) запросов к интерактору, и после этих запросов вы должны предоставить расположение одной из мин.

В каждом запросе вы выбираете позицию на поле \((x, y)\), и в качестве ответа вы получите манхэтонское расстояние от выбранной позиции до ближайшей из двух мин, то есть значение \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Ваша задача — определить расположение одной из мин, сделав свои запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Протокол взаимодействия

Для каждого набора входных данных интеракция начинается с чтения \(n\) и \(m\).

Затем вы можете сделать не более \(4\) запросов следующим образом:

«? x y» (\(1 \leq x \leq n\) и \(1 \leq y \leq m\))

После каждого из них вы должны прочитать число \(d\), которое равняется \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Когда вы нашли расположение любой из мин, выведите в единственной строке «! x y» (без кавычек), обозначающие строку и столбец для этой мины. Вывод ответа не считается за запрос.

После вывода ответа ваша программа должна продолжить решать оставшиеся тестовые случаи или завершиться, если все тестовые случаи были решены.

Интерактор в этой задаче не является адаптивным: расположение мин зафиксировано заранее и не зависит от запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Описание каждого тестового случая должно состоять из трех строк.

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Вторая строка содержит координаты первой мины \(x_1\) и \(y_1\)(\(1 \leq x_1 \leq n\), \(1 \leq y_1 \leq m\)).

Третья строка содержит координаты второй мины \(x_2\) и \(y_2\)(\(1 \leq x_2 \leq n\), \(1 \leq y_2 \leq m\)).

Мины должны располагаться в различных позициях.

Примечание

В первом наборе входных данных мы сначала спрашиваем про верхний левый угол \((1, 1)\) и получаем результат \(3\), что означает, что есть мина на побочной диагонали, и нет мин над ней.

На картинке ниже каждая клетка содержит число, обозначающее расстояние до синей клетки. Зеленые клетки — кандидаты, в которых содержится ближайшая мина.

Затем мы спрашиваем три клетки на диагонали и в последнем запросе мы получаем результат \(0\), что означает, что одна из мин найдена на позиции \((2, 3)\).

Вторая мина располагалась на позиции \((3, 2)\).

Во втором наборе входных данных мы сначала спрашиваем нижний правый угол \((5, 5)\) и получаем результат \(1\), который означает, что одна из двух соседних клеток содержит мину, назовем ее миной \(1\).

Затем мы спрашиваем клетку \((2, 2)\). Можем заметить, что зеленые клетки не пересекаются с зелеными клетками из первого запроса, поэтому они содержат оставшуюся мину, назовем ее миной \(2\).

Запрос \(3\) — это клетка \((3, 3)\). Эти клетки содержат мину \(1\), но мы все еще не знаем, где именно. Тем не менее, мы можем определить, что единственной возможной клеткой для мины \(2\) является клетка \((1, 1)\), потому что все остальные кандидаты находятся на дистанции менее \(3\) для этого запроса.

D1. Разбиение XOR — сольная версия

битмаски жадные алгоритмы Конструктив *2100

Это сольная версия задачи. Обратите внимание, что решение этой задачи может иметь или не иметь общих идей с решением игровой версии. Вы можете сдавать и получать баллы за каждую из версий независимо.

Вы можете делать взломы только тогда, когда обе версии задачи решены.

Дана целочисленная переменная \(x\), которая изначально имеет значение \(n\). Операция разбиения определена как:

  • Выберите значение \(y\) такое, что \(0 \lt y \lt x\) и \(0 \lt (x \oplus y) \lt x\).
  • Обновите \(x\), приравняв его \(x = y\) либо \(x = x \oplus y\).
Определите, возможно ли преобразовать \(x\) в \(m\) за не более чем \(63\) операции, используя такую операцию разбиения. Если это возможно, предъявите последовательность операций для достижения \(x = m\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \lt n \leq 10^{18}\)) — изначальное значение \(x\) и требуемое значение \(x\).

Выходные данные

Для каждого набора тестовых данных выведите ваш ответ в следующем формате.

Если невозможно достичь требуемого значения \(m\) за \(63\) операции, то выведите \(-1\) в единственной строке.

Иначе,

Первая строка должна содержать целое число \(k\) (\(1 \leq k \leq 63\)) — где \(k\) является количеством произведенных операций.

Следующая строка должна содержать \(k+1\) целое число — последовательность, в виде которой переменная \(x\) изменяется с ходом операций разбиения. \(1\)-е и (\(k+1\))-ое числа должны равняться \(n\) и \(m\) соответственно.

Примечание

В первом тестовом случае \(n = 7\), для первой операции \(x = 7\), если мы выберем \(y = 3\), тогда \((7 \oplus 3) \lt 7\), следовательно мы можем обновить \(x\) сделав его равным \(3\) уже на первой операции, чему и равно \(m\).

Во втором тестовом случае \(n = 4\), для первой операции \(x = 4\).

Если мы выберем:

  • \(y = 1\) тогда \((4 \oplus 1) \gt 4\)
  • \(y = 2\) тогда \((4 \oplus 2) \gt 4\)
  • \(y = 3\) тогда \((4 \oplus 3) \gt 4\)

Следовательно мы не можем выполнить первую операцию и невозможно сделать \(x = 2\).

D2. Разбиение XOR — игровая версия

битмаски жадные алгоритмы игры интерактив *2400

Это интерактивная задача.

Это игровая версия задачи. Обратите внимание, что решение этой задачи может иметь или не иметь общих идей с решением сольной версии. Вы можете сдавать и получать баллы за каждую из версий независимо.

Алиса и Боб играют в игру. Игра начинается с целого числа \(n\). Игроки совершают ходы по очереди. На каждом ходу игры происходит следующая последовательность событий:

  • Игрок, имеющий целое число \(p\), разбивает его на два целых числа \(p_{1}\) и \(p_{2}\), где \(0 \lt p_{1} \lt p\), \(0 \lt p_{2} \lt p\) и \(p_{1} \oplus p_{2} = p\).
  • Если такие \(p_{1}\), \(p_{2}\) не существуют, то игрок проигрывает.
  • Иначе, оппонент выбирает либо \(p_{1}\), либо \(p_{2}\).
  • Игра продолжается с выбранным числом. Оппонент будет пытаться разбить его.

Ваша задача помочь Алисе выиграть. Вы можете выполнить не более \(63\) операций разбиения. Вы можете выбрать будет Алиса ходить первой или второй. Система будет играть за Боба.

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^{18}\)) — число, с которого начинается игра.

Протокол взаимодействия

Для каждого тестового случая, взаимодействие начинается с чтения целого числа \(n\).

После чтения \(n\), выведите отдельную строку, содержащую либо «first», либо «second», обозначив, каким вы хотите начать игру(первым или вторым соответственно).

Во время хода Алисы вы должны вывести два положительных целых числа \(p_{1}\) и \(p_{2}\), такие что \(0 \lt p_{1} \lt p\), \(0 \lt p_{2} \lt p\) и \(p_{1} \oplus p_{2} = p\). Здесь \(p\) должно равняться одному из двух чисел выведенных Бобом на предыдущем ходу. Если до этого не было ходов, то \(p\) равняется \(n\). Если Алиса не может произвести операцию разбиения, выведите «0 0», после чего вы получите вердикт Неправильный ответ.

Во время хода Боба, вы должны прочитать два положительных целых числа \(p_{1}\) и \(p_{2}\), такие что \(0 \lt p_{1} \lt p\), \(0 \lt p_{2} \lt p\) и \(p_{1} \oplus p_{2} = p\). Здесь \(p\) должно равняться одному из двух чисел выведенных Алисой на предыдущем ходу. Если до этого не было ходов, то \(p\) равняется \(n\). Если Боб не может произвести операцию разбиения, \(p_{1} = 0\) and \(p_2 = 0\), в случае чего вы должны перейти к решению следующего тестового случая.

Если операция, совершенная Алисой, некорректна, интерактор выведет «-1 -1» и ваша программа должна завершиться незамедлительно, чтобы получить вердикт Неправильный ответ.

Если Алиса совершает \(63\) хода и Боб все еще может совершить операцию разбиения с текущими числами, интерактор выведете «-1 -1», и ваша программа должна завершиться незамедлительно, чтобы получить вердикт Неправильный ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Вы не можете делать взломы в этой задаче.

Примечание

Пояснения по взаимодействию.

Интерактор / БобАлисаПояснение
4\(t\)
1\(n\) для первого тестового случая
secondАлиса выбирает начать второй
0 0Боб говорит, что не может разбить \(p = 1\)
3\(n\) для второго тестового случая
firstАлиса выбирает начать первой
1 2Алиса ломает \(p = 3\) на \(p_1 = 1\) и \(p_2 = 2\)
0 0Боб говорит, что не может разбить ни \(p = 1\), ни \(p = 2\)
13\(n\) для третьего тестового случая
firstАлиса выбирает начать первой
10 7Алиса ломает \(p = 13\) на \(p_1 = 10\) и \(p_2 = 7\)
3 4Боб ломает \(p = 7\) на \(p_1 = 3\) и \(p_2 = 4\)
1 2Алиса ломает \(p = 3\) на \(p_1 = 1\) и \(p_2 = 2\)
0 0Боб говорит, что не может разбить ни \(p = 1\), ни \(p = 2\)
777777770001\(n\) для четвертого тестового случая
firstАлиса выбирает начать первой
777777770000 1Алиса ломает \(p = 777\,777\,770\,001\) на \(p_1 = 777\,777\,770\,000\) и \(p_2 = 1\)
0 0Боб говорит, что не может совершить операцию разбиения

Таблица лишь для пояснения формата взаимодействия и не отражает настоящего поведения интерактора.

Обратите внимание, что в последнем тестовом случае Боб мог выбрать \(p_1\) и совершить операцию разбиения, но он сдался.

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\).

E. Дистанционные курсы в ЦПМ

битмаски жадные алгоритмы математика Перебор Структуры данных *2400

В Центре Помощи Магистрам наступил Новый год, а значит время добавить нововведение!

Теперь ученикам даются дистанционные курсы, при этом всего есть \(n\) курсов. За \(i\)-й дистанционный курс ученик может получить оценку от \(x_i\) до \(y_i\).

Но каждому ученику могут быть доступны не все курсы, а именно \(j\)-му ученику даются только курсы с номерами от \(l_j\) до \(r_j\), то есть дистанционные курсы с номерами \(l_j, l_j + 1, \ldots, r_j\).

Создатели дистанционных курсов решили определять итоговую оценку особенным образом. Пусть \(j\)-й ученик получил оценки \(c_{l_j}, c_{l_j + 1}, \ldots, c_{r_j}\) за свои дистанционные курсы, тогда его итоговая оценка будет равна \(c_{l_j}\) \(|\) \(c_{l_j + 1}\) \(|\) \(\ldots\) \(|\) \(c_{r_j}\), где \(|\) обозначает операцию побитового ИЛИ.

Так как чат-бот с решениями дистанционных курсов сломался, то ученики попросили вас помочь. Для каждого из \(q\) учеников скажите, какую максимальную итоговую оценку он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество дистанционных курсов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i \le y_i < 2^{30}\)) — минимальная и максимальная оценка, которую можно получить за \(i\)-й курс.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2\cdot10^5\)) — количество учеников.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — минимальный и максимальный номер дистанционных курсов, доступных для \(j\)-го ученика.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, \(j\)-е из которых является максимальной итоговой оценкой, которую может получить \(j\)-й ученик.

Примечание

В первом наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(1\):
    • На первом дистанционном курсе он получит оценку \(1\).
    Таким образом, итоговая оценка равна \(1\).

  2. Максимальная оценка для второго ученика равна \(5\):
    • На первом дистанционном курсе он получит оценку \(1\).
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(1\) \(|\) \(4\) \(=\) \(5\).
  3. Максимальная оценка для третьего ученика равна \(4\):
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(4\).

Во втором наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(15\):
    • На первом дистанционном курсе он получит оценку \(7\).
    • На втором дистанционном курсе он получит оценку \(4\).
    • На третьем дистанционном курсе он получит оценку \(8\).
    Тем самым, итоговая оценка равна \(7\) \(|\) \(4\) \(|\) \(8\) \(=\) \(15\).

  2. Максимальная оценка для второго ученика равна \(11\):
    • На третьем дистанционном курсе он получит оценку \(9\).
    • На четвертом дистанционном курсе он получит оценку \(2\).
    Тем самым, итоговая оценка равна \(9\) \(|\) \(2\) \(=\) \(11\).

F. Дерево Андрея

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2800

Магистр Андрей очень любит деревья\(^{\dagger}\), поэтому у него есть дерево, состоящее из \(n\) вершин.

Но не все так просто. Магистр Тимофей решил украсть одну вершину из дерева. Если Тимофей украл вершину \(v\) из дерева, то вершина \(v\) и все ребра с концом в вершине \(v\) удаляются из дерева, при этом номера других вершин не меняются. Чтобы Андрей не расстраивался, Тимофей решил сделать получившийся граф снова деревом. Для этого он может добавлять ребра между произвольными вершинами \(a\) и \(b\), однако при добавлении такого ребра он должен заплатить \(|a - b|\) монет в Центр Помощи Магистрам.

Обратите внимание, что получившееся дерево не содержит вершину \(v\).

Тимофей не определился, какую вершину \(v\) он удалит из дерева, поэтому он хочет знать для каждой вершины \(1 \leq v \leq n\), какое минимальное количество монет нужно потратить, чтобы после удаления вершины \(v\) сделать граф снова деревом, а также какие ребра при этом нужно добавить.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(5 \le n \le 2\cdot10^5\)) — количество вершин в дереве Андрея.

В следующих \(n - 1\) строках содержится описание ребер дерева. \(i\)-я из этих строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)) — номера вершин, соединённых \(i\)-м ребром.

Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Для каждой вершины \(v\) (в порядке от \(1\) до \(n\)) в первой строке выведите два целых числа \(w\) и \(m\) — минимальное количество монет, которое нужно потратить, чтобы граф после удаления вершины \(v\) снова стал деревом, и количество добавленных ребер.

Далее выведите \(m\) строк, каждая из которых содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le n, a \ne v, b \ne v\), \(a \ne b\)) — концы добавленного ребра.

Если существует несколько способов добавить ребра, вы можете вывести любое решение с минимальной стоимостью.

Примечание

В первом наборе входных данных:

Рассмотрим удаление вершины \(4\):

Оптимальным решением будет провести ребро из вершины \(5\) в вершину \(3\). Тогда мы потратим \(|5 - 3| = 2\) монеты.

В третьем наборе входных данных:

Рассмотрим удаление вершины \(1\):

Оптимальным решением будет:

  • Провести ребро из вершины \(2\) в вершину \(3\), потратив \(|2 - 3| = 1\) монету.
  • Провести ребро из вершины \(3\) в вершину \(4\), потратив \(|3 - 4| = 1\) монету.
  • Провести ребро из вершины \(4\) в вершину \(5\), потратив \(|4 - 5| = 1\) монету.

Тогда сумарно мы потратим \(1 + 1 + 1 = 3\) монеты.

Рассмотрим удаление вершины \(2\):

Ребра проводить не нужно, так как после удаления вершины граф останется деревом.

A. Побитовая магия

битмаски жадные алгоритмы интерактив Конструктив математика *1700

Это интерактивная задача.

Загадана секретная последовательность \(p_0, p_1, \ldots, p_{n-1}\), являющаяся перестановкой чисел \(\{0,1,\ldots,n-1\}\).

Вам нужно найти два индекса \(i\) и \(j\), таких что \(p_i \oplus p_j\) принимает максимальное значение, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Чтобы их найти, вы можете делать запросы. Каждый запрос устроен так: вы выбираете произвольные индексы \(a\), \(b\), \(c\) и \(d\) (\(0 \le a,b,c,d < n\)). Затем программа жюри вычисляет \(x = (p_a \mid p_b)\) и \(y = (p_c \mid p_d)\), где \(|\) обозначает операцию побитового ИЛИ. Наконец, вы узнаёте результат сравнения чисел \(x\) и \(y\). Другими словами, вам сообщают, какое из трёх условий выполнено: \(x < y\), \(x > y\) или \(x = y\).

Найдите два индекса \(i\) и \(j\) (\(0 \le i,j < n\)), таких что \(p_i \oplus p_j\) максимально среди всех таких пар, сделав не более \(3n\) запросов. Если существует несколько пар индексов, удовлетворяющих условию, выведите любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Протокол взаимодействия

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 10^4\)). В этот момент загадывается перестановка \(p_0, p_1, \ldots, p_{n-1}\). В этой задаче решение жюри неадаптивно. Иначе говоря, последовательность \(p\) фиксирована в каждом наборе входных данных и не будет меняться в процессе взаимодействия с программой участника.

Чтобы сделать запрос, вам нужно выбрать четыре индекса \(a\), \(b\), \(c\) и \(d\) (\(0 \le a,b,c,d < n\)) и вывести строку следующего вида:

  • «? a b c d»

После этого вы получите:

  • «<», если \((p_a \mid p_b) < (p_c \mid p_d)\);
  • «=», если \((p_a \mid p_b) = (p_c \mid p_d)\);
  • «>», если \((p_a \mid p_b) > (p_c \mid p_d)\).

Вы можете сделать не более \(3n\) запросов такого вида.

Затем, если ваша программа нашла пару индексов \(i\) и \(j\) (\(0 \le i, j < n\)), такую что \(p_i \oplus p_j\) максимально, выведите строку следующего вида:

  • «! i j»

Обратите внимание, что эта строка не считается запросом и не учитывается при подсчёте числа сделанных запросов.

После этого переходите к обработке следующего набора входных данных.

Если вы делаете больше \(3n\) запросов, ваша программа должна немедленно завершиться, в таком случае вы получите вердикт Wrong Answer. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит читать из закрытого потока данных.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Взломы

Чтобы делать взломы, используйте следующий формат.

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^4\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_0,p_1,\ldots,p_{n-1}\), которые задают перестановку чисел от \(0\) до \(n - 1\).

Сумма значений \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных загадана перестановка \(p=[0,3,1,2]\).

На запрос «? 0 2 3 1» решение жюри выведет «<», поскольку \((p_0 \mid p_2) = (0 \mid 1) =1 < (p_3 \mid p_1) = (2 \mid 3) = 3\).

На запрос «? 1 1 2 3» решение жюри выведет «=», поскольку \((p_1 \mid p_1) = (3\mid 3)= 3 = (p_2 \mid p_3) = (1 \mid 2)=3\).

На запрос «? 1 2 0 3» решение жюри выведет «>», поскольку \((p_1 \mid p_2) = (3 \mid 1) = 3 > (p_0 \mid p_3) = (0\mid 2)=2\).

Ответ \(i = 3\) и \(j = 2\) корректен: \((p_3 \oplus p_2) = (2 \oplus 1) = 3\), и это значение максимально среди всех пар \(p_i \oplus p_j\). Другим корректным ответом также является пара \(i=0\) и \(j=1\). Поскольку число запросов не превысило \(3n=12\), ответ считается верным.

Во втором наборе входных данных \(n = 2\), значит, \(p\) есть либо \([0, 1]\), либо \([1, 0]\). В любом случае \(p_0 \oplus p_1 = 1\) максимально возможно.

C. Арена покемонов

графы жадные алгоритмы кратчайшие пути реализация сортировки Структуры данных *2400

Вы находитесь на дуэльной арене. Вы также владеете \(n\) покемонами. Изначально на арене находится только \(1\)-й покемон.

Каждый покемон имеет \(m\) характеристик. Значение \(j\)-й характеристики у \(i\)-го покемона равно \(a_{i,j}\). Также у каждого покемона есть стоимость его вызова: цена \(i\)-го покемона равна \(c_i\).

Вы хотите добиться того, чтобы на арене находился \(n\)-й покемон. Для этого вы можете выполнять операции двух типов любое количество раз в любом порядке:

  • Выбрать три целых числа \(i\), \(j\), \(k\) (\(1 \le i \le n\), \(1 \le j \le m\), \(k > 0\)) и навсегда увеличить \(a_{i,j}\) на \(k\). Стоимость такой операции равна \(k\).
  • Выбрать два числа \(i\), \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) и вызвать \(i\)-го покемона, который бросит вызов текущему покемону на арене по \(j\)-й характеристике. При этом \(i\)-й покемон победит, если \(a_{i,j}\) не меньше, чем \(j\)-я характеристика текущего покемона на арене (иначе он проиграет). После дуэли на арене остаётся только её победитель. Стоимость такой операции равна \(c_i\).

Найдите наименьшую суммарную стоимость операций, необходимых для того, чтобы на арене оказался \(n\)-й покемон.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 4 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\), \(2 \leq n \cdot m \leq 4 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^9\)).

Далее, \(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) (\(1 \le a_{i,j} \le 10^9\)).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную суммарную стоимость операций, чтобы на арене оказался \(n\)-й покемон.

Примечание

В первом наборе входных данных массив значений характеристик \(1\)-го покемона (который изначально расположен на арене) есть \([2,9,9]\).

На первой операции можно выбрать \(i=3\), \(j=1\), \(k=1\) и увеличить \(a_{3,1}\) на \(1\) навсегда. Теперь массив значений характеристик \(3\)-го покемона станет равен \([2,2,1]\). Стоимость этой операции равна \(k = 1\).

На второй операции можно выбрать \(i=3\), \(j=1\) и вызвать \(3\)-го покемона, который сразится с текущим покемоном на арене по \(1\)-й характеристике. Поскольку \(a_{i,j}=a_{3,1}=2 \ge 2=a_{1,1}\), \(3\)-й покемон победит. Стоимость этой операции равна \(c_3 = 1\).

Таким образом, \(3\)-й покемон находится на арене, а суммарная стоимость операций равна \(2\). Можно показать, что меньше \(2\) ответ получить нельзя.

Во втором наборе входных данных массив значений характеристик \(1\)-го покемона есть \([9,9,9]\).

На первой операции можно выбрать \(i=2\), \(j=3\), \(k=2\) и увеличить \(a_{2,3}\) на \(2\) навсегда. Теперь массив значений характеристик \(2\)-го покемона есть \([6,1,9]\). Стоимость этой операции равна \(k = 2\).

На второй операции можно выбрать \(i=2\), \(j=3\) и вызвать \(2\)-го покемона, который сразится с текущим покемоном на арене по \(3\)-й характеристике. Поскольку \(a_{i,j}=a_{2,3}=9 \ge 9=a_{1,3}\), \(2\)-й покемон победит. Стоимость этой операции равна \(c_2 = 3\).

На третьей операции можно выбрать \(i=3\), \(j=2\) и вызвать \(3\)-го покемона, который сразится с текущим покемоном на арене по \(2\)-й характеристике. Поскольку \(a_{i,j}=a_{1,2}=2 \ge 1=a_{2,2}\), \(3\)-й покемон победит. Стоимость этой операции равна \(c_3 = 1\).

Таким образом, \(3\)-й покемон находится на арене, а суммарная стоимость операций равна \(6\). Можно показать, что меньше \(6\) ответ получить нельзя.

D. Битовый парадокс

Бинарный поиск битмаски жадные алгоритмы Структуры данных *3100

Даны два массива целых чисел \(a\) и \(b\) длины \(n\), а также фиксированное целое число \(v\).

Отрезок \([l, r]\) назовём хорошим, если \((b_l \mid b_{l+1} \mid \ldots \mid b_r) \ge v\), где \(|\) обозначает операцию побитового ИЛИ. Далее, красота хорошего отрезка определяется как \(\max(a_l, a_{l+1}, \ldots, a_r)\).

Вам даны \(q\) запросов двух типов:

  • «1 i x»: нужно выполнить присваивание \(b_i := x\);
  • «2 l r»: найдите минимальную красоту среди всех хороших отрезков \([l_0,r_0]\), удовлетворяющих условию \(l \le l_0 \le r_0 \le r\). Если подходящих красивых отрезков нет, выведите \(-1\).

Обработайте все запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(v\) (\(1 \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\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)).

Четвёртая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

В \(i\)-й из следующих \(q\) строк содержится описание очередного запроса. Каждая строка имеет один из двух типов:

  • «1 i x» (\(1 \le i \le n\), \(1 \le x \le 10^9)\);
  • «2 l r» (\(1 \le l \le r \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных, как и сумма значений \(q\) по всем наборам входных данных, не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на все запросы второго типа.

Примечание

В первом наборе входных данных \(a = [2, 1, 3]\), \(b = [2, 2, 3]\), \(v = 7\).

Первый запрос является запросом второго типа, в нём \(l = 1\) и \(r = 3\). Самый большой доступный отрезок есть \([1, 3]\), но даже на нём побитовое ИЛИ равно \(b_1 \mid b_2 \mid b_3 = 3\), что меньше \(v\). Значит, не существует ни одного хорошего отрезка.

Второй запрос просит заменить \(b_2\) на \(5\), так что массив \(b\) становится равен \([2, 5, 3]\).

Третий запрос является запросом второго типа, в нём \(l = 2\) и \(r = 3\). Есть три возможных отрезка: \([2, 2]\), \([3, 3]\) и \([2, 3]\). Однако, \(b_2 = 5 < v\), \(b_3 = 3 < v\). Так что только последний отрезок является хорошим: для него \(b_2 \mid b_3 = 7\). Значит, ответ равен \(\max(a_2, a_3) = 3\).

Четвёртый запрос является запросом второго типа, в нём \(l = 1\) и \(r = 3\). Есть три хороших отрезка: \([1, 2]\), \([2, 3]\) и \([1, 3]\). Их красоты равны \(2\), \(3\), \(3\) соответственно. Таким образом, ответ равен \(2\).

Во втором наборе входных данных \(a = [5, 1, 2, 4]\), \(b = [4, 2, 3, 3]\), \(v = 5\).

В первом запросе \(l = 1\) и \(r = 4\). Хорошими отрезками являются только следующие: \([1, 2]\), \([1, 3]\), \([1, 4]\). Их красоты равны \(5\), \(5\), \(5\) соответственно. Таким образом, ответ равен \(5\).

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\)-й символы, чтобы строка стала красивой.

Во втором наборе строка уже является красивой.

F. Рудольф и дисбаланс

Бинарный поиск жадные алгоритмы сортировки *1800

Рудольф подготовил набор из \(n\) задач со сложностями \(a_1 < a_2 < a_3 < \dots < a_n\). Он не совсем доволен балансом, поэтому хочет добавить не больше одной задачи, чтобы его исправить.

Для этого Рудольф придумал \(m\) моделей задач и \(k\) функций. Сложность \(i\)-й модели равна \(d_i\), а сложность \(j\)-й функции равна \(f_j\). Чтобы составить задачу, он выбирает значения \(i\) и \(j\) (\(1 \le i \le m\), \(1 \le j \le k\)) и, совмещая \(i\)-ю модель с \(j\)-й функцией, получает новую задачу сложности \(d_i + f_j\) (в массив \(a\) добавляется новый элемент).

Чтобы определить дисбаланс набора, Рудольф сортирует сложности задач по возрастанию и находит самое большое значение \(a_i - a_{i - 1}\) (\(i > 1\)).

Какого минимального значения дисбаланса может добиться Рудольф, добавив не больше одной задачи, составленной по описанным правилам?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le m, k \le 2 \cdot 10^5\)) — количество готовых задач, количество моделей и количество функций, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, a_3, \dots a_n\) (\(1 \le a_i \le 2 \cdot 10^9\), \(a_i < a_{i+1}\)) — сложности готовых задач.

Третья строка каждого набора содержит \(m\) целых чисел \(d_1, d_2, d_3, \dots d_m\) (\(1 \le d_i \le 10^9\)) — сложности моделей.

Четвёртая строка каждого набора содержит \(k\) целых чисел \(f_1, f_2, f_3, \dots f_k\) (\(1 \le f_i \le 10^9\)) — сложности функций.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальный дисбаланс, которого сможет добиться Рудольф.

C1. Торт на день рождения Бесси (простая версия)

геометрия жадные алгоритмы математика *1300

Это простая версия задачи. Единственное отличие между двумя версиями — ограничение на \(y\). В этой версии \(y = 0\). Вы можете делать взломы, только если обе версии задачи решены.

Бесси получила от своей лучшей подруги Элси праздничный торт в виде правильного многоугольника с \(n\) сторонами. Вершины торта пронумерованы от \(1\) до \(n\) по часовой стрелке. Вы с Бесси собираетесь выбрать некоторые вершины и сделать непересекающиеся разрезы по диагоналям торта так, чтобы концы разрезов входили в множество выбранных вершин.

Бесси хотела бы раздавать только те куски торта, которые являются треугольниками, чтобы всё было честно. Размеры кусков не имеют значения, и весь торт не обязательно должен быть разделен только на треугольники (в торте могут быть куски и других форм, но они не будут учитываться).

Бесси уже выбрала \(x\) вершин, которые могут быть использованы как концы разрезов. Она хочет, чтобы вы выбрали не более \(y\) других вершин так, чтобы количество треугольных кусков торта, которые она может раздать после разрезания, было максимальным.

Какое максимальное количество треугольных кусков торта может раздать Бесси?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(x\) и \(y\) (\(4 \leq n \leq 10^9\), \(2 \leq x \leq \min(n, 2 \cdot 10^5)\), \(y = 0\)) — количество сторон многоугольника, количество вершин, которые выбрала Бесси, и максимальное количество других вершин, которые вы можете выбрать.

Вторая строка состоит из \(x\) различных целых чисел от \(1\) до \(n\), представляющих собой вершины, которые выбрала Бесси.

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество непересекающихся треугольных кусков торта, которые она может раздать.

Примечание

В наборах входных данных \(1\), \(2\) и \(3\) можно получить соответственно \(2\), \(6\) и \(2\) непересекающихся треугольных куска торта. Возможные конструкции показаны на следующих рисунках:

Зеленые точки обозначают вершины, которые можно использовать, синие линии — диагонали, которые проводятся, а красные цифры — треугольники, которые подсчитываются.

C2. Торт на день рождения Бесси (сложная версия)

геометрия жадные алгоритмы математика *1700

Это сложная версия задачи. Единственное отличие между двумя версиями — ограничение на \(y\). В этой версии \(0 \leq y \leq n - x\). Вы можете делать взломы, только если обе версии задачи решены.

Бесси получила от своей лучшей подруги Элси праздничный торт в виде правильного многоугольника с \(n\) сторонами. Вершины торта пронумерованы от \(1\) до \(n\) по часовой стрелке. Вы с Бесси собираетесь выбрать некоторые вершины и сделать непересекающиеся разрезы по диагоналям торта так, чтобы концы разрезов входили в множество выбранных вершин.

Бесси хотела бы раздавать только те куски торта, которые являются треугольниками, чтобы всё было честно. Размеры кусков не имеют значения, и весь торт не обязательно должен быть разделен только на треугольники (в торте могут быть куски и других форм, но они не будут учитываться).

Бесси уже выбрала \(x\) вершин, которые могут быть использованы как концы разрезов. Она хочет, чтобы вы выбрали не более \(y\) других вершин так, чтобы количество треугольных кусков торта, которые она может раздать после разрезания, было максимальным.

Какое максимальное количество треугольных кусков торта может раздать Бесси?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(x\) и \(y\) (\(4 \leq n \leq 10^9\), \(2 \leq x \leq \min(n, 2 \cdot 10^5)\), \(0 \leq y \leq n - x\)) — количество сторон многоугольника, количество вершин, которые выбрала Бесси, и максимальное количество других вершин, которые вы можете выбрать.

Вторая строка состоит из \(x\) различных целых чисел от \(1\) до \(n\), представляющих собой вершины, которые выбрала Бесси.

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество непересекающихся треугольных кусков торта, которые она может раздать.

Примечание

В наборах входных данных \(1\), \(2\) и \(3\) можно получить \(6\), \(5\) и \(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\).

Ниже приведена иллюстрация третьего набора входных данных.

A. MEX игра - 1

жадные алгоритмы игры *1300

Алиса и Боб играют в очередную игру на массиве \(a\) длины \(n\). Алиса начинает с пустого массива \(c\). Оба игрока ходят по очереди, причем Алиса начинает первой.

В свой ход Алиса выбирает один элемент из \(a\), добавляет его в \(c\), а затем удаляет из \(a\).

В свой ход Боб выбирает один элемент из \(a\), а затем удаляет его из \(a\).

Игра заканчивается, когда массив \(a\) становится пустым. Счет игры определяется как MEX\(^\dagger\) элементов \(c\). Алиса хочет максимизировать счет игры, а Боб — минимизировать его. Найдите итоговый счет игры, если оба игрока играют оптимально.

\(^\dagger\) \(\operatorname{MEX}\) (minimum excludant) массива целых чисел определяется как наименьшее целое неотрицательное число, которое не встречается в массиве. Например:

  • 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 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных найдите счет игры, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных возможная игра со счетом \(2\) выглядит следующим образом:

  1. Алиса выбирает элемент \(1\). После этого хода \(a=[0,0,1]\) и \(c=[1]\).
  2. Боб выбирает элемент \(0\). После этого хода \(a=[0,1]\) и \(c=[1]\).
  3. Алиса выбирает элемент \(0\). После этого хода \(a=[1]\) и \(c=[1,0]\).
  4. Боб выбирает элемент \(1\). После этого хода \(a=[\,]\) и \(c=[1,0]\).

В конце массив \(c=[1,0]\), и его MEX равен \(2\). Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

C. Циркуль для дерева

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2300

Вам дано дерево с \(n\) вершинами, пронумерованными \(1, 2, \ldots, n\). Изначально все вершины окрашены в белый цвет.

Вы можете выполнить следующую двухэтапную операцию:

  1. Выбрать вершину \(v\) (\(1 \leq v \leq n\)) и расстояние \(d\) (\(0 \leq d \leq n-1\)).
  2. Для всех вершин \(u\) (\(1 \leq u \leq n\)) таких, что \(\text{dist}^\dagger(u,v)=d\), покрасить \(u\) в черный цвет.

Постройте последовательность операций для перекрашивания всех вершин дерева в черный цвет, используя минимально возможное количество операций. Можно показать, что это всегда можно сделать, используя не более \(n\) операций.

\(^\dagger\) \(\text{dist}(x, y)\) обозначает количество ребер на (единственном) простом пути между вершинами \(x\) и \(y\) на дереве.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \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\)) — индексы вершин, соединенных \(i\)-м ребром.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных сначала выведите одно целое число \(op\) \((1 \le op \le n)\) — минимальное количество операций, необходимых для перекрашивания всех вершин дерева в черный цвет.

Затем выведите \(op\) строк, каждая из которых содержит \(2\) целых числа. В \(i\)-й строке должны содержаться значения \(v\) и \(d\), выбранные для \(i\)-й операции (\(1 \le v \le n\), \(0 \le d \le n - 1\)).

Необходимо, чтобы в результате \(op\) операций все вершины были покрашены в черный цвет.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных существует только одна возможная операция, и ее выполнение дает правильный ответ.

Во втором наборе входных данных первая операция перекрашивает вершину \(2\) в черный цвет, а вторая операция перекрашивает вершину \(1\) в черный цвет. Можно показать, что за одну операцию невозможно перекрасить обе вершины в черный цвет, поэтому минимальное количество необходимых операций равно \(2\). Другим возможным решением является использование \(2\) операций: \((u, r) = (1, 0)\) и \((u, r) = (2, 0)\).

В третьем наборе входных данных первая операция перекрашивает вершины \(2\), \(3\) и \(4\) в черный цвет, а вторая операция перекрашивает вершину \(1\) в черный цвет. Опять же, можно показать, что за \(1\) операцию невозможно перекрасить все вершины в черный цвет, поэтому минимальное количество необходимых операций равно \(2\).

В четвертом наборе входных данных первая операция перекрашивает вершины \(4\), \(1\) и \(7\) в черный цвет, вторая операция перекрашивает вершины \(2\), \(5\) и \(6\) в черный цвет, а третья операция перекрашивает вершины \(3\) и \(7\) в черный цвет. Обратите внимание, что вершину \(7\) разрешено перекрашивать в черный цвет дважды.

Таким образом, каждая вершина была перекрашена хотя бы один раз, причем вершина \(7\) была перекрашена дважды. Можно показать, что невозможно перекрасить все вершины в черный цвет менее чем за \(3\) хода.

E1. MEX игра - 2 (простая версия)

Бинарный поиск жадные алгоритмы Перебор *2900

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(t\), \(m\) и сумму \(m\). Вы можете делать взломы, только если обе версии задачи решены.

Алиса и Боб играют в очередную игру на массиве \(a\) длины \(n\). Алиса начинает с пустого массива \(c\). Оба игрока ходят по очереди, причем Алиса начинает первой.

В свой ход Алиса выбирает один элемент из \(a\), добавляет его в \(c\), а затем удаляет из \(a\).

В свой ход Боб выбирает не более \(k\) элементов из \(a\), а затем удаляет их из \(a\).

Игра заканчивается, когда массив \(a\) становится пустым. Счет Алисы определяется как MEX\(^\dagger\) элементов \(c\). Алиса хочет максимизировать свой счет, а Боб — минимизировать его. Найдите итоговый счет Алисы, если оба игрока играют оптимально.

Массив будет дан в сжатом формате. Вместо того, чтобы давать элементы, присутствующие в массиве, мы будем давать их частоты. Формально, вам будет дано \(m\) — максимальный элемент массива, а затем \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_m\), где \(f_i\) представляет собой количество раз, которое \(i\) встречается в массиве \(a\).

\(^\dagger\) \(\operatorname{MEX}\) (minimum excludant) массива целых чисел определяется как наименьшее целое неотрицательное число, которое не встречается в массиве. Например:

  • 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 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(m\) и \(k\) (\(1 \le m \le 50, 1 \le k \le 10^9\)).

Вторая строка содержит \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_m\) (\(1 \le f_i \le 10^9\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных найдите счет Алисы, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных массив \(a\) равняется \([0, 0, 0, 0, 1, 1, 1, 1, 1]\). Возможная игра со счетом \(2\) выглядит следующим образом:

  1. Алиса выбирает элемент \(0\). После этого хода \(a = [0, 0, 0, 1, 1, 1, 1, 1]\) и \(c=[0]\).
  2. Боб выбирает для удаления \(3\) элемента \(0\), \(0\) и \(1\). После этого хода \(a = [0, 1, 1, 1, 1]\) и \(c=[0]\).
  3. Алиса выбирает элемент \(1\). После этого хода \(a = [0,1,1,1]\) и \(c=[0,1]\).
  4. Боб удаляет оставшиеся \(4\) элемента \(0\), \(1\), \(1\) и \(1\). После этого хода \(a=[\,]\) и \(c=[0,1]\).

В конце массив \(c=[0,1]\), его MEX равен \(2\). Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

Во втором наборе входных данных Алиса может выбрать \(0\) в свой первый ход, гарантируя, что ее счет будет не меньше \(1\). Боб может удалить все копии элемента \(1\) в свой первый ход, гарантируя тем самым, что счет Алисы не будет превосходить \(1\). Таким образом, счет Алисы равен \(1\), если оба игрока играют оптимально.

E2. MEX игра - 2 (сложная версия)

Бинарный поиск жадные алгоритмы *3300

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(t\), \(m\) и сумму \(m\). Вы можете делать взломы, только если обе версии задачи решены.

Алиса и Боб играют в очередную игру на массиве \(a\) длины \(n\). Алиса начинает с пустого массива \(c\). Оба игрока ходят по очереди, причем Алиса начинает первой.

В свой ход Алиса выбирает один элемент из \(a\), добавляет его в \(c\), а затем удаляет из \(a\).

В свой ход Боб выбирает не более \(k\) элементов из \(a\), а затем удаляет их из \(a\).

Игра заканчивается, когда массив \(a\) становится пустым. Счет Алисы определяется как MEX\(^\dagger\) элементов \(c\). Алиса хочет максимизировать свой счет, а Боб — минимизировать его. Найдите итоговый счет Алисы, если оба игрока играют оптимально.

Массив будет дан в сжатом формате. Вместо того, чтобы давать элементы, присутствующие в массиве, мы будем давать их частоты. Формально, вам будет дано \(m\) — максимальный элемент массива, а затем \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_{m}\), где \(f_i\) представляет собой количество раз, которое \(i\) встречается в массиве \(a\).

\(^\dagger\) \(\operatorname{MEX}\) (minimum excludant) массива целых чисел определяется как наименьшее целое неотрицательное число, которое не встречается в массиве. Например:

  • 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 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(m\) и \(k\) (\(1 \le m \le 2 \cdot 10^5, 1 \le k \le 10^9\)).

Вторая строка содержит \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_m\) (\(1 \le f_i \le 10^9\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных найдите счет Алисы, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных массив \(a\) равняется \([0, 0, 0, 0, 1, 1, 1, 1, 1]\). Возможная игра со счетом \(2\) выглядит следующим образом:

  1. Алиса выбирает элемент \(0\). После этого хода \(a = [0, 0, 0, 1, 1, 1, 1, 1]\) и \(c=[0]\).
  2. Боб выбирает для удаления \(3\) элемента \(0\), \(0\) и \(1\). После этого хода \(a = [0, 1, 1, 1, 1]\) и \(c=[0]\).
  3. Алиса выбирает элемент \(1\). После этого хода \(a = [0,1,1,1]\) и \(c=[0,1]\).
  4. Боб удаляет оставшиеся \(4\) элемента \(0\), \(1\), \(1\) и \(1\). После этого хода \(a=[\,]\) и \(c=[0,1]\).

В конце массив \(c=[0,1]\), его MEX равен \(2\). Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

Во втором наборе входных данных Алиса может выбрать \(0\) в свой первый ход, гарантируя, что ее счет будет не меньше \(1\). Боб может удалить все копии элемента \(1\) в свой первый ход, гарантируя тем самым, что счет Алисы не будет превосходить \(1\). Таким образом, счет Алисы равен \(1\), если оба игрока играют оптимально.

A. Разрушение мостов

графы жадные алгоритмы математика *800

Имеется \(n\) островов, пронумерованных \(1, 2, \ldots, n\). Изначально каждая пара островов соединена мостом. Таким образом, всего существует \(\frac{n (n - 1)}{2}\) мостов.

Эверул живет на острове \(1\) и с удовольствием посещает другие острова, используя мосты. Доминатор может уничтожить не более \(k\) мостов, чтобы минимизировать количество островов, на которые Эверул может попасть, пройдя по оставшимся (возможно, нескольким) мостам.

Найдите минимальное количество островов (включая остров \(1\)), которые Эверул может посетить, если Доминатор разрушит мосты оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(0 \le k \le \frac{n \cdot (n - 1)}{2}\)).

Выходные данные

Для каждого набора входных данных выведите минимальное количество островов, которые может посетить Эверул, если Доминатор разрушит мосты оптимально.

Примечание

В первом наборе входных данных, поскольку ни один мост не может быть разрушен, все острова будут доступны.

Во втором наборе входных данных вы можете уничтожить мост между островами \(1\) и \(2\). Эверул не сможет посетить остров \(2\), но сможет посетить остров \(1\). Таким образом, общее количество островов, которые может посетить Эверул, равняется \(1\).

В третьем наборе входных данных Эверул всегда имеет возможность добраться до всех островов, вне зависимости от действий Доминатора. Например, если Доминатор разрушит мост между островами \(1\) и \(2\), Эверул все равно может посетить остров \(2\), путешествуя по пути \(1 \to 3 \to 2\), так как мосты между \(1\) и \(3\), а также между \(3\) и \(2\) не разрушены.

В четвертом наборе входных данных можно уничтожить все мосты, так как \(k = \frac{n \cdot (n - 1)}{2}\). Эверул сможет посетить только \(1\) остров (остров \(1\)).

A. Разбиваем лагерь

жадные алгоритмы математика *800

Летом все участники олимпиадных кружков «Летово» собираются в поход. Руководители похода заранее решили рассчитать количество палаток, которое необходимо взять с собой. Все палатки, которые есть на складе, трёхместные (вмещают не более \(3\) человек).

Всего среди участников кружков есть \(a\) интровертов, \(b\) экстравертов и \(c\) универсалов.

  • Каждый интроверт хочет жить в палатке один. Таким образом, палатка с интровертом обязана содержать ровно одного человека — самого этого интроверта.
  • Каждый экстраверт хочет жить в палатке с ещё двумя людьми. Таким образом, палатка с экстравертом обязана содержать ровно трёх человек.
  • Каждого универсала устроит любой вариант: жить одному, вдвоём или втроём.

Скажите, какое минимальное количество палаток необходимо взять с собой, чтобы все участники смогли разместиться в соответствии со своими предпочтениями! Если же разместить участников так, чтобы выполнить все пожелания, невозможно, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Каждый набор описывается одной строкой, содержащей три целых числа \(a\), \(b\), \(c\) (\(0 \le a, b, c \le 10^9\)) — количество интровертов, экстравертов и универсалов соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество палаток или \(-1\), если разместить участников невозможно.

Примечание

В первом наборе входных данных \(1\) палатку нужно будет отдать интровертам, ещё в \(1\) палатке будут жить два экстраверта и один универсал, в последней будут жить два универсала. Итого \(3\) палатки.

Во втором наборе три экстраверта возьмут \(1\) палатку, также \(1\) палатку возьмет интроверт. Тогда останется один экстраверт и один универсал. Этот экстраверт никак не сможет поселиться с кем-то втроем.

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\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество монет, которое нужно потратить Кириллу.

E. Бинарный поиск

Бинарный поиск жадные алгоритмы Конструктив *1700

Антону стало скучно в походе, и он захотел что-нибудь порешать. Он спросил у Кирилла, нет ли у него какой-то новой задачи, и у Кирилла она естественно нашлась.

Дана перестановка \(p\) размера \(n\), а также число \(x\), которое необходимо найти. Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Вы решили, что вы крутой программист, поэтому будете использовать для поиска продвинутый алгоритм — бинарный поиск. Однако, вы забыли, что для бинарного поиска массив должен быть отсортирован.

Вы не отчаялись и решили все равно применить этот алгоритм, а чтобы получить правильный ответ, вы перед запуском алгоритма можете не более \(2\) раз выполнить следующую операцию: выбрать индексы \(i\), \(j\) (\(1\le i, j \le n\)) и поменять местами элементы на позициях \(i\) и \(j\).

После этого выполняется бинарный поиск. В начале алгоритма объявляются две переменные \(l = 1\) и \(r = n + 1\). Далее выполняется цикл:

  1. Если \(r - l = 1\), закончить цикл
  2. \(m = \lfloor \frac{r + l}{2} \rfloor\)
  3. Если \(p_m \le x\), присвоить \(l = m\), иначе \(r = m\).

Цель — до алгоритма переставить числа в перестановке так, чтобы после выполнения алгоритма \(p_l\) было равно \(x\). Можно показать, что \(2\) операции всегда достаточно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(x\) (\(1 \le x \le n \le 2\cdot 10^5\)) — длину перестановки и число, которое нужно найти.

Во второй строке через пробел вводится перестановка \(p\) (\(1 \le p_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке целое число \(k\) (\(0 \le k \le 2\)) — количество совершенных вами операций. В следующих \(k\) строках через пробел выведите по \(2\) целых числа \(i\), \(j\) (\(1 \le i, j \le n\)) означающих, что вы меняете местами элементы на позициях \(i\) и \(j\).

Обратите внимание, что вам не нужно минимизировать количество операций.

A. Медиана массива

жадные алгоритмы реализация сортировки *800

Вам дан массив \(a\) из \(n\) целых чисел.

Будем называть медианой массива \(q_1, q_2, \ldots, q_k\) число \(p_{\lceil \frac{k}{2} \rceil}\), где \(p\) — отсортированный по неубыванию массив \(q\). Например, медиана массива \([9, 5, 1, 2, 6]\) это \(5\), так как в отсортированном массиве \([1, 2, 5, 6, 9]\) число с индексом \(\lceil \frac{5}{2} \rceil = 3\) это \(5\), а медиана массива \([9, 2, 8, 3]\) это \(3\), так как в отсортированном массиве \([2, 3, 8, 9]\) число с индексом \(\lceil \frac{4}{2} \rceil = 2\) это \(3\).

За одно действие вам разрешается выбрать целое число \(i\) (\(1 \le i \le n\)) и увеличить \(a_i\) на \(1\).

Ваша задача найти минимальное количество действий, за которое можно увеличить медиану массива.

Обратите внимание, что в массиве \(a\) необязательно все числа различны.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — минимальное количество действий за которое можно увеличить медиану массива.

Примечание

В первом наборе входных данных можно применить одну операцию к первому числу и получить массив \([3, 2, 8]\), у этого массива медиана равна \(3\), так как это число с индексом \(\lceil \frac{3}{2} \rceil = 2\) в отсортированном по неубыванию массиве \([2, 3, 8]\). У изначального массива \([2, 2, 8]\) медиана равна \(2\), так как это число с индексом \(\lceil \frac{3}{2} \rceil = 2\) в отсортированном по неубыванию массиве \([2, 2, 8]\). Таким образом медиана увеличилась (\(3 > 2\)) всего за одно действие.

В четвертом наборе входных данных можно применить по одной операции к числам с индексами \(1, 2, 3\) и получить массив \([6, 6, 6, 4, 5]\), у этого массива медиана равна \(6\), так как это число с индексом \(\lceil \frac{5}{2} \rceil = 3\) в отсортированном по неубыванию массиве \([4, 5, 6, 6, 6]\). У изначального массива \([5, 5, 5, 4, 5]\) медиана равна \(5\), так как это число с индексом \(\lceil \frac{5}{2} \rceil = 2\) в отсортированном по неубыванию массиве \([4, 5, 5, 5, 5]\). Таким образом медиана увеличилась (\(6 > 5\)) за три действия. Можно показать, что это минимальное возможное количество действий.

В пятом наборе входных данных можно применить по одной операции к числам с индексами \(1, 3\) и получить массив \([3, 1, 3, 3, 1, 4]\), у этого массива медиана равна \(3\), так как это число с индексом \(\lceil \frac{6}{2} \rceil = 3\) в отсортированном по неубыванию массиве \([1, 1, 3, 3, 3, 4]\). У изначального массива \([2, 1, 2, 3, 1, 4]\) медиана равна \(2\), так как это число с индексом \(\lceil \frac{6}{2} \rceil = 3\) в отсортированном по неубыванию массиве \([1, 1, 2, 2, 3, 4]\). Таким образом медиана увеличилась (\(3 > 2\)) за два действия. Можно показать, что это минимальное возможное количество действий.

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\).

D. Подарок на день рождения

битмаски жадные алгоритмы Конструктив Перебор реализация *1900

Совсем скоро у Ярика день рождения, и Марк решил подарить ему массив \(a\) длины \(n\).

Марк знает, что Ярик очень любит битовые операции, а также у него есть любимое число \(x\), поэтому Марк хочет найти такое максимальное число \(k\), что можно выбрать такие пары чисел [\(l_1, r_1\)], [\(l_2, r_2\)], \(\ldots\) [\(l_k, r_k\)], что:

  • \(l_1 = 1\).
  • \(r_k = n\).
  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(r_i + 1 = l_{i + 1}\) для всех \(i\) от \(1\) до \(k - 1\).
  • \((a_{l_1} \oplus a_{l_1 + 1} \oplus \ldots \oplus a_{r_1}) | (a_{l_2} \oplus a_{l_2 + 1} \oplus \ldots \oplus a_{r_2}) | \ldots | (a_{l_k} \oplus a_{l_k + 1} \oplus \ldots \oplus a_{r_k}) \le x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, а \(|\) обозначает операцию побитового ИЛИ.

Если такого \(k\) не существует, то нужно вывести \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5, 0 \le x < 2^{30}\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — максимальное подходящее число \(k\), и \(-1\), если такого \(k\) не существует.

Примечание

В первом наборе входных данных можно взять \(k\) равным \(2\) и выбрать два отрезка [\(1, 1\)] и [\(2, 3\)], \((1) | (2 \oplus 3) = 1\). Можно показать, что \(2\) — максимальный возможный ответ.

Во втором наборе входных данных подходят отрезки [\(1, 1\)] и [\(2, 2\)], \((1) | (1) = 1\). Больше отрезков сделать нельзя.

В третьем наборе входных данных нельзя выбрать \(2\) отрезка, так как \((1) | (3) = 3 > 2\), значит оптимальный ответ это \(1\).

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]\).

Во втором примере нет способа получить отсортированный массив.

В третьем примере массив уже отсортирован.

E. Разделение на клики

графы жадные алгоритмы Конструктив Перебор реализация *2100

Даны два целых числа, \(n\) и \(k\). Рассмотрим граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором изначально нет ребер.

Вам нужно назначить каждой вершине число; пусть \(a_i\) — число, назначенное вершине \(i\). Все \(a_i\) должны быть различными целыми числами от \(1\) до \(n\).

После того как вы назначили числа для вершин, вы добавляете в граф ребра. Для пары вершин \((i, j)\) добавляется ребро между ними, если \(|i - j| + |a_i - a_j| \le k\).

Ваша цель — создать граф, который можно разбить на минимально возможное (для заданных значений \(n\) и \(k\)) количество клик. Каждая вершина графа должна принадлежать ровно одной клике. Напомним, что клика — это такое множество вершин, что каждая пара вершин в этом множестве соединена ребром.

Поскольку BledDest не особо подтянул свои навыки программирования, он не может решить задачу «дан граф, разбейте его на минимальное количество клик». Поэтому мы также просим вас вывести само разбиение.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 40\); \(1 \le k \le 2n\)).

Выходные данные

Для каждого набора входных данных выведите три строки:

  • первая строка должна содержать \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — значения, которые вы назначаете вершинам;
  • вторая строка должна содержать одно целое число \(q\) (\(1 \le q \le n\)) — количество клик, на которые вы разбиваете граф;
  • третья строка должна содержать \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le q\)) — разбиение графа на клики. Где две вершины \(u\) и \(v\) в одной клике, если \(c_u = c_v\).

Если существует несколько ответов, выведите любой из них.

B. Charming Meals

Бинарный поиск жадные алгоритмы Перебор сортировки *1500

The Czech cuisine features \(n\) appetizers and \(n\) main dishes. The \(i\)-th appetizer has spiciness \(a_i\), and the \(i\)-th main dish has spiciness \(b_i\).

A typical Czech meal consists of exactly one appetizer and one main dish. You want to pair up the \(n\) appetizers and \(n\) main dishes into \(n\) meals with each appetizer and each main dish being included in exactly one meal.

Your meals shall surprise the diners, so you want the spiciness levels of the two parts of the same meal to be as different as possible. The charm of a meal is the difference (in absolute value) between the spiciness of the appetizer and the spiciness of the main dish. So, a meal consisting of an appetizer with spiciness \(x\) and a main dish with spiciness \(y\) has charm equal to \(|x-y|\).

You want to maximize the minimum charm of the resulting \(n\) meals. What is the largest possible value of the minimum charm that you can achieve?

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 1\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains a single integer \(n\) (\(1 \leq n \leq 5\,000\)) —the number of appetizers and main dishes.

The second line of each test case contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{9}\)) — the spicinesses of the \(n\) appetizers.

The third line of each test case contains \(n\) integers \(b_1, b_2, \ldots, b_n\) (\(0 \leq b_i \leq 10^{9}\)) — the spicinesses of the \(n\) main dishes.

It is guaranteed that the sum of \(n^2\) over all test cases does not exceed \(25\cdot 10^6\).

Output

For each test case, print the largest possible value of the minimum charm you can achieve.

Note

In the first test case, no matter how you pair up the appetizers with the main dishes, each meal will have an appetizer with spiciness \(0\) and a main dish with spiciness \(1000000000\), so the charm of each meal will be \(1000000000\).

In the second test case, one optimal way to pair up appetizers and main dishes is: \((1, 5)\), \((2, 4)\), \((3, 1)\), \((4, 2)\), \((5, 3)\). The corresponding meals have charms: \(4\), \(2\), \(2\), \(2\), \(2\). The resulting minimum charm is \(2\).

In the third test case, one way to maximize the minimum charm is to pair up the three appetizers with spiciness \(0\) with the three main dishes with spiciness \(100\), and the three appetizers with spiciness \(100\) with the three main dishes with spiciness \(0\). Doing so, the charm of each meal will be exactly \(100\).

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.

F. Dating

Деревья жадные алгоритмы сортировки *2200

You are the developer of a dating app which ignores gender completely. The app has \(n\) users, indexed from \(1\) to \(n\). Each user's profile features a list of the activities they enjoy doing. There are \(m\) possible activities, indexed from \(1\) to \(m\).

A match between two users is good if they share at least one activity and, at the same time, both of them like at least one activity that the other user does not like.

Find a good match if it exists.

Input

The first line contains two integers \(n\) and \(m\) (\(2 \leq n \leq 200\,000\), \(1 \leq m \leq 10^6\)) — the number of users and the number of activities.

Each of the following \(n\) lines contains a number \(k_i\) (\(0 \leq k_i \leq m\)) — the number of activities that user \(i\) likes — followed by \(k_i\) distinct integers from \(1\) to \(m\) — the activities user \(i\) likes.

It is guaranteed that \(k_1+k_2+\cdots+k_n\) does not exceed \(10^6\).

Output

Print \(\texttt{YES}\) if a good match exists. Otherwise, print \(\texttt{NO}\).

If a good match exists, on the next line print two integers — the indexes of two users that make a match.

Note

In the first sample, users \(1\) and \(3\) form a match, because they share activity \(1\), and, furthermore, user \(3\) likes activity \(5\) (which user \(1\) does not like) and user \(1\) likes activity \(4\) (which user \(3\) does not like). Note that users \(1\) and \(2\), as well as users \(2\) and \(3\), do not form a match, as there is no activity that users \(1\) or \(3\) like, and user \(2\) doesn't like.

G. Scooter

графы жадные алгоритмы *2300

The Czech Technical University campus consists of \(n\) buildings, indexed from \(1\) to \(n\). In each building, there can be a math class scheduled, or a computer science class, or neither (but not both). Additionally, in each building, there is at most one professor, and each professor is either an expert in mathematics or in computer science.

As an intern at University Express Inc., your job is to quickly transport the professors to their classes. For this, you have been granted a brand new two-person scooter, able to accommodate yourself, plus at most one passenger.

Initially, you are the only person on the scooter. When you arrive at a building, you may drop off or pick up professors to/from that building. However, in order to improve the efficiency of your task, you are allowed to drive to each of the \(n\) buildings at most once, in the order of your choice (you can also decide where to start the itinerary).

After the end of your itinerary, in each building where a math class is scheduled, there must be a professor expert in math, and in each building where a computer science class is scheduled, there must be a professor expert in computer science.

Devise an itinerary that makes it possible to teach all classes.

Input

The first line contains an integer \(n\) (\(1\le n \le 2000\)) — the number of buildings in the campus.

The second line contains a string of \(c\) of length \(n\) consisting of the characters \(\texttt{-}\), \(\texttt{C}\), \(\texttt{M}\) — the \(i\)-th character denotes the subject of the class scheduled in the \(i\)-th building. \(\texttt{C}\) stands for computer science, \(\texttt{M}\) stands for mathematics, while \(\texttt{-}\) means that there is no class scheduled in the \(i\)-th building.

The third line contains a string \(p\) of length \(n\) consisting of the characters \(\texttt{-}\), \(\texttt{C}\), \(\texttt{M}\) — the \(i\)-th character denotes the expertise of the professor in the \(i\)-th building (if there is a professor). \(\texttt{C}\) stands for computer science, \(\texttt{M}\) stands for mathematics, while \(\texttt{-}\) means that there is no professor in the \(i\)-th building.

It is guaranteed that, for all tests given to your program, there exists a valid itinerary.

Output

In the first line print an integer \(l\) — the number of operations in your chosen itinerary.

The \(i\)-th (\(1 \leq i \leq l\)) of the next \(l\) lines must contain one of three commands:

  1. \(\texttt{DRIVE } x\) — go to the building with the number \(x\) (\(1 \leq x \leq n\));
  2. \(\texttt{PICKUP}\) — pick up the professor which was initially at the current building;
  3. \(\texttt{DROPOFF}\) — drop off the passenger professor at the current building.

In order for the itinerary to be valid, the following conditions must hold:

  1. No two \(\texttt{DRIVE}\) instructions should go to the same building;
  2. At most one \(\texttt{DROPOFF}\) and one \(\texttt{PICKUP}\) instruction in this order should be issued at each specific building;
  3. For all \(\texttt{PICKUP}\) instructions, there must be a professor initially at the building, as well as no one already riding along on the scooter;
  4. For all \(\texttt{DROPOFF}\) instructions, there must be a professor riding along at the time of the command;
  5. After the itinerary, in each building, if there is a class in that building, there must be a professor expert in the class' subject (either initially, or because they were dropped off there).

Note that, in particular, you cannot pick up a professor that you just dropped off for an itinerary to be valid.

Note

In the first sample, You start by driving to building number \(3\). You then pick up the mathematics professor. After dropping him off at building number \(2\), where a mathematics class is being held, you pick up the computer science professor from there, and drop her off at building number \(1\), finishing your itinerary.

H. Division Avoidance

жадные алгоритмы математика *3100

A newly discovered organism can be represented as a set of cells on an infinite grid. There is a coordinate system on the grid such that each cell has two integer coordinates \(x\) and \(y\). A cell with coordinates \(x=a\) and \(y=b\) will be denoted as \((a, b)\).

Initially, the organism consists of a single cell \((0, 0)\). Then zero or more divisions can happen. In one division, a cell \((a, b)\) is removed and replaced by two cells \((a+1, b)\) and \((a, b+1)\).

For example, after the first division, the organism always consists of two cells \((1, 0)\) and \((0, 1)\), and after the second division, it is either the three cells \((2, 0)\), \((1, 1)\) and \((0, 1)\), or the three cells \((1, 0)\), \((1, 1)\) and \((0, 2)\).

A division of a cell \((a, b)\) can only happen if the cells \((a+1, b)\) and \((a, b+1)\) are not yet part of the organism. For example, the cell \((1, 0)\) cannot divide if the organism currently consists of the three cells \((1, 0)\), \((1, 1)\) and \((0, 2)\), since the cell \((1, 1)\) that would be one of the results of this division is already part of the organism.

You are given a set of forbidden cells \({(c_i, d_i)}\). Is it possible for the organism to contain none of those cells after zero or more divisions?

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1 \le t \le 10\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains an integer \(n\) (\(1 \le n \le 10^6\)) — the number of forbidden cells.

The next \(n\) lines contain two integers each. The \(i\)-th of such lines contains \(c_i\) and \(d_i\) (\(0 \le c_i, d_i \le 10^9\)) — the coordinates of the \(i\)-th forbidden cell. It is guaranteed that all forbidden cells are distinct.

It is guaranteed that the sum of values of \(n\) over all test cases does not exceed \(10^6\).

Output

For each test case, print \(\texttt{YES}\) if it is possible for the organism to contain no forbidden cells after zero or more divisions. Otherwise, print \(\texttt{NO}\).

Note

In the first test case, dividing the following cells in the following order creates an organism without any forbidden cells: \((0, 0)\), \((1, 0)\), \((1, 1)\), \((0, 1)\), \((2, 1)\), \((2, 2)\), \((1, 2)\), \((1, 1)\). The following picture demonstrates how the organism changes during this process:

In the second test case, you can see that, surprisingly, any organism always has at least one cell in the \(0 \le x, y \le 3\) square, no matter how many divisions we do.

F. 0, 1, 2, Tree!

битмаски Деревья жадные алгоритмы Перебор реализация *1700

Найдите минимальную высоту корневого дерева\(^{\dagger}\) с \(a+b+c\) вершинами, которое удовлетворяет следующим условиям:

  • \(a\) вершин имеют ровно \(2\) потомка,
  • \(b\) вершин имеют ровно \(1\) потомка, и
  • \(c\) вершин имеют ровно \(0\) потомков (не имеют потомков).
Если такого дерева не существует, вы должны сообщить об этом.

Дерево выше с корнем в верхней вершине, и каждая вершина помечена числом потомков. Здесь \(a=2\), \(b=1\), \(c=3\), и высота равна \(2\).

\(^{\dagger}\) Корневое дерево — это связный граф без циклов, с особой вершиной, называемой корнем. В корневом дереве, среди любых двух вершин, соединенных ребром, одна вершина является родителем (ближе к корню), а другая — потомком.

Расстояние между двумя вершинами в дереве — количество ребер в кратчайшем пути между ними. Высота корневого дерева — это максимальное расстояние от вершины до корня.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(a\), \(b\), и \(c\) (\(0 \leq a, b, c \leq 10^5\); \(1 \leq a + b + c\)).

Сумма \(a + b + c\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если такое дерево не существует, выведите \(-1\). В противном случае выведите одно целое число — минимальную высоту дерева, удовлетворяющего описанным условиям.

Примечание

Первый набор входных данных изображен в условии. Можно доказать, что высота не может быть меньше \(2\).

Во втором наборе входных данных, можно сформировать дерево с одной вершиной и без ребер. Оно имеет высоту \(0\), что является оптимальным.

В третьем наборе входных данных, можно сформировать дерево с двумя вершинами, соединенными одним ребром. Оно имеет высоту \(1\), что является оптимальным.

A. Двойное включение

жадные алгоритмы Конструктив математика *900

В ряд выстроены \(n\) ламп с номерами от \(1\) до \(n\), изначально они выключены. Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать две несоседние\({}^\dagger\) лампы, которые в данный момент выключены, и включить их.

Определите, можете ли вы достичь конфигурации \(s\), где \(s_i = 1\) означает, что \(i\)-я лампа включена, а в противном случае \(s_i = 0\).

\({}^\dagger\) Соседними считаются только лампы \(i\) и \(i + 1\) для всех \(1 \le i < n\). Обратите внимание, что лампы \(n\) и \(1\) не являются соседними при \(n \ne 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 50\)) — количество ламп.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — желаемую конечную конфигурацию.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если возможно достичь конфигурацию \(s\) путем применения данной операции любое количество раз. В противном случае выведите «NO».

Примечание

В первом наборе входных данных последовательность операций могла бы быть следующей (обратите внимание, что изначально все элементы \(s\) равны нулю): \(\mathtt{0000000000} \to \mathtt{\color{red}{1}0000000\color{red}{1}0} \to \mathtt{1\color{red}{1}00000\color{red}{1}10} \to \mathtt{110\color{red}{1}0\color{red}{1}0110}\).

В третьем наборе входных данных не нужно выполнять никаких операций.

В четвертом наборе входных данных невозможно выполнить никакую операцию, но нам нужно, чтобы горела первая лампа. Поэтому достичь желаемой конфигурации невозможно.

B. Битвы коров

Бинарный поиск жадные алгоритмы Структуры данных *1200

В турнире по программированию участвуют \(n\) коров. Корова \(i\) имеет рейтинг Cowdeforces, равный \(a_i\) (все значения разные), и изначально находится на позиции \(i\). Турнир состоит из \(n-1\) матча, проводимых следующим образом:

  • Первый матч проводится между коровой на позиции \(1\) и коровой на позиции \(2\).
  • В дальнейшем матч \(i\) проводится между коровой на позиции \(i+1\) и победителем матча \(i-1\).
  • В каждом матче корова с более высоким рейтингом Cowdeforces побеждает и переходит к следующему матчу.

Вы являетесь владельцем коровы \(k\). Для вас не важна победа в турнире, скорее, вы хотите, чтобы ваша корова выиграла как можно больше матчей. Будучи знакомым организаторов турнира, вы можете попросить их поменять место вашей коровы с другой коровой только один раз, или же вы можете ничего не делать.

Найдите максимальное количество побед, которое может одержать ваша корова.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5, 1 \le k \le n\)) — количество коров и индекс вашей коровы.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — рейтинги коров на Cowdeforces. Гарантируется, что \(a_i\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество побед коровы \(k\), которого можно достичь, если сделать оптимальный обмен (или ничего не делать).

Примечание

При первом наборе входных данных оптимально ничего не делать. Пусть \(a'\) — это рейтинги на Cowdeforces коров в изначальном порядке (при этом рейтинг вашей коровы выделен жирным шрифтом), тогда

  • Изначально, \(a' = [\mathbf{12}, 10, 14, 11, 8, 3]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(10\) и выигрывает. \(a' = [\mathbf{12}, 14, 11, 8, 3]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(14\) и проигрывает.
В общей сложности ваша корова выигрывает в \(1\) матче.

Во втором наборе входных данных оптимально поменять вашу корову с коровой на позиции \(3\). Тогда пусть \(a'\) — это рейтинги на Cowdeforces коров в порядке после обмена позициями.

  • Изначально, \(a' = [7, 2, \mathbf{12}, 10, 727, 13]\).
  • Корова с рейтингом Cowdeforces \(7\) играет против коровы с рейтингом Cowdeforces \(2\) и выигрывает. \(a' = [7, \mathbf{12}, 10, 727, 13]\).
  • Корова с рейтингом Cowdeforces \(7\) играет против вашей коровы, и ваша корова побеждает. \(a' = [\mathbf{12}, 10, 727, 13]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(10\) и выигрывает. \(a' = [\mathbf{12}, 727, 13]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(727\) и проигрывает.
В общей сложности ваша корова выиграет \(2\) матча.

C. Запас билетов

жадные алгоритмы математика сортировки *1400

Будучи генеральным директором стартапа, вы хотите наградить каждого из \(k\) своих сотрудников билетом на предстоящий концерт. Билеты будут продаваться в течение \(n\) дней, и с помощью машины времени вы предсказали, что цена одного билета в день \(i\) будет равна \(a_i\). Однако, чтобы предотвратить скупку билетов, организаторы концерта приняли следующие меры:

  • Человек может купить не более \(m\) билетов в день.
  • Если человек покупает \(x\) билетов в день \(i\), то во все последующие дни (т.е. начиная с дня \(i+1\) и далее) цена за билет будет увеличена на \(x\).

Например, если \(a = [1, 3, 8, 4, 5]\), и вы покупаете \(2\) билета в день \(1\), они будут стоить \(2\) вместе, а цены, начиная с дня \(2\), станут \([5, 10, 6, 7]\). Если в день \(2\) вы купите еще \(3\) билета, они будут вместе стоить еще \(15\), а цены, начиная с дня \(3\), станут \([13, 9, 10]\).

Найдите минимальную сумму, необходимую для покупки \(k\) билетов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 3 \cdot 10^5, 1 \le m \le 10^9, 1 \le k \le \min(nm, 10^9)\)) — количество дней продажи, максимальное количество билетов, которое можно купить в каждый день, и количество билетов, которые нужно купить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — цена одного билета на каждый из предстоящих \(n\) дней.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальную сумму денег, необходимую для покупки ровно \(k\) билетов.

Примечание

В первом наборе входных данных один из оптимальных способов покупки \(3\) билетов выглядит следующим образом:

  • Купить \(0\) билетов в первый день. Цены на билеты в остальные дни равны \([6, 4, 2]\).
  • Купить \(0\) билетов во второй день. Цены на билеты в оставшиеся дни составляют \([4, 2]\).
  • Купить \(1\) билет в третий день по цене \(4\). Цена за билет в оставшийся день составляет \([3]\).
  • Купить \(2\) билета в четвертый день, потратив \(6\).

Во втором наборе входных данных есть только один способ купить \(8\) билетов:

  • Купить \(2\) билета в первый день, потратив \(16\). Цены на билеты в остальные дни равны \([8, 6, 4]\).
  • Купить \(2\) билета во второй день, потратив \(16\). Цены на билеты в оставшиеся дни составляют \([8, 6]\).
  • Купить \(2\) билета в третий день, потратив \(16\). Цена за билет в оставшийся день составляет \([8]\).
  • Купить \(2\) билета в четвертый день, потратив \(16\).

D. Покупка драгоценностей

жадные алгоритмы Конструктив математика *2000

У Алисы есть \(n\) монет, и она хочет сделать покупки в ювелирном магазине Боба. Хотя Боб еще не открыл магазин, он хочет быть уверен, что Алиса сегодня купит ровно \(k\) драгоценностей. Для этого Боб может построить не более \(60\) прилавков (каждый из которых содержит неограниченное количество драгоценностей) и установить цену за драгоценность для каждого прилавка как целое число монет от \(1\) до \(10^{18}\).

К счастью, Боб знает, что Алиса покупает жадно: она подойдет к прилавку \(1\), купит наибольшее возможное количество драгоценностей, затем перейдет к прилавку \(2\), купит наибольшее возможное количество драгоценностей, и так до последнего прилавка. Зная это, Боб может выбрать количество прилавков, а также установить цену для каждого прилавка так, чтобы Алиса купила ровно \(k\) драгоценностей. Помогите Бобу решить эту задачу или определите, что это невозможно.

Обратите внимание, не обязательно, чтобы Алиса потратила все монеты.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит два целых положительных числа \(n\) и \(k\) (\(1 \le n, k \le 10^{18}\)) — количество монет у Алисы и количество драгоценностей, которое Боб хочет, чтобы Алиса купила.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если Боб может построить не более \(60\) прилавков и установить цены в них так, чтобы Алиса купила ровно \(k\) драгоценностей, или «NO», если это невозможно.

Если ответ «YES», во второй строке выведите целое число \(s\) (\(1 \le s \le 60\)) — количество прилавков, которое должен построить Боб. В третьей строке выведите \(s\) целых положительных чисел \(p_1, p_2, \ldots, p_s\) (\(1 \le p_i \le 10^{18})\), которые представляют собой подходящий набор цен \(p\), где \(p_i\) — цена за драгоценный камень на прилавке \(i\). Если таких \(p\) несколько, выведите любое из них.

Примечание

В первом наборе входных данных, на первом прилавке Алиса покупает \(3\) драгоценности и остается с \(1\) монетой. Этого недостаточно, чтобы купить драгоценности на любом из оставшихся прилавков, поэтому в итоге Алиса купит ровно \(3\) драгоценности.

В третьем наборе входных данных,

  • На первом прилавке Алиса покупает \(1\) драгоценность и остается с \(127\) монетами.
  • На втором прилавке Алиса покупает \(1\) драгоценность и остается с \(63\) монетами.
  • На третьем прилавке Алиса покупает \(1\) драгоценность и остается с \(31\) монетой.
  • На четвертом прилавке Алиса покупает \(1\) драгоценность и остается с \(15\) монетами.
  • На пятом прилавке Алиса покупает \(1\) драгоценность и остается с \(7\) монетами.
  • На шестом прилавке Алиса покупает \(1\) драгоценность и остается с \(3\) монетами.
  • На седьмом прилавке Алиса покупает \(1\) драгоценность и остается с \(1\) монетой.
  • На восьмом прилавке Алиса покупает \(1\) драгоценность и остается с \(0\) монетами.
Таким образом, всего Алиса купит ровно \(8\) драгоценностей.

E. Без палиндромов

жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация Строки хэши *2000

Вам дана строка \(s\), состоящая из строчных латинских букв. Вам нужно разбить\(^\dagger\) эту строку на некоторое количество подстрок так, чтобы каждая подстрока не была палиндромом\(^\ddagger\).

\(^\dagger\) Разбиение строки \(s\) — это упорядоченная последовательность некоторых \(k\) строк \(t_1, t_2, \ldots, t_k\), таких, что \(t_1 + t_2 + \ldots + t_k = s\), где \(+\) обозначает операцию конкатенации.

\(^\ddagger\) Строка \(s\) называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, \(\mathtt{racecar}\), \(\mathtt{abccba}\) и \(\mathtt{a}\) являются палиндромами, а \(\mathtt{ab}\), \(\mathtt{dokibird}\) и \(\mathtt{kurosanji}\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит строку \(s\), состоящую из строчных латинских букв (\(1 \le |s| \le 10^6\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует разбиение \(s\), части которого не являются палиндромами, или «NO», если такого разбиения не существует.

Если ответ «YES», то во второй строке выведите целое число \(k\) — количество частей, на которое нужно разбить \(s\), чтобы каждая часть не была палиндромом. В третьей строке выведите \(k\) строк \(t_1, t_2, \ldots, t_k\), представляющих такое разбиение. Если таких разбиений несколько, выведите любое из них.

Примечание

В первом наборе входных данных, поскольку \(\mathtt{sinktheyacht}\) уже не является палиндромом, разбиение \([\mathtt{sinktheyacht}]\) является допустимым.

Во втором наборе входных данных, поскольку любая подстрока строки \(s\) является палиндромом, не существует допустимых разбиений.

В третьем наборе входных данных еще одно допустимое разбиение — \([\mathtt{uw},\mathtt{uo}, \mathtt{wou}, \mathtt{wu}]\).

F. Инверсии композиции

жадные алгоритмы Конструктив Структуры данных *2500

Вам дана перестановка \(p\) длины \(n\), а также целое неотрицательное число \(k\). Вам нужно построить перестановку \(q\) длины \(n\) такую, что \(\operatorname{inv}(q) + \operatorname{inv}(q \cdot p) = k {}^\dagger {}^\ddagger\), или определить, что это сделать невозможно.

\({}^\dagger\) Для двух перестановок \(p\) и \(q\) одинаковой длины \(n\) перестановка \(w = q \cdot p\) такова, что \(w_i = q_{p_i}\) для всех \(1 \le i \le n\).

\({}^\ddagger\) Для перестановки \(p\) длины \(n\) функция \(\operatorname{inv}(p)\) возвращает количество инверсий \(p\), то есть количество пар индексов \(1 \le i < j \le n\) таких, что \(p_i > p_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5, 0 \le k \le n(n - 1)\)) — длину \(p\) и требуемое количество инверсий.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), \(p_i\) попарно различны) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует перестановка \(q\), удовлетворяющая заданному условию, или «NO», если такой перестановки не существует.

Если ответ «YES», то во второй строке выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\), которые представляют собой удовлетворяющую условию перестановку \(q\). Если таких \(q\) несколько, выведите любую из них.

Примечание

В первом наборе входных данных имеем \(q \cdot p = [2, 1, 3]\), \(\operatorname{inv}(q) = 3\), и \(\operatorname{inv}(q \cdot p) = 1\).

В четвертом наборе входных данных имеем \(q \cdot p = [9, 1, 8, 5, 7, 6, 4, 3, 2]\), \(\operatorname{inv}(q) = 24\), и \(\operatorname{inv}(q \cdot p) = 27\).

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\).

I. Выращивание деревьев

Бинарный поиск графы жадные алгоритмы Конструктив Потоки *3200

Вам дан неориентированный связный простой граф с \(n\) вершинами и \(m\) ребрами, где ребро \(i\) соединяет вершины \(u_i\) и \(v_i\). С каждым ребром связаны два положительных параметра \(a_i\) и \(b_i\). Кроме того, вам дано целое число \(k\).

Неотрицательный массив \(x\) длины \(m\) называется генератором \(k\)-остовного-дерева, если он удовлетворяет следующим условиям:

  • Рассмотрим неориентированный мультиграф с \(n\) вершинами, в котором ребро \(i\) клонировано \(x_i\) раз (т.е. существует \(x_i\) ребер, соединяющих \(u_i\) и \(v_i\)). Можно разбить ребра этого графа на \(k\) остовных деревьев, где каждое ребро принадлежит ровно одному остовному дереву\(^\dagger\).

Стоимость такого массива \(x\) определяется как \(\sum_{i = 1}^m a_i x_i^2 + b_i x_i\). Найдите минимальную стоимость генератора \(k\)-остовного-дерева.

\(^\dagger\) Остовное дерево (мульти)графа — это подмножество ребер графа, которые образуют дерево, соединяющее все вершины графа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50, n - 1 \le m \le \min(50, \frac{n(n - 1)}{2}), 1 \le k \le 10^7\)) — количество вершин в графе, количество ребер в графе и параметр для генератора \(k\)-остовного-дерева.

Каждая из следующих \(m\) строк каждого набора входных данных содержит четыре целых числа \(u_i\), \(v_i\), \(a_i\) и \(b_i\) (\(1 \le u_i, v_i \le n, u_i \neq v_i, 1 \le a_i, b_i \le 1000\)) — конечные точки ребра \(i\) и два его параметра. Гарантируется, что граф прост и связен.

Гарантируется, что сумма \(n^2\) и сумма \(m^2\) по всем наборам входных данных не превосходит \(2500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальную стоимость генератора \(k\)-остовного-дерева.

Примечание

В первом наборе входных данных допустимым генератором \(1\)-остовного-дерева является \(x = [1, 1, 1, 1, 0]\), как показано на следующем рисунке. Стоимость этого генератора равна \((1^2 \cdot 5 + 1 \cdot 5) + (1^2 \cdot 5 + 1 \cdot 7) + (1^2 \cdot 6 + 1 \cdot 2) + (1^2 \cdot 3 + 1 \cdot 5) + (0^2 \cdot 4 + 0 \cdot 9) = 38\). Можно доказать, что ни один другой генератор не имеет меньшей стоимости.

Разбиение \(1\)-остовного-дерева \(x = [1, 1, 1, 1, 0]\)

Во втором наборе входных данных допустимым генератором \(3\)-остовного-дерева является \(x = [2, 3, 2, 2, 3]\), как показано на следующем рисунке. Стоимость этого генератора равна \((2^2 \cdot 5 + 2 \cdot 5) + (3^2 \cdot 5 + 3 \cdot 7) + (2^2 \cdot 6 + 2 \cdot 2) + (2^2 \cdot 3 + 2 \cdot 5) + (3^2 \cdot 4 + 3 \cdot 9) = 191\). Можно доказать, что ни один другой генератор не имеет меньшей стоимости.

Разбиение \(3\)-остовного-дерева \(x = [2, 3, 2, 2, 3]\)

A. Покраска ленты

жадные алгоритмы Конструктив математика *900

Алиса и Боб купили ленту, состоящую из \(n\) клеток. Теперь им нужно её покрасить.

Сначала Алиса покрасит каждую клетку ленты в один из \(m\) цветов. Для каждой клетки она может выбрать цвет произвольным образом.

Затем Боб выберет не более \(k\) клеток ленты и перекрасит их в один и тот же цвет (он выбирает затронутые клетки и цвет произвольным образом).

Боб хотел бы, чтобы все клетки имели одинаковый цвет. Однако Алиса считает, что это слишком скучно, поэтому она хочет покрасить ленту так, чтобы Боб не смог сделать все клетки одного цвета.

Возможно ли покрасить ленту таким образом?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей три целых числа \(n\), \(m\) и \(k\) (\(1 \le m, k \le n \le 50\)) — количество клеток, количество цветов и количество клеток, которые Боб может перекрасить, соответственно.

Выходные данные

Для каждого набора входных данных выведите YES, если Алиса может покрасить ленту так, чтобы Боб не смог добиться того, чтобы все клетки имели одинаковый цвет. Иначе выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, Yes, yes, yEs будут распознаны как положительный ответ.

Примечание

В первом примере лента состоит из \(1\) клетки. Таким образом, все ее клетки всегда будут иметь одинаковый цвет.

Во втором примере есть только \(1\) цвет.

В третьем примере Алиса может покрасить ленту следующим образом: \([1, 2, 1, 2, 1]\). Невозможно изменить цвет не более чем \(1\) клетки так, чтобы все клетки имели одинаковый цвет.

В четвертом примере, как бы Алиса ни покрасила ленту, Боб всегда сможет перекрасить \(2\) клетки так, чтобы все клетки имели одинаковый цвет.

В пятом примере Алиса может покрасить ленту следующим образом: \([1, 2, 3, 4, 5]\). Невозможно изменить цвет не более чем \(3\) клеток так, чтобы все клетки имели одинаковый цвет.

C. Длинное умножение

жадные алгоритмы математика теория чисел *1200

Вам даны два целых числа \(x\) и \(y\) одинаковой длины, состоящие из цифр от \(1\) до \(9\).

Вы можете выполнять следующую операцию любое количество раз (возможно, ни разу): менять местами \(i\)-ю цифру в \(x\) и \(i\)-ю цифру в \(y\).

Например, если \(x=73\) и \(y=31\), вы можете поменять местами \(2\)-е цифры и получить \(x=71\) и \(y=33\).

Ваша задача — максимизировать произведение \(x\) и \(y\), используя вышеописанную операцию. Если есть несколько ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(x\) (\(1 \le x < 10^{100}\)).

Вторая строка каждого набора входных данных содержит одно целое число \(y\) (\(1 \le y < 10^{100}\)).

Дополнительное ограничение на входные данные: целые числа \(x\) и \(y\) состоят только из цифр от \(1\) до \(9\).

Выходные данные

Для каждого набора входных данных выведите две строки — первая строка должна содержать число \(x\) после применения операций; аналогично, вторая строка должна содержать число \(y\) после применения операций. Если ответов несколько, выведите любой из них.

E. Цепная реакция

Бинарный поиск жадные алгоритмы математика реализация снм Структуры данных теория чисел *2200

В ряд стоят \(n\) монстров, у \(i\)-го монстра \(a_i\) очков здоровья.

В каждую секунду вы можете выбрать одного живого монстра и запустить в него цепную молнию. Молния наносит ему \(k\) урона, а также распространяется налево (в сторону уменьшения \(i\)) и направо (в сторону увеличения \(i\)) по живым монстрам, нанося каждому по \(k\) урона. Когда молния доходит до мертвого монстра или до начала/конца ряда, она останавливается. Монстр считается живым, если количество его очков здоровья строго больше \(0\).

Например, рассмотрим следующий сценарий: три монстра с уровнями здоровья \([5, 2, 7]\), \(k = 3\). Можно убить всех монстров за \(4\) секунды:

  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([2, -1, 4]\);
  • запустить цепную молнию в \(1\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 4]\);
  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 1]\);
  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, -2]\).

Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) посчитайте минимальное количество секунд, за которое можно убить всех монстров.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество монстров.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — количество очков здоровья у \(i\)-го монстра.

Выходные данные

Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) выведите минимальное количество секунд, за которое можно убить всех монстров.

C. Обитатель морских глубин

жадные алгоритмы математика реализация *1300

На исследование глубин океана отправились \(n\) кораблей, корабли пронумерованы от \(1\) до \(n\) и следуют друг за другом в порядке возрастания номеров, \(i\)-й корабль имеет прочность \(a_i\).

На корабли напал Кракен, он атакует корабли \(k\) раз в определённом порядке. Сначала он атакует первый из кораблей, потом последний, потом снова первый и так далее.

Каждая атака Кракена снижает прочность корабля на \(1\). Когда прочность корабля опускается до \(0\), он тонет и больше не подвергается атакам (таким образом корабль перестаёт быть первым или последним, а Кракен атакует только те корабли, которые ещё не утонули). Если все корабли оказались потоплены, Кракену нечего атаковать, и он уплывает.

Например, если \(n=4\), \(k=5\) и \(a=[1, 2, 4, 3]\), то произойдёт следующее:

  1. Кракен атакует первый корабль, его прочность стала нулевой и теперь \(a = [2, 4, 3]\);
  2. Кракен атакует последний корабль, теперь \(a = [2, 4, 2]\);
  3. Кракен атакует первый корабль, теперь \(a = [1, 4, 2]\);
  4. Кракен атакует последний корабль, теперь \(a = [1, 4, 1]\);
  5. Кракен атакует первый корабль, его прочность стала нулевой и теперь \(a = [4, 1]\).

Сколько кораблей оказались потоплены после нападения Кракена?

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 10^{15}\)) — количество кораблей, а так же сколько раз Кракен будет атаковать корабли.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — прочности кораблей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите количество потопленных Кракеном кораблей.

E. Длинное инвертирование

жадные алгоритмы Перебор реализация сортировки *1700

Дана бинарная строка \(s\) из \(n\) символов. Бинарной строкой называется строка, состоящая только из символов '1' и '0'.

Вы можете выбрать целое число \(k\) (\(1 \le k \le n\)), после чего применить любое число раз следующую операцию: выбрать \(k\) подряд идущих символов строки и инвертировать их, то есть заменить все '0' на '1' и наоборот.

С помощью операций нужно сделать все символы в строке равными '1'.

Например, если \(n=5\), \(s=00100\), то можно выбрать \(k=3\) и действовать следующим образом:

  • выбрать отрезок от \(1\)-го до \(3\)-го символа и получить \(s=\color{blue}{110}00\);
  • выбрать отрезок от \(3\)-го до \(5\)-го символа и получить \(s=11\color{blue}{111}\);

Найдите максимальное значение \(k\), при котором можно с помощью операций сделать все символы строки равными '1'. Обратите внимание, что количество операций, которые для этого нужно совершить, не имеет значения.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длины \(n\), состоящую из символов '1' и '0'.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных в тесте не превосходит \(25 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите максимальное целое число \(k\) (\(1 \le k \le n\)), при котором возможно с помощью описанных операций получить строку \(s\), состоящую только из символов '1'.

F. Нечестная игра

дп жадные алгоритмы игры математика расписания *1800

Алиса и Боб собрались вечером, чтобы поиграть в увлекательную игру на последовательности из \(n\) натуральных чисел, не превосходящих \(4\). Правила игры слишком сложны для их описания, поэтому просто опишем критерий победы — Алиса побеждает, если исключающее ИЛИ всех чисел последовательности отлично от нуля, в противном случае же побеждает Боб.

Ребята позвали Еву, чтобы она выступала в качестве судьи. Изначально Алиса и Боб играют с \(n\) числами. После одной игры Ева удаляет одно из чисел из последовательности, затем Алиса и Боб играют с \(n-1\) числами, Ева снова удаляет одно из чисел, после чего Алиса и Боб играют с \(n - 2\) числами. Так продолжается до тех пор, пока последовательность чисел не пуста.

Еве кажется, что в такой игре Алиса почти всегда побеждает, поэтому она хочет, чтобы Боб выиграл как можно больше раз. Определите, какое максимальное количество раз Боб сможет победить Алису, если Ева будет удалять числа оптимально.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит четыре целых числа \(p_i\) (\(0 \le p_i \le 200\)) — количество единиц, двоек, троек и четвёрок в последовательности в начале игры.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество раз, когда выиграет Боб, если Ева будет удалять числа оптимально.

Примечание

В первом примере Боб выигрывает, когда Ева ещё не убрала ни одного числа.

Во втором примере Боб выигрывает, если Ева уберёт одну единицу и одну тройку.

A. Игра Нины

Бинарный поиск жадные алгоритмы игры Перебор Структуры данных *800

Нина придумала новую игру, основанную на возрастающей последовательности целых чисел \(a_1, a_2, \ldots, a_k\).

В этой игре, изначально \(n\) игроков встают в ряд. В каждом раунде происходит следующее:

  • Нина находит \(a_1\)-го, \(a_2\)-го, \(\ldots\), \(a_k\)-го игроков в ряду. Они покидают игру одновременно. Если игру должен покинуть \(i\)-й игрок в ряду, но в ряду меньше \(i\) игроков, этот игрок пропускается.

Как только в некотором раунде никто не покинул игру, все игроки, находящиеся в игре в данный момент, объявляются победителями.

Например, рассмотрим игру с \(a=[3, 5]\) и \(n=5\) игроками. Пусть игроков зовут игрок A, игрок B, \(\ldots\), игрок E в том порядке, в котором они выстроились изначально. Тогда,

  • Перед первым раундом, порядок игроков в ряду ABCDE. Нина находит \(3\)-го и \(5\)-го игроков в ряду. Это игроки C и E. Они покидают игру в первом раунде.
  • Теперь порядок игроков ABD. Нина находит \(3\)-го и \(5\)-го игроков в ряду. \(3\)-й игрок это игрок D и в ряду нет \(5\)-го игрока. Поэтому только игрок D покидает игру во втором раунде.
  • В третьем раунде никто не покидает игру, поэтому после этого раунда игра заканчивается.
  • Игроки A и B объявляются победителями.

Нина пока не решила, сколько игроков будут принимать участие в игре. Она даст вам \(q\) целых чисел \(n_1, n_2, \ldots, n_q\), а вы должны ответить на следующий вопрос для всех \(1 \le i \le q\) независимо:

  • Сколько игроков будут объявлены победителями, если изначально в игре будут принимать участие \(n_i\) игроков?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 250\)) — количество наборов входных данных.

В первой строке даны два целых числа \(k\) и \(q\) (\(1 \le k, q \le 100\)) — длина последовательности \(a\) и количество значений \(n_i\), для которых вы должны решить задачу.

Во второй строке даны \(k\) целых чисел \(a_1,a_2,\ldots,a_k\) (\(1\leq a_1<a_2<\ldots<a_k\leq 100\)) — последовательность \(a\).

В третьей строке даны \(q\) целых чисел \(n_1,n_2,\ldots,n_q\) (\(1\leq n_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел: \(i\)-е (\(1\le i \le q\)) из них должно быть равно количеству игроков, которые будут объявлены победителями, если изначально в игре будет принимать участие \(n_i\) игроков.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных при \(n=1\), единственный игрок остаётся в игре после первого раунда. После этого, игра заканчивается и он объявляется победителем.

B. Нина и карточная игра

жадные алгоритмы игры *800

Вы и Нина играете в карточную игру. Для игры используется колода из \(2n\) карт. На каждой карте написано целое число от \(1\) до \(n\), и каждое из чисел от \(1\) до \(n\) встречается ровно на \(2\) картах. Кроме того, есть стол, на который размещаются карты во время игры (в начале игры стол пустой).

В начале игры эти \(2n\) карты распределяются между вами и Ниной так, что каждый игрок получает по \(n\) карт.

После этого вы и Нина поочередно делаете суммарно \(2n\) ходов, т. е. каждый делает по \(n\) ходов, начиная с вас. На каждом ходу:

  • Игрок, чей сейчас ход, выбирает одну из карт в своей руке. Пусть \(x\) — число на выбранной карте.
  • Игрок, чей сейчас ход, получает \(1\) очко, если на столе уже есть карта с числом \(x\) (в противном случае он не получает очков). Затем он кладет выбранную карту с числом \(x\) на стол.

Обратите внимание, что ходы делаются публично: каждый игрок может видеть все карты на столе в каждый момент времени.

Нина очень умная, поэтому она всегда выбирает карты оптимальным образом, чтобы максимизировать свой счет в конце игры (после \(2n\) раундов). Если у нее есть несколько оптимальных ходов, она выбирает ход, который минимизирует ваш счет в конце игры.

Более формально, Нина всегда делает ходы оптимальным образом, чтобы в первую очередь максимизировать свой счет в конце игры и во вторую очередь минимизировать ваш счет в конце игры.

Пусть в начале игры числа на ваших картах — \(a_1, a_2, \ldots, a_n\). Какое максимальное количество очков вы можете получить, делая свои ходы оптимальным образом?

Входные данные

В первой строке дано одно целое число \(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\)) — числа на картах в вашей руке. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в последовательности \(a_1, a_2, \ldots, a_n\) не более \(2\) раз.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число: максимальное количество очков, которое вы можете получить.

Примечание

В первом наборе входных данных на ваших картах написаны числа \(1\), \(1\), \(2\) и \(3\). На картах Нины написаны числа \(2\), \(3\), \(4\) и \(4\). Возможный ход игры:

  1. Вы выбираете одну из карт с числом \(1\) и кладете ее на стол.
  2. Нина выбирает одну из карт с числом \(4\) и кладет ее на стол.
  3. Вы выбираете карту с числом \(1\), получаете \(1\) очко и кладете выбранную карту на стол.
  4. Нина выбирает карту с числом \(4\), получает \(1\) очко и кладет выбранную карту на стол.
  5. Вы выбираете карту с числом \(2\) и кладете ее на стол.
  6. Нина выбирает карту с числом \(2\), получает \(1\) очко и кладет выбранную карту на стол.
  7. Вы выбираете карту с числом \(3\) и кладете ее на стол.
  8. Нина выбирает карту с числом \(3\), получает \(1\) очко и кладет выбранную карту на стол.

В конце игры вы набрали \(1\) очко, а Нина \(3\). Можно показать, что вы не можете набрать больше \(1\) очка, если Нина играет оптимальным образом, поэтому ответ \(1\).

Во втором тестовом случае, если оба игрока играют оптимальным образом, вы набираете \(2\) очка, а Нина — \(6\) очков.

C. Нина и магическая матрица

жадные алгоритмы Конструктив математика *1600

У Нины есть матрица \(a\) размера \(n\times n\), заполненная нулями. \(j\)-й элемент \(i\)-й строки матрицы \(a\) обозначается как \(a_{i, j}\).

Она может выполнять операции двух типов с этой матрицей:

  • Операция типа \(1\): выбрать целое число \(i\) от \(1\) до \(n\) и перестановку \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\). Присвоить \(a_{i, j}:=p_j\) для всех \(1 \le j \le n\) одновременно.
  • Операция типа \(2\): выбрать целое число \(i\) от \(1\) до \(n\) и перестановку \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\). Присвоить \(a_{j, i}:=p_j\) для всех \(1 \le j \le n\) одновременно.

Нина хочет максимизировать сумму всех чисел в матрице \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}a_{i,j}\). Она просит вас найти способ выполнить операции так, чтобы эта сумма была максимальной. Поскольку она не хочет выполнять слишком много операций, вы должны предоставить решение с не более чем \(2n\) операциями.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных дано одно целое число \(n\) (\(1 \le n \le 500\)) — размер матрицы \(a\).

Гарантируется, что сумма \(n^2\) по всем тестовым случаям не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных на первой строке выведите два целых числа \(s\) и \(m\) (\(0\leq m\leq 2n\)) — максимальную сумму чисел в матрице и количество операций в вашем решении.

В \(k\)-й из следующих \(m\) строк выведите описание \(k\)-й операции:

  • целое число \(c\) (\(c \in \{1, 2\}\)) — тип \(k\)-й операции;
  • целое число \(i\) (\(1 \le i \le n\)) — строка или столбец, к которому применяется \(k\)-я операция;
  • перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\) — перестановка, используемая в \(k\)-й операции.

Обратите внимание, что вам не нужно минимизировать количество использованных операций, вам просто нужно использовать не более чем \(2n\) операций. Можно показать, что максимальная возможная сумма всегда может быть получена не более чем за \(2n\) операций.

Примечание

В первом наборе входных данных максимальная сумма \(s=1\) может быть получена за \(1\) операцию присвоением \(a_{1, 1}:=1\).

Во втором наборе входных данных максимальная сумма \(s=7\) может быть получена за \(3\) операции следующим образом:

Можно показать, что невозможно сделать сумму чисел в матрице большей \(7\).

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\).

E2. Нина против монстров (сложная версия)

жадные алгоритмы математика Перебор реализация *2700

Это сложная версия задачи. Единственное отличие между версиями — ограничение на \(a_i\). Вы можете делать взломы, только если обе версии задачи решены.

Нина сражается с \(n\) монстрами, стоящими по кругу. Эти монстры пронумерованы от \(1\) до \(n\), и текущий уровень энергии \(i\)-го (\(1 \le i \le n\)) монстра равен \(a_i\).

Поскольку монстры слишком сильные, Нина решила сразиться с ними, используя заклинание Атакуй своего соседа. Когда Нина использует это заклинание, следующие действия происходят в следующем порядке последовательно:

  • \(1\)-й монстр атакует \(2\)-го монстра;
  • \(2\)-й монстр атакует \(3\)-го монстра;
  • \(\ldots\)
  • \((n-1)\)-й монстр атакует \(n\)-го монстра;
  • \(n\)-й монстр атакует \(1\)-го монстра.

Когда монстр с уровнем энергии \(x\) атакует монстра с уровнем энергии \(y\), уровень энергии защищающегося монстра становится \(\max(0, y-x)\) (уровень энергии атакующего монстра остается равным \(x\)).

Нина собирается использовать это заклинание \(10^{100}\) раз и потом сразиться с монстрами, у которых останется ненулевой уровень энергии. Она хочет, чтобы вы определили, у каких монстров останется ненулевой уровень энергии после того, как она использует описанное заклинание \(10^{100}\) раз.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке дано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество монстров.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — текущие уровни энергии монстров.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных

  • в первой строке выведите целое число \(m\) — количество монстров с ненулевым уровнем энергии после \(10^{100}\) использований заклинания;
  • во второй строке выведите \(m\) целых чисел \(i_1,i_2,\ldots,i_m\) (\(1 \le i_1 < i_2 < \ldots < i_m \le n\)) — индексы этих монстров в порядке возрастания.

Если \(m=0\), вы можете либо вывести пустую строку, либо не выводить ее.

Примечание

В первом наборе входных данных в первые \(3\) использования заклинания происходят следующие действия в следующем порядке:

  • Нина использует заклинание Атакуй своего соседа в первый раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 5-2)=3\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 3-3)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа во второй раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 3-2)=1\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-1)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа в третий раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 1-2)=0\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-0)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\).

После каждого следующего использования заклинания уровни энергии монстров не изменяются. Таким образом, в конце только у \(1\)-го монстра ненулевой уровень энергии.

Во втором наборе входных данных у обоих монстров изначально нулевой уровень энергии.

A. Палкоугольник

жадные алгоритмы Конструктив *800

Вам даны \(n\) палочек с длинами \(a_1, a_2, \ldots, a_n\). Найдите максимальное количество правильных (равносторонних) многоугольников, которые вы можете сформировать одновременно, чтобы:

  • Каждая сторона многоугольника была образована ровно одной палочкой.
  • Ни одна палочка не использовалась более чем в \(1\) многоугольнике.

Обращаем ваше внимание, что палочки нельзя ломать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество доступных палочек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — длины палочек.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — максимальное количество правильных (равносторонних) многоугольников, которые вы можете сформировать одновременно из имеющихся палочек.

Примечание

В первом наборе входных данных есть только одна палочка, поэтому мы не можем сформировать ни одного многоугольника.

Во втором наборе входных данных двух палочек также недостаточно, чтобы сформировать многоугольник.

В третьем наборе входных данных мы можем использовать \(4\) палочки длины \(3\) для формирования квадрата.

В четвертом наборе входных данных мы можем сформировать пятиугольник со стороной длиной \(2\) и квадрат со стороной длиной \(4\).

B. Битовая конструкция

битмаски жадные алгоритмы Конструктив реализация *1100

Даны целые неотрицательные числа \(n\) и \(k\). Постройте последовательность из \(n\) целых неотрицательных (т.е. \(\geq 0\)) чисел \(a_1, a_2, \ldots, a_n\) таких, что

  1. \(\sum\limits_{i = 1}^n a_i = k\).
  2. Количество \(1\) в двоичной записи числа \(a_1 | a_2 | \ldots | a_n\) максимально, где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq k \leq 10^9\)) — количество чисел в последовательности и сумму соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке последовательность \(a_1, a_2, \ldots, a_n\), удовлетворяющую приведенным выше условиям.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных нам нужно вывести ровно одно число, поэтому в качестве ответа мы можем вывести только \(5\).

Во втором наборе входных данных мы выводим \(1, 2\). Они имеют сумму \(3\), а \(1 | 2 = (11)_2\) имеет две \(1\) в двоичном представлении. Можно показать, что большего количества единиц достичь нельзя.

В четвертом наборе входных данных мы выводим \(3, 1, 1, 32, 2, 12\), что в сумме составляет \(51\), и \(3 | 1 | 1 | 32 | 2 | 12 = (101\,111)_2\) имеет пять \(1\) в двоичном представлении. Можно показать, что большего количества единиц достичь нельзя.

A. Лексикографически максимальная подпоследовательность

жадные алгоритмы Строки *1100

Дана строка s, состоящая только из строчных латинских букв. Найдите ее лексикографически максимальную подпоследовательность.

Непустую строку s[p1p2... pk] = sp1sp2... spk(1 ≤ p1 < p2 < ... < pk ≤ |s|) будем называть подпоследовательностью строки s = s1s2... s|s|.

Строка x = x1x2... x|x| лексикографически больше строки y = y1y2... y|y|, если либо |x| > |y| и x1 = y1, x2 = y2, ... , x|y| = y|y|, либо существует такое число r (r < |x|, r < |y|), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 > yr + 1. Символы в строках сравниваются как их ASCII-коды.

Входные данные

В единственной строке записана непустая строка s, состоящая только из строчных латинских букв и имеющая длину не более 105.

Выходные данные

Выведите лексикографически максимальную подпоследовательность строки s.

Примечание

Рассмотрим примеры и покажем, как именно выглядят искомые подпоследовательности (они выделены прописными буквами полужирным шрифтом).

Первый пример: aBaBBA

Второй пример: abbCbCCaCbbCBaaBA

D. Следующая хорошая строка

жадные алгоритмы Строки Структуры данных хэши *2800

В задачах на строки часто требуется найти строку, обладающую какими-то особыми свойствами. В очередной раз авторам задачи было лень придумывать название для такой строки, поэтому они назвали ее хорошей. Строка называется хорошей, если в ней нет подстрок-палиндромов длины большей или равной d.

Дана строка s, состоящая только из строчных латинских букв. Найдите хорошую строку t длины |s|, состоящую из строчных латинских букв, и лексикографически большую, чем s. Из всех таких строк строка t должна быть лексикографически минимальной.

Непустую строку s[a ... b] = sasa + 1... sb (1 ≤ a ≤ b ≤ |s|) будем называть подстрокой строки s = s1s2... s|s|.

Непустая строка s = s1s2... sn называется палиндромом, если для всех i от 1 до n выполняется si = sn - i + 1. Другими словами, палиндромы читаются одинаково в обоих направлениях.

Строка x = x1x2... x|x| лексикографически больше строки y = y1y2... y|y|, если либо |x| > |y| и x1 = y1, x2 = y2, ... , x|y| = y|y|, либо существует такое число r (r < |x|, r < |y|), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 > yr + 1. Символы в строках сравниваются как их ASCII-коды.

Входные данные

В первой строке записано целое число d (1 ≤ d ≤ |s|).

Во второй строке записана непустая строка s длины не более 4·105 символов, состоящая из строчных латинских букв.

Выходные данные

Выведите следующую после s в лексикографическом порядке хорошую строку той же длины, состоящую только из строчных латинских букв. Если такой строки не существует, выведите «Impossible» (без кавычек).

A. Всё о Ниме

жадные алгоритмы игры математика сортировки *1400

Алиса и Боб играют в игру с \(n\) кучками из камней. На каждом ходу игрок выбирает положительное целое число \(k\), которое не превышает размера самой маленькой непустой кучки, и удаляет \(k\) камней из каждой непустой кучки одновременно. Первый игрок, который не может сделать ход (потому что все кучки пусты), проигрывает.

Учитывая, что Алиса ходит первой, кто выиграет игру, если оба игрока играют оптимально?

Входные данные

Первая строка ввода содержит одно целое число \(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\)), где \(a_i\) — начальное количество камней в \(i\)-й кучке.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста выведите одну строку с именем победителя, предполагая, что оба игрока играют оптимально. Если выигрывает Алиса, выведите «Alice», в противном случае выведите «Bob» (без кавычек).

Примечание

В первом тесте Алиса может победить, выбрав \(k=3\) на своем первом ходу, что сразу опустошит все кучки.

Во втором тесте Алисе придется выбрать \(k=1\) на своем первом ходу, так как есть кучка размера \(1\), поэтому Боб может победить на следующем ходу, выбрав \(k=6\).

B. Отсутствующая сумма подпоследовательности

битмаски жадные алгоритмы Конструктив теория чисел *1800

Даны два целых числа \(n\) и \(k\). Найдите последовательность \(a\) неотрицательных целых чисел размером не более \(25\), такую, что выполняются следующие условия.

  • Нет подпоследовательности \(a\) с суммой \(k\).
  • Для всех \(1 \le v \le n\), где \(v \ne k\), существует подпоследовательность \(a\) с суммой \(v\).

Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5, 2, 3]\) является подпоследовательностью \([1, 5, 7, 8, 2, 4, 3]\).

Можно показать, что при заданных ограничениях всегда существует решение.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов. Затем следует описание самих тестов.

Каждый тест состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\), \(1 \le k \le n\)) — описанные выше параметры.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^7\).

Выходные данные

Первая строка вывода для каждого теста должна содержать одно целое число \(m\) (\(1 \le m \le 25\)) — размер выбранной вами последовательности.

Вторая строка вывода для каждого теста должна содержать \(m\) целых чисел \(a_i\) (\(0 \le a_i \le 10^9\)) — элементы вашей выбранной последовательности.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нам просто нужна подпоследовательность, дающая в сумме \(1\), но не дающая в сумме \(2\). Таким образом, массив \(a=[1]\) подходит.

Во втором примере все элементы больше \(k=1\), поэтому ни одна подпоследовательность не дает в сумме \(1\). Каждое другое целое число между \(1\) и \(n\) присутствует в массиве, поэтому существует подпоследовательность размера \(1\), дающая в сумме каждое из этих чисел.

C. Складывание полоски

жадные алгоритмы Конструктив Строки *2300

У вас есть полоска бумаги с бинарной строкой \(s\) длины \(n\). Вы можете сложить бумагу между любой парой соседних цифр.

Последовательность складок считается допустимой, если после складок все символы, находящиеся друг над другом или под другим, совпадают. Обратите внимание, что все складки делаются одновременно, поэтому символы не обязательно должны совпадать между складками.

Например, вот допустимые складки для \(s = \mathtt{110110110011}\) и \(s = \mathtt{01110}\):

Длина сложенной полоски — это длина, видимая сверху после всех складок. Таким образом, для двух приведенных выше примеров после указанных выше складок длины будут равны \(7\) и \(3\) соответственно.

Обратите внимание, что для приведенной выше складки для \(s = \mathtt{01110}\), если бы мы сделали любую из двух складок по отдельности, это была бы недопустимая последовательность складок. Однако, поскольку мы не проверяем допустимость до тех пор, пока все складки не будут сделаны, эта последовательность складок допустима.

После выполнения последовательности допустимых складок, какова минимальная длина полоски, которую вы можете получить?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — размер полоски.

Вторая строка каждого теста содержит строку \(s\) из \(n\) символов '0' и '1' — описание цифр на полоске.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — минимально возможную длину полоски после допустимой последовательности складок.

Примечание

Для первого примера одной из оптимальных последовательностей складок является складывание полоски посередине, что приводит к полоске длиной 3.

Третий и четвертый примеры соответствуют изображениям выше. Обратите внимание, что складка, показанная выше для \(s = \mathtt{110110110011}\), не является минимальной по длине.

A. Обмен картами

жадные алгоритмы игры Конструктив *800

У вас есть \(n\) карт, на каждой карте написано число, а также фиксированное целое число \(k\). Вы можете выполнять следующую операцию любое количество раз:

  • Выберите любые \(k\) карт, на которых написано одно и то же число.
  • Обменяйте эти карты на \(k-1\) карт, каждая из которых может иметь любое число, которое вы выберете (включая число, написанное на меняемых вами картах).

Вот одна из возможных последовательностей операций для первого примера, в котором \(k=3\):

Какое минимальное количество карт у вас может остаться в конце этого процесса?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(2 \le k \le 100\)) — количество карт у вас и количество карт, которые вы обмениваете во время каждой операции, соответственно.

Следующая строка каждого теста содержит \(n\) целых чисел \(c_1, c_2, \ldots c_n\) (\(1 \le c_i \le 100\)) — числа, написанные на ваших картах.

Выходные данные

Для каждого теста выведите одно целое число — минимальное количество карт, которые у вас могут остаться после любого количества операций.

Примечание

Первый пример соответствует изображению выше. Последовательность операций, отображенная там, является оптимальной, поэтому ответ равен \(2\).

Во втором примере операции выполнить нельзя, поэтому ответ равен \(1\).

В четвертом примере вы можете многократно выбирать \(4\) карты с номером \(1\) и заменять их на \(3\) карты с номером \(1\), пока не останется \(3\) карты.

A. Подсчет перестановок

Бинарный поиск жадные алгоритмы математика реализация сортировки *1400

У вас есть несколько карточек, на каждой из которых написано целое число от \(1\) до \(n\). В частности, для каждого \(i\) от \(1\) до \(n\) у вас есть \(a_i\) карточек, на которых написано число \(i\).

Также есть магазин, который содержит неограниченное количество карточек каждого типа. У вас есть \(k\) монет, поэтому вы можете купить в общей сложности \(k\) дополнительных карточек, а купленные вами карточки могут содержать любые целые числа от \(1\) до \(n\).

После покупки новых карточек вы расставляете все свои карточки в линию. Счет расстановки — это количество (непрерывных) подмассивов длины \(n\), которые являются перестановкой массива \([1, 2, \ldots, n]\). Какой максимальный счет вы можете получить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке указано количество наборов входных данных \(t\ (1\le t\le 100)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n \le 2 \cdot 10^5\), \(0\le k \le 10^{12}\)) — количество различных типов карт и количество монет.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{12}\)) — количество карт типа \(i\), имеющихся у вас в начале.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — максимальный счет, который вы можете получить.

Примечание

В первом наборе входных данных искомый (и единственный) массив, который можно получить, — это \([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\) (\(11\) карточек с числом \(1\)), который содержит \(11\) подмассивов, состоящих из перестановки \([1]\).

Во втором наборе входных данных мы можем купить \(0\) карточек типа \(1\) и \(4\) карточки типа \(2\), а затем расставить карточки следующим образом: \([1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]\). Есть \(8\) подмассивов, равных \([1, 2]\), и \(7\) подмассивов, равных \([2, 1]\), что в сумме составляет \(15\) подмассивов, которые являются перестановкой \([1, 2]\). Можно также доказать, что это максимальный счет, который мы можем получить.

В третьем наборе входных данных одной из возможных оптимальных расстановок является \([3, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 3]\).

B. Префиксная подпоследовательность

жадные алгоритмы *800

Вам даны две двоичные строки \(a\) и \(b\). Двоичная строка — это строка, состоящая из символов '0' и '1'.

Ваша задача — определить максимально возможное число \(k\), такое что префикс строки \(a\) длины \(k\) является подпоследовательностью строки \(b\).

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Первая строка состоит из одного целого числа \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два числа \(n\) и \(m\) (\(1\le n,m \le 2 \cdot 10^5\)) — длина строки \(a\) и длина строки \(b\) соответственно.

Вторая строка каждого набора содержит двоичную строку \(a\) длиной \(n\).

Третья строка каждого набора содержит двоичную строку \(b\) длиной \(m\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\). Аналогично, сумма значений \(m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное \(k\), такое что первые \(k\) символов \(a\) являются подпоследовательностью \(b\).

Примечание

В первом примере строка '\(10\)' является подпоследовательностью '\(1\color{red}11\color{red}0\)', но строка '\(100\)' — нет. Таким образом, ответ равен \(2\).

В пятом примере \(a\)='\(100\)', \(b\)='\(1\color{red}{10}1\color{red}0\)', вся строка \(a\) является подпоследовательностью строки \(b\). Таким образом, ответ равен \(3\).

В шестом примере строка \(b\) не содержит '\(1\)', поэтому ответ равен \(0\).

D. Игра в перестановке

графы жадные алгоритмы игры математика Перебор поиск в глубину и подобное *1300

Бодя и Саша нашли перестановку \(p_1,\dots,p_n\) и массив \(a_1,\dots,a_n\). Они решили сыграть в известную игру в перестановке.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Каждый из них выбрал стартовую позицию в перестановке.

Игра длится \(k\) ходов. Игроки делают ходы одновременно. На каждом ходу с каждым игроком происходит две вещи:

  • Если текущая позиция игрока \(x\), его счет увеличивается на \(a_x\).
  • Затем игрок либо остается на своей текущей позиции \(x\), либо перемещается с \(x\) на \(p_x\).
Победителем игры становится игрок с более высоким счетом после ровно \(k\) ходов.

Зная стартовую позицию Боди \(P_B\) и стартовую позицию Саши \(P_S\), определите, кто выигрывает в игре, если оба игрока пытаются победить.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целые числа \(n\), \(k\), \(P_B\), \(P_S\) (\(1\le P_B,P_S\le n\le 2\cdot 10^5\), \(1\le k\le 10^9\)) — длина перестановки, продолжительность игры, стартовые позиции соответственно.

Следующая строка содержит \(n\) целых чисел \(p_1,\dots,p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Следующая строка содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1\le a_i\le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «Bodya», если Бодя выигрывает игру.
  • «Sasha», если Саша выигрывает игру.
  • «Draw», если у игроков одинаковый счет.
Примечание

Ниже вы можете найти объяснение для первого набора входных данных, где игра состоит из \(k=2\) ходов.

ХодПозиция БодиОчки БодиХод БодиПозиция СашиОчки СашиХод Саши
первый\(3\)\(0 + a_3 = 0 + 5 = 5\)остаётся в текущей позиции\(2\)\(0 + a_2 = 0 + 2 = 2\)переходит в \(p_2=1\)
второй\(3\)\(5 + a_3 = 5 + 5 = 10\)остаётся в текущей позиции\(1\)\(2 + a_1 = 2 + 7 = 9\)остаётся в текущей позиции
конечный результат\(3\)\(10\)\(1\)\(9\)

Как мы видим, счет Боди больше, поэтому он выигрывает игру. Можно показать, что Бодя всегда может выиграть эту игру.

B. Сдвиги и сортировка

жадные алгоритмы Конструктив *1000

Давайте определим циклический сдвиг некоторой строки \(s\) как преобразование из \(s_1 s_2 \dots s_{n-1} s_{n}\) в \(s_{n} s_1 s_2 \dots s_{n-1}\). Другими словами, вы берете один последний символ \(s_n\) и помещаете его перед первым символом, сдвигая все остальные символы вправо.

Вам задана бинарная строка \(s\) (строка, состоящая только из символов 0 и/или 1).

За одну операцию вы можете выбрать любую подстроку \(s_l s_{l+1} \dots s_r\) (\(1 \le l < r \le |s|\)) и выполнить ее циклический сдвиг. Стоимость такой операции равна \(r - l + 1\) (или же длине выбранной подстроки).

Вы можете выполнять данную операцию любое количество раз. Какова минимальная суммарная стоимость, чтобы отсортировать строку \(s\) в порядке неубывания?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задана бинарная строка \(s\) (\(2 \le |s| \le 2 \cdot 10^5\); \(s_i \in\) {0, 1}) — строка, которую нужно отсортировать.

Дополнительное ограничение на входные данные: сумма длин строк по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную суммарную стоимость, чтобы сделать строку отсортированной, используя вышеуказанную операцию произвольное количество раз.

Примечание

В первом наборе входных данных вы можете выбрать всю строку и выполнить циклический сдвиг: 10 \(\rightarrow\) 01. Длина подстроки равна \(2\), поэтому стоимость составляет \(2\).

Во втором наборе строка уже отсортирована, поэтому вам не нужно выполнять никаких операций.

В третьем наборе одной из оптимальных стратегий является следующая:

  1. выбрать подстроку \([1, 3]\): 11000 \(\rightarrow\) 01100;
  2. выбрать подстроку \([2, 4]\): 01100 \(\rightarrow\) 00110;
  3. выбрать подстроку \([3, 5]\): 00110 \(\rightarrow\) 00011.
Общая стоимость равна \(3 + 3 + 3 = 9\).

D. Игра в магазине

жадные алгоритмы математика сортировки Структуры данных *1900

Алиса и Боб играют в игру в магазине. В магазине есть \(n\) предметов; каждый предмет имеет два параметра: \(a_i\) (цена предмета для Алисы) и \(b_i\) (цена предмета для Боба).

Алиса хочет выбрать подмножество (возможно, пустое) предметов и купить их. После этого Боб делает следующее:

  • если Алиса купила меньше \(k\) предметов, Боб может взять их все бесплатно;
  • в противном случае, он возьмет \(k\) предметов, купленные Алисой, бесплатно (Боб сам выбирает, какие \(k\) предметов это будут), а остальные выбранные предметы Боб купит у Алисы и заплатит \(b_i\) за \(i\)-й предмет.

Прибыль Алисы равна \(\sum\limits_{i \in S} b_i - \sum\limits_{j \in T} a_j\), где \(S\) — множество предметов, которые Боб покупает у нее, а \(T\) — множество предметов, которые она покупает в магазине. Другими словами, прибыль Алисы — это разность между тем, сколько Боб платит ей, и тем, сколько она платит за покупку предметов.

Алиса хочет максимизировать свою прибыль, Боб хочет минимизировать прибыль Алисы. Ваша задача — посчитать прибыль Алисы, если и Алиса, и Боб действуют оптимально.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le n\)).

Вторая строка содержит \(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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — прибыль Алисы, если и Алиса, и Боб действуют оптимально.

Примечание

В первом наборе входных данных Алисе следует купить \(2\)-й предмет и продать его Бобу, тогда ее прибыль составит \(2 - 1 = 1\).

Во втором наборе входных данных Алисе следует купить предметы \(1\), \(2\) и \(3\); затем Боб берет \(1\)-й предмет бесплатно и платит за \(2\)-й и \(3\)-й предметы. Прибыль Алисы составит \((3+2) - (1+2+1) = 1\). Боб мог бы взять \(2\)-й предмет бесплатно; это не изменит прибыль Алисы. Боб не будет брать \(3\)-й предмет бесплатно, так как тогда прибыль Алисы будет равна \(2\).

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\)).

Выходные данные

Выведите одно целое число — максимальное количество монет, которое вы можете заработать.

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. Предложение контеста

жадные алгоритмы Перебор *800

Контест состоит из \(n\) задач, и ожидается, что сложность \(i\)-й задачи будет не более \(b_i\). Уже есть \(n\) задач, и сложность \(i\)-й задачи составляет \(a_i\). Изначально массивы \(a_1, a_2, \ldots, a_n\) anи \(b_1, b_2, \ldots, b_n\) отсортированы в порядке неубывания.

Некоторые из задач могут оказаться сложнее, чем требуется, поэтому авторы должны предложить больше задач. Когда будет предложена новая задача со сложностью \(w\), самая сложная задача будет исключена из контеста, а задачи будут отсортированы по неубыванию сложности.

Другими словами, каждую операцию вы выбираете целое число \(w\), вставляете его в массив \(a\), сортируете массив \(a\) в неубывающем порядке и удаляете из него последний элемент.

Найдите минимальное количество новых задач, чтобы для всех \(i\) выполнялось \(a_i\le b_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(1 \leq n \leq 100\)), обозначающее количество задач.

Вторая строка каждого набора входных данных содержит массив \(a\) длины \(n\) (\(1\le a_1\le a_2\le\cdots\le a_n\le 10^9\)).

Третья строка каждого набора входных данных содержит массив \(b\) длины \(n\) (\(1\le b_1\le b_2\le\cdots\le b_n\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке.

Примечание

В первом наборе входных данных можно действовать следующим образом:

  • Предложить задачу со сложностью \(w=800\), \(a\) станет равным \([800,1000,1400,2000,2000,2200]\).
  • Предложить задачу со сложностью \(w=1800\), \(a\) станет равным \([800,1000,1400,1800,2000,2000]\).

Можно доказать, что невозможно выполнить условие, предложив меньшее число задач.

Во втором наборе входных данных:

  • Предложить задачу со сложностью \(w=1\), \(a\) станет равным \([1,4,5,6,7,8]\).
  • Предложите задачу со сложностью \(w=2\), \(a\) станет равным \([1,2,4,5,6,7]\).
  • Предложите задачу со сложностью \(w=3\), \(a\) станет равным \([1,2,3,4,5,6]\).

Можно доказать, что невозможно выполнить условие, предложив меньшее число задач.

B. Кот, Лиса и одинокий массив

Бинарный поиск битмаски жадные алгоритмы математика Структуры данных *1300

Сегодня Кот и Лиса нашли массив \(a\), состоящий из \(n\) целых неотрицательных чисел.

Определим одиночество массива \(a\) как наименьшее целое положительное число \(k\) (\(1 \le k \le n\)) такое, что для любых двух целых положительных чисел \(i\) и \(j\) (\(1 \leq i, j \leq n - k +1\)) выполняется \(\)a_i | a_{i+1} | \ldots | a_{i+k-1} = a_j | a_{j+1} | \ldots | a_{j+k-1},\(\) где \(x | y\) обозначает операцию побитового ИЛИ чисел \(x\) и \(y\). Другими словами, побитовое ИЛИ любых \(k\) подряд идущих элементов совпадает. Заметьте, что одиночество массива \(a\) определено корректно, так как при \(k = n\) условие выполняется.

Кот и Лиса хотят узнать, насколько одинок массив \(a\). Помогите им вычислить одиночество найденного массива.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4 \)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{20}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — одиночество данного массива.

Примечание

В первом примере одиночество массива с одним элементом равно \(1\), поэтому ответом будет \(1\).

Во втором примере побитовое ИЛИ каждого подмассива длины \(k = 1\) равняется \(2\), поэтому одиночество всего массива равно \(1\).

В седьмом примере верно, что \((0 | 1 | 3) = (1 | 3 | 2) = (3 | 2 | 2) = (2 | 2 | 1) = (2 | 1 | 0) = (1 | 0 | 3) = 3\), поэтому условие выполняется для \(k = 3\). Можно убедиться, что условие не выполняется при любом меньшем \(k\), поэтому ответ действительно равен \(3\).

C. Кот, Лиса и Двойной максимум

жадные алгоритмы Конструктив математика реализация сортировки *1700

Лиса любит перестановки! Она придумала следующую задачу, и предложила Коту её решить:

Вам дано четное целое положительное число \(n\) и перестановка\(^\dagger\) \(p\) длины \(n\).

Счет другой перестановки \(q\) длины \(n\) определим как количество локальных максимумов в массиве \(a\) длины \(n\), где \(a_i = p_i + q_i\) для всех индексов \(i\) (\(1 \le i \le n\)). Другими словами, счет \(q\) — это количество \(i\) таких, что \(1 < i < n\) (обратите внимание на строгие неравенства), \(a_{i-1} < a_i\) и \(a_i > a_{i+1}\) (еще раз обратите внимание на строгие неравенства).

Найдите перестановку \(q\), которая достигает максимального счета при заданных \(n\) и \(p\). Если таких перестановок несколько, вы можете вывести любую из них.

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно четное целое число \(n\) (\(4 \leq n \leq 10^5\), \(n\) — четное) — длину перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)). Гарантируется, что \(p\) действительно является перестановкой длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую перестановку чисел длины \(n\) (массив \(q\)) такую, что счёт \(q\) максимален при заданных ограничениях.

Примечание

В первом примере \(a = [3, 6, 4, 7]\). Массив имеет только один локальный максимум (на второй позиции), поэтому счет выбранной перестановки \(q\) равен \(1\). Можно доказать, что этот счет оптимален при заданных ограничениях.

В последнем примере полученный массив \(a = [6, 6, 12, 7, 14, 7, 14, 6]\) имеет \(3\) максимума — на третьей, пятой и седьмой позициях.

A. Рабочий стол телефона

жадные алгоритмы математика *800

У маленькой Рози на телефоне есть рабочий стол (или лаунчер, как его еще называют). Рабочий стол может состоять из нескольких экранов. Каждый экран представлен в виде сетки размером \(5 \times 3\), то есть пять строк и три столбца.

Есть \(x\) приложений с иконкой размером \(1 \times 1\) ячеек, такая иконка занимает всего одну ячейку экрана. Также есть \(y\) приложений с иконкой размером \(2 \times 2\) ячейки, такая иконка занимает на экране квадрат из \(4\) ячеек. Каждая ячейка каждого экрана может быть занята не более чем одной иконкой.

Рози хочет расположить иконки приложений на минимальном количестве экранов. Помогите ей найти такое количество экранов.

Входные данные

Первая строка ввода содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит два целых числа \(x\) и \(y\) (\(0 \leq x, y \leq 99\)) — количество приложений с иконкой \(1 \times 1\) и количество приложений с иконкой \(2 \times 2\) соответственно.

Выходные данные

Для каждого набора входных данных выведите минимальное количество необходимых экранов на отдельной строке.

Примечание

Решение для первого примера может выглядеть следующим образом:

Синие квадраты представляют пустые места для иконок, зеленые квадраты представляют иконки \(1 \times 1\), красные квадраты представляют иконки \(2 \times 2\)

Решение для третьего примера может выглядеть следующим образом:

D. Ingenuity-2

жадные алгоритмы Конструктив реализация *1400

Представим поверхность Марса как бесконечную координатную плоскость. Изначально в точке с координатой \((0, 0)\) находятся ровер Perseverance-2 и вертолёт Ingenuity-2. Специально для них был разработан набор инструкций \(s\) из \(n\) инструкций следующего вида:

  • N: переместиться на один метр на север (из точки \((x, y)\) в \((x, y + 1)\));
  • S: переместиться на один метр на юг (из точки \((x, y)\) в \((x, y - 1)\));
  • E: переместиться на один метр на восток (из точки \((x, y)\) в \((x + 1, y)\));
  • W: переместиться на один метр на запад (из точки \((x, y)\) в \((x - 1, y)\)).

Каждая инструкция должна быть исполнена либо ровером, либо вертолётом. Причём каждый аппарат должен выполнить хотя бы одну инструкцию. Ваша задача распределить инструкции так, чтобы после исполнения всех \(n\) инструкций вертолёт и ровер оказались в одной точке или определить что это невозможно.

Входные данные

Первая строка ввода содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество инструкций.

Вторая строка каждого набора содержит строку \(s\) длины \(n\) из символов 'N', 'S', 'E', 'W' — последовательность инструкций.

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если существует требуемое распределение инструкций, выведите строку \(p\) длины \(n\) из символов 'R', 'H'. Если \(i\)-я операция должна быть исполнена ровером, то \(p_i=\text{R}\), если \(i\)-я операция должна быть исполнена вертолётом, то \(p_i=\text{H}\). Если существует несколько решений, выведите любое из них.

В противном случае выведите NO.

Примечание

Рассмотрим первый пример: строка \(S = \texttt{NENSNE}\). Одно из возможных решений, показанное на рисунке ниже \(p = \texttt{RRHRRH}\), с использованием которого и ровер, и вертолет окажутся на один метр на север и на один метр на восток.

Для WWW решение невозможно.

G. Деньги теперь покупают меньше счастья

жадные алгоритмы сортировки Структуры данных *2000

Никогда нельзя купить достаточно счастья, поэтому мы снова здесь! В этой версии вы можете купить только \(h_i = 1\) единицу счастья каждый месяц, но количество месяцев увеличено в разы. Мы находимся в области квантового счастья и временного растяжения.

Будучи физиком, Чарли любит планировать свою жизнь в простых и точных терминах.

В течение следующих \(m\) месяцев, начиная с нулевой суммы денег, Чарли будет усердно работать и зарабатывать \(x\) фунтов в месяц. Для \(i\)-го месяца \((1 \le i \le m)\) будет одна возможность заплатить стоимость \(c_i\) фунтов за получение одной единицы счастья. Вы не можете купить более одной единицы счастья каждый месяц.

Запрещено брать в долг. Деньги, заработанные в \(i\)-м месяце, могут быть потрачены только в более поздний \(j\)-й месяц (\(j>i\)).

Поскольку физики не пишут код, помогите Чарли найти максимально достижимое количество единиц счастья.

Входные данные

Первая строка ввода содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа, \(m\) и \(x\) (\(1 \le m \le 2 \cdot 10^5\), \(1 \le x \le 10^3\)) — общее количество месяцев и ежемесячная зарплата.

Вторая строка каждого набора содержит \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \leq c_i \leq 10^3\)) — стоимость одной единицы счастья для каждого месяца.

Гарантируется, что сумма \(m\) по всем наборам входных данных теста не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество счастья, которое может получить Чарли.

A. Массив Базоки и Мокки

жадные алгоритмы Перебор реализация сортировки *800

Мокка любит массивы, поэтому перед отъездом Базока подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Теперь Мокка хочет узнать, может ли массив \(a\) стать отсортированным в порядке неубывания после выполнения следующей операции несколько (возможно, ноль) раз:

  • Разделить массив на две части — префикс и суффикс, затем поменять эти две части местами. Другими словами, пусть \(a=x+y\). Тогда мы можем назначить \(a:= y+x\). Здесь \(+\) обозначает операцию конкатенации массивов.

Например, если \(a=[3,1,4,1,5]\), мы можем выбрать \(x=[3,1]\) и \(y=[4,1,5]\), удовлетворяющие \(a=x+y\). Тогда мы можем назначить \(a:= y + x = [4,1,5,3,1]\). Также для начального массива мы можем выбрать \(x=[3,1,4,1,5]\) и \(y=[\,]\), удовлетворяющие \(a=x+y\). Тогда мы можем назначить \(a := y+x = [3,1,4,1,5]\). Заметим, что мы не можем выбрать \(x=[3,1,1]\) и \(y=[4,5]\), а также \(x=[1,3]\) и \(y=[5,1,4]\), так как оба эти варианта не удовлетворяют \(a=x+y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 50\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i \leq 10^6\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если массив \(a\) может стать неубывающим после выполнения операции любое количество раз, и «No», если не может.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных можно доказать, что массив \(a\) не может стать неубывающим после выполнения операции любое количество раз.

Во втором наборе входных данных мы можем выполнить следующие операции, чтобы сделать \(a\) отсортированным в неубывающем порядке:

  • Разделить массив на две части: \(x=[7]\) и \(y=[9,2,2,3]\), затем поменять эти две части местами. Массив станет равен \(y+x = [9,2,2,3,7]\).
  • Разделить массив на две части: \(x=[9]\) и \(y=[2,2,3,7]\), затем поменять местами эти две части. Массив станет равен \(y+x=[2,2,3,7,9]\), то есть станет неубывающим.

B. Массив 378QAQ и Мокки

жадные алгоритмы математика Перебор сортировки *1000

Мокка любит массивы, поэтому перед отъездом 378QAQ подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Мокка считает массив \(a\) красивым, если существуют два числа \(i\) и \(j\) (\(1\leq i,j\leq n\), \(i\neq j\)) такие, что для всех \(k\) (\(1 \leq k \leq n\)), \(a_k\) делится\(^\dagger\) либо на \(a_i\), либо на \(a_j\).

Определите, является ли массив \(a\) красивым.

\(^\dagger\) \(x\) делится на \(y\), если существует целое число \(z\) такое, что \(x = y \cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3\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\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если массив \(a\) красивый, и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных любые два числа в массиве являются взаимно простыми, поэтому ответ «No».

Во втором наборе входных данных мы можем выбрать \(i=2\) и \(j=1\). Так как каждое число в массиве делится на \(a_i = 1\), то ответом будет «Yes».

В третьем наборе входных данных мы можем выбрать \(i=3\) и \(j=5\). \(2\) и \(4\) делятся на \(a_i = 2\), а \(3\), \(6\) и \(12\) делятся на \(a_j = 3\), поэтому ответ «Yes».

C. Массив Чамо и Мокки

Бинарный поиск жадные алгоритмы Перебор *1200

Мокка любит массивы, поэтому перед отъездом Чамо подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Мокка не любит массивы, содержащие разные числа, поэтому Мокка решила использовать магию, чтобы изменить массив. Мокка может выполнить следующую трехэтапную операцию несколько (возможно, ноль) раз:

  1. Выбрать индексы \(l\) и \(r\) (\(1 \leq l < r \leq n\))
  2. Пусть \(x\) — медиана\(^\dagger\) подмассива \([a_l, a_{l+1},\ldots, a_r]\)
  3. Сделать все значения \(a_l, a_{l+1},\ldots, a_r\) равными \(x\)

Предположим, что изначально \(a=[1,2,3,4,5]\):

  • Если Мокка на первой операции выберет \((l,r)=(3,4)\), то \(x=3\), массив изменится на \(a=[1,2,3,3,5]\).
  • Если Мокка на первой операции выберет \((l,r)=(1,3)\), то \(x=2\), массив изменится на \(a=[2,2,2,4,5]\).

Мокка будет выполнять операции до тех пор, пока все элементы массива не станут равными одному числу. Мокка хочет узнать, чему равняется максимально возможное значение этого числа.

\(^\dagger\) Медиана в массиве \(b\) длины \(m\) — это элемент, занимающий позицию номер \(\lfloor \frac{m+1}{2} \rfloor\) после сортировки элементов в неубывающем порядке. Например, медиана \([3,1,4,1,5]\) равна \(3\), а медиана \([5,25,20,24]\) равна \(20\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\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\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение элементов массива.

Примечание

В первом наборе входных данных \(a=[1,2]\). Мокка может выбрать только интервал \((l,r)=(1,2)\). Массив будет изменен на \(a=[1,1]\). Поэтому ответом будет \(1\).

Со вторым набором входных данных Мокка может выполнить следующие операции:

  • Выбрать интервал \((l,r)=(4,5)\), тогда \(a=[1,2,3,4,4]\).
  • Выбрать интервал \((l,r)=(3,5)\), тогда \(a=[1,2,4,4,4]\).
  • Выбрать интервал \((l,r)=(1,5)\), тогда \(a=[4,4,4,4,4]\).

Все элементы массива равны \(4\). Можно доказать, что максимальное значение конечного числа не может быть больше \(4\).

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\) и закрашивает её синим цветом.

G. Фан-клуб Zimpha

бпф жадные алгоритмы математика Строки *3000

Однажды Zimpha придумал задачу. Как член фан-клуба Zimpha, вы решили её решить.

Вам даны две строки \(s\) и \(t\) длины \(n\) и \(m\) соответственно. Обе строки состоят только из строчных латинских букв, а также символов - и *.

Вам нужно заменить все вхождения - и *, соблюдая следующие правила:

  • Для каждого символа - вы должны заменить его на любую строчную латинскую букву.
  • Для каждого символа * вы должны заменить его любой строкой (возможно, пустой), состоящей только из строчных латинских букв.

Обратите внимание, что вы можете заменить два разных символа - разными символами. Вы также можете заменить два разных символа * разными строками.

Предположим, что \(s\) и \(t\) были преобразованы в \(s'\) и \(t'\). Теперь вы задаетесь вопросом, существуют ли замены, в результате которых получается \(s'=t'\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^6\)) — длины строк \(s\) и \(t\), соответственно.

Вторая строка содержит строку \(s\) длины \(n\). Гарантируется, что \(s\) состоит только из строчных латинских букв, - и *.

Третья строка содержит строку \(t\) длины \(m\). Гарантируется, что \(t\) состоит только из строчных латинских букв, - и *.

Выходные данные

Для каждого набора входных данных выведите «Yes», если существует замена, в результате которой получается \(s'=t'\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Во втором наборе входных данных мы можем преобразовать обе строки в ttklwxx. В \(s\) - будет заменено на l. В \(t\) * будет заменена пустой строкой, а первая и вторая - будут заменены на k и w соответственно.

В пятом наборе входных данных мы можем преобразовать обе строки в bulijiojioxdibuliduo.

H. 378QAQ и ядро

жадные алгоритмы Строки *3500

У 378QAQ есть строка \(s\) длины \(n\). Определим ядро строки как подстроку\(^\dagger\) с максимальным лексикографическим\(^\ddagger\) порядком.

Например, ядром «\(\mathtt{bazoka}\)» является «\(\mathtt{zoka}\)», а ядром «\(\mathtt{aaa}\)» является «\(\mathtt{aaa}\)».

378QAQ хочет переставить символы в строке \(s\) так, чтобы ядро было лексикографически минимальным. Найдите лексикографически минимальное возможное ядро среди всех перестановок \(s\).

\(^\dagger\) Подстрока строки \(s\) — это непрерывный отрезок букв из \(s\). Например, «\(\mathtt{defor}\)», «\(\mathtt{code}\)» и «\(\mathtt{o}\)» являются подстроками «\(\mathtt{codeforces}\)», а «\(\mathtt{codes}\)» и «\(\mathtt{aaa}\)» не являются.

\(^\ddagger\) Строка \(p\) лексикографически меньше строки \(q\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(p\) является префиксом \(q\), но \(p \ne q\); или
  • в первой позиции, где \(p\) и \(q\) отличаются, строка \(p\) имеет меньший символ, чем символ на соответствующей поозиции в \(q\) (при сравнении по их ASCII-коду).

Например, «\(\mathtt{code}\)» и «\(\mathtt{coda}\)» лексикографически меньше, чем «\(\mathtt{codeforces}\)», а «\(\mathtt{codeforceston}\)» и «\(\mathtt{z}\)» — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 10^6\)) — длину строки \(s\).

Следующая строка каждого набора входных данных содержит строку \(s\) длины \(n\). Строка \(s\) состоит из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальное возможное ядро среди всех перестановок \(s\).

Примечание

В первом наборе входных данных все возможные перестановки и соответствующие им ядра выглядят следующим образом:

  • «\(\mathtt{qaq}\)», его ядро — «\(\mathtt{qaq}\)».
  • «\(\mathtt{aqq}\)», его ядро — «\(\mathtt{qq}\)».
  • «\(\mathtt{qqa}\)», его ядро — «\(\mathtt{qqa}\)».

Таким образом, ядро с минимальным лексикографическим порядком среди всех перестановок — это «\(\mathtt{qaq}\)».

B. Увеличение/уменьшение/копирование

жадные алгоритмы реализация *1100

Задано два целочисленных массива: массив \(a\) размера \(n\) и массив \(b\) размера \(n+1\).

Вы можете выполнять следующие операции любое количество раз в любом порядке:

  • выбрать любой элемент массива \(a\) и увеличьте его на \(1\);
  • выбрать любой элемент массива \(a\) и уменьшить его на \(1\);
  • выбрать любой элемент массива \(a\), скопируйте его и добавьте копию в конец массива \(a\).

Ваша задача — посчитать минимальное количество вышеописанных операций (возможно, нулевое), необходимых для преобразования массива \(a\) в массив \(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\) (\(1 \le a_i \le 10^9\));
  • третья строка содержит \(n + 1\) целых чисел \(b_1, b_2, \dots, b_{n + 1}\) (\(1 \le b_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — минимальное количество вышеописанных операций (возможно, нулевое), необходимых для преобразования массива \(a\) в массив \(b\).

Примечание

В первом примере вы можете преобразовать \(a\) в \(b\) следующим образом: \([2] \rightarrow [2, 2] \rightarrow [1, 2] \rightarrow [1, 3]\).

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\).

E. Разделяемые перестановки

Деревья жадные алгоритмы Комбинаторика математика поиск в глубину и подобное Структуры данных *2500

Изначально у нас был один массив — перестановка размера \(n\) (массив размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз).

Мы провели \(q\) операций. В ходе \(i\)-й операции мы сделали следующее:

  • выбрали любой из имеющихся у нас массивов размера хотя бы \(2\);
  • разделили его на две непустых части (префикс и суффикс);
  • записали два числа \(l_i\) и \(r_i\), где \(l_i\) — максимум в левой из полученных частей, а \(r_i\) — максимум в правой из полученных частей;
  • удалили массив, который мы разделили, из набора массивов, которые мы можем использовать, а вместо него добавили две полученных части массива.

Например, пусть изначально у нас был массив \([6, 3, 4, 1, 2, 5]\), и мы провели следующие операции:

  1. выбрали массив \([6, 3, 4, 1, 2, 5]\) и разделили его на \([6, 3]\) и \([4, 1, 2, 5]\). Затем мы записали \(l_1 = 6\) и \(r_1 = 5\), и в следующих операциях нам доступны массивы \([6, 3]\) и \([4, 1, 2, 5]\);
  2. выбрали массив \([4, 1, 2, 5]\) и разделили его на \([4, 1, 2]\) и \([5]\). Затем мы записали \(l_2 = 4\) и \(r_2 = 5\), и в следующих операциях нам доступны массивы \([6, 3]\), \([4, 1, 2]\) и \([5]\);
  3. выбрали массив \([4, 1, 2]\) и разделили его на \([4]\) и \([1, 2]\). Затем мы записали \(l_3 = 4\) и \(r_3 = 2\), и в следующих операциях нам доступны массивы \([6, 3]\), \([4]\), \([1, 2]\) и \([5]\).

Даны два целых числа \(n\) и \(q\), а также две последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\). Перестановку размера \(n\) назовем подходящей, если можно провести на ней \(q\) операций и получить заданные последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\).

Посчитайте количество подходящих перестановок.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le q < n \le 3 \cdot 10^5\)).

Во второй строке заданы \(q\) целых чисел \(l_1, l_2, \dots, l_q\) (\(1 \le l_i \le n\)).

В третьей строке заданы \(q\) целых чисел \(r_1, r_2, \dots, r_q\) (\(1 \le r_i \le n\)).

Дополнительное ограничение на входные данные: существует хотя бы одна перестановка, по которой можно получить заданные последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\).

Выходные данные

Выведите одно целое число — количество подходящих перестановок, взятое по модулю \(998244353\).

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\) рёбер в дерево.

B. Бинарная покраска

битмаски жадные алгоритмы Конструктив математика *1100

Дано натуральное число \(x\). Найдите любую последовательность чисел \(a_0, a_1, \ldots, a_{n-1}\) такую, что:

  • \(1 \le n \le 32\),
  • \(a_i\) равно \(1\), \(0\) или \(-1\) для всех \(0 \le i \le n - 1\),
  • \(x = \displaystyle{\sum_{i=0}^{n - 1}{a_i \cdot 2^i}}\),
  • Не существует \(0 \le i \le n - 2\) такого, что \(a_{i} \neq 0\) и \(a_{i + 1} \neq 0\).

Можно доказать, что под ограничениями задачи всегда существует как минимум одна подходящая последовательность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(x\) (\(1 \le x < 2^{30}\)).

Выходные данные

Для каждого набора входных данных на первой строке выведите число \(n\) (\(1 \le n \le 32\)) — длину последовательности \(a_0, a_1, \ldots, a_{n-1}\).

На следующей строке выведите саму последовательность \(a_0, a_1, \ldots, a_{n-1}\).

Если подходящих последовательностей несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных, одной из подходящих последовательностей является \([1]\), так как \((1) \cdot 2^0 = 1\).

Во втором наборе входных данных, одной из подходящих последовательностей является \([0,-1,0,0,1]\), так как \((0) \cdot 2^0 + (-1) \cdot 2^1 + (0) \cdot 2^2 + (0) \cdot 2^3 + (1) \cdot 2^4 = -2 + 16 = 14\).

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\).

D. XORофикатор

битмаски жадные алгоритмы Перебор хэши *2300

Вам дана бинарная (состоящая из 0 и 1) матрица размера \(n \times m\). Также вам дан XORофикатор, который за одно применение умеет инвертировать все значения в выбранной строке (заменяет 0 на 1 и 1 на 0).

Будем называть столбец матрицы особенным, если в нём ровно одна 1. Вам надо найти максимальное количество столбцов, которые можно сделать особенными одновременно, и сказать, в каких строках нужно для этого применить XORофикатор.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(m\) (\(1 \leq n, m \leq 3 \cdot 10^5\), \(n \cdot m \leq 3 \cdot 10^5\)).

Каждая из следующих \(n\) строк набора содержит бинарную строку длины \(m\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите две строки.

В первой строке выведите максимальное количество особенных столбцов, которых можно получить одновременно.

Во второй строке выведите бинарную строку размера \(n\), где на \(i\)-й позиции стоит 0, если XORофикатор на \(i\)-й строке применять не нужно, и 1, если XORофикатор на \(i\)-й строке применять нужно.

Если есть несколько подходящих конфигураций XORофикатора, вы можете вывести любую из них.

Примечание

В первом наборе входных данных можно применить XORофикатор ко второму ряду, тогда \(2\)-й, \(3\)-й и \(4\)-й столбцы будут особенными.

Во втором наборе входных данных единственный столбец уже особенный, поэтому применять XORофикатор не надо.

A. Алиса и книги

жадные алгоритмы Конструктив сортировки *800

У Алисы есть \(n\) книг. \(1\)-я книга содержит \(a_1\) страниц, \(2\)-я книга содержит \(a_2\) страниц, \(\ldots\), \(n\)-я книга содержит \(a_n\) страниц. Алиса делает следующее:

  • Она разделяет все книги на две непустые стопки. Таким образом, каждая книга оказывается ровно в одной из двух стопок.
  • Алиса читает в каждой стопке одну книгу с наибольшим номером.

Алиса очень любит читать. Помогите ей найти, какое максимальное суммарное количество страниц она сможет прочитать, разделив книги на две стопки.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — количество книг у Алисы.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количество страниц в каждой книге.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество страниц, которое сможет прочитать Алиса.

Примечание

В первом наборе входных данных Алиса может положить в первую стопку книгу с номером \(1\), а во вторую стопку книгу с номером \(2\). Тогда она прочитает \(a_1 + a_2 = 1 + 1 = 2\) страницы.

Во втором наборе входных данных Алиса может положить книги с номерами \(2\) и \(3\) в первую стопку, а книги с номерами \(1\) и \(4\) во вторую стопку. Тогда из первой стопки она прочитает книгу с наибольшим номером \(3\), а из второй стопки книгу с наибольшим номером \(4\). Тогда она прочитает \(a_3 + a_4 = 3 + 1 = 4\) страницы.

B. Новая булочная

Бинарный поиск жадные алгоритмы математика Тернарный поиск *800

Боб решил открыть булочную. В день открытия он испёк \(n\) булок, которые может продать. Обычная цена булки равна \(a\) монет, но чтобы привлечь покупателей, Боб организовал следующую акцию:

  • Боб выбирает некоторое целое число \(k\) (\(0 \le k \le \min(n, b)\)).
  • Первые \(k\) булок Боб продаёт по изменённой цене. В таком случае цена \(i\)-й (\(1 \le i \le k\)) проданной булки равна \((b - i + 1)\) монет.
  • Оставшиеся \((n - k)\) булок Боб продаёт по \(a\) монет за каждую.

Обратите внимание, что \(k\) может равняться \(0\). В таком случае Боб продаст все булки по \(a\) монет за каждую.

Помогите Бобу определить максимальную прибыль, которую он может получить, если продаст все \(n\) булок.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \le n, a, b \le 10^9\)) — количество булок, обычная цена булки и цена первой булки, которая будет продана по изменённой цене.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную прибыль, которую может получить Боб.

Примечание

В первом наборе входных данных Бобу выгодно выбрать \(k = 1\). Тогда он продаст одну булку за \(5\) монет, и три булки по обычной цене за \(4\) монеты. Тогда прибыль равна \(5 + 4 + 4 + 4 = 17\) монет.

Во втором наборе входных данных Бобу выгодно выбрать \(k = 5\). Тогда он продаст все булки по изменённой цене и получит прибыль \(9 + 8 + 7 + 6 + 5 = 35\) монет.

В третьем наборе входных данных Бобу выгодно выбрать \(k = 0\). Тогда он продаст все булки по обычной цене и получит прибыль \(10 \cdot 10 = 100\) монет.

C. Манхэттенские перестановки

жадные алгоритмы Конструктив математика реализация Структуры данных *1300

Назовем манхэттенской величиной перестановки\(^{\dagger}\) \(p\) значение выражения \(|p_1 - 1| + |p_2 - 2| + \ldots + |p_n - n|\).

Например, для перестановки \([1, 2, 3]\) манхэттенская величина равна \(|1 - 1| + |2 - 2| + |3 - 3| = 0\), а для перестановки \([3, 1, 2]\) манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Вам даны целые числа \(n\) и \(k\). Найдите такую перестановку \(p\) длины \(n\), что её манхэттенская величина равна \(k\) или определите, что такой перестановки не существует.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^{5}, 0 \le k \le 10^{12}\)) — длина перестановки и необходимая манхэттенская величина.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных, если не существует подходящей перестановки, выведите «No». В противном случае в первой строке выведите «Yes», а во второй строке выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — подходящую перестановку.

Если существует несколько решений, выведите любое из них.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных подходит перестановка \([3, 1, 2]\), её манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Во втором наборе входных данных можно доказать, что не существует перестановки длины \(4\) с манхэттенской величиной \(5\).

В третьем наборе входных данных подходит перестановка \([1,2,3,4,5,6,7]\), её манхэттенская величина равна \(|1-1|+|2-2|+|3-3|+|4-4|+|5-5|+|6-6|+|7-7|=0\).

D. Выборы

жадные алгоритмы математика реализация Структуры данных *1600

В Берляндии проходят выборы. На выборах участвуют \(n\) кандидатов, пронумерованных от \(1\) до \(n\). У \(i\)-го из них есть \(a_i\) фанатов, которые проголосуют за него. Также дополнительно есть \(c\) людей, которые не определились с любимым кандидатом, назовем их неопределившимися. Неопределившиеся люди проголосуют за кандидата с наименьшим номером.

На выборах побеждает кандидат, который набрал максимальное количество голосов, а если максимальное количество голосов набрали несколько кандидатов, то среди таких побеждает кандидат с наименьшим номером.

Такие выборы вам показались слишком скучными и предсказуемыми, поэтому вы решили не допустить некоторых кандидатов к ним. Если вы не допустите кандидата с номером \(i\) к выборам, то все \(a_i\) его фанатов станут неопределившимися, и на выборах проголосуют за допущенного кандидата с наименьшим номером.

Вам стало интересно узнать для каждого \(i\) от \(1\) до \(n\), какое минимальное количество кандидатов надо не допустить к выборам, чтобы кандидат с номером \(i\) выиграл выборы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le c \le 10^9\)) — количество кандидатов на выборах и количество неопределившихся людей.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество фанатов у каждого кандидата.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно минимальному количеству кандидатов, которых нужно не допустить к выборам, чтобы кандидат с номером \(i\) победил.

Примечание

В первом наборе входных данных:

  • Если допустить всех кандидатов, то кандидат с номером \(1\) наберёт \(3\) голоса (за него проголосует \(1\) неопределившийся человек), кандидат с номером \(2\) наберёт \(0\) голосов, кандидат с номером \(3\) наберёт \(3\) голоса. Таким образом, выиграет кандидат с номером \(1\) (он набрал столько же голосов, сколько кандидат \(3\), но его номер меньше), поэтому для него ответ равен \(0\).
  • Если не допустить кандидата с номером \(1\), то его \(2\) фаната станут неопределившимися. Тогда кандидат с номером \(2\) наберёт \(3\) голоса (за него проголосуют \(3\) неопределившихся человека) и кандидат с номером \(3\) наберёт \(3\) голоса. Таким образом, выиграет кандидат с номером \(2\) (он набрал столько же голосов, сколько кандидат \(3\), но его номер меньше), поэтому для него ответ равен \(1\).
  • Если не допустить кандидатов с номерами \(1\) и \(2\), то выиграет кандидат с номером \(3\), поэтому для него ответ равен \(2\).

Во втором наборе входных данных кандидат с номером \(1\) выиграет, если не допустить кандидата с номером \(2\).

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\).

A. Угадай максимум

жадные алгоритмы Перебор реализация *800

Алиса и Боб придумали довольно странную игру. У них есть массив целых чисел \(a_1, a_2,\ldots, a_n\). Алиса выбирает некоторое целое число \(k\) и сообщает его Бобу, после чего происходит следующее:

  • Боб выбирает два целых числа \(i\) и \(j\) (\(1 \le i < j \le n\)), а затем ищет максимум среди чисел \(a_i, a_{i + 1},\ldots, a_j\);
  • Если полученный максимум строго больше \(k\), то побеждает Алиса, иначе Боб.

Помогите Алисе узнать максимальное \(k\), при котором она гарантированно побеждает.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество элементов в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное целое число \(k\), при котором Алиса гарантированно побеждает.

Примечание

В первом наборе входных данных всевозможные подотрезки, которые может выбрать Боб, выглядят следующим образом: \([2, 4], [2, 4, 1], [2, 4, 1, 7], [4, 1], [4, 1, 7], [1, 7]\). Максимумы на подотрезках соответственно равны \(4, 4, 7, 4, 7, 7\). Можно показать, что \(3\) является наибольшим целым числом, таким что любой из максимумов будет строго больше него.

В третьем наборе входных данных единственным отрезком, который может выбрать Боб, является \([1, 1]\). Поэтому ответ равен \(0\).

B. XOR последовательности

битмаски жадные алгоритмы *1000

Вам даны два различных целых неотрицательных числа \(x\) и \(y\). Рассмотрим две бесконечные последовательности \(a_1, a_2, a_3, \ldots\) и \(b_1, b_2, b_3, \ldots\), где

  • \(a_n = n \oplus x\);
  • \(b_n = n \oplus y\).

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

Например, при \(x = 6\), первые \(8\) элементов последовательности \(a\) будут выглядеть следующим образом: \([7, 4, 5, 2, 3, 0, 1, 14, \ldots]\). Обратите внимание, что индексы элементов начинаются с \(1\).

Ваша задача — найти длину наибольшего общего подотрезка\(^\dagger\) последовательностей \(a\) и \(b\). Другими словами, найдите такое максимальное целое число \(m\), что \(a_i = b_j, a_{i + 1} = b_{j + 1}, \ldots, a_{i + m - 1} = b_{j + m - 1}\) для некоторых \(i, j \ge 1\).

\(^\dagger\)Подотрезком последовательности \(p\) называется последовательность \(p_l,p_{l+1},\ldots,p_r\), где \(1 \le l \le r\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^9, x \neq y\)) — параметры последовательностей.

Выходные данные

Для каждого набора входных данных выведите одно целое число — длину наибольшего общего подотрезка.

Примечание

В первом наборе входных данных первые \(7\) элементов последовательностей \(a\) и \(b\) следующие:

\(a = [1, 2, 3, 4, 5, 6, 7,\ldots]\)

\(b = [0, 3, 2, 5, 4, 7, 6,\ldots]\)

Можно показать, что не существуют такого целого положительного числа \(k\), что отрезок \([k, k + 1]\) встречается в \(b\) как подотрезок. Поэтому ответ равен \(1\).

В третьем наборе входных данных первые \(20\) элементов последовательностей \(a\) и \(b\) следующие:

\(a = [56, 59, 58, 61, 60, 63, 62, 49, 48, 51, 50, 53, 52, 55, 54, \textbf{41, 40, 43, 42}, 45, \ldots]\)

\(b = [36, 39, 38, 33, 32, 35, 34, 45, 44, 47, 46, \textbf{41, 40, 43, 42}, 53, 52, 55, 54, 49, \ldots]\)

Можно показать, что одним из наибольших общих подотрезков является подотрезок \([41, 40, 43, 42]\), длина которого равна \(4\).

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\)-правильной.

C. София и утерянные операции

жадные алгоритмы Конструктив *1300

У Софии был массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Однажды он ей надоел, поэтому она решила последовательно применить к нему \(m\) операций изменения.

Каждая операция изменения описывается парой чисел \(\langle c_j, d_j \rangle\) и означает, что надо присвоить элементу массива с индексом \(c_j\) значение \(d_j\), то есть выполнить присвоение \(a_{c_j} = d_j\). После последовательного применения всех операций изменения София выкинула получившийся массив.

Недавно вы нашли массив из \(n\) целых чисел \(b_1, b_2, \ldots, b_n\). Вам интересно, является ли этот массив массивом Софии. Вам известны значения исходного массива, а также значения \(d_1, d_2, \ldots, d_m\). Значения \(c_1, c_2, \ldots, c_m\) оказались утерянными.

Существует ли такая последовательность \(c_1, c_2, \ldots, c_m\), что последовательное применение операций изменения \(\langle c_1, d_1, \rangle, \langle c_2, d_2, \rangle, \ldots, \langle c_m, d_m \rangle\) к массиву \(a_1, a_2, \ldots, a_n\) превращает его в массив \(b_1, b_2, \ldots, b_n\)?

Входные данные

В первой строке дано целое число \(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\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы найденного массива.

В четвёртой строке дано целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество операций изменения.

В пятой строке даны \(m\) целых чисел \(d_1, d_2, \ldots, d_m\) (\(1 \le d_j \le 10^9\)) — сохранившееся значение для каждой операции изменения.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), аналогично сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если существует подходящая последовательность \(c_1, c_2, \ldots, c_m\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

D. НОД-последовательность

жадные алгоритмы математика реализация теория чисел *1400

НОД (наибольший общий делитель) двух целых чисел \(x\) и \(y\) — это такое максимальное целое число \(z\), на которое нацело делятся и \(x\), и \(y\). Например, \(НОД(36, 48) = 12\), \(НОД(5, 10) = 5\), а \(НОД(7,11) = 1\).

У Кристины есть массив \(a\), состоящий ровно из \(n\) целых положительных чисел. Она хочет посчитать НОД каждой соседней пары чисел, чтобы получить новый массив \(b\), называемый НОД-последовательностью.

Таким образом, элементы НОД-последовательности \(b\) будут вычисляться по формуле \(b_i = НОД(a_i, a_{i + 1})\) для \(1 \le i \le n - 1\).

Определите, можно ли удалить из массива \(a\) ровно одно число, чтобы НОД-последовательность \(b\) получилась неубывающей (то есть, всегда было верно \(b_i \le b_{i+1}\))

Например, пусть у Кристины был массив \(a\) = [\(20, 6, 12, 3, 48, 36\)]. Если она удалит из него \(a_4 = 3\) и посчитает НОД-последовательность \(b\), то получит:

  • \(b_1 = НОД(20, 6) = 2\)
  • \(b_2 = НОД(6, 12) = 6\)
  • \(b_3 = НОД(12, 48) = 12\)
  • \(b_4 = НОД(48, 36) = 12\)
Полученная НОД-последовательность \(b\) = [\(2,6,12,12\)] является неубывающей, так как \(b_1 \le b_2 \le b_3 \le b_4\).
Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит ровно \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите:

  • «YES», если можно удалить из массива \(a\) ровно одно число так, чтобы НОД-последовательность \(b\) получилась неубывающей;
  • «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

E. Перестановка строк и столбцов

жадные алгоритмы Конструктив математика матрицы реализация сортировки Структуры данных хэши *1600

У вас была матрица \(a\) размера \(n\) на \(m\), содержащая перестановку целых чисел от \(1\) до \(n \cdot m\).

Перестановкой из \(n\) целых чисел называется массив, содержащий все числа от \(1\) до \(n\) ровно один раз. Например, массивы \([1]\), \([2, 1, 3]\), \([5, 4, 3, 2, 1]\) являются перестановками, а массивы \([1, 1]\), \([100]\), \([1, 2, 4, 5]\) — нет.

Матрица содержит перестановку, если при выписывании всех её элементов полученный массив является перестановкой. Матрицы \([[1, 2], [3, 4]]\), \([[1]]\), \([[1, 5, 3], [2, 6, 4]]\) содержат перестановки, а матрицы \([[2]]\), \([[1, 1], [2, 2]]\), \([[1, 2], [100, 200]]\) — нет.

За одну операцию вы можете совершить одно из двух следующих действий:

  • выбрать столбец \(c\) и столбец \(d\) (\(1 \le c, d \le m\), \(c \ne d\)) и поменять эти столбцы местами;
  • выбрать строку \(c\) и строку \(d\) (\(1 \le c, d \le n\), \(c \ne d\)) и поменять эти строки местами.

Вы можете совершить любое количество операций.

Вам даны исходная матрица \(a\) и матрица \(b\). Ваша задача — определить, можно ли с помощью данных операций сделать из матрицы \(a\) матрицу \(b\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le n \cdot m \le 2 \cdot 10^5\)) — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) целых чисел \(a_{ij}\) каждая (\(1 \le a_{ij} \le n \cdot m\)). Гарантируется, что матрица \(a\) является перестановкой.

Следующие \(n\) строк содержат по \(m\) целых чисел \(b_{ij}\) каждая (\(1 \le b_{ij} \le n \cdot m\)). Гарантируется, что матрица \(b\) является перестановкой.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вторая матрица может быть получена из первой, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Во втором примере исходная матрица выглядит так:

\( \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \)

При обмене строк \(1\) и \(2\) местами она станет такой:

\( \begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix} \)

При обмене столбцов \(1\) и \(2\) местами она станет равна матрице \(b\):

\( \begin{pmatrix} 4 & 3 \\ 2 & 1 \end{pmatrix} \)

G. Яся и таинственное дерево

битмаски графы Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *2300

Яся гуляла по лесу и совершенно случайно нашла дерево на \(n\) вершинах. Дерево — это связный неориентированный граф, в котором отсутствуют циклы.

Рядом с деревом девочка нашла древний манускрипт, на котором записаны \(m\) запросов. Запросы бывают двух видов.

Первый вид запросов описывается числом \(y\). Вес каждого ребра в дереве заменяется на побитовое исключающее «ИЛИ» веса этого ребра и числа \(y\).

Второй вид описывается вершиной \(v\) и числом \(x\). Яся выбирает вершину \(u\) (\(1 \le u \le n\), \(u \neq v\)) и мысленно проводит в дереве двунаправленное ребро веса \(x\) из \(v\) в \(u\).

Затем Яся находит простой цикл в получившемся графе и считает побитовое исключающее «ИЛИ» от всех рёбер на нём. Она хочет выбрать такую вершину \(u\), чтобы посчитанное значение было максимально. Это посчитанное значение и будет ответом на запрос. Можно показать существование и единственность такого цикла в указанных ограничениях (независимо от выбора \(u\)). Если ребро между \(v\) и \(u\) уже существовало, простым циклом будет путь \(v \to u \to v\).

Обратите внимание, что запрос второго типа выполняется мысленно, то есть дерево после него никак не меняется.

Помогите Ясе ответить на все запросы.

Входные данные

В первой строке дано целое число \(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\)) — количество вершин в дереве и количество запросов.

В следующих \(n - 1\) строках каждого набора даны целые числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n\), \(1 \le w \le 10^9\)) — концы некоторого ребра в дереве и его вес.

Гарантируется, что заданный набор рёбер образует дерево.

В следующих \(m\) строках каждого набора описаны запросы:

  • ^ \(y\) (\(1 \le y \le 10^9\)) — параметр запроса первого типа;
  • ? \(v\) \(x\) (\(1 \le v \le n\), \(1 \le x \le 10^9\)) — параметры запроса второго типа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). То же самое гарантируется для \(m\).

Выходные данные

Для каждого набора входных данных выведите ответы на запросы второго типа.

A. Черепаха и Свинка играют в игру

жадные алгоритмы математика Перебор *800

Черепаха и Свинка играют в числовую игру.

Сначала Черепаха выберет целое число \(x\), такое что \(l \le x \le r\), где \(l, r\) заданы. Также гарантируется, что \(2l \le r\).

Затем Свинка будет выполнять следующую операцию, пока \(x\) не станет равным \(1\):

  • Выберите целое число \(p\) такое, что \(p \ge 2\) и \(p \mid x\) (т.е. \(x\) делится на \(p\)).
  • Замените \(x\) на \(\frac{x}{p}\), и увеличьте счет на \(1\).

Счет изначально равен \(0\). И Черепаха, и Свинка хотят максимизировать счет. Пожалуйста, помогите им вычислить максимальный счет.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит два целых числа \(l, r\) (\(1 \le l \le r \le 10^9, 2l \le r\)) — отрезок, из которого Черепаха может выбрать целое число.

Выходные данные

Для каждого теста выведите одно целое число — максимальный счет.

Примечание

В первом тесте Черепаха может выбрать целое число \(x\), такое что \(2 \le x \le 4\). Она может выбрать \(x = 4\). Затем Свинка может \(2\) раза выбрать \(p = 2\). После этого \(x\) станет равным \(1\), и счет будет равен \(2\), что является максимальным ответом для этого теста.

Во втором тесте Черепаха может выбрать целое число \(3 \le x \le 6\). Она может выбрать \(x = 6\). Затем Свинка может выбрать \(p = 2\), затем выбрать \(p = 3\). После этого \(x\) станет равным \(1\), и счет будет равен \(2\), что является максимальным ответом для этого теста.

В третьем тесте Черепаха может выбрать \(x = 12\).

В четвертом тесте Черепаха может выбрать \(x = 16\).

C. Черепаха и неполная последовательность

битмаски жадные алгоритмы Конструктив математика Перебор реализация *1800

Черепаха играла с последовательностью \(a_1, a_2, \ldots, a_n\), состоящей из положительных целых чисел. К сожалению, некоторые числа пропали во время игры.

Теперь последовательность стала неполной. Может существовать произвольное количество индексов \(i\), таких что \(a_i\) становится \(-1\). Пусть новая последовательность будет \(a'\).

Черепаха грустит. Но Черепаха помнит, что для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(a_i = \left\lfloor\frac{a_{i + 1}}{2}\right\rfloor\), либо \(a_{i + 1} = \left\lfloor\frac{a_i}{2}\right\rfloor\) выполняется для исходной последовательности \(a\).

Черепаха хочет, чтобы вы помогли ей завершить последовательность. Но иногда Черепаха ошибается, поэтому вам нужно сказать ей, если вы не можете завершить последовательность.

Формально, вам нужно найти другую последовательность \(b_1, b_2, \ldots, b_n\), состоящую из положительных целых чисел, такую что:

  • Для каждого целого числа \(i\) от \(1\) до \(n\), если \(a'_i \ne -1\), то \(b_i = a'_i\).
  • Для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(b_i = \left\lfloor\frac{b_{i + 1}}{2}\right\rfloor\), либо \(b_{i + 1} = \left\lfloor\frac{b_i}{2}\right\rfloor\) выполняется.
  • Для каждого целого числа \(i\) от \(1\) до \(n\), \(1 \le b_i \le 10^9\).

Если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям выше, вам нужно сообщить \(-1\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^5\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка каждого теста содержит \(n\) целых чисел \(a'_1, a'_2, \ldots, a'_n\) (\(a'_i = -1\) или \(1 \le a'_i \le 10^8\)) — элементы последовательности \(a'\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста, если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям, выведите одно целое число \(-1\).

В противном случае выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — элементы последовательности \(b_1, b_2, \ldots, b_n\), которую вы нашли. Последовательность должна удовлетворять условию \(1 \le b_i \le 10^9\) для каждого целого числа \(i\) от \(1\) до \(n\). Если есть несколько ответов, выведите любой из них.

Примечание

В первом тесте, \([4, 2, 1, 2, 1, 2, 1, 3]\) также может быть ответом, в то время как \([4, 2, 5, 10, 5, 2, 1, 3]\) и \([4, 2, 1, 2, 1, 2, 1, 4]\) не могут.

Во втором тесте, \([1, 2, 5, 2]\) также может быть ответом.

С четвертого по шестой тесты, можно показать, что ответа нет, поэтому вы должны вывести \(-1\).

E. Черепаха и пересекающиеся отрезки

графы жадные алгоритмы снм Структуры данных *2600

Черепаха только что получила \(n\) отрезков и последовательность \(a_1, a_2, \ldots, a_n\). \(i\)-й отрезок представляет собой \([l_i, r_i]\).

Черепаха создаст неориентированный граф \(G\). Если отрезок \(i\) и отрезок \(j\) пересекаются, то Черепаха добавит неориентированное ребро между \(i\) и \(j\) с весом \(|a_i - a_j|\), для каждого \(i \ne j\).

Черепаха хочет, чтобы вы вычислили сумму весов рёбер минимального остовного дерева графа \(G\), или сообщили, что у графа \(G\) нет остовного дерева.

Мы говорим, что два отрезка \([l_1, r_1]\) и \([l_2, r_2]\) пересекаются тогда и только тогда, когда \(\max(l_1, l_2) \le \min(r_1, r_2)\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^5\)). Далее следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — количество отрезков.

\(i\)-я из следующих \(n\) строк содержит три целых числа \(l_i, r_i, a_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le a_i \le 10^9\)) — \(i\)-й отрезок и \(i\)-й элемент последовательности.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — сумму весов рёбер минимального остовного дерева графа \(G\). Если у графа \(G\) нет остовного дерева, выведите \(-1\).

Примечание

В первом тесте граф \(G\) выглядит следующим образом:

Одно из минимальных остовных деревьев \(G\) выглядит следующим образом:

Сумма весов рёбер минимального остовного дерева равна \(9\).

Во втором тесте граф \(G\) выглядит следующим образом:

\(G\) уже является деревом, и сумма весов дерева равна \(13\).

В третьем тесте граф \(G\) выглядит следующим образом:

В четвертом тесте граф \(G\) выглядит следующим образом:

Легко видеть, что \(G\) не связан, поэтому у \(G\) нет остовного дерева.

A. Футбол

жадные алгоритмы математика реализация сортировки *800

Дима очень любит смотреть футбол. В такой игре счет на табло представляется как \(x\) : \(y\), где \(x\) — количество голов первой команды, а \(y\) — количество голов второй команды. В один момент времени только одна команда может забить гол, то есть счет \(x\) : \(y\) может измениться или на \((x + 1)\) : \(y\), или на \(x\) : \((y + 1)\).

Во время просмотра очередного матча по футболу Диму отвлекли по очень важным делам, и после некоторого количества времени он продолжил смотреть матч. Дима помнит, какой счет был до того, как его отвлекли, и какой был, когда он вернулся. Теперь Диму интересует вопрос: могли ли в матче, пока он не смотрел игру, так развиваться события, что команды ни разу не имели равного счета?

Гарантируется, что у двух команд не было равного счета ни в тот момент, когда Дима перестал смотреть игру, ни в тот, когда он вернулся. Однако возможен такой случай, что за время его отсутствия счет не поменялся.

Помогите Диме и ответьте на вопрос!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит два целых числа \(x_{1}, y_{1}\) (\(0 \le x_{1}, y_{1} \le 10^{9}\), \(x_{1} \neq y_{1}\)) — счет, который запомнил Дима, до того как его отвлекли.

Вторая строка каждого набора данных содержит два целых числа \(x_{2}, y_{2}\) (\(x_{1} \le x_{2} \le 10^{9}\), \(y_{1} \le y_{2} \le 10^{9}\), \(x_{2} \neq y_{2}\)) — счет, когда Дима вернулся.

Выходные данные

Для каждого набора входных данных выведите «YES» без кавычек, если могло быть такое, что команды не имели равного счета, иначе выведите «NO» без кавычек.

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе данных счет, который запомнил Дима, \(1\) : \(0\), как только он перестает следить за матчем, первая команда забивает несколько голов подряд, пока счет не становится \(5\) : \(0\), поэтому ответ YES.

Во втором наборе данных счет мог изменяться только так:

  • \(1\) : \(2\)
  • \(2\) : \(2\)
  • \(3\) : \(2\)

В этом варианте есть момент, в котором команды имеют равный счет, поэтому ответ NO.

В третьем наборе данных один из вариантов развития событий:

  • \(1\) : \(2\)
  • \(1\) : \(3\)
  • \(2\) : \(3\)
  • \(2\) : \(4\)
  • \(2\) : \(5\)
  • \(3\) : \(5\)
  • \(4\) : \(5\)

В таком варианте не существовало момента времени, где счет был равный, поэтому ответ YES.

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\) и снова выиграть.

Во втором наборе входных данных Егор не сможет выиграть ни одного раунда, как бы он не старался.

В третьем наборе входных данных можно каждый раунд брать по одной карте, тогда первый и третий раунд будут проигрышными, а второй — выигрышным.

В четвертом наборе данных можно брать по две карты каждый раунд и всегда выигрывать.

B. Поворот угла

жадные алгоритмы Конструктив математика реализация *1200

Вам даны две таблицы \(a\) и \(b\) с \(n\) строками и \(m\) столбцами. Все значения в таблицах равны \(0\), \(1\) или \(2\).

Вы можете выполнить следующую операцию над \(a\) любое количество раз:

  • Выберите в таблице любой подпрямоугольник с длиной и шириной \(\ge 2\). Вы можете выбрать в качестве подпрямоугольника всю таблицу.
  • У подпрямоугольника есть четыре угла. Выберите любую пару диагонально противоположных углов выбранного подпрямоугольника и прибавьте к их значениям \(1\) по модулю \(3\).
  • Для оставшейся пары углов, прибавьте к их значениям \(2\) по модулю \(3\).

Обратите внимание, что эта операция изменяет значения только углов выбранного подпрямоугольника.

Можно ли преобразовать таблицу \(a\) в таблицу \(b\), применив описанную выше операцию любое количество раз (возможно, ноль)?

Входные данные

Первая строка содержит целое число \(t\) — количество наборов входных данных (\(1 \le t \le 250\)).

Для каждого набора входных данных:

Первая строка содержит два целых числа \(n\) и \(m\) — количество строк и столбцов в таблицах (\(2 \le n,m \le 500\)).

Каждая из следующих n строк содержат по m символов — \(j\)-й символ \(i\)-й строки равен \(a_{i,j}\).

Каждая из следующих n строк содержат по m символов — \(j\)-й символ \(i\)-й строки равен \(b_{i,j}\) (\(0 \le a_{i,j}, b_{i,j} \le 2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(m\) по всем наборам входных данных не превосходят \(500\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно преобразовать таблицу \(a\) в таблицу \(b\), и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных таблица \(a\) может быть преобразована в \(b\) следующим образом:

\(\begin{matrix}\fbox{0} & 0 & \fbox{0}\\ 0 & 0 & 0\\ \fbox{0} & 0 & \fbox{0}\end{matrix} \Rightarrow \begin{matrix}1 & 0 & 2\\ 0 & \fbox{0} & \fbox{0}\\ 2 & \fbox{0} & \fbox{1}\end{matrix} \Rightarrow \begin{matrix}1 & 0 & 2\\ \fbox{0} & \fbox{1} & 2\\ \fbox{2} & \fbox{2} & 2\end{matrix} \Rightarrow \begin{matrix}1 & \fbox{0} & \fbox{2}\\ 1 & 0 & 2\\ 1 & \fbox{0} & \fbox{2}\end{matrix} \Rightarrow \begin{matrix}1 & 1 & 1\\ 1 & \fbox{0} & \fbox{2}\\ 1 & \fbox{2} & \fbox{0}\end{matrix} \Rightarrow \begin{matrix}1 & 1 & 1\\ 1 & 1 & 1\\ 1 & 1 & 1\end{matrix}\)

Здесь в каждой операции верхний правый и нижний левый углы, выделенные рамкой, увеличиваются на \(2\) по модулю \(3\), а верхний левый и нижний правый углы увеличиваются на \(1\) по модулю \(3\).

Для четвертого набора входных данных можно показать, что невозможно преобразовать таблицу \(a\) в таблицу \(b\) с помощью любого числа вышеупомянутых операций.

C. Трое в лодке, не считая торт

Бинарный поиск жадные алгоритмы Перебор реализация *1400

Алиса, Боб и Чарли хотят разделить прямоугольный торт, разрезанный на \(n\) частей. Каждый считает, что каждый кусок торта имеет определённую ценность. Алиса считает, что \(i\)-й кусок имеет ценность \(a_i\), Боб — \(b_i\), а Чарли — \(c_i\).

Суммы всех \(a_i\), всех \(b_i\) и всех \(c_i\) по отдельности одинаковы и равны \(tot\).

Учитывая ценности каждого куска торта для каждого человека, нужно дать каждому человеку несколько подряд идущих кусков торта. Другими словами, индексы левых и правых концов этих подотрезков (номера кусков, отданных определённому человеку) можно представить как \((l_a, r_a)\), \((l_b, r_b)\) и \((l_c, r_c)\) для Алисы, Боба и Чарли соответственно. Разбиение должно удовлетворять следующим условиям:

  • Ни один кусок не отдан более чем одному человеку, т.е. никакие два подотрезка из \([l_a,\ldots,r_a]\), \([l_b, \ldots, r_b]\) и \([l_c, \ldots, r_c]\) не пересекаются.
  • Каждая из трёх сумм \( \sum_{i = l_a}^{r_a} a_i, \sum_{i = l_b}^{r_b} b_i, \sum_{i = l_c}^{r_c} c_i \geq \lceil \frac{tot}{3} \rceil\).

Здесь запись \(\lceil \frac{a}{b} \rceil\) обозначает деление с округлением вверх. Результат равен наименьшему целому числу, большему или равному результату точного деления \(a\) на \(b\). Иными словами, результат деления округляется вверх до ближайшего целого. Например, \(\lceil \frac{10}{3} \rceil = 4\) и \(\lceil \frac{15}{3} \rceil = 5\).

Входные данные

Первая строка содержит целое число \(t\) — количество наборов входных данных (\(1 \le t \le 10^4\))

Для каждого набора входных данных:

Первая строка содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Следующие три строки содержат по \(n\) целых чисел:

Одна строка с \(n\) целыми числами \(a_1, a_2, \ldots, a_n\) представляет ценности для Алисы (\(1 \le a_i \le 10^6\)).

Следующая строка с \(n\) целыми числами \(b_1, b_2, \ldots, b_n\) представляет ценности для Боба (\(1 \le b_i \le 10^6\)).

Следующая строка с \(n\) целыми числами \(c_1, c_2, \ldots, c_n\) представляет ценности для Чарли (\(1 \le c_i \le 10^6\)).

Гарантируется, что \( \sum_{i = 1}^{n} a_i = \sum_{i = 1}^{n} b_i = \sum_{i = 1}^{n} c_i\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если искомые подотрезки не существуют.

В противном случае выведите шесть чисел: \(l_a, r_a, l_b, r_b, l_c, r_c\) — соответствующие начальные и конечные индексы (в \(1\)-индексации) подотрезков для Алисы, Боба и Чарли соответственно.

Примечание

В первом наборе входных данных сумма каждого из трех массивов равна \(9\). Каждому человеку нужна часть торта, соответствующая подотрезку с суммарной ценностью не менее \(\lceil \frac{9}{3} \rceil = 3\).

Если мы назначим подотрезок (\(1\),\(1\)) Алисе, то его общая ценность для нее составит \(5\), что \(\ge 3\); назначим подотрезок (\(2\),\(3\)) Бобу, общая ценность для него составит \(1 + 5 = 6\), что \(\ge 3\); и назначим подотрезок (\(4\),\(5\)) Чарли, общая ценность для него составит \(1 + 5 = 6\), что также \(\ge 3\). Каждый человек получает свои куски торта, и ни один кусок не является общим для двух или более человек.

Можно показать, что для третьего набора входных данных невозможно раздать кусочки торта таким образом, чтобы удовлетворить заданным условиям.

D. Дилемма обмена

жадные алгоритмы Конструктив математика разделяй и властвуй сортировки Структуры данных *1700

Даны два массива \(a\) и \(b\) длины \(n\), состоящих из различных целых положительных чисел, и мы хотим сделать массивы равными. Два массива \(x\) и \(y\) длины \(k\) называются равными, если для всех \(1 \le i \le k\) выполняется \(x_i = y_i\).

За один ход можно выбрать некоторые индексы \(l\) и \(r\) в \(a\) (\(l \le r\)) и поменять местами \(a_l\) и \(a_r\), затем выбрать некоторые \(p\) и \(q\) (\(p \le q\)) в \(b\) такие, что \(r-l=q-p\), и поменять местами \(b_p\) и \(b_q\).

Можно ли сделать массивы одинаковыми?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(n\) различных целых чисел \(b_1,b_2,b_3,\ldots,b_n\) (\(1 \le b_i \le 2 \cdot 10^5\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если массивы \(a\) и \(b\) можно сделать одинаковыми. В противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных не нужно выполнять никаких операций, поскольку массивы уже равны.

Для второго набора входных данных можно доказать, что не существует способа сделать массивы одинаковыми.

В третьем наборе входных данных один из способов сделать массивы равными такой: на первом ходу выбрать \(l=1\), \(r=3\), \(p=1\), \(q=3\), на втором выбрать \(l=1\), \(r=2\), \(p=3\), \(q=4\).

F. Значения массивов

Бинарный поиск битмаски жадные алгоритмы Структуры данных *2500

У вас есть массив целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\).

Значение подотрезка длины \(\ge 2\): \(a[l, r] = [a_l, a_{l+1}, \ldots, a_r]\) — это минимальное значение \(a_i \oplus a_j\) такое, что \(l \le i < j \le r\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Вам нужно найти \(k\)-е наименьшее значение среди всех подотрезков длины \(\ge 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le \frac{n\cdot(n-1)}{2}\)).

Вторая строка входных данных содержит \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(k\)-ю порядковую статистику среди значений всех подотрезков длины хотя бы \(2\).

Примечание

В первом наборе входных данных мы имеем такие подотрезки и наименьшие значения побитового исключающего ИЛИ пары элементов:

\([1,2]: 3\)

\([2,3]: 1\)

\([3,4]: 7\)

\([4,5]: 1\)

\([1,2,3]: 1\)

\([2,3,4]: 1\)

\([3,4,5]: 1\)

\([1,2,3,4]: 1\)

\([2,3,4,5]: 1\)

\([1,2,3,4,5]: 1\)

Упорядоченные значения: \(1, 1, 1, 1, 1, 1, 1, 1, 3, 7\). Таким образом, вторым наименьшим элементом будет \(1\).

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\) (если мы начнем перемешивание с исходной корневой вершины).

C. Хорошие префиксы

жадные алгоритмы *1000

Алекс считает, что некоторый массив является хорошим, если существует элемент, который является суммой всех других элементов (сумма всех других элементов равна \(0\), если других элементов нет). Например, массив \([1,6,3,2]\) является хорошим, так как \(1+3+2=6\). Кроме того, массив \([0]\) также является хорошим. Однако массивы \([1,2,3,4]\) и \([1]\) не являются хорошими.

У Алекса есть массив \(a_1,a_2,\ldots,a_n\). Помогите ему посчитать количество хороших непустых префиксов массива \(a\). Другими словами, посчитайте количество целых чисел \(i\) (\(1 \le i \le n\)), для которых префикс длины \(i\) (т.е. \(a_1,a_2,\ldots,a_i\)) является хорошим.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших непустых префиксов массива \(a\).

Примечание

В четвертом примере массив имеет пять префиксов:

  • префикс \([0]\) является хорошим массивом, как упоминается в условии;
  • префикс \([0, 1]\) не является хорошим массивом, так как \(0 \ne 1\);
  • префикс \([0, 1, 2]\) не является хорошим массивом, так как \(0 \ne 1 + 2\), \(1 \ne 0 + 2\) и \(2 \ne 0 + 1\);
  • префикс \([0, 1, 2, 1]\) является хорошим массивом, так как \(2 = 0 + 1 + 1\);
  • префикс \([0, 1, 2, 1, 4]\) является хорошим массивом, так как \(4 = 0 + 1 + 2 + 1\).

Как видно, три из них являются хорошими, поэтому ответ равен \(3\).

B. Стабилизация матрицы

жадные алгоритмы Перебор сортировки Структуры данных *1000

Вам дана матрица \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Элемент на пересечении \(i\)-й строки и \(j\)-го столбца обозначим за \(a_{ij}\).

Рассмотрим алгоритм стабилизации матрицы \(a\):

  1. Найти клетку \((i, j)\), такую что ее значение строго больше значения всех соседних с ней клеток. Если такой клетки нет, завершить алгоритм. Если таких клеток несколько, то выбирается клетка с наименьшим значением \(i\), а если и таких несколько, то среди них с наименьшим значением \(j\).
  2. Сделать \(a_{ij} = a_{ij} - 1\).
  3. Перейти к шагу \(1\).

В этой задаче клетки \((a, b)\) и \((c, d)\) являются соседними, если у них есть общая сторона, то есть \(|a - c| + |b - d| = 1\).

Ваша задача вывести матрицу \(a\) после того, как будет запущен алгоритм стабилизации. Можно показать, что данный алгоритм не может выполняться бесконечное количество итераций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100, n \cdot m > 1\)) — количество строк и столбцов матрицы \(a\).

Следующие \(n\) строк описывают соответствующие строки матрицы. \(i\)-я строка содержит \(m\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{im}\) (\(1 \leq a_{ij} \leq 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) чисел в каждой — значения клеток матрицы \(a\) после алгоритма стабилизации.

Примечание

В первом наборе входных данных два раза подряд алгоритм выберет клетку \((1, 1)\) и завершится.

Во втором наборе входных данных нет клетки, значение которой строго больше значений всех соседних клеток.

В третьем наборе входных данных алгоритм выберет клетку \((2, 2)\) и завершится.

В четвертом наборе входных данных алгоритм три раза выберет клетку \((1, 1)\) и затем два раза клетку \((2, 3)\).

C. Запросы обновления

жадные алгоритмы сортировки Структуры данных *1100

Рассмотрим следующую простую задачу. Вам дана строка \(s\) длины \(n\), состоящая из строчных букв латинского алфавита, а также массив индексов \(ind\) длины \(m\) (\(1 \leq ind_i \leq n\)) и строка \(c\) длины \(m\), состоящая из строчных букв латинского алфавита. Далее вы по порядку делали операцию обновления, а именно во время \(i\)-й операции вы делали \(s_{ind_i} = c_i\). Обратите внимание, что вы делаете все \(m\) операций от первой до последней.

Конечно же, если поменять порядок индексов в массиве \(ind\) и/или порядок букв в строке \(c\), можно получить разный результат. Найдите какую лексикографически наименьшую строку \(s\) можно получить после \(m\) операций обновления, если вы можете как угодно переставить индексы в массиве \(ind\) и буквы в строке \(c\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда одно из двух условий выполнено:

  • \(a\) является префиксом \(b\), но \(a \neq b\);
  • в первой позиции, в которой \(a\) и \(b\) отличаются, в строке \(a\) стоит символ, который встречается в алфавите раньше, чем соответствующий символ в строке \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — длина строки \(s\) и количество обновлений. Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(ind_1, ind_2, \ldots, ind_m\) (\(1 \leq ind_i \leq n\)) — массив индексов \(ind\).

Четвертая строка каждого набора входных данных содержит строку \(c\) длины \(m\), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьшую строку \(s\), которую можно получить, если как угодно перемешать индексы в массиве \(ind\) и буквы в строке \(c\).

Примечание

В первом наборе входных данных можно не перемешивать массив \(ind\) и строку \(c\) и просто сделать все операции именно в таком порядке.

Во втором наборе входных данных можно сделать массив \(ind = [1, 1, 4, 2]\) и \(c =\) «zczw». Тогда строка \(s\) будет меняться следующим образом: \(meow \rightarrow zeow \rightarrow ceow \rightarrow ceoz \rightarrow cwoz\).

В третьем наборе входных данных можно оставить массив \(ind\) без изменений и сделать \(c = \) «admn». Тогда строка \(s\) будет меняться следующим образом: \(abacaba \rightarrow abacaba \rightarrow abdcaba \rightarrow abdcmba \rightarrow abdcmbn\).

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\).

E. Красивый массив

жадные алгоритмы математика сортировки теория чисел *1700

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(k\). Вам нужно сделать его красивым за наименьшее количество операций.

До применения операций вы можете перемешать элементы массива как угодно. За одну операцию вы можете сделать следующее:

  • Выбрать индекс \(1 \leq i \leq n\),
  • Сделать \(a_i = a_i + k\).

Массив \(b_1, b_2, \ldots, b_n\) является красивым, если \(b_i = b_{n - i + 1}\) для всех \(1 \leq i \leq n\).

Найдите наименьшее количество операций, за которое можно сделать массив красивым, или сообщите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\), \(1 \leq k \leq 10^9\)) — размер массива \(a\) и число \(k\) из условия задачи.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы массив стал красивым, или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных массив уже является красивым.

Во втором наборе входных данных можно не перемешивать массив до операций и \(83966524\) раз сделать операцию с индексом \(i = 1\).

В третьем наборе входных данных можно перемешать массив \(a\) и сделать его равным \([2, 3, 1]\). После этого применить операцию с индексом \(i = 3\), чтобы получился массив \([2, 3, 2]\), который является красивым.

В восьмом наборе входных данных не существует набора операций и способа перемешать элементы, чтобы сделать массив красивым.

В девятом наборе входных данных массив уже является красивым.

A. Загрузить больше памяти

жадные алгоритмы математика *800

О нет, серверам ForceCodes не хватает памяти! К счастью, вы можете им помочь, загрузив немного своей памяти!

Вы хотите загрузить \(n\) гигабайт памяти. Каждую секунду вы будете загружать либо \(0\), либо \(1\) гигабайт памяти. Однако есть ограничение на скорость загрузки: в любые \(k\) последовательных секунд вы можете суммарно загрузить не более \(1\)-го гигабайта памяти.

Найдите минимальное количество секунд, необходимое для того, чтобы загрузить \(n\) гигабайт памяти!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\)) — количество гигабайт, которые вы хотите загрузить, и длина окошка времени соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество секунд, необходимое, чтобы загрузить \(n\) гигабайт памяти.

Примечание

В первом наборе входных данных вы можете каждую секунду загружать по \(1\) гигабайту памяти. Поэтому \(5\) гигабайт памяти можно загрузить за \(5\) секунд.

Во втором наборе входных данных вы можете загрузить \(1\) гигабайт памяти в первую секунду, \(0\) во вторую и \(1\) в третью, что в сумме даст \(2\) гигабайта загруженной памяти.

В третьем наборе входных данных вы можете загрузить \(1\) гигабайт памяти в первую секунду, \(0\) во вторую, \(0\) в третью и \(1\) в четвёртую, что в сумме даст \(2\) гигабайта загруженной памяти.

B. К-сортировка

жадные алгоритмы *1000

Дан массив целых чисел \(a\) длины \(n\).

Вы можете применить следующую операцию любое количество раз (возможно, нулевое):

  • Сначала выбрать натуральное \(k\) такое, что \(1 \le k \le n\), и заплатить \(k + 1\) монету.
  • Потом выбрать ровно \(k\) индексов \(1 \le i_1 < i_2 < \ldots < i_k \le n\).
  • После этого, для каждого \(x\) от \(1\) до \(k\), увеличить \(a_{i_x}\) на \(1\).

Найдите минимальное количество монет, необходимых для того, чтобы сделать массив \(a\) неубывающим, то есть \(a_1 \le a_2 \le \ldots \le a_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество монет, необходимых для того, чтобы сделать массив \(a\) неубывающим.

Примечание

В первом наборе входных данных массив \(a\) уже отсортирован, поэтому ответ ноль.

Во втором наборе входных данных оптимальная последовательность операций это:

  • Выбрать \(k = 2\) и индексы \(2\) и \(5\): \([ 2, \color{red}{1}, 4, 7, \color{red}{6} ] \rightarrow [2, 2, 4, 7, 7]\). Это стоит \(3\) монеты.
Можно доказать, что невозможно сделать \(a\) неубывающим, потратив меньше чем \(3\) монеты.

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]\).

E. Прекрасное дерево!

Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2000

Да благословят боги этот прекрасный ArrayForces!
Случайная галька

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), в \(i\)-й вершине записано целое число \(a_i\).

Пусть \(L\) — это множество всех прямых сыновей\(^{\text{∗}}\) вершины \(v\). Назовём дерево прекрасным, если для всех вершин \(v\) с непустым \(L\) верно \(\)a_v \le \sum_{u \in L}{a_u}.\(\)

За одну операцию вы можете выбрать любую вершину \(v\) и увеличить значение \(a_v\) на \(1\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

\(^{\text{∗}}\) Вершина \(u\) называется прямым сыном \(v\), если:

  • \(u\) и \(v\) соединены ребром, и
  • \(v\) лежит на (единственном) пути от \(u\) до корня дерева.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — значения, написанные на вершинах дерева.

Третья строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3 , \ldots, p_n\) (\(1 \le p_i < i\)), каждое из которых означает, что в графе есть ребро между вершинами \(i\) и \(p_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

Примечание

Дерево в первом наборе входных данных:

Вы можете применить операцию к вершине \(5\) и дважды к вершине \(2\), чтобы получить прекрасное дерево.

Во втором наборе входных данных вы можете два раза применить операцию к вершине \(2\), чтобы получить прекрасное дерево.

В третьих и четвёртых наборах входных данных дерево уже прекрасно, поэтому применять операций не надо.

A. Разделите мультимножество

жадные алгоритмы математика Перебор реализация *900

Мультимножество — это набор чисел, в котором могут быть равные элементы, и порядок чисел не имеет значения. Например, \(\{2,2,4\}\) — мультимножество.

У вас есть мультимножество \(S\). Изначально мультимножество содержит только одно положительное целое число \(n\). То есть, \(S=\{n\}\). Кроме того, задано положительное целое число \(k\).

За одну операцию вы можете выбрать любое положительное целое число \(u\) из \(S\) и удалить одно вхождение \(u\) из \(S\). Затем вставить не более \(k\) положительных целых чисел в \(S\), чтобы сумма всех вставленных чисел была равна \(u\).

Найдите минимальное количество операций, чтобы сделать \(S\) состоящим из \(n\) единиц.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n,k\) (\(1\le n\le 1000,2\le k\le 1000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число, которое является требуемым ответом.

Примечание

Для первого набора входных данных изначально \(S=\{1\}\), что уже удовлетворяет требованию. Поэтому нам не нужно делать ни одной операции.

Для второго набора входных данных изначально \(S=\{5\}\). Мы можем применить следующие операции:

  • Выберите \(u=5\), удалите \(u\) из \(S\) и вставьте \(2,3\) в \(S\). Теперь \(S=\{2,3\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,3\}\).
  • Выберите \(u=3\), удалите \(u\) из \(S\) и вставьте \(1,2\) в \(S\). Теперь \(S=\{1,1,1,2\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,1,1,1\}\).

Используя \(4\) операции в общей сложности, мы достигаем цели.

Для третьего набора входных данных изначально \(S=\{6\}\). Мы можем применить следующие операции:

  • Выберите \(u=6\), удалите \(u\) из \(S\) и вставьте \(1,2,3\) в \(S\). Теперь \(S=\{1,2,3\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,1,3\}\).
  • Выберите \(u=3\), удалите \(u\) из \(S\) и вставьте \(1,1,1\) в \(S\). Теперь \(S=\{1,1,1,1,1,1\}\).

Используя \(3\) операции в общей сложности, мы достигаем цели.

Для четвертого набора входных данных изначально \(S=\{16\}\). Мы можем применить следующие операции:

  • Выберите \(u=16\), удалите \(u\) из \(S\) и вставьте \(4,4,4,4\) в \(S\). Теперь \(S=\{4,4,4,4\}\).
  • Повторите \(4\) раза: выберите \(u=4\), удалите \(u\) из \(S\) и вставьте \(1,1,1,1\) в \(S\).

Используя \(5\) операций в общей сложности, мы достигаем цели.

B. Сделать большинство

жадные алгоритмы реализация *900

Вам дана последовательность \([a_1,\ldots,a_n]\), где каждый элемент \(a_i\) равен либо \(0\), либо \(1\). Вы можете применить несколько (возможно, нулевое количество) операций к последовательности. В каждой операции вы выбираете два целых числа \(1\le l\le r\le |a|\) (где \(|a|\) — текущая длина \(a\)) и заменяете \([a_l,\ldots,a_r]\) одним элементом \(x\), где \(x\) — большинство \([a_l,\ldots,a_r]\).

Здесь большинство последовательности, состоящей из \(0\) и \(1\), определяется следующим образом: предположим, что в последовательности содержится \(c_0\) нулей и \(c_1\) единиц соответственно.

  • Если \(c_0\ge c_1\), то большинство — \(0\).
  • Если \(c_0<c_1\), то большинство — \(1\).

Например, предположим, что \(a=[1,0,0,0,1,1]\). Если мы выберем \(l=1,r=2\), то результирующая последовательность будет \([0,0,0,1,1]\). Если мы выберем \(l=4,r=6\), то результирующая последовательность будет \([1,0,0,1]\).

Определите, можно ли сделать \(a=[1]\) с помощью конечного количества операций.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 4\cdot 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)).

Вторая строка каждого набора содержит строку, состоящую из \(0\) и \(1\), описывающую последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если возможно сделать \(a=[1]\), выведите YES. В противном случае выведите NO. Вы можете вывести ответ в любом регистре (верхний или нижний). Например, строки yEs, yes, Yes и YES будут распознаны как положительные ответы.

Примечание

В четвертом наборе входных данных изначально \(a=[1,0,0,0,0,0,0,0,1]\). Допустимая последовательность операций:

  1. Выберите \(l=2,r=8\) и примените операцию. \(a\) становится \([1,0,1]\).
  2. Выберите \(l=1,r=3\) и примените операцию. \(a\) становится \([1]\).

C. Возрастающая последовательность с фиксированным ИЛИ

битмаски жадные алгоритмы Конструктив *1300

Дано положительное целое число \(n\). Найдите самую длинную последовательность положительных целых чисел \(a=[a_1,a_2,\ldots,a_k]\), которая удовлетворяет следующим условиям, и выведите эту последовательность:

  • \(a_i\le n\) для всех \(1\le i\le k\).
  • \(a\) строго возрастающая. То есть \(a_i>a_{i-1}\) для всех \(2\le i\le k\).
  • \(a_i\,|\,a_{i-1}=n\) для всех \(2\le i\le k\), где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Затем следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{18}\)).

Гарантируется, что сумма длин самых длинных допустимых последовательностей не превышает \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных выведите две строки. В первой строке выведите длину вашей сконструированной последовательности \(k\). Во второй строке выведите \(k\) положительных целых чисел, обозначающих последовательность. Если существует несколько самых длинных последовательностей, то вы можете вывести любую из них.

B. Подстрока и подпоследовательность

жадные алгоритмы Перебор Строки *1200

Задано две строки \(a\) и \(b\), состоящие из строчных латинских букв.

Подпоследовательность строки — это строка, которую можно получить из исходной строки удалением любого количества символов (возможно, ни одного). Подстрока строки — это ее непрерывная подпоследовательность.

Например, рассмотрим строку abac:

  • a, b, c, ab, aa, ac, ba, bc, aba, abc, aac, bac и abac — подпоследовательности этой строки;
  • a, b, c, ab, ba, ac, aba, bac и abac — подстроки этой строки.

Ваша задача — вычислить минимально возможную длину строки, которая содержит \(a\) в качестве подстроки и \(b\) в качестве подпоследовательности.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит строку \(a\) (\(1 \le |a| \le 100\)), состоящую из строчных латинских букв.

Вторая строка каждого набора содержит строку \(b\) (\(1 \le |b| \le 100\)), состоящую из строчных латинских букв.

Выходные данные

Для каждого набора выведите одно целое число — минимально возможную длину строки, которая содержит \(a\) в качестве подстроки и \(b\) в качестве подпоследовательности.

Примечание

В приведенных ниже примерах подпоследовательность символов, соответствующая строке \(b\), выделена жирным шрифтом.

В первом примере один из возможных ответов — caba.

Во втором примере один из возможных ответов — ercf.

В третьем примере один из возможных ответов — mmm.

В четвертом примере один из возможных ответов — contest.

В пятом примере один из возможных ответов — abcdefg.

C. Два фильма

жадные алгоритмы математика *1400

Компания выпустила \(2\) фильма в прокат. Эти \(2\) фильма посмотрели \(n\) человек. Для каждого человека мы знаем его отношение к первому фильму (понравился, нейтральное или не понравился) и ко второму фильму.

Если попросить человека оценить фильм, то:

  • если фильм понравился, он оставит положительный отзыв, и рейтинг фильма повысится на \(1\);
  • если фильм не понравился, он оставит отрицательный отзыв, и рейтинг фильма уменьшится на \(1\);
  • в противном случае он оставит нейтральный отзыв, и рейтинг фильма не изменится.

Каждый человек оставит ровно один отзыв на один из фильмов. Вы можете определить, какой фильм будет оценивать каждый человек.

Рейтинг компании — это минимальный из рейтингов двух фильмов. Ваша задача — посчитать максимально возможный рейтинг компании.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-1 \le a_i \le 1\)), где \(a_i\) равно \(-1\), если первый фильм не понравился \(i\)-му зрителю; равно \(1\), если первый фильм понравился; и \(0\), если отношение нейтральное.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-1 \le b_i \le 1\)), где \(b_i\) равно \(-1\), если второй фильм не понравился \(i\)-му зрителю; равно \(1\), если второй фильм понравился; и \(0\), если отношение нейтральное.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимально возможный рейтинг компании, если для каждого человека выбрать, на какой фильм оставлять отзыв.

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\) очков опыта.

A. Байт на посылку

жадные алгоритмы игры Перебор сортировки *900

Алиса и Боб играют в игру на массиве \(a\) размера \(n\).

Они поочередно выполняют операции, начинает Алиса. Игрок, который не может выполнить операцию, проигрывает. Есть переменная \(mx\) изначально равная \(0\).

За одну операцию игрок может:

  • Выбрать индекс \(i\) (\(1 \le i \le n\)) такой, что \(a_{i} \geq mx\) и присвоить \(mx\) значение \(a_{i}\). Затем сделать \(a_{i}\) равным \(0\).

Определите, есть ли у Алисы выигрышная стратегия.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(2 \leq n \leq 50\)) — размер массива.
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.
Выходные данные

Для каждого набора входных данных, если у Алисы есть выигрышная стратегия, выведите «YES». В противном случае, выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных Алиса может выбрать \(i=1\), поскольку \(a_1=2 \ge mx=0\).

После операции Алисы, \(a=[0,1]\) и \(mx=2\). Боб не может выполнить никакую операцию. Алиса выигрывает.

Во втором наборе входных данных у Алисы нет выигрышной стратегии.

Например, если Алиса выбирает \(i=1\), после операции Алисы: \(a=[0,1]\) и \(mx=1\). Тогда Боб может выбрать \(i=2\), так как \(a_2=1 \ge mx=1\). После операции Боба: \(a=[0,0]\) и \(mx=1\). Алиса не может выполнить никакую операцию. Боб выигрывает.

B. Конструирование массива

жадные алгоритмы Конструктив *1200

Для массива \(b\) размера \(m\) определим:

  • Позиция максимального префикса массива \(b\) — это наименьший индекс \(i\), удовлетворяющий условию \(b_1+\ldots+b_i=\max_{j=1}^{m}(b_1+\ldots+b_j)\);
  • Позиция максимального суффикса массива \(b\) — это наибольший индекс \(i\), удовлетворяющий условию \(b_i+\ldots+b_m=\max_{j=1}^{m}(b_j+\ldots+b_m)\).

Даны три целых числа \(n\), \(x\) и \(y\) (\(x > y\)). Сконструируйте массив \(a\) размера \(n\), удовлетворяющий условиям:

  • \(a_i\) равно либо \(1\), либо \(-1\) для всех \(1 \le i \le n\);
  • Позиция максимального префикса \(a\) равна \(x\);
  • Позиция максимального суффикса \(a\) равна \(y\).

Если существует несколько массивов, удовлетворяющих условиям, выведите любой из них. Можно доказать, что такой массив всегда существует при заданных условиях.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Единственная строка содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \leq n \leq 10^5, 1 \le y \lt x \le n)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

Примечание

Во втором наборе входных данных

  • \(i=x=4\) — это наименьший индекс, удовлетворяющий условию \(a_1+\ldots +a_i=\max_{j=1}^{n}(a_1+\ldots+a_j)=2\);
  • \(i=y=3\) — это наибольший индекс, удовлетворяющий условию \(a_i+\ldots +a_n=\max_{j=1}^{n}(a_j+\ldots+a_n)=2\).

Таким образом, массив \(a=[1,-1,1,1]\) удовлетворяет всем условиям.

C. Сумасшедшая MAD сумма

жадные алгоритмы математика Перебор *1500

Определим \(\operatorname{MAD}\) (Максимальное Повторяющееся Значение) в массиве как наибольшее число, которое присутствует в массиве хотя бы дважды. Если нет такого числа, которое присутствует в массиве хотя бы дважды, значение \(\operatorname{MAD}\) равно \(0\).

Например, \(\operatorname{MAD}([1, 2, 1]) = 1\), \(\operatorname{MAD}([2, 2, 3, 3]) = 3\), \(\operatorname{MAD}([1, 2, 3, 4]) = 0\).

Вам дан массив \(a\) размера \(n\). Изначально переменная \(sum\) равна \(0\).

Следующий процесс будет выполняться, пока все числа в массиве \(a\) не станут равными \(0\):

  1. Присвоить \(sum := sum + \sum_{i=1}^{n} a_i\);
  2. Пусть \(b\) — массив размера \(n\). Присвоим \(b_i :=\ \operatorname{MAD}([a_1, a_2, \ldots, a_i])\) для всех \(1 \le i \le n\), затем присвоим \(a_i := b_i\) для всех \(1 \le i \le n\).

Найдите значение \(sum\) после выполнения процесса.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива \(a\);
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите финальное значение \(sum\).

Примечание

В первом наборе входных данных, изначально \(a=[1]\).

В первом цикле:

  1. Присвоим \(sum := sum + a_1 = 0+1=1\);
  2. Присвоим \(b_1 :=\ \operatorname{MAD}([a_1])=\ \operatorname{MAD}([1])=0\), затем присвоим \(a_1 := b_1\).

После первого цикла, \(a=[0]\) и процесс завершается. Значение \(sum\) после процесса равно \(1\).

Во втором наборе входных данных, изначально \(a=[2,2,3]\).

После первого цикла, \(a=[0,2,2]\) и \(sum=7\).

После второго цикла, \(a=[0,0,2]\) и \(sum=11\).

После третьего цикла, \(a=[0,0,0]\) и \(sum=13\). После этого процесс завершается.

Финальное значение \(sum\) равно \(13\).

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\).

A. Максимизируйте оставшийся элемент

жадные алгоритмы реализация *800

Вам дан массив \(a\) из \(n\) целых чисел, где \(n\) — нечётное.

За одну операцию вы можете удалить из массива \(a\) два соседних элемента, а затем объединить оставшиеся части массива. Например, из массива \([4,7,4,2,9]\) можно получить массивы \([4,2,9]\) и \([4,7,9]\) с помощью операций \([\underline{4,7}, 4,2,9] \to [4,2,9]\) и \([4,7,\underline{4,2},9] \to [4,7,9]\) соответственно. Однако мы не можем получить массив \([7,2,9]\), так как для этого нужно удалить несмежные элементы \([\underline{4},7,\underline{4},2,9]\).

Вы выполняете эту операцию несколько раз, пока в \(a\) не останется ровно один элемент.

Найдите максимально возможное значение оставшегося элемента в \(a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 99\); \(n\) — нечетное) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)) — элементы массива \(a\).

Заметим, что сумма \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение оставшегося элемента в \(a\).

Примечание

В первом наборе входных данных массив \(a\) равен \([6]\). Поскольку в нем только один элемент, никаких операций не требуется. Максимально возможное значение оставшегося элемента — \(6\).

Во втором наборе входных данных массив \(a\) равен \([1, 3, 2]\). Мы можем удалить первые два элемента \([\underline{1, 3}, 2] \to [2]\), или удалить последние два элемента \([1, \underline{3, 2}] \to [1]\). Таким образом, максимально возможное значение оставшегося элемента равно \(2\).

В третьем наборе входных данных массив \(a\) равен \([4, 7, 4, 2, 9]\). Один из способов максимизации оставшегося элемента — \([4, \underline{7, 4}, 2, 9] \to [\underline{4, 2}, 9] \to [9]\). Таким образом, максимально возможное значение оставшегося элемента равно \(9\).

В четвертом наборе входных данных массив \(a\) равен \([3, 1, 4, 1, 5, 9, 2]\). Можно показать, что максимально возможное значение оставшегося элемента равно \(5\).

B. Восстановление И

битмаски жадные алгоритмы Конструктив *1100

Вам дан массив \(b\) из \(n - 1\) целого числа.

Массив \(a\) из \(n\) целых чисел называется хорошим, если \(b_i = a_i \, \& \, a_{i + 1}\) для всех \(1 \le i \le n-1\), где \(\&\) обозначает операцию побитового И.

Постройте хороший массив или сообщите, что хороших массивов не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n - 1\) целое число \(b_1, b_2, \ldots, b_{n - 1}\) (\(0 \le b_i < 2^{30}\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(-1\), если хороших массивов не существует.

В противном случае выведите через пробел \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — элементы хорошего массива \(a\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных \(b = [1]\). Возможным хорошим массивом является \(a=[5, 3]\), так как \(a_1 \, \& \, a_2 = 5 \, \& \, 3 = 1 = b_1\).

Во втором наборе входных данных \(b = [2, 0]\). Возможным хорошим массивом является \(a=[3, 2, 1]\), так как \(a_1 \, \& \, a_2 = 3 \, \& \, 2 = 2 = b_1\) и \(a_2 \, \& \, a_3 = 2 \, \& \, 1 = 0 = b_2\).

В третьем наборе входных данных \(b = [1, 2, 3]\). Можно показать, что хороших массивов не существует, поэтому ответом будет \(-1\).

В четвертом наборе входных данных \(b = [3, 5, 4, 2]\). Возможный хороший массив — \(a=[3, 7, 5, 6, 3]\).

C. Абсолютный ноль

жадные алгоритмы Конструктив математика *1300

Вам дан массив \(a\) из \(n\) целых чисел.

За одну операцию вы можете выполнить следующее двухэтапное действие:

  1. Выбрать целое число \(x\) (\(0 \le x \le 10^{9}\)).
  2. Заменить каждое \(a_i\) на \(|a_i - x|\), где \(|v|\) обозначает модуль \(v\).

Например, при выборе \(x = 8\) массив \([5, 7, 10]\) изменится на \([|5-8|, |7-8|, |10-8|] = [3,1,2]\).

Постройте последовательность операций, чтобы сделать все элементы \(a\) равными \(0\) не более чем за \(40\) операций или определите, что это невозможно. Вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(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\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), если невозможно сделать все элементы массива равными \(0\) не более чем за \(40\) операций.

В противном случае выведите две строки. Первая строка должна содержать одно целое число \(k\) (\(0 \le k \le 40\)) — количество операций. Вторая строка должна содержать \(k\) целых чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i \le 10^{9}\)) — последовательность операций, обозначающую, что на \(i\)-й операции вы выбрали \(x=x_i\).

Если существует несколько решений, выведите любое из них.

Вам не обязательно минимизировать количество операций.

Примечание

В первом наборе входных данных мы можем получить нужный массив за одну операцию, выбрав \(x = 5\) и изменив массив с \([5]\) на \([0]\).

Во втором наборе входных данных никаких операций не требуется, поскольку все элементы массива уже равны \(0\).

В третьем наборе входных данных мы можем выбрать \(x = 6\), чтобы изменить массив с \([4, 6, 8]\) на \([2, 0, 2]\), затем выбрать \(x = 1\), чтобы изменить его на \([1, 1, 1]\), и, наконец, снова выбрать \(x = 1\), чтобы изменить массив на \([0, 0, 0]\).

В четвертом наборе входных данных мы можем сделать все элементы равными \(0\), выполнив последовательность операций \((60, 40, 20, 10, 30, 25, 5)\).

В пятом наборе входных данных можно показать, что невозможно сделать все элементы равными \(0\) не более чем за \(40\) операций. Поэтому ответом будет \(-1\).

D. Простая XOR раскраска

битмаски графы жадные алгоритмы Конструктив математика теория чисел *1900

Вам дан неориентированный граф с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Между вершинами \(u\) и \(v\) существует ребро тогда и только тогда, когда \(u \oplus v\) является простым числом, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Раскрасьте все вершины графа в минимальное количество цветов так, чтобы ни одна пара вершин, непосредственно соединенных ребром, не была покрашена в один цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в графе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

Первая строка должна содержать одно целое число \(k\) (\(1 \le k \le n\)) — минимально необходимое количество цветов.

Вторая строка должна содержать \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le k\)) — цвет каждой вершины.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных минимальное количество цветов равно \(1\), потому что дана только одна вершина.

Во втором наборе входных данных минимальное количество цветов равно \(2\), потому что существует ребро, соединяющее \(1\) и \(2\) (\(1 \oplus 2 = 3\), что является простым числом).

В третьем наборе входных данных минимальное количество цветов по-прежнему равно \(2\), потому что \(2\) и \(3\) могут быть окрашены одинаково, так как между \(2\) и \(3\) нет ребра (\(2 \oplus 3 = 1\), что не является простым числом).

В четвертом наборе входных данных можно показать, что минимальное количество цветов равно \(3\).

В пятом наборе входных данных можно показать, что минимальное количество цветов равно \(3\).

В шестом наборе входных данных можно показать, что минимальное количество цветов равно \(4\).

E. Игра с раскрасками

графы жадные алгоритмы игры интерактив Конструктив поиск в глубину и подобное *1900

Это интерактивная задача.

Рассмотрим связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер. Каждая вершина может быть окрашена в один из трех цветов: \(1\), \(2\) или \(3\). Изначально все вершины не окрашены.

Алиса и Боб играют в игру, состоящую из \(n\) раундов. В каждом раунде происходит следующий двухэтапный процесс:

  1. Алиса выбирает два различных цвета.
  2. Боб выбирает непокрашенную вершину и красит ее в один из двух цветов, выбранных Алисой.

Алиса выигрывает, если существует ребро, соединяющее две вершины одного цвета. В противном случае побеждает Боб.

Вам дан граф. Ваша задача — решить, за кого из игроков вы хотите играть, и выиграть игру.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n \le 10^4\), \(n - 1 \le m \le \min(\frac{n \cdot (n - 1)}{2}, 10^4)\)) — количество вершин и количество ребер в графе соответственно.

Каждая из следующих \(m\) строк каждого набора входных данных содержит по два целых числа \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\)) — ребра графа. Гарантируется, что граф связен, и что в нем нет петель и кратных ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных необходимо вывести одну строку, содержащую либо «Alice», либо «Bob» — игрока, за которого вы хотите играть.

Затем происходит \(n\) раундов, в каждом из которых происходит данный двухэтапный процесс:

  1. Алиса (либо вы, либо собеседник) выводит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 3\), \(a \neq b\)) — цвета, выбранные Алисой.
  2. Боб (либо вы, либо собеседник) выводит два целых числа \(i\) и \(c\) (\(1 \le i \le n\), \(c = a\) или \(c = b\)) — вершина и цвет, выбранные Бобом. Вершина \(i\) должна быть неокрашенной.

Если любой из ваших выводов недействителен, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

В конце \(n\) раундов, если ваше решение проиграло, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

Если вы получили число \(-1\) вместо корректного значения, ваша программа должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Обратите внимание, что если вы играете за Алису, и уже есть ребро, соединяющее вершины одного цвета, интерактор не завершит игру досрочно, и будут сыграны все \(n\) раундов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Обратите внимание, что приведенные наборы входных данных являются примерами игр и не обязательно представляют собой оптимальную стратегию для обоих игроков.

В первом наборе входных данных вы решили играть за Алису.

  1. Алиса выбирает два цвета: \(3\) и \(1\). Боб выбирает вершину \(3\) и окрашивает ее в цвет \(1\).
  2. Алиса выбирает два цвета: \(1\) и \(2\). Боб выбирает вершину \(2\) и окрашивает ее в цвет \(2\).
  3. Алиса выбирает два цвета: \(2\) и \(1\). Боб выбирает вершину \(1\) и окрашивает ее в цвет \(1\).

Алиса выигрывает, потому что ребро \((3, 1)\) соединяет две вершины одного цвета.

Во втором наборе входных данных вы решили играть за Боба.

  1. Алиса выбирает два цвета: \(2\) и \(3\). Боб выбирает вершину \(1\) и окрашивает ее в цвет \(2\).
  2. Алиса выбирает два цвета: \(1\) и \(2\). Боб выбирает вершину \(2\) и окрашивает ее в цвет \(1\).
  3. Алиса выбирает два цвета: \(2\) и \(1\). Боб выбирает вершину \(4\) и окрашивает ее в цвет \(1\).
  4. Алиса выбирает два цвета: \(3\) и \(1\). Боб выбирает вершину \(3\) и окрашивает ее в цвет \(3\).

Боб выигрывает, потому что нет ребер, соединяющих вершины одного цвета.

F. Образуйте треугольники

жадные алгоритмы математика Перебор реализация сортировки *2200

Вам даны \(n\) палочек, пронумерованных от \(1\) до \(n\). Длина \(i\)-й палочки равна \(a_i\).

Вам нужно ответить на \(q\) запросов. В каждом запросе вам даны два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), \(r - l + 1 \ge 6\)). Определите, можно ли из палочек с номерами от \(l\) до \(r\) выбрать \(6\) различных палочек, чтобы они образовали \(2\) невырожденных треугольника\(^{\text{∗}}\).

\(^{\text{∗}}\)Треугольник с длинами сторон \(a\), \(b\) и \(c\) называется невырожденным, если:

  • \(a < b + c\),
  • \(b < a + c\), и
  • \(c < a + b\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(6 \le n \le 10^5\), \(1 \le q \le 10^5\)) — количество палочек и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — \(a_i\) обозначает длину \(i\)-й палочки.

Каждая из следующих строк \(q\) содержит по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), \(r - l + 1 \ge 6\)) — параметры запроса.

Выходные данные

Для каждого запроса выведите «YES» (без кавычек), если можно сформировать \(2\) треугольника, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом запросе длины палочек равны \([5, 2, 2, 10, 4, 10]\). Два набора палочек \([2, 4, 5]\) и \([2, 10, 10]\) могут быть выбраны для образования \(2\) невырожденных треугольников.

Во втором запросе длины палочек равны \([2, 2, 10, 4, 10, 6]\). Можно показать, что невозможно образовать \(2\) невырожденных треугольника.

В третьем запросе длины палочек равны \([2, 2, 10, 4, 10, 6, 1]\). Можно выбрать два набора палочек \([1, 2, 2]\) и \([4, 10, 10]\), чтобы образовать \(2\) невырожденных треугольника.

В четвертом запросе длины палочек равны \([4, 10, 6, 1, 5, 3]\). Можно показать, что невозможно образовать \(2\) невырожденных треугольника.

В пятом запросе длины палочек равны \([10, 4, 10, 6, 1, 5, 3]\). Можно выбрать два набора палочек \([1, 10, 10]\) и \([3, 4, 5]\), чтобы образовать \(2\) невырожденных треугольника.

G. Сбрасывание сетки

жадные алгоритмы Конструктив реализация *2700

Вам дана сетка, состоящая из \(n\) строк и \(m\) столбцов, в которой каждая клетка изначально белая. Кроме того, вам дано целое число \(k\), такое что \(1 \le k \le \min(n, m)\).

Вы будете обрабатывать \(q\) операций двух типов:

  • \(\mathtt{H}\) (горизонтальная операция) — Вы выбираете прямоугольник размером \(1 \times k\), полностью находящийся в сетке, и в котором все клетки белые. Затем все клетки в этом прямоугольнике красятся в чёрный.
  • \(\mathtt{V}\) (вертикальная операция) — Вы выбираете прямоугольник \(k \times 1\), который полностью находится в сетке, и в котором все клетки белые. Затем все клетки в этом прямоугольнике красятся в чёрный.

После каждой операции, если какие-либо строки или столбцы становятся полностью черными, все ячейки в этих строках и столбцах одновременно сбрасываются на белые. В частности, если все клетки в строке и столбце, в которых содержится клетка, станут чёрными, то все клетки и в строке, и в столбце будут сброшены на белый цвет.

Выберите прямоугольники таким образом, чтобы можно было выполнить все заданные операции, или определите, что это сделать невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(q\) (\(1 \le n, m \le 100\), \(1 \le k \le \min(n, m)\), \(1 \le q \le 1000\)) — количество строк и столбцов в сетке, сторона прямоугольника операции и количество операций, соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(q\), состоящую только из символов \(\mathtt{H}\) и \(\mathtt{V}\) — последовательность типов операций.

Гарантируется, что сумма \(q\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно число \(-1\), если невозможно выполнить все операции.

В противном случае выведите \(q\) строк. Каждая строка должна содержать по два целых числа \(i\), \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — координаты левой верхней клетки прямоугольника операций.

Если существует несколько решений, выведите любое из них.

Примечание
Иллюстрация примера.

Первая операция — горизонтальная. Прямоугольник операции начинается в точке \((1,1)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((1,1)\), \((1,2)\) и \((1,3)\) становятся чёрными.

Вторая операция — вертикальная. Прямоугольник операции начинается в точке \((2,1)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции ячейки \((2,1)\), \((3,1)\) и \((4,1)\) становятся черными. В этот момент первый столбец становится полностью черным, поэтому все ячейки в первом столбце сбрасываются в белый цвет.

Третья операция — вертикальная. Прямоугольник операции начинается в \((1,1)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции ячейки \((1,1)\), \((2,1)\) и \((3,1)\) становятся черными.

Четвертая операция — горизонтальная. Прямоугольник операции начинается в точке \((2,3)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((2,3)\), \((2,4)\) и \((2,5)\) становятся черными.

Пятая операция — горизонтальная. Прямоугольник операции начинается в точке \((3,3)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((3,3)\), \((3,4)\) и \((3,5)\) становятся черными.

Шестая операция — вертикальная. Прямоугольник операции начинается в точке \((2,2)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции клетки \((2,2)\), \((3,2)\) и \((4,2)\) становятся черными. В этот момент две строки и один столбец становятся полностью черными, поэтому все ячейки в этих строках и столбце сбрасываются в белые.

I. Игра на сетке

жадные алгоритмы игры интерактив Конструктив Паросочетания *3500

Это интерактивная задача.

Вам дана сетка из \(n\) строк и \(m\) столбцов. Вам нужно заполнить каждую ячейку уникальным целым числом от \(1\) до \(n \cdot m\).

После заполнения сетки вы сыграете с интерактором в игру на этой сетке. Игроки по очереди выбирают из сетки ранее не выбранные ячейки, причем интерактор ходит первым.

В первый ход интерактор может выбрать любую ячейку из сетки. После этого любая выбранная клетка должна быть соседней по стороне хотя бы с одной ранее выбранной клеткой. Игра продолжается до тех пор, пока не будут выбраны все клетки.

Ваша цель состоит в том, чтобы сумма чисел в выбранных вами клетках была строго меньше суммы чисел в клетках, выбранных соперником.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(4 \le n, m \le 10\)) — количество строк и столбцов в сетке.

Протокол взаимодействия

Сначала выведите \(n\) строк, каждая из которых содержит по \(m\) целых чисел — числа, которыми вы заполнили сетку. Каждое целое число от \(1\) до \(n \cdot m\) должно появиться ровно один раз.

Затем начинается игра. Интерактор и вы по очереди выводите координаты выбранных ячеек в течение \(n \times m\) ходов, причем интерактор начинает первым.

В свой ход каждый игрок (либо вы, либо интерактор) выводит два целых числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)), означающие, что игрок выбрал клетку в \(i\)-й строке и \(j\)-м столбце. Эта клетка не должна быть выбрана в предыдущих раундах. Кроме того, если это не первый ход, клетка должна быть смежной по стороне хотя бы с одной ранее выбранной клеткой.

Если любой из ваших выводов некорректен, жюри выведет «-1», и вы получите вердикт Неправильный ответ.

После всех \(n \cdot m\) ходов, если сумма чисел в выбранных вами клетках не будет строго меньше суммы чисел в клетках, выбранных соперником, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

Если ваша программа получила вердикт Неправильный ответ, она должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

Сначала мы заполнили сетку \(4 \times 4\) различными целыми числами от \(1\) до \(16\) следующим образом:

\(2\)\(3\)\(4\)\(10\)
\(12\)\(6\)\(11\)\(15\)
\(5\)\(13\)\(16\)\(8\)
\(9\)\(7\)\(1\)\(14\)

Далее началась игра.

  1. Сначала соперник выбирает клетку \((3, 4)\), в которой находится число \(8\). Во время первого раунда интерактор может выбрать любое число. Начиная со следующего раунда, каждое выбранное число должно быть смежным с любым ранее выбранным числом.
  2. Мы выбрали клетку \((2, 4)\), в которой находится число \(15\), и которая является соседней с \((3, 4)\).
  3. Интерактор выбрал клетку \((4, 4)\), в которой находится число \(14\), и которая является смежной с \((3, 4)\).
  4. Мы выбрали клетку \((4, 3)\), в которой находится число \(1\), и которая является смежной с \((4, 4)\).
  5. \(\ldots\)
  6. Это продолжается до тех пор, пока не будут выбраны все числа.

В итоге вы выбрали такие числа: \([15, 1, 16, 5, 4, 2, 11, 13]\), а соперник выбрал \([8, 14, 7, 9, 10, 3, 6, 12]\). Сумма выбранных нами чисел составляет \(67\), что меньше суммы чисел, выбранных соперником: \(69\). Таким образом, мы выиграли эту игру.

A. Одни плюсы

жадные алгоритмы Конструктив математика Перебор сортировки *800

Kmes записал три числа \(a\), \(b\) и \(c\), чтобы запомнить, что он должен отдать Noobish_Monk \(a \times b \times c\) бананов.

Noobish_Monk нашёл эти три числа и решил не более \(5\) раз сделать следующее:

  • выбрать одно из трёх чисел;
  • увеличить его на \(1\).

Например, если \(a = 2\), \(b = 3\), \(c = 4\), то можно прибавить единицу три раза к \(a\) и два раза к \(b\). Таким образом, \(a = 5\), \(b = 5\), \(c = 4\). Тогда количество бананов, которое должен Kmes равняется \(5 \times 5 \times 4 = 100\).

Какое максимальное значение \(a \times b \times c\) Noobish_Monk может получить с помощью описанных операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10\)) — числа, которые записал Kmes.

Выходные данные

Для каждого набора входных данных выведите максимальное количество бананов, которое сможет получить Noobish_Monk от Kmes.

B. Злой Monk

жадные алгоритмы математика сортировки *800

K1o0n, пустившись в празднование выздоровления, испек огромную \(n\)-метровую картофельную запеканку.

Оказывается, Noobish_Monk просто ненавидит картофель, поэтому он решил испортить блюдо K1o0n и порезал его на \(k\) кусочков целой длины \(a_1, a_2, \dots, a_k\) метров.

K1o0n был раздосадован, увидев такой террор. Благо все еще можно поправить, за одну операцию он может сделать одно из следующих действий:

  • Выбрать кусок длины \(a_i \ge 2\) и разделить на два куска с длинами \(1\) и \(a_i - 1\). В результате этого действия количество кусков увеличится на \(1\);
  • выбрать кусок \(a_i\) и кусок \(a_j=1\), где \(i \ne j\), и соединить их в один кусок длины \(a_i+1\). В результате этого действия количество кусков уменьшится на \(1\).

Помогите K1o0n определить минимальное количество операций, которое ему предстоит сделать, чтобы склеить запеканку в один целый кусок длины \(n\).

Например, если \(n=5\), \(k=2\), \(a = [3, 2]\), то оптимально действовать следующим образом:

  1. Разделить кусок длины \(2\) на куски длины \(1\) и \(2-1=1\), в результате \(a = [3, 1, 1]\).
  2. Соединить кусок длины \(3\) с куском длины \(1\), в результате \(a = [4, 1]\).
  3. Соединить кусок длины \(4\) с куском длины \(1\), в результате \(a = [5]\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора дано два целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\), \(2 \le k \le 10^5\)) — длина картофельной запеканки в метрах и количество кусочков после пакости Noobish_Monk.

Во второй строке каждого набора содержится \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n - 1\), \(\sum a_i = n\)) — длины кусочков, на которые Noobish_Monk разрезал изначальную запеканку.

Гарантируется, что сумма \(k\) по всем \(t\) наборам данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите минимальное количество операций, за которое K1o0n сможет восстановить свою запеканку после террора Noobish_Monk.

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\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество плохих отрезков.

A. Знаки вопроса

жадные алгоритмы реализация *800

Тим проходит тест, состоящий из \(4n\) вопросов; каждый вопрос имеет \(4\) варианта ответа: 'A', 'B', 'C' и 'D'. Для каждого варианта ответа существует ровно \(n\) правильных ответов, соответствующих этому варианту — это означает, что есть \(n\) вопросов с ответом 'A', \(n\) вопросов с ответом 'B', \(n\) вопросов с ответом 'C' и \(n\) вопросов с ответом 'D'.

Для каждого вопроса Тим записал свой ответ на бланке ответов. Если он не мог определить ответ, он оставлял знак вопроса '?' для этого вопроса.

Вам дан бланк ответов из \(4n\) символов. Какое максимальное количество правильных ответов может получить Тим?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 100\)).

Вторая строка каждого набора входных данных содержит строку \(s\) из \(4n\) символов (\(s_i \in \{\texttt{A}, \texttt{B}, \texttt{C}, \texttt{D}, \texttt{?}\}\)) — ответы Тима на вопросы.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный балл, который Тим может получить.

Примечание

В первом наборе входных данных есть ровно один вопрос с каждым ответом 'A', 'B', 'C' и 'D'; поэтому возможно, что Тим получит все свои ответы правильными.

Во втором наборе входных данных есть только два правильных ответа 'A', что делает его результатом ровно \(2\) балла в любом случае.

В третьем наборе входных данных Тим может получить максимум \(2\) правильных ответа с вариантом 'A' и \(2\) правильных ответа с вариантом 'B'. Например, он получил бы \(4\) балла, если бы правильными ответами были 'AACCBBDD'.

В четвертом наборе входных данных он отказывается отвечать на любые вопросы, поэтому его результат в любом случае равен \(0\) баллов.

B. Четность и Сумма

жадные алгоритмы Конструктив *1100

Дан массив \(a\) из \(n\) положительных целых чисел.

За одну операцию вы можете выбрать любую пару индексов \((i, j)\) такие, что \(a_i\) и \(a_j\) имеют различную четность, а затем заменить меньший из них на их сумму. Более формально:

  • Если \(a_i < a_j\), замените \(a_i\) на \(a_i + a_j\);
  • В противном случае замените \(a_j\) на \(a_i + a_j\).

Найдите минимальное количество операций, необходимых для того, чтобы все элементы массива имели одинаковую четность.

Входные данные

Первая строка содержит одно целое число \(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\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимое для достижения цели.

Примечание

В первом наборе входных данных все числа уже имеют одинаковую четность, поэтому совершать операции не требуется.

В третьем наборе входных данных мы можем выполнить две операции \((1, 2)\) и \((1, 3)\). Массив \(a\) преобразуется следующим образом: \(a = [\color{red}2, \color{red}3, 4] \longrightarrow [\color{red}5, 3, \color{red}4] \longrightarrow [5, 3, 9]\).

В четвертом наборе входных данных примером оптимальной последовательности операций является \((1, 2)\), \((1, 3)\), \((1, 4)\) и \((1, 4)\). Массив \(a\) преобразуется следующим образом: \(a = [\color{red}3, \color{red}2, 2, 8] \longrightarrow [\color{red}3, 5, \color{red}2, 8] \longrightarrow [\color{red}3, 5, 5, \color{red}8] \longrightarrow [\color{red}{11}, 5, 5, \color{red}8] \longrightarrow [11, 5, 5, 19]\).

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\).

A. Разнообразная игра

жадные алгоритмы Конструктив реализация *800

Пётр, смотря стрим Сергея, придумал матрицу \(a\), состоящую из \(n\) строк и \(m\) столбцов (число в \(i\)-й строке и \(j\)-м столбце обозначается \(a_{i, j}\)), в которой содержатся все целые числа от \(1\) до \(n \cdot m\). Но расположение чисел ему не понравилось, и теперь он хочет придумать новую матрицу \(b\), состоящую из \(n\) строк и \(m\) столбцов, которая также будет содержать все целые числа от \(1\) до \(n \cdot m\), такую, что для любых \(1 \leq i \leq n, 1 \leq j \leq m\) выполняется \(a_{i, j} \ne b_{i, j}\).

Вам дана матрица \(a\), постройте любую матрицу \(b\), подходящую под требования Пети, или скажите, что это невозможно.

Поторопитесь! Иначе все свои деньги он задонатит на стрим, в поиске ответа на свой вопрос.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10\)) — количество строк и столбцов матрицы \(a\).

В следующих \(n\) строках записано по \(m\) целых чисел, описывающих матрицу \(a\). В \(i\)-й из этих строк записаны элементы матрицы \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\).

Гарантируется, что все числа матрицы \(a\) различны и \(1 \leq a_{i, j} \leq n \cdot m\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n \cdot m\) целых чисел — любую подходящую матрицу \(b\), или \(-1\), если такой матрицы не существует.

Примечание

В первом наборе входных данных в матрице только один элемент, поэтому матрица \(b\) единственная и она не подходит.

Во втором наборе входных данных \(a_{1, 1} = 2 \neq 1 = b_{1, 1}\), \(a_{2, 1} = 1 \neq 2 = b_{2, 1}\).

B. Веселая игра

битмаски жадные алгоритмы Конструктив математика *1100

Вова очень любит операцию побитового исключающего ИЛИ (будем обозначать ее \(\oplus\)). Недавно, когда он ложился спать, он придумал веселую игру.

В начале игры Вова выбирает две бинарные последовательности \(s\) и \(t\) длины \(n\) и даёт их Ване. Бинарной последовательностью называется последовательность, состоящая только из чисел \(0\) и \(1\). Ваня может выбрать целые числа \(l, r\) такие, что \(1 \leq l \leq r \leq n\), и для всех \(l \leq i \leq r\) одновременно заменить \(s_i\) на \(s_i \oplus s_{i - l + 1}\), где \(s_i\) — это \(i\)-й элемент последовательности \(s\).

Чтобы игра была интересной, в ней должна быть возможность победить. Ваня побеждает, если за неограниченное количество действий может получить из последовательности \(s\) последовательность \(t\). По последовательностям \(s\) и \(t\) определите, будет ли игра интересной.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(q\) (\(1 \le q \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина последовательностей \(s\) и \(t\).

Во второй строке каждого набора входных данных содержится бинарная последовательность \(s\) длины \(n\).

В третьей строке каждого набора входных данных содержится бинарная последовательность \(t\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если игра будет интересной, иначе выведите «No».

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Ваня не сможет изменить последовательность \(s\) с помощью единственного возможного действия выбора \(l = r = 1\).

Во втором наборе входных данных последовательности \(s\) и \(t\) уже равны.

В третьем наборе входных данных Ваня может действовать так:

  1. Выбрать \(l = 3\) и \(r = 5\), тогда \(s\) станет равно \(\mathtt{101101010}\).
  2. Выбрать \(l = 5\) и \(r = 6\), тогда \(s\) станет равно \(\mathtt{101111010}\).
  3. Выбрать \(l = 7\) и \(r = 7\), тогда \(s\) станет равно \(\mathtt{101111110}\).

D. Смешная игра

графы Деревья жадные алгоритмы Конструктив математика снм теория чисел *1900

У Вани есть граф из \(n\) вершин (пронумерованных от \(1\) до \(n\)) и массив \(a\) из \(n\) целых чисел, изначально в графе нет рёбер. Ване стало скучно, и чтобы ему стало весело, он решил выполнить \(n - 1\) операцию.

Операция под номером \(x\) (операции нумеруются по порядку начиная с \(1\)) заключается в следующем:

  • Выбрать \(2\) различных числа \(1 \leq u,v \leq n\), таких что \(|a_u - a_v|\) делится на \(x\).
  • Добавить в граф неориентированное ребро между вершинами \(u\) и \(v\).

Помогите Ване с помощью \(n - 1\) операции получить связный\(^{\text{∗}}\) граф, или скажите, что это невозможно.

\(^{\text{∗}}\)Граф называется связным, если в нём можно от любой вершины дойти до любой другой, двигаясь по рёбрам.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{3}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2000\)) — количество вершин в графе.

Во второй строке каждого набора входных данных дано \(n\) чисел \(a_1, a_2, \cdots a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных, если решения не существует, то выведите «No» (без кавычек).

Иначе выведите «Yes» (без кавычек), после этого выведите \(n - 1\) строку, в \(i\)-й из них выведите числа \(u\) и \(v\), которые надо выбрать на операции \(i\).

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Рассмотрим второй набор входных данных.

  • Первая операция \((x = 1)\): можно соединить вершины \(4\) и \(1\), так как \(|a_4 - a_1| = |13 - 99| = |-86| = 86\), а \(86\) кратно \(1\).
  • Вторая операция \((x = 2)\): можно соединить вершины \(2\) и \(1\), так как \(|a_2 - a_1| = |7 - 99| = |-92| = 92\), а \(92\) кратно \(2\).
  • Третья операция \((x = 3)\): можно соединить вершины \(3\) и \(2\), так как \(|a_3 - a_2| = |1 - 7| = |-6| = 6\), а \(6\) кратно \(3\).
Из картинки видно, что получился связный граф.

E. Деревянная игра

битмаски Деревья жадные алгоритмы математика *2000

Вам дан лес из \(k\) корневых деревьев\(^{\text{∗}}\). Дровосек Тимофей хочет вырубить весь лес, применяя такую операцию:

  • Выбрать поддерево\(^{\text{†}}\) какой-либо вершины одного из деревьев и удалить его из дерева.

Тимофей очень любит битовые операции, поэтому он хочет, чтобы побитовое ИЛИ размеров поддеревьев, которые он удалял, было максимальным. Помогите ему и найдите, какой максимальный результат он может получить.

\(^{\text{∗}}\) Деревом называется связный граф без циклов, петель и кратных ребер. Лесом называется набор из одного или нескольких деревьев. В корневом дереве одна из вершин называется корнем.

\(^{\text{†}}\) Поддерево вершины \(v\) — это множество вершин, для которых \(v\) лежит на кратчайшем пути от этой вершины до корня, включая вершину \(v\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных содержит одно целое число \(k\) (\(1 \leq k \leq 10^6\)) — количество деревьев в лесу.

Далее следует описание каждого из \(k\) деревьев:

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — размер дерева. Вершины дерева пронумерованы целыми числами от \(1\) до \(n\). Корнем дерева является вершина под номером \(1\).

Вторая строка содержит \(n - 1\) целое число \(p_2, p_3, \ldots p_n\) (\(1 \leq p_i < i\)), где \(p_i\) — предок вершины \(i\).

Гарантируется, что сумма \(k\) и \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный результат, который можно получить.

Примечание

Во втором наборе входных данных деревья выглядят так:

Первой операцией удалим все второе дерево.

Второй операцией удалим вершину \(4\) из первого дерева.

Третьей операцией удалим первое дерево. Результат равен \(6|1|3 = 7\) (\(|\) обозначает побитовое ИЛИ).

В третьем наборе входных данных нужно удалить все дерево.

H. Fortnite

жадные алгоритмы игры интерактив Комбинаторика Конструктив математика Строки теория чисел хэши *3500

Это интерактивная задача!

Тимофей пишет соревнование, которое называется Capture the flag (или сокращённо CTF). Ему осталась одна задача, в которой нужно взломать систему безопасности. Вся система основана на полиномиальных хеш-функциях\(^{\text{∗}}\).

Тимофей может ввести в систему строку, состоящую из строчных латинских букв, и система выдаст её полиномиальный хеш. Чтобы взломать систему, Тимофею нужно узнать параметры полиномиального хеша, которые использует система (\(p\) и \(m\)).

У Тимофея осталось очень мало времени, поэтому он успеет сделать только \(3\) запроса. Помогите ему решить задачу.

\(^{\text{∗}}\) Полиномиальный хеш по основанию \(p\) и модулю \(m\) строки \(s\), состоящей из строчных латинских букв, длины \(n\) — это \((\mathrm{ord}(s_1) \cdot p ^ 0 + \mathrm{ord}(s_2) \cdot p ^ 1 + \mathrm{ord}(s_3) \cdot p ^ 2 + \ldots + \mathrm{ord}(s_n) \cdot p ^ {n - 1}) \bmod m\). Где за \(s_i\) обозначен \(i\)-й символ строки \(s\), за \(\mathrm{ord}(\mathrm{chr})\) — порядковый номер символа \(\mathrm{chr}\) в английском алфавите, а за \(x \bmod m\) остаток, который даёт \(x\) при делении на \(m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Гарантируется, что \(p\) и \(m\), которые использует система удовлетворяют условиям: \(26 < p \leq 50\) и \(p + 1 < m \leq 2 \cdot 10^9\).

Протокол взаимодействия

Чтобы сделать запрос в систему выведите ? \(s\), где \(s\) — строка, длины не более \(50\), хеш которой вы хотите узнать. В ответ на этот запрос вы получите полиномиальный хеш строки \(s\).

Чтобы вывести ответ, выведите ! \(p\) \(m\), где — \(p\) основание хеша, а \(m\) — модуль. После этого сразу же переходите к следующему набору входных данных.

Вы должны сделать не более \(3\) запросов ?, в противном случае вы получите вердикт Wrong Answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Ответом на первый запрос будет \((ord(a) \cdot 31^0 + ord(a) \cdot 31^1) \mod 59 = (1 + 1 \cdot 31) \mod 59 = 32\).

Ответом на второй запрос является \((ord(y) \cdot 31^0 + ord(b) \cdot 31^1) \mod 59 = (25 + 2 \cdot 31) \mod 59 = 28\).

A. Диагонали

жадные алгоритмы математика Перебор реализация *800

У Vitaly503 сегодня оказалась клетчатая доска со стороной \(n\), а также \(k\) фишек. Vitaly503 понял, что все эти \(k\) фишек нужно расположить на клетках доски (на одну клетку можно размещать не более одной фишки).

Обозначим ячейку в \(i\)-й строке и \(j\)-м столбце как \((i ,j)\). Диагональ – это набор ячеек, для которых значение \(i + j\) одинаково. Например, клетки \((3, 1)\), \((2, 2)\) и \((1, 3)\) лежат на одной диагонали, но \((1, 2)\) и \((2, 3)\) не лежат на одной диагонали. Диагональ называется занятой, если она содержит хотя бы одну фишку.

Vitaly503 просит вас помочь ему и сообщить минимальное количество занятых диагоналей, которое он может получить после размещения всех \(k\) фишек.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 100, 0 \le k \le n^2\)) — сторона клетчатой доски и количество имеющихся фишек соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество диагоналей с хотя бы одной фишкой, которое он может получить после размещения всех \(k\) фишек.

Примечание

В первом наборе входных данных фишек нет, поэтому будут заняты 0 диагоналей. Во втором наборе входных данных обе фишки можно разместить на диагонали \((2, 1), (1, 2)\), поэтому ответ — 1. В третьем наборе входных данных 3 фишки нельзя разместить на одной диагонали, но размещение их на \((1, 2), (2, 1), (1, 1)\) делает 2 диагонали занятыми. В 7-м наборе входных данных фишки займут все 5 диагоналей в любой допустимой расстановке.

B1. Букет (легкая версия)

Бинарный поиск жадные алгоритмы Перебор сортировки *1100

Это легкая версия задачи. Единственное отличие в том, что в этой версии цветы заданы перечислением.

Девочка готовится к своему дню рождения и хочет составить невероятной красоты букет. Всего в магазине есть \(n\) цветов, каждый из которых характеризуется своим количеством лепестков; цветок с \(k\) лепестками стоит \(k\) монет. Девочка решила, что количество лепестков у любых двух цветов, которые она будет использовать в составлении своего букета, должно отличаться не более чем на единицу. При этом девочка хочет собрать букет с максимально возможным количеством лепестков. К сожалению, у неё есть только \(m\) монет, и потратить больше она не может. Букет с каким максимальным суммарным количеством лепестков она может собрать?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le 10^{18}\)) — количество цветов в магазине и количество монет у девочки соответственно. Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество лепестков у \(i\)-го цветка в магазине.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество лепестков в букете, который может собрать девочка, соблюдая все перечисленные выше условия.

Примечание

В первом наборе входных данных вы можете собрать букет из \((1, 1, 2, 2), (2, 2, 3), (1, 1), (2, 2)\). Максимум из разрешенных букетов, не превышающий \(10\), составляет \(7\) для \((2, 2, 3)\). В третьем наборе входных данных вы можете собрать букет из одного цветка любого типа, поэтому ответ — \(610\). В четвертом наборе входных данных вы можете собрать букет из \((4, 4, 5)\), что даст вам \(13\) лепестков, и это максимальное количество лепестков, которое может купить девочка.

B2. Букет (сложная версия)

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1700

Это сложная версия задачи. Единственное отличие в том, что в этой версии вместо перечисления количеств лепестков у каждого цветка задано для всех типов цветов (по количеству лепестков) их количество в магазине.

Девочка готовится к своему дню рождения и хочет составить невероятной красоты букет. В магазине представлено в общей сложности \(n\) различных типов цветов, для каждого из перечисленных типов цветов указано их количество в магазине. Цветок с \(k\) лепестками стоит \(k\) монет. Девочка решила, что разница в количестве лепестков между любыми двумя цветами, которые она будет использовать для составления букета, не должна превышать единицы. В то же время девочка хочет собрать букет с максимально возможным количеством лепестков. К сожалению, у неё есть только \(m\) монет, и она не может потратить больше. С каким максимальным количеством лепестков она может собрать букет?

Входные данные

Каждый тест состоит из нескольких тестовых наборов. В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество тестовых наборов. Далее следует описание тестовых наборов.

Первая строка каждого тестового примера содержит два целых числа \(n\), \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le 10^{18}\)) — количество типов цветов в магазине и количество монет у девочки. Вторая строка каждого тестового примера содержит \(n\) целых различных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) – это количество лепестков у \(i\)-го типа цветов в магазине (для различных индексов \(i \neq j\) гарантируется, что количество лепестков у соответствующих типов цветов различное, то есть \(a_i \neq a_j\)). Третья строка каждого тестового примера содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^9\)), где \(c_i\) – количество цветов \(i\)-го типа в магазине.

Сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество лепестков в букете, который может собрать девочка, соблюдая все перечисленные выше условия.

Примечание

В первом наборе входных данных некоторые разрешенные букеты — это \((1, 1, 2, 2), (2, 2, 3), (1, 1), (2, 2)\). Максимум из разрешенных букетов, не превышающий \(10\), составляет \(7\) для \((2, 2, 3)\). Во втором наборе входных данных вы можете собрать разрешенный букет из \((206, 206, 207, 207, 207)\) с суммой \(1033\), что является максимальным количеством лепестков, которое может купить девушка. В третьем наборе входных данных вы можете собрать корректный букет из \((5, 5, 5, 4)\) с суммой \(19\). Видно, что ни в одном разрешенном букете не может быть \(20\) лепестков.

C. Квадратирование

жадные алгоритмы Конструктив математика Перебор реализация теория чисел *1800

ikrpprpp нашел массив \(a\), состоящий из целых чисел. Ему нравится справедливость, поэтому он хочет сделать \(a\) честным — то есть сделать его неубывающим. Для этого он может выполнить акт справедливости на индексе \(1 \le i \le n\) массива, который заменит \(a_i\) на \(a_i ^ 2\) (элемент на позиции \(i\) на его квадрат). Например, если \(a = [2,4,3,3,5,3]\) и ikrpprpp решает выполнить акт справедливости на \(i = 4\), то \(a\) становится \([2,4,3,9,5,3]\).

Каково минимальное количество актов справедливости, необходимых для того, чтобы сделать массив неубывающим?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. За ним следует описание наборов входных данных.

Для каждого набора входных данных первая строка содержит целое число \(n\) — размер массива \(a\). Вторая строка содержит \(n\) (\(1 \le n \le 2 \cdot 10 ^5\)) целых числа \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le 10 ^ 6\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — минимальное количество актов справедливости, необходимых для того, чтобы сделать массив \(a\) неубывающим. Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных нет необходимости выполнять акты справедливости. Массив сам по себе честен!

В третьем наборе входных данных можно доказать, что массив не может стать неубывающим.

В пятом наборе входных данных ikrpprppp может выполнить акт справедливости на индексе 3, затем акт справедливости на индексе 2 и, наконец, еще один акт справедливости на индексе 3. После этого \(a\) станет \([4, 9, 16]\).

B. Масштабирование

жадные алгоритмы реализация *800

У Тины есть квадратная матрица с \(n\) строками и \(n\) столбцами. Каждая ячейка в матрице может быть либо \(0\), либо \(1\).

Тина хочет уменьшить сетку в \(k\) раз (\(k\) является делителем \(n\)). Для этого Тина разбивает сетку на непересекающиеся блоки ячеек \(k \times k\) так, что каждая ячейка принадлежит ровно одному блоку.

Затем Тина заменяет каждый блок ячеек одной ячейкой, равной значению ячеек в блоке. Гарантируется, что каждая ячейка в одном блоке имеет одинаковое значение.

Например, следующая сетка получается из уменьшения вышеприведенной сетки в \(3\) раза.

Исходная матрица
\(0\)\(0\)\(0\)\(1\)\(1\)\(1\)
\(0\)\(0\)\(0\)\(1\)\(1\)\(1\)
\(0\)\(0\)\(0\)\(1\)\(1\)\(1\)
\(1\)\(1\)\(1\)\(0\)\(0\)\(0\)
\(1\)\(1\)\(1\)\(0\)\(0\)\(0\)
\(1\)\(1\)\(1\)\(0\)\(0\)\(0\)
Уменьшенная матрица
\(0\)\(1\)
\(1\)\(0\)

Помогите Тине уменьшить сетку в \(k\) раз.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 100\)) – количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 1000\), \(1 \le k \le n\), \(k\) является делителем \(n\)) — количество строк и столбцов матрицы, и коэффициент, на который Тина хочет уменьшить сетку.

Каждая из следующих \(n\) строк содержит \(n\) символов, описывающих ячейки матрицы. Каждый символ может быть либо \(0\), либо \(1\). Гарантируется, что каждый блок \(k\) на \(k\) имеет одинаковое значение.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите уменьшенную в \(k\) раз сетку на новой строке.

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.

F. Бомба

Бинарный поиск жадные алгоритмы математика *1900

Искорка дает вам два массива \(a\) и \(b\) длиной \(n\). Изначально ваш счет равен \(0\). За одну операцию вы можете выбрать целое число \(i\) и добавить \(a_i\) к вашему счету. Затем вы должны установить \(a_i\) = \(\max(0, a_i - b_i)\).

У вас есть время выполнить \(k\) операций, прежде чем Искорка подорвет ядерную бомбу! Каков максимальный счет, который вы можете набрать после \(k\) операций?

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5, 1 \leq k \leq 10^9\)) — длина массивов и количество операций, которые вы можете выполнить.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ... a_n\) (\(1 \leq a_i \leq 10^9\)).

Следующая строка содержит \(n\) целых чисел \(b_1, b_2, ... b_n\) (\(1 \leq b_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число, максимальный счет, который вы можете набрать после \(k\) операций.

G. Пенакония

графы жадные алгоритмы Перебор Структуры данных хэши *2200

На Пенаконии, земле грёз существует \(n\) домов и \(n\) дорог. Существует дорога между домом \(i\) и \(i+1\) для всех \(1 \leq i \leq n-1\) и дорога между домом \(n\) и домом \(1\). Все дороги двусторонние. Однако из-за кризиса на Пенаконии, управляющая семья залезла в долги и может не быть в состоянии поддерживать все дороги.

Среди жителей Пенаконии существует \(m\) пар друзей. Если житель, живущий в доме \(a\), дружит с жителем, живущим в доме \(b\), должен существовать путь между домами \(a\) и \(b\) через поддерживаемые дороги.

Какое минимальное количество дорог для этого необходимо поддержать?

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5\)) — количество домов и количество дружб.

Следующие \(m\) строк содержат два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)) — житель дома \(a\) дружит с жителем дома \(b\). Гарантируется, что все (\(a, b\)) различны.

Гарантируется, что сумма \(n\) и \(m\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите целое число — минимальное количество дорог, которые должны быть поддержаны.

Примечание

В первом примере должны быть поддержаны следующие дороги:

  • \(8 \leftarrow \rightarrow 1\)
  • \(7 \leftarrow \rightarrow 8\)
  • \(1 \leftarrow \rightarrow 2\)
  • \(4 \leftarrow \rightarrow 5\)

C. Четные позиции

жадные алгоритмы Конструктив Структуры данных *1100

У Монокарпа была правильная скобочная последовательность \(s\) длины \(n\) (\(n\) — четное). Он даже придумал свой способ вычисления её стоимости.

Он знает, что в правильной скобочной последовательности (ПСП) каждой открывающей скобке соответствует парная ей закрывающая скобка. Поэтому он решил вычислить стоимость ПСП как сумму расстояний между парами соответствующих скобок.

Например, рассмотрим ПСП (())(). Она состоит из трех пар скобок:

  • (__)__: расстояние между скобками на позициях \(1\) и \(4\) равно \(4 - 1 = 3\);
  • _()___: расстояние равно \(3 - 2 = 1\);
  • ____(): расстояние равно \(6 - 5 = 1\).
Таким образом, стоимость (())() равна \(3 + 1 + 1 = 5\).

К сожалению, из-за повреждения данных Монокарп потерял все символы на нечетных позициях \(s_1, s_3, \dots, s_{n-1}\). Остались только символы на четных позициях (\(s_2, s_4, \dots, s_{n}\)). Например, (())() превратилась в _(_)_).

Монокарп хочет восстановить свою ПСП, разместив скобки на нечетных позициях. Но поскольку восстановленная ПСП может быть не уникальной, он хочет выбрать ПСП с минимальной стоимостью. Эта задача слишком сложна для Монокарпа, поэтому можете ли вы помочь ему?

Напоминание: Правильная скобочная последовательность — это строка, состоящая только из скобок, такая что эта строка, когда в неё вставляются 1-ы и +-ы, дает корректное математическое выражение. Например, (), (()) или (()())() являются ПСП, в то время как ), ()( или ())(() — не являются.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\); \(n\) — четное) — длина строки \(s\).

Во второй строке каждого набора задана строка \(s\) длины \(n\), где все символы на нечетных позициях равны '_' и все символы на четных позициях равны либо '(', либо ')'.

Дополнительные ограничения:

  • из \(s\) можно восстановить как минимум одну правильную скобочную последовательность;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость правильной скобочной последовательности, которую можно получить из \(s\), заменив '_' на скобки.

Примечание

В первом наборе оптимально сделать \(s\) равной (())(). Стоимость \(s\) будет равна \(3 + 1 + 1 = 5\).

Во втором наборе единственный вариант — сделать \(s\) равной () со стоимостью \(1\).

В третьем наборе единственная возможная ПСП — ()()()() со стоимостью \(1 + 1 + 1 + 1 = 4\).

В четвертом наборе оптимально сделать \(s\) равной (())(()) со стоимостью \(3 + 1 + 3 + 1 = 8\).

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)\).

C. Выполните операции и максимизируйте счёт

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация *1900

Я вижу хендл satyam343. У меня идут мурашки по телу. Пожалуйста, в этот раз больше задач про медианы. Я их обожаю. Пожалуйста, satyam343, мы верим в тебя.
— Самый большой поклонник satyam343

Вам дан массив \(a\) длины \(n\) и целое число \(k\). Вам также дан бинарный массив \(b\) длины \(n\).

Вы можете выполнить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\)) такой, что \(b_i = 1\). Установить \(a_i = a_i + 1\) (т.е. увеличить \(a_i\) на \(1\)).

Ваш счёт определяется как \(\max\limits_{i = 1}^{n} \left( a_i + \operatorname{median}(c_i) \right)\), где \(c_i\) обозначает массив длины \(n-1\), который вы получаете, удаляя \(a_i\) из \(a\). Другими словами, ваш счёт — это максимальное значение \(a_i + \operatorname{median}(c_i)\) среди всех \(i\) от \(1\) до \(n\).

Найдите максимальный счёт, который можно получить при оптимальном выполнении операций.

Для произвольного массива \(p\), \(\operatorname{median}(p)\) определяется как \(\left\lfloor \frac{|p|+1}{2} \right\rfloor\)-й элемент в отсортированном \(p\). Например, \(\operatorname{median} \left( [3,2,1,3] \right) = 2\) и \(\operatorname{median} \left( [6,2,4,5,1] \right) = 4\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных начинается с двух целых чисел \(n\) и \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^9\)) — длина \(a\) и количество операций, которые вы можете выполнить.

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(b_1, b_2, \ldots, b_n\) (\(b_i\) равно \(0\) или \(1\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке максимальное значение счёт, которое вы можете получить.

Примечание

Для первого набора входных данных оптимально выполнить \(5\) операций над обоими элементами и получить \(a = [8,8]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(\max(8 + \operatorname{median}[8], 8 + \operatorname{median}[8]) = 16\), так как \(c_1 = [a_2] = [8]\). Можно доказать, что получить больший счёт невозможно.

Для второго набора входных данных вы не можете выполнить операции ни над одним элементом, поэтому \(a\) остается \([3,3,3]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(3 + \operatorname{median}[3, 3] = 6\), так как \(c_1 = [a_2, a_3] = [3, 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\).

E1. Удаление шаров с помощью слияния (лёгкая версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2200

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это лёгкая версия задачи. Единственное отличие в том, что в этой версии \(x=n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=n\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = n\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

В первом наборе входных данных требуется вычислить \(f(5)\). Можно показать, что после \(4\) операций \(S\) может содержать \(2\), \(3\) или \(4\). Ниже показаны операции, необходимые для того, чтобы получить \(S = \{4\}\).

  • Изначально \(S = \{1, 2, 3, 4, 5\}\) и \(a = [1, 2, 3, 2, 1]\).
  • Выбираем \(l = 1\). Тогда \(r = 2\). Так как \(a_1 < a_2\), зададим \(a_2 = 1 + 2\) и удалим \(1\) из \(S\). Теперь \(S = \{2, 3, 4, 5\}\) и \(a = [1, 3, 3, 2, 1]\).
  • Выбираем \(l = 4\). Тогда \(r = 5\). Поскольку \(a_4 > a_5\), зададим \(a_4 = 2 + 1\) и удалим \(5\) из \(S\). Теперь \(S = \{2, 3, 4\}\) и \(a = [1, 3, 3, 3, 1]\).
  • Выбираем \(l = 3\). Тогда \(r = 4\). Поскольку \(a_3 = a_4\), у нас есть выбор, удалить \(3\) или \(4\). Поскольку мы хотим сохранить \(4\), удалим \(3\). Итак, зададим \(a_4 = 3 + 3\) и удалим \(3\) из \(S\). Теперь \(S = \{2, 4\}\) и \(a = [1, 3, 3, 6, 1]\).
  • Выбираем \(l = 2\). Тогда \(r = 4\). Поскольку \(a_2 < a_4\), зададим \(a_4 = 3 + 6\) и удалим \(2\) из \(S\). Наконец, \(S = \{4\}\) и \(a = [1, 3, 3, 9, 1]\).

Во втором наборе входных данных требуется вычислить \(f(7)\). Можно показать, что после \(6\) операций \(S\) может содержать \(2\), \(4\), \(6\) или \(7\).

E2. Удаление шаров с помощью слияния (сложная версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(x=1\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=1\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = 1\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

Для первого набора входных данных ниже приведены возможные значения \(j\) для каждого \(f(i)\) от \(1\) до \(n\).

  • Для \(f(1)\) единственным возможным значением \(j\) является \(1\).
  • Для \(f(2)\) единственным возможным значением \(j\) является \(2\).
  • Для \(f(3)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(4)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(5)\) возможные значения \(j\): \(2\), \(3\) и \(4\).

C. Душ

жадные алгоритмы реализация *800

Как студент факультета компьютерных наук, Алекс сталкивается с трудной задачей — принятием душа. Он старается принимать душ ежедневно, но, несмотря на все его усилия, всегда возникают препятствия. Ему требуется \(s\) минут, чтобы принять душ, а в сутках всего \(m\) минут!

У него уже запланировано \(n\) задач на день. Задача \(i\) представлена интервалом \((l_i\), \(r_i)\), что означает, что Алекс занят и не может принять душ в этот временной интервал (в любой момент времени строго между \(l_i\) и \(r_i\)). Ни одна из задач не пересекается с другой.

Учитывая все \(n\) временных интервалов, сможет ли Алекс принять душ в этот день? Другими словами, будет ли у Алекса свободный временной интервал длиной не менее \(s\)?

В первом примере Алекс может принять душ в первые \(3\) минуты дня и не пропустить ни одну из задач.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(s\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq s, m \leq 10^9\)) — количество временных интервалов, которые Алекс уже запланировал, время, необходимое Алексу для принятия душа, и количество минут в сутках.

Затем следуют \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(0 \leq l_i < r_i \leq m\)) — временной интервал \(i\)-й задачи. Ни одна из задач не накладывается на другую.

Дополнительное ограничение на входные данные: \(l_i > r_{i-1}\) для каждого \(i > 1\).

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Алекс может принять душ для данного набора входных данных, и «NO» (также без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», и «Yes» будут признаны положительным ответом).

D. Экзамен Славика

жадные алгоритмы реализация Строки *1100

У Славика очень сложный экзамен, и ему нужна ваша помощь, чтобы его сдать. Вот задача, с которой он столкнулся:

Дана строка \(s\), которая состоит из строчных английских букв и, возможно, нуля или более «?».

Славик должен заменить каждый «?» на строчную английскую букву так, чтобы строка \(t\) стала подпоследовательностью (необязательно непрерывной) строки \(s\).

Выведите любую подходящую строку или скажите, что это невозможно, если не существует строки, которая соответствует условиям.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \leq T \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одну строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\), и \(s\) состоит только из строчных английских букв и символов «?»)  — исходная строка, которую вы имеете.

Вторая строка каждого набора входных данных содержит одну строку \(t\) (\(1 \leq |t| \leq |s|\), и \(t\) состоит только из строчных английских букв)  — строка, которая должна быть подпоследовательностью строки \(s\).

Сумма \(|s|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), \(|x|\) обозначает длину строки \(x\).

Выходные данные

Для каждого набора входных данных, если такой строки не существует, как описано в условии, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек). Затем выведите одну строку — строку, которая соответствует всем условиям.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», и «Yes» будут признаны положительным ответом).

Если возможно несколько ответов, вы можете вывести любой из них.

D. Right Left Wrong

жадные алгоритмы реализация *1200

Влад нашёл полоску из \(n\) клеток, пронумерованных слева направо от \(1\) до \(n\). На \(i\)-й клетке записаны положительное целое число \(a_i\) и буква \(s_i\), все \(s_i\) равны либо 'L' либо 'R'.

Влад предлагает вам попробовать набрать максимально возможное количество очков, сделав любое (возможно нулевое) количество операций.

За одну операцию вы можете выбрать два индекса \(l\) и \(r\) (\(1 \le l < r \le n\)), такие что \(s_l\) = 'L' и \(s_r\) = 'R' и сделать следующее:

  • прибавить к текущему счёту \(a_l + a_{l + 1} + \dots + a_{r - 1} + a_r\) очков;
  • заменить \(s_i\) на '.' для всех \(l \le i \le r\), то есть выбирать эти индексы вы больше не сможете.

Для примера рассмотрим следующую полоску:

\(3\)\(5\)\(1\)\(4\)\(3\)\(2\)
LRLLLR

Можно сначала выбрать \(l = 1\), \(r = 2\) и добавить к своему счёту \(3 + 5 = 8\)

\(3\)\(5\)\(1\)\(4\)\(3\)\(2\)
..LLLR

Затем выбрать \(l = 3\), \(r = 6\) и прибавить к счёту \(1 + 4 + 3 + 2 = 10\)

\(3\)\(5\)\(1\)\(4\)\(3\)\(2\)
......

В результате невозможно выполнить ещё одну операцию, а итоговый счёт равен \(18\).

Какой максимальный счёт можно набрать?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину полоски.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — числа, записанные на полоске.

Третья строка каждого набора содержит строку \(s\) из \(n\) символов 'L' и 'R'.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное возможное количество очков, которое можно набрать.

E. Фотосессия для горилл

жадные алгоритмы Комбинаторика математика Структуры данных *1400

Вы очень любите горилл, поэтому решили устроить им фотосессию. Гориллы обитают в джунглях. Джунгли представляют собой клетчатое поле из \(n\) строк и \(m\) столбцов. В фотосессии согласились принять участие \(w\) горилл, горилла с номером \(i\) (\(1 \le i \le w\)) имеет рост \(a_i\). Вы хотите расставить всех горилл в клетки поля так, чтобы в каждой клетке стояло не более одной гориллы.

Зрелищность расстановки равна сумме зрелищностей всех подквадратов поля с длиной стороны \(k\).

Зрелищность подквадрата равна сумме ростов горилл в нём.

Из всех подходящих расстановок выберите расстановку с максимальной зрелищностью.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке даны целые числа \(n\), \(m\), \(k\) (\(1 \le n, m \le 2 \cdot 10^5\), \(1 \le n \cdot m \le 2 \cdot 10^5\), \(1 \le k \le \min(n, m)\)) — размеры поля и сторона квадрата.

Во второй строке дано целое число \(w\) (\(1 \le w \le n \cdot m\)) — количество горилл.

В третьей строке даны \(w\) целых чисел \(a_1, a_2, \ldots, a_w\) (\(1 \le a_i \le 10^9\)) — росты горилл.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). То же самое гарантируется для \(w\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную зрелищность подходящей расстановки.

Примечание

В первом наборе входных данных первого теста суммируются зрелищности следующих подквадратов:

Жёлтый цвет соответствует подквадратам, зелёный — остальным клеткам поля.

На картинке представлено оптимальное расположение горилл. Зрелищность расстановки равна \(4 + 4 + 3 + 3 + 4 + 3 = 21\).

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.

G. Звонок во время пути

Бинарный поиск графы жадные алгоритмы кратчайшие пути Перебор *2100

Вы живёте в городе, состоящем из \(n\) перекрёстков и \(m\) улиц, соединяющих некоторые пары перекрёстков. По каждой улице можно перемещаться в любую сторону. Никакие две улицы не соединяют одну и ту же пару перекрёстков, и никакая улица не соединяет перекрёсток с самим собой. Из любого перекрёстка можно добраться до любого другого, возможно, проходя через какие-то другие перекрёстки.

Каждую минуту вы можете сесть на автобус на перекрёстке \(u_i\) и доехать за \(l_{i1}\) минут до перекрёстка \(v_i\). И наоборот доехать от перекрёстка \(v_i\) до перекрёстка \(u_i\) за \(l_{i1}\) минут. Садиться в автобус и выходить из него можно только на перекрёстках. Сесть в автобус на перекрёстке можно только находясь в нём.

Также по каждой улице можно пройти пешком за \(l_{i2} > l_{i1}\) минут.

Вы можете делать остановки на перекрёстках.

Вы живёте на перекрёстке с номером \(1\). Сегодня вы проснулись в момент времени \(0\), и у вас запланировано важное мероприятие на перекрёстке с номером \(n\), на которое вы должны добраться не позднее момента времени \(t_0\). Также у вас запланирован телефонный звонок, который продлится с \(t_1\) по \(t_2\) минуту (\(t_1 < t_2 < t_0\)).

Во время телефонного разговора нельзя ехать на автобусе, но можно идти по любым улицам пешком, сделать остановку или находиться у себя дома. Вы можете выходить из автобуса в минуту \(t_1\) и заходить в автобус в минуту \(t_2\).

Так как вы хотите выспаться, вам стало интересно — как поздно вы можете выйти из дома, чтобы успеть поговорить по телефону и при этом не опоздать на мероприятие?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \le n \le 10^5, 1 \le m \le 10^5\)) — количество перекрёстков и улиц в городе.

Вторая строка описания каждого набора входных данных содержит три целых числа \(t_0\), \(t_1\), \(t_2\) (\(1 \le t_1 < t_2 < t_0 \le 10^9\)) — время начала мероприятия, время начала телефонного звонка и время его конца, соответственно.

Следующие \(m\) строк каждого набора данных содержат описания улиц.

\(i\)-я строка содержит четыре целых числа \(u_i\), \(v_i\), \(l_{i1}\), \(l_{i2}\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\), \(1 \le l_{i1} < l_{i2} \le 10^9\)) — номера перекрёстков, соединяемых \(i\)-й улицей, а также время пути по улице на автобусе и пешком. Гарантируется, что никакие две улицы не соединяют одну и ту же пару перекрёстков, а также что из любого перекрёстка можно добраться до любого другого.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\). Также гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный момент времени, когда вы можете выйти из дома, чтобы успеть поговорить по телефону и не опоздать на мероприятие. Если вы не можете попасть на мероприятие вовремя, выведите -1.

A. Сделать все равными

жадные алгоритмы реализация *800

Вам дан циклический массив \(a_1, a_2, \ldots, a_n\).

Вы можете выполнить следующую операцию над \(a\) не более \(n - 1\) раз:

  • Пусть \(m\) — текущая длина \(a\). Вы можете выбрать любые два соседних элемента, где предыдущий элемент не больше следующего (в частности, \(a_m\) и \(a_1\) являются соседними, причём \(a_m\) — предыдущий), и удалить ровно один из них. Другими словами, выберите целое число \(i\) (\(1 \leq i \leq m\)), для которого выполняется \(a_i \leq a_{(i \bmod m) + 1}\), и удалите из \(a\) либо \(a_i\), либо \(a_{(i \bmod m) + 1}\).

Ваша цель — найти минимальное количество операций, необходимых для того, чтобы сделать все элементы в \(a\) равными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: минимальное количество операций, необходимых для того, чтобы сделать все элементы в \(a\) равными.

Примечание

В первом наборе входных данных в \(a\) есть только один элемент, поэтому мы не можем выполнить ни одной операции.

Во втором наборе входных данных мы можем выполнить следующие операции, чтобы сделать все элементы в \(a\) равными:

  • выбрать \(i = 2\), удалить \(a_3\), тогда \(a\) станет \([1, 2]\).
  • выбрать \(i = 1\), удалить \(a_1\), тогда \(a\) станет \([2]\).

Можно доказать, что нельзя сделать все элементы в \(a\) равными, используя менее \(2\) операций, поэтому ответ — \(2\).

C. Угадайте дерево

Бинарный поиск Деревья жадные алгоритмы интерактив Перебор поиск в глубину и подобное разделяй и властвуй снм *1500

Это интерактивная задача.

Мизуки выбрала секретное дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\), и попросила вас отгадать его с помощью запросов следующего типа:

  • «? a b» — Мизуки скажет вам, какая вершина \(x\) минимизирует \(|d(a,x) - d(b,x)|\), где \(d(x,y)\) — расстояние между вершинами \(x\) и \(y\). Если таких вершин несколько, Мизуки укажет вам ту, которая минимизирует \(d(a,x)\).

Выясните структуру секретного дерева Мизуки, используя не более \(15n\) запросов!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки с целым числом \(n\) (\(2 \le n \le 1000\)) — количество вершин в дереве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Протокол взаимодействия

Взаимодействие начинается с чтения целого числа \(n\).

Затем вы можете сделать до \(15n\) запросов.

Чтобы сделать запрос, выведите строку в формате «? a b» (без кавычек) (\(1 \le a,b \le n\)). После каждого запроса считайте целое число — ответ на ваш запрос.

Чтобы сообщить ответ, выведите строку в формате «! \(a_1\) \(b_1\) \(a_2\) \(b_2\) ... \(a_{n-1}\) \(b_{n-1}\)» (без кавычек), что означает, что между вершинами \(a_i\) и \(b_i\) существует ребро для каждого \(1 \le i \le n-1\). Вы можете выводить ребра в любом порядке.

После того как будет сделано \(15n\) запросов, ответ на любой другой запрос будет равен \(-1\). Получив такой ответ, завершите программу, чтобы получить вердикт Неправильный ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат: Первая строка содержит целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Первая строка каждого набора входных данных держит целое число \(n\) — количество вершин в скрытом дереве.

Затем следует \(n-1\) строка. В \(i\)-й из них содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)), что означает, что между \(a_i\) и \(b_i\) в скрытом дереве есть ребро.

Сумма \(n\) по всем наборам входных данных не должна превосходить \(1000\).

Примечание

Дерево — это связный неориентированный граф без циклов. Дерево с \(n\) вершинами всегда будет иметь \(n-1\) ребро.

В примере ответ на «? 1 2» равен \(1\). Это означает, что между вершинами \(1\) и \(2\) есть ребро.

Ответ на запрос «? 1 3» равен \(1\). Это означает, что между вершинами \(1\) и \(3\) есть ребро.

Ответ на запрос «? 1 4» равен \(3\). Можно доказать, что это возможно только в том случае, если вершина \(3\) соединена с вершинами \(1\) и \(4\).

Следовательно, ребра дерева — это \((1,2)\), \((1,3)\) и \((3,4)\).

D. Самая длинная подпоследовательность

жадные алгоритмы Конструктив Перебор реализация Структуры данных *1900

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Пусть \(S\) — множество всех непустых подпоследовательностей \(a\), в которых нет одинаковых элементов. Ваша цель — найти самую длинную последовательность в \(S\). Если таких несколько, найдите ту, которая минимизирует лексикографический порядок после умножения членов в нечетных позициях на \(-1\).

Например, при \(a = [3, 2, 3, 1]\), \(S = \{[1], [2], [3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 3, 1], [3, 2, 1]\}\). Тогда \([2, 3, 1]\) и \([3, 2, 1]\) будут самыми длинными, а \([3, 2, 1]\) будет ответом, так как \([-3, 2, -1]\) лексикографически меньше, чем \([-2, 3, -1]\).

Последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Последовательность \(c\) лексикографически меньше последовательности \(d\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(c\) является префиксом \(d\), но \(c \ne d\);
  • в первой позиции, где \(c\) и \(d\) различаются, последовательность \(c\) имеет меньший элемент, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 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 n\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Выведите целое число \(m\) в первой строке — длину \(b\).

Затем выведите \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) во второй строке — последовательность \(b\).

Примечание

В первом примере \(S = \{[1], [2], [3], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 1, 3], [3, 2, 1]\}\). Среди них \([2, 1, 3]\) и \([3, 2, 1]\) — самые длинные, а \([-3, 2, -1]\) лексикографически меньше \([-2, 1, -3]\), поэтому \([3, 2, 1]\) — ответ.

Во втором примере \(S = \{[1]\}\), поэтому \([1]\) — ответ.

C. Чёрные круги

геометрия жадные алгоритмы математика Перебор *1200

На двумерной плоскости есть \(n\) кругов. Центр круга с индексом \(i\) имеет координаты \((x_i,y_i)\). Изначально радиусы всех кругов равны \(0\).

Радиусы кругов увеличиваются со скоростью \(1\) единица в секунду.

Вы находитесь в точке \((x_s,y_s)\); ваша цель — попасть в точку \((x_t,y_t)\), ни разу не коснувшись окружности какого-либо круга (включая момент, когда достигаете \((x_t,y_t)\)). Вы можете двигаться в любом направлении. Однако ваша скорость ограничена — \(1\) единица в секунду. Определите, возможно ли это.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано целое число \(n\) (\(1\le n\le10^5\)) — количество кругов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(1\le x_i,y_i\le10^9\)) — координаты центра каждого круга.

Последняя строка содержит четыре целых числа \(x_s\), \(y_s\), \(x_t\), \(y_t\) (\(1\le x_s,y_s,x_t,y_t\le10^9\)) — координаты начальной точки и цели, соответственно.

Гарантируется, что все \(n+2\) точки различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если возможно достигнуть цели без прикосновения к окружности любого круга, иначе выведите \(\texttt{NO}\).

Вы можете выводить \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (к примеру, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных возможный способ передвижения выглядит следующим образом.

H. Подсчёт 101

жадные алгоритмы *3500

Это был долгий летний день с постоянным стрекотанием цикад и жарой, которая, казалось, никогда не закончится. Наконец, он подошел к концу. Схватка прошла, ворота открыты, и только легкий ветерок остался позади.

Ваши предшественники отвесили последний поклон, теперь ваша очередь выйти на сцену.

Разбираясь в оставленных записях, вы нашли любопытное условие под названием Задача 101:

  • Если задана последовательность целых положительных чисел \(a_1,a_2,\ldots,a_n\), то вы можете применять к ней операцию любое количество раз. В одной операции вы выбираете три последовательных элемента \(a_i,a_{i+1},a_{i+2}\) и объединяете их в один элемент \(\max(a_i+1,a_{i+1},a_{i+2}+1)\). Вычислите максимальное количество операций, которые можно выполнить, не создавая элемент больше \(m\).

Немного подумав, вы решили предложить следующую задачу под названием Подсчёт 101:

  • Даны \(n\) и \(m\). Для каждого \(k=0,1,\ldots,\left\lfloor\frac{n-1}{2}\right\rfloor\) найдите количество целочисленных последовательностей \(a_1,a_2,\ldots,a_n\) с элементами из \([1, m]\), таких, что при использовании их в качестве входных данных для задачи 101, ответ равен \(k\). Поскольку ответ может быть очень большим, пожалуйста, выведите его по модулю \(10^9+7\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1\le n\le 130\), \(1\le m\le 30\)).

Выходные данные

Для каждого набора входных данных выведите \(\left\lfloor\frac{n+1}{2}\right\rfloor\) чисел, где \(i\)-е число — это количество допустимых последовательностей, при использовании которых в качестве входных данных для Задачи 101 ответ равен \(i-1\), по модулю \(10^9+7\).

Примечание

В первом наборе входных данных есть \(2^3=8\) последовательностей-кандидатов. Среди них по одному разу можно оперировать с последовательностями \([1,2,1]\) и \([1,1,1]\); с остальными \(6\) последовательностями оперировать нельзя.

A. Черепаха и хорошие строки

жадные алгоритмы Строки *800

Черепаха считает строку \(s\) хорошей строкой, если существует последовательность строк \(t_1, t_2, \ldots, t_k\) (\(k\) — произвольное целое число) такая, что:

  • \(k \ge 2\).
  • \(s = t_1 + t_2 + \ldots + t_k\), где \(+\) обозначает операцию конкатенации. Например, \(\texttt{abc} = \texttt{a} + \texttt{bc}\).
  • Для всех \(1 \le i < j \le k\) первый символ \(t_i\) не равен последнему символу \(t_j\).

Черепахе дана строка \(s\), состоящая из строчных латинских букв. Пожалуйста, скажите ей, является ли строка \(s\) хорошей строкой!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 500\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длина строки.

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(n\), состоящую из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите «YES», если строка \(s\) является хорошей строкой, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных последовательность строк \(\texttt{a}, \texttt{a}\) удовлетворяет условию \(s = t_1 + t_2 + \ldots + t_k\), но первый символ \(t_1\) равен последнему символу \(t_2\). Можно увидеть, что не существует никакой последовательности строк, которая удовлетворяет всем условиям, поэтому ответ «NO».

В третьем наборе входных данных последовательность строк \(\texttt{ab}, \texttt{cb}\) удовлетворяет всем условиям.

В четвертом наборе входных данных последовательность строк \(\texttt{abca}, \texttt{bcab}, \texttt{cabc}\) удовлетворяет всем условиям.

B. Черепаха и Свинка играют в игру 2

жадные алгоритмы игры сортировки *800

Черепаха и Свинка играют в игру на последовательности. Им дана последовательность \(a_1, a_2, \ldots, a_n\). Черепаха ходит первой. Животные ходят по очереди(т.е. Черепаха делает первый ход, Свинка делает второй, Черепаха делает третий и т.д.).

Игра проходит следующим образом:

  • Пусть текущая длина последовательности равна \(m\). Если \(m = 1\), игра заканчивается.
  • Если игра не закончилась и ходит Черепаха, то Черепаха должна выбрать целое число \(i\) такое, что \(1 \le i \le m - 1\), сделать \(a_i\) равным \(\max(a_i, a_{i + 1})\) и удалить \(a_{i + 1}\).
  • Если игра не закончилась и ходит Свинка, то Свинка должна выбрать целое число \(i\) такое, что \(1 \le i \le m - 1\), сделать \(a_i\) равным \(\min(a_i, a_{i + 1})\) и удалить \(a_{i + 1}\).

Черепаха хочет максимизировать значение \(a_1\) в конце, в то время как Свинка хочет минимизировать значение \(a_1\) в конце. Найдите значение \(a_1\) в конце, если оба игрока играют оптимально.

Вы можете обратиться к примечаниям для дальнейшего разъяснения.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов следует далее.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина последовательности.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора выведите одно целое число — значение \(a_1\) в конце, если оба игрока играют оптимально.

Примечание

В первом наборе изначально \(a = [1, 2]\). Черепаха может выбрать только \(i = 1\). Затем она сделает \(a_1\) равным \(\max(a_1, a_2) = 2\) и удалит \(a_2\). Последовательность \(a\) становится \([2]\). Затем длина последовательности становится \(1\), и игра закончится. Значение \(a_1\) равно \(2\), поэтому вы должны вывести \(2\).

Во втором наборе один из возможных процессов игры выглядит следующим образом:

  • Изначально \(a = [1, 1, 2]\).
  • Черепаха может выбрать \(i = 2\). Затем она сделает \(a_2\) равным \(\max(a_2, a_3) = 2\) и удалит \(a_3\). Последовательность \(a\) станет \([1, 2]\).
  • Свинка может выбрать \(i = 1\). Затем она сделает \(a_1\) равным \(\min(a_1, a_2) = 1\) и удалит \(a_2\). Последовательность \(a\) станет \([1]\).
  • Длина последовательности становится \(1\), так что игра закончится. Значение \(a_1\) будет \(1\) в конце.

В четвертом наборе один из возможных процессов игры выглядит следующим образом:

  • Изначально \(a = [3, 1, 2, 2, 3]\).
  • Черепаха может выбрать \(i = 4\). Затем она сделает \(a_4\) равным \(\max(a_4, a_5) = 3\) и удалит \(a_5\). Последовательность \(a\) станет \([3, 1, 2, 3]\).
  • Свинка может выбрать \(i = 3\). Затем она сделает \(a_3\) равным \(\min(a_3, a_4) = 2\) и удалит \(a_4\). Последовательность \(a\) станет \([3, 1, 2]\).
  • Черепаха может выбрать \(i = 2\). Затем она сделает \(a_2\) равным \(\max(a_2, a_3) = 2\) и удалит \(a_3\). Последовательность \(a\) станет \([3, 2]\).
  • Свинка может выбрать \(i = 1\). Затем она сделает \(a_1\) равным \(\min(a_1, a_2) = 2\) и удалит \(a_2\). Последовательность \(a\) станет \([2]\).
  • Длина последовательности становится \(1\), так что игра закончится. Значение \(a_1\) будет \(2\) в конце.

C. Черепаха и хорошие пары

жадные алгоритмы Конструктив сортировки Строки *1200

Черепаха дает вам строку \(s\), состоящую из строчных латинских букв.

Черепаха считает пару целых чисел \((i, j)\) (\(1 \le i < j \le n\)) приятной парой, если и только если существует целое число \(k\), такое что \(i \le k < j\) и выполняются оба из следующих двух условий:

  • \(s_k \ne s_{k + 1}\);
  • \(s_k \ne s_i\) или \(s_{k + 1} \ne s_j\).

Кроме того, Черепаха считает пару целых чисел \((i, j)\) (\(1 \le i < j \le n\)) хорошей парой, если и только если \(s_i = s_j\) или \((i, j)\) является приятной парой.

Черепаха хочет переставить буквы в строке \(s\) так, чтобы количество хороших пар было максимизировано. Пожалуйста, помогите ей!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов следует далее.

Первая строка каждого наборов содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину строки.

Вторая строка каждого наборов содержит строку \(s\) длиной \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите строку \(s\) после перестановки букв, которая максимизирует количество хороших пар. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе \((1, 3)\) является хорошей парой в строке из переставленных букв. Можно заметить, что мы не можем переставить буквы так, чтобы количество хороших пар было больше \(1\). bac и cab также могут быть ответом.

Во втором наборе \((1, 2)\), \((1, 4)\), \((1, 5)\), \((2, 4)\), \((2, 5)\), \((3, 5)\) являются хорошими парами в строке из переставленных букв. efddd также может быть ответом.

D1. Черепаха и задача о MEX (легкая версия)

жадные алгоритмы математика *1500

Две версии представляют собой разные задачи. В этой версии задачи вы можете выбрать одно и то же целое число дважды или более. Вы можете делать взломы только в том случае, если обе версии решены.

Однажды Черепаха играла с \(n\) последовательностями. Пусть длина \(i\)-й последовательности равна \(l_i\). Тогда \(i\)-я последовательность была \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i}\).

Свинка дала Черепахе задачу, когда Черепаха играла. Условие задачи было следующим:

  • Сначала было неотрицательное целое число \(x\). Черепаха могла выполнять произвольное количество (возможно, ноль) операций над этим числом.
  • В каждой операции Черепаха могла выбрать целое число \(i\), такое что \(1 \le i \le n\), и сделать \(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 = 3\) и сделать \(x\) равным \(\text{mex}(x, a_{3, 1}, a_{3, 2}, a_{3, 3}, a_{3, 4}, a_{3, 5}) = \text{mex}(1, 1, 3, 0, 3, 3) = 2\), а затем выбрать \(i = 3\) и сделать \(x\) равным \(\text{mex}(x, a_{3, 1}, a_{3, 2}, a_{3, 3}, a_{3, 4}, a_{3, 5}) = \text{mex}(2, 1, 3, 0, 3, 3) = 4\). Можно доказать, что Черепаха не может сделать значение \(x\) больше \(4\), поэтому \(f(1) = 4\).

Можно заметить, что \(f(0) = 4\), \(f(1) = 4\), \(f(2) = 4\), \(f(3) = 4\), и \(f(4) = 4\). Таким образом, \(f(0) + f(1) + f(2) + f(3) + f(4) = 4 + 4 + 4 + 4 + 4 = 20\).

В четвертом наборе входных данных можно заметить, что \(f(0) = 3\) и \(f(1) = 3\). Таким образом, \(f(0) + f(1) = 3 + 3 = 6\).

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\), которая удовлетворяет обоим условиям.

B. Игра с дверьми

жадные алгоритмы Перебор *1000

В ряд расположено \(100\) комнат и \(99\) дверей между ними, \(i\)-я дверь соединяет комнаты \(i\) и \(i+1\). Каждая дверь может быть открыта или закрыта. Изначально все двери открыты.

Скажем, что комната \(x\) достижима из комнаты \(y\), если все двери между ними открыты.

Вы знаете, что:

  • Алиса находится в какой-то комнате из отрезка \([l, r]\);
  • Боб находится в какой-то комнате из отрезка \([L, R]\);
  • Алиса и Боб находятся в разных комнатах.

Однако вы не знаете, в каких именно комнатах они находятся.

Вы не хотите, чтобы Алиса и Боб могли добраться друг до друга, поэтому собираетесь закрыть некоторые двери, чтобы этого избежать. Какое минимальное количество дверей необходимо закрыть, чтобы Алиса и Боб не могли встретиться, независимо от их начальных позиций внутри заданных отрезков?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(l\) и \(r\) (\(1 \le l < r \le 100\)) — отрезок комнат, в которых может находиться Алиса.

Вторая строка каждого набора содержит два целых числа \(L\) и \(R\) (\(1 \le L < R \le 100\)) — отрезок комнат, в которых может находиться Боб.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество дверей, которое необходимо закрыть, чтобы Алиса и Боб не могли встретиться, независимо от их начальных позиций внутри заданных отрезков.

Примечание

В первом наборе входных данных достаточно закрыть дверь между комнатами \(2\) и \(3\).

Во втором наборе входных данных нужно закрыть следующие двери: \((2,3)\), \((3,4)\), \((4,5)\).

В третьем наборе входных данных нужно закрыть следующие двери: \((5, 6)\) и \((6,7)\).

C. Делим предметы

жадные алгоритмы игры сортировки *1100

У Алисы и Боба есть \(n\) предметов, которые они хотят разделить между собой, поэтому они решили сыграть в игру. У каждого предмета есть стоимость: \(i\)-й предмет стоит \(a_i\). Игроки ходят по очереди, начиная с Алисы.

На каждом ходу игрок выбирает один из оставшихся предметов и забирает его. Игроки ходят, пока не закончатся все предметы.

Обозначим суммарную стоимость предметов, взятых Алисой, за \(A\), а суммарную стоимость предметов Боба за \(B\). Тогда итоговый счет игры будет равен \(A - B\).

Алиса хочет максимизировать счет, в то время как Боб хочет минимизировать его. Оба, Алиса и Боб, будут играть оптимально.

Однако игра состоится завтра, а потому сегодня Боб может немного изменить стоимости предметов. Он может увеличить стоимости \(a_i\) нескольких предметов (возможно, всех или ни одного) на целое значение (возможно одно и то же или на разное для каждого предмета). Однако, общее увеличение должно быть не более \(k\). В противном случае Алиса может заподозрить что-то неладное. Обратите внимание, что Боб не может уменьшать стоимости, только увеличивать.

Какого минимально возможного счета может достигнуть Боб?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(0 \le k \le 10^9\)) — количество предметов и максимальное общее увеличение, которое может сделать Боб.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — первоначальные стоимости предметов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможный счет \(A - B\), учитывая, что Боб заранее увеличит стоимости нескольких (возможно, всех или ни одного) предметов.

Примечание

В первом наборе Боб может увеличить \(a_1\) на \(5\), сделав стоимости равными \([6, 10]\). Завтра Алиса возьмет \(10\), а Боб возьмет \(6\). Общий счет будет равен \(10 - 6 = 4\), и это минимально возможный результат.

Во втором наборе Боб не может изменять стоимости. Таким образом, итоговый счет будет равен \((15 + 10) - 12 = 13\), поскольку Алиса возьмет \(15\), Боб возьмет \(12\), а Алиса — \(10\).

В третьем наборе Боб, например, может увеличить \(a_1\) на \(1\), \(a_2\) на \(3\) и \(a_3\) на \(2\). Общее изменение равно \(1 + 3 + 2 \le 6\), и стоимости будут равны \([4, 4, 4, 4]\). Очевидно, что счет будет равен \((4 + 4) - (4 + 4) = 0\).

В четвертом наборе Боб может увеличить \(a_1\) на \(3\), сделав стоимости равными \([9, 9]\). Счет будет равен \(9 - 9 = 0\).

D. Цветные порталы

Бинарный поиск графы жадные алгоритмы кратчайшие пути Перебор реализация Структуры данных *1600

На прямой расположено \(n\) городов. Города пронумерованы целыми числами от \(1\) до \(n\).

Для перемещения между городами используются порталы. Порталы бывают \(4\) цветов: синий, зеленый, красный и желтый. В каждом городе расположены порталы двух разных цветов. Из города \(i\) можно переместиться в город \(j\), если в них есть порталы одинакового цвета (например, между городом «красный-синий» и городом «синий-зеленый» можно перемещаться). Данное перемещение стоит \(|i-j|\) монет.

Ваша задача — ответить на \(q\) независимых запросов: посчитайте минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество городов и количество запросов, соответственно.

Вторая строка содержит \(n\) строк одного из следующих типов: BG, BR, BY, GR, GY или RY; \(i\)-я из них описывает порталы, находящиеся в \(i\)-м городе; символ B обозначает, что в городе есть портал синего цвета, G — зеленого, R — красного, а Y — желтого.

\(j\)-я из следующих \(q\) строк содержит два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — описание \(j\)-го запроса.

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\);
  • сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого запроса выведите одно целое число — минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\) (или \(-1\), если это невозможно).

F. Сделай палиндром

Бинарный поиск жадные алгоритмы математика Перебор Структуры данных *2600

Задан массив \(a\), состоящий из \(n\) целых чисел.

Скажем, что результат функции \(f(b)\) — минимальное количество операций, чтобы сделать массив \(b\) палиндромом. Операции, которые вы можете выполнять — следующие:

  • выбрать два соседних элемента \(b_i\) и \(b_{i+1}\), удалить их и заменить одним элементом, равным \((b_i + b_{i + 1})\);
  • или выбрать элемент \(b_i > 1\), удалить его и заменить двумя положительными целыми числами \(x\) и \(y\) (\(x > 0\) и \(y > 0\)) такими, что \(x + y = b_i\).

Например, из массива \(b=[2, 1, 3]\) за одну операцию можно получить следующие массивы: \([1, 1, 1, 3]\), \([2, 1, 1, 2]\), \([3, 3]\), \([2, 4]\) или \([2, 1, 2, 1]\).

Посчитайте \(\displaystyle \left(\sum_{1 \le l \le r \le n}{f(a[l..r])}\right)\), где \(a[l..r]\) — подотрезок массива \(a\) с \(l\)-й по \(r\)-ю позиции включительно. Другими словами — сумму значений функции \(f\) для всех подотрезков массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — сумму значений функции \(f\) для всех подотрезков массива \(a\).

A. Простой палиндром

жадные алгоритмы Комбинаторика Конструктив математика *900

Нарек должен провести 2 часа с детьми в детском саду. Он хочет научить их спортивному программированию, и их первый урок посвящен палиндромам.

Нарек выяснил, что дети знают только гласные буквы английского алфавита (буквы \(\mathtt{a}\), \(\mathtt{e}\), \(\mathtt{i}\), \(\mathtt{o}\) и \(\mathtt{u}\)), поэтому Нареку нужно составить строку, состоящую только из гласных. После составления строки он попросит детей посчитать количество подпоследовательностей, которые являются палиндромами. Нарек хочет, чтобы это было просто, поэтому он ищет строку, для которой количество палиндромных подпоследовательностей минимально.

Помогите Нареку найти строку длины \(n\), состоящую из строчных гласных латинских букв (буквы \(\mathtt{a}\), \(\mathtt{e}\), \(\mathtt{i}\), \(\mathtt{o}\) и \(\mathtt{u}\)), которая минимизирует количество палиндромных\(^{\dagger}\) подпоследовательностей\(^{\ddagger}\) в ней.

\(^{\dagger}\) Строка называется палиндромом, если она читается одинаково слева направо и справа налево.

\(^{\ddagger}\) Строка \(t\) является подпоследовательностью строки \(s\), если \(t\) можно получить из \(s\) путем удаления нескольких (возможно, ни одного или всех) символов из \(s\) и конкатенации оставшихся, не меняя их порядок. Например, \(\mathtt{odocs}\) является подпоследовательностью \(\texttt{c}{\color{red}{\texttt{od}}}\texttt{ef}{\color{red}{\texttt{o}}}\texttt{r}{\color{red}{\texttt{c}}}\texttt{e}{\color{red}{\texttt{s}}}\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание каждого набора входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину строки.

Выходные данные

Для каждого набора входных данных выведите любую строку длины \(n\), которая удовлетворяет вышеуказанным условиям.

Примечание

В первом примере \(\texttt{uo}\) имеет только три палиндромные подпоследовательности: \(\texttt{u}\), \(\texttt{o}\) и пустую строку. Можно показать, что нет ответа лучше.

В третьем примере \(\texttt{oeiiua}\) имеет только восемь палиндромных подпоследовательностей: \(\texttt{o}\), \(\texttt{e}\), \(\texttt{i}\), \(\texttt{i}\), \(\texttt{u}\), \(\texttt{a}\), \(\texttt{ii}\) и пустую строку. Можно показать, что нет ответа лучше.

B1. Строгая учительница (простая версия)

жадные алгоритмы математика сортировки *1000

Это простая версия задачи. Единственные отличия между двумя версиями заключаются в ограничениях на \(m\) и \(q\). В этой версии \(m=2\) и \(q=1\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Нарек и Цовак были заняты подготовкой этого раунда, поэтому они не успели сделать домашнее задание, и они решили украсть домашнее задание Давида. Их строгая учительница заметила, что у Давида нет домашнего задания, и теперь хочет его наказать. Она наняла других учительниц, чтобы помочь поймать Давида, и теперь \(m\) учительниц вместе преследуют его. К счастью, они находятся в большом классе, поэтому у Давида есть много мест, где можно спрятаться.

Класс можно представить как последовательность клеток, пронумерованных от \(1\) до \(n\), расположенных на прямой.

Изначально все \(m\) учительниц и Давид находятся в различных клетках. Затем они делают ходы. Во время каждого хода:

  • Давид перемещается в соседнюю клетку или остается в текущей.
  • Затем каждая из \(m\) учительниц одновременно перемещается в соседнюю клетку или остается в текущей.

Процесс продолжается, пока Давид не будет пойман. Давид пойман, если любая из учительниц (возможно, более одной) находится в той же клетке, что и Давид. Все участники видят ходы других, поэтому все действуют оптимально.

Ваша задача — посчитать, сколько ходов потребуется учительницам, чтобы поймать Давида, если они все действуют оптимально.

Оптимальность действий означает, что ученик делает свои ходы так, чтобы максимизировать количество ходов, необходимых учительницам, чтобы поймать его. А учительницы координируются друг с другом, чтобы сделать свои ходы так, чтобы минимизировать количество ходов, необходимых для поимки ученика.

Кроме того, поскольку Нарек и Цовак считают эту задачу простой, они решили задать вам \(q\) запросов о положении Давида. Примечание: это простая версия, и вам дано только один запрос.

Входные данные

В первой строке входных данных вам дано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание каждого набора входных данных.

В первой строке каждого набора входных данных вам даны три целых числа \(n\), \(m\) и \(q\) (\(3 \le n \le 10^9\), \(m=2\), \(q=1\)) — количество клеток на прямой, количество учительниц и количество запросов.

Во второй строке каждого набора входных данных вам даны \(m\) различных целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера клеток учительниц.

В третьей строке каждого набора входных данных вам даны \(q\) целых чисел \(a_1, a_2, \ldots, a_q\) (\(1 \le a_i \le n\)) — номера клеток Давида для каждого запроса.

Гарантируется, что для любого \(i\), \(j\) таких, что \(1 \le i \le m\) и \(1 \le j \le q\): \(b_i \neq a_j\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, в \(i\)-й из которых содержится ответ на \(i\)-й запрос.

Примечание

В первом примере ученик может просто остаться в клетке \(2\). Учительница, изначально находящаяся в клетке \(1\), может добраться до клетки \(2\) за один ход. Поэтому ответ — \(1\).

Во втором примере ученик должен просто остаться в клетке \(1\). Учительница, изначально находящаяся в клетке \(3\), может добраться до клетки \(1\) за два хода. Поэтому ответ — \(2\).

B2. Строгая учительница (сложная версия)

Бинарный поиск жадные алгоритмы математика сортировки *1200

Это простая версия задачи. Единственные отличия между двумя версиями заключаются в ограничениях на \(m\) и \(q\). В этой версии \(m, q \le 10^5\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Нарек и Цовак были заняты подготовкой этого раунда, поэтому они не успели сделать домашнее задание, и они решили украсть домашнее задание Давида. Их строгая учительница заметила, что у Давида нет домашнего задания, и теперь хочет его наказать. Она наняла других учительниц, чтобы помочь поймать Давида, и теперь \(m\) учительниц вместе преследуют его. К счастью, они находятся в большом классе, поэтому у Давида есть много мест, где можно спрятаться.

Класс можно представить как последовательность клеток, пронумерованных от \(1\) до \(n\), расположенных на прямой.

Изначально все \(m\) учительниц и Давид находятся в различных клетках. Затем они делают ходы. Во время каждого хода:

  • Давид перемещается в соседнюю клетку или остается в текущей.
  • Затем каждая из \(m\) учительниц одновременно перемещается в соседнюю клетку или остается в текущей.

Процесс продолжается, пока Давид не будет пойман. Давид пойман, если любая из учительниц (возможно, более одной) находится в той же клетке, что и Давид. Все участники видят ходы других, поэтому все действуют оптимально.

Ваша задача — посчитать, сколько ходов потребуется учительницам, чтобы поймать Давида, если они все действуют оптимально.

Оптимальность действий означает, что ученик делает свои ходы так, чтобы максимизировать количество ходов, необходимых учительницам, чтобы поймать его. А учительницы координируются друг с другом, чтобы сделать свои ходы так, чтобы минимизировать количество ходов, необходимых для поимки ученика.

Кроме того, поскольку Нарек и Цовак считают эту задачу простой, они решили задать вам \(q\) запросов о положении Давида.

Входные данные

В первой строке входных данных вам дано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание каждого набора входных данных.

В первой строке каждого набора входных данных вам даны три целых числа \(n\), \(m\) и \(q\) (\(3 \le n \le 10^9\), \(1 \le m, q \le 10^5\)) — количество клеток на линии, количество учительниц и количество запросов.

Во второй строке каждого набора входных данных вам даны \(m\) различных целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера клеток учительниц.

В третьей строке каждого набора входных данных вам даны \(q\) целых чисел \(a_1, a_2, \ldots, a_q\) (\(1 \le a_i \le n\)) — номера клеток Давида для каждого запроса.

Гарантируется, что для любого \(i\), \(j\) такие, что \(1 \le i \le m\) и \(1 \le j \le q\), \(b_i \neq a_j\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, в \(i\)-й из которых содержится ответ на \(i\)-й запрос.

Примечание

В единственном запросе первого примера ученик может убежать в клетку \(1\). Учительнице потребуется пять ходов, чтобы добраться из клетки \(6\) до клетки \(1\), поэтому ответ — \(5\).

Во втором запросе второго примера ученик может просто остаться в клетке \(3\). Учительница, изначально находящаяся в клетке \(4\), может добраться до клетки \(3\) за один ход. Следовательно, ответ — \(1\).

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\), поэтому он проигрывает.

A. Ирис и игра на дереве

графы Деревья жадные алгоритмы игры Конструктив поиск в глубину и подобное *1700

У Ирис есть дерево, корень которого находится в вершине \(1\). Каждая вершина имеет значение \(\mathtt 0\) или \(\mathtt 1\).

Рассмотрим лист дерева (вершина \(1\) никогда не считается листом) и определим его вес. Построим строку, сформированную значениями вершин на пути от корня до этого листа. Тогда вес листа — это разность количества вхождений подстроки \(\mathtt{10}\) и количества вхождений подстроки \(\mathtt{01}\) в этой строке.

Возьмем следующее дерево в качестве примера. Зеленые вершины имеют значение \(\mathtt 1\), в то время как белые вершины имеют значение \(\mathtt 0\).

  • Посчитаем вес листа \(5\): сформированная строка равна \(\mathtt{10110}\). Количество вхождений подстроки \(\mathtt{10}\) равно \(2\), количество вхождений подстроки \(\mathtt{01}\) равно \(1\), так что разность равна \(2 - 1 = 1\).
  • Посчитаем вес листа \(6\): сформированная строка равна \(\mathtt{101}\). Количество вхождений подстроки \(\mathtt{10}\) равно \(1\), количество вхождений подстроки \(\mathtt{01}\) равно \(1\), так что разность равна \(1 - 1 = 0\).

Оценкой дерева назовём количество листьев с ненулевым весом в дереве.

Однако значения некоторых вершин ещё не определены и будут даны вам как \(\texttt{?}\). Заполнение пропусков было бы слишком скучным, поэтому Ирис собирается пригласить Дору поиграть в игру. На каждом ходу одна из девочек выбирает любую из оставшихся вершин со значением \(\texttt{?}\) и изменяет её значение на \(\mathtt{0}\) или \(\mathtt{1}\), при этом Ирис ходит первой. Игра продолжается до тех пор, пока в дереве не останется вершин со значением \(\mathtt{?}\). Ирис стремится максимизировать оценку дерева, в то время как Дора стремится минимизировать её.

Предполагая, что обе девочки играют оптимально, определите итоговую оценку дерева.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)) — обозначающие ребро между вершинами \(u\) и \(v\).

Гарантируется, что данные рёбра образуют дерево.

Последняя строка содержит строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) представляет значение вершины \(i\). Гарантируется, что \(s\) содержит только символы \(\mathtt{0}\), \(\mathtt{1}\) и \(\mathtt{?}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — итоговую оценку дерева.

Примечание

В первом наборе входных данных значения во всех вершинах уже определены. Существует три различных пути от корня до листа:

  • От вершины \(1\) до вершины \(2\). Сформированная строка равна \(\mathtt{01}\), так что вес листа равен \(0-1=-1\).
  • От вершины \(1\) до вершины \(3\). Сформированная строка равна \(\mathtt{00}\), так что вес листа равен \(0-0=0\).
  • От вершины \(1\) до вершины \(4\). Сформированная строка равна \(\mathtt{01}\), так что вес листа равен \(0-1=-1\).

Таким образом, есть два листа с ненулевым весом, так что оценка дерева равна \(2\).

Во втором наборе входных данных одна из последовательностей оптимальных ходов для двух игроков может быть следующей:

  • Ирис выбирает изменить значение вершины \(3\) на \(\mathtt 1\).
  • Дора выбирает изменить значение вершины \(1\) на \(\mathtt 0\).
  • Ирис выбирает изменить значение вершины \(2\) на \(\mathtt 0\).

Итоговое дерево выглядит следующим образом:

Единственный лист с ненулевым весом — это \(3\), так что оценка дерева равна \(1\). Обратите внимание, что это может быть не единственная последовательность оптимальных ходов для Ирис и Доры.

D. Ирис и соседние произведения

жадные алгоритмы математика реализация Структуры данных *2600

Ирис только что научилась умножению на уроках математики. Однако, поскольку её мозг не в состоянии выдерживать слишком сложные вычисления, она не может перемножать два целых числа, произведение которых больше \(k\). В противном случае её мозг может взорваться!

Её учитель каждый день даёт ей сложную задачу в качестве домашнего задания на летних каникулах. Теперь ей дан массив \(a\), состоящий из \(n\) элементов, и ей нужно вычислить произведение каждой пары соседних элементов (то есть, \(a_1 \cdot a_2\), \(a_2 \cdot a_3\) и так далее). Ирис хочет, чтобы её мозг не перегружался, и для этого она хотела бы изменить массив \(a\) так, чтобы выполнялось условие \(a_i \cdot a_{i + 1} \leq k\) для всех \(1 \leq i < n\). Она может выполнять два типа операций:

  1. Она может переставить элементы массива \(a\) произвольным образом.
  2. Она может выбрать произвольный элемент массива \(a\) и изменить его значение на произвольное целое число от \(1\) до \(k\).

Ирис хочет минимизировать количество операций типа \(2\), которые она использует.

Однако это совершенно не конец летних каникул! Летние каникулы длятся \(q\) дней, и в \(i\)-й день Ирис просят решить математическое задание для подмассива \(b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\). Помогите Ирис и скажите ей минимальное количество операций типа \(2\), которые ей нужно выполнить для каждого дня. Обратите внимание, что операции независимы для каждого дня, то есть массив \(b\) не изменяется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(q\) и \(k\) (\(2 \leq n \leq 10^5\), \(1 \leq q \leq 10^5\), \(1 \leq k \leq 10^6\)) — длина массива \(b\), количество дней и верхняя граница для вычисления произведения.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq k\)) — элементы массива \(b\).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq n\)) — границы подмассива в \(i\)-й день.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(q\) целых числа — минимальное количество операций типа \(2\), необходимых для каждого дня.

Примечание

В первом наборе входных данных, так как Ирис всегда может перемножить \(1\) и \(1\), операции не требуются, поэтому ответ равен \(0\).

Во втором наборе входных данных, домашнее задание первого дня — \([1, 10, 9]\). Ирис может переставить его элементы, чтобы получить \([9, 1, 10]\), поэтому операции типа \(2\) не требуются. Домашнее задание второго дня — \([10, 9]\), и она может изменить один элемент, чтобы получить массив \([1, 9]\), поэтому требуется одна операция типа \(2\).

A. Множество Доры

жадные алгоритмы математика теория чисел *800

У Доры есть множество \(s\), содержащее целые числа. Сначала она поместит все целые числа из отрезка \([l, r]\) в множество \(s\). То есть, целое число \(x\) изначально содержится в множестве тогда и только тогда, когда \(l \leq x \leq r\). Затем она позволяет вам выполнять следующие операции:

  • Выберите три различных целых числа \(a\), \(b\) и \(c\) из множества \(s\), такие что \(\gcd(a, b) = \gcd(b, c) = \gcd(a, c) = 1^\dagger\).
  • Затем удалите эти три целых числа из множества \(s\).

Какое максимальное количество операций вы можете выполнить?

\(^\dagger\)Напомним, что \(\gcd(x, y)\) означает наибольший общий делитель целых чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 1000\)) — диапазон целых чисел в начальном множестве.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которые вы можете выполнить.

Примечание

В первом наборе входных данных вы можете выбрать \(a = 1\), \(b = 2\), \(c = 3\) в единственной операции, так как \(\gcd(1, 2) = \gcd(2, 3) = \gcd(1, 3) = 1\), в множестве больше нет целых чисел, поэтому больше операций выполнить нельзя.

Во втором наборе входных данных вы можете выбрать \(a = 3\), \(b = 5\), \(c = 7\) в единственной операции.

В третьем наборе входных данных вы можете выбрать \(a = 11\), \(b = 19\), \(c = 20\) в первой операции, \(a = 13\), \(b = 14\), \(c = 15\) во второй операции и \(a = 10\), \(b = 17\), \(c = 21\) в третьей операции. После трех операций множество \(s\) содержит следующие целые числа: \(12\), \(16\), \(18\). Можно доказать, что нельзя сделать больше \(3\) операций.

B. Индекс и максимальное значение

жадные алгоритмы Структуры данных *900

Получив на свой день рождения ещё один массив целых чисел \(a_1, a_2, \ldots, a_n\), Индекс решает выполнить некоторые операции над ним.

Формально, она собирается выполнить \(m\) операций по порядку. Каждая из них относится к одному из двух типов:

  • \(\texttt{+ l r}\). Даны два целых числа \(l\) и \(r\), для всех \(1 \leq i \leq n\), таких что \(l \leq a_i \leq r\), присвоить \(a_i := a_i + 1\).
  • \(\texttt{- l r}\). Даны два целых числа \(l\) и \(r\), для всех \(1 \leq i \leq n\), таких что \(l \leq a_i \leq r\), присвоить \(a_i := a_i - 1\).

Например, если начальный массив \(a = [7, 1, 3, 4, 3]\), после выполнения операции \(\texttt{+} \space 2 \space 4\), массив \(a = [7, 1, 4, 5, 4]\). Затем, после выполнения операции \(\texttt{-} \space 1 \space 10\), массив \(a = [6, 0, 3, 4, 3]\).

Индекс интересует максимальное значение в массиве \(a\). Пожалуйста, помогите ей найти его после каждой из \(m\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^5\), \(1 \leq m \leq 10^5\)) — длина массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальный массив \(a\).

Затем следуют \(m\) строк, каждая строка соответствует операции в следующем формате: \(\texttt{c l r}\) (\(c \in \{\texttt +, \texttt -\}\), \(l\) и \(r\) — целые числа, \(1 \leq l \leq r \leq 10^9\)) — описание операции.

Обратите внимание, что элементы \(a_i\) могут не удовлетворять \(1\le a_i\le 10^9\) после некоторых операций, как показано в примере.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\), и сумма \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(m\) целых чисел, где \(i\)-е из них описывает максимальное значение массива после \(i\)-й операции.

Примечание

В первом наборе входных данных процесс операций представлен ниже:

  • После первой операции массив становится равным \([2,3,4,3,2]\). Максимальное значение \(4\).
  • После второй операции массив становится равным \([1,2,4,2,1]\). Максимальное значение \(4\).
  • После третьей операции массив становится равным \([2,3,4,3,2]\). Максимальное значение \(4\).
  • После четвёртой операции массив становится равным \([3,4,5,4,3]\). Максимальное значение \(5\).
  • После пятой операции массив становится равным \([3,4,5,4,3]\). Максимальное значение \(5\).

Во втором наборе входных данных процесс операций представлен ниже:

  • После первой операции массив становится равным \([2,4,4,5,5]\). Максимальное значение \(5\).
  • После второй операции массив становится равным \([3,4,4,5,5]\). Максимальное значение \(5\).
  • После третьей операции массив становится равным \([3,3,3,4,4]\). Максимальное значение \(4\).
  • После четвёртой операции массив становится равным \([2,2,2,4,4]\). Максимальное значение \(4\).
  • После пятой операции массив становится равным \([1,1,1,3,3]\). Максимальное значение \(3\).

A. Экзамен Сакурако

жадные алгоритмы Конструктив математика Перебор *800

Сегодня у Сакурако экзамен по математике. Учитель дал массив, который состоит из \(a\) единиц и \(b\) двоек.

В массиве Сакурако должна поставить перед каждым элементом либо '+', либо '-' так, чтобы сумма всех элементов массива была равна \(0\).

Сакурако не уверена, возможно ли решить эту задачу, определите, существует ли способ расставить знаки так, чтобы сумма всех элементов массива была равна \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\))  — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(a\) и \(b\) (\(0\le a,b<10\))  — количество '1' и количество '2' в массиве.

Выходные данные

Для каждого набора выведите «Yes», если вы можете сделать сумму всего массива равной \(0\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание
  1. \(a=0\), \(b=1\): это означает, что массив равен \([2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  2. \(a=0\), \(b=3\): это означает, что массив равен \([2, 2, 2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  3. \(a=2\), \(b=0\): это означает, что массив равен \([1, 1]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1-1=0\));
  4. \(a=2\), \(b=3\): это означает, что массив равен \([1, 1, 2, 2, 2]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1+1-2-2+2=0\));

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, что является чередующейся строкой.

G. Задание Сакурако

Бинарный поиск жадные алгоритмы математика теория чисел *1800

Сакурако подготовила для вас задачу:

Она дает вам массив из \(n\) целых чисел и позволяет выбрать \(i\) и \(j\) такие, что \(i \neq j\) и \(a_i \ge a_j\), а затем присвоить \(a_i = a_i - a_j\) или \(a_i = a_i + a_j\). Вы можете выполнить эту операцию любое количество раз для любых \(i\) и \(j\), если они удовлетворяют условиям.

Сакурако спрашивает вас, каково максимально возможное значение \(mex_k\)\(^{\text{∗}}\) массива после любого количества операций.

\(^{\text{∗}}\)\(mex_k\) — это \(k\)-е целое неотрицательное число, которого нет в массиве. Например, \(mex_1(\{1,2,3 \})=0\), так как \(0\) — первый элемент, которого нет в массиве, и \(mex_2(\{0,2,4 \})=3\), так как \(3\) — второй элемент, которого нет в массиве.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1\le n\le 2\cdot 10^5,1\le k\le 10^9\))  — количество элементов массива и параметр \(k\) для \(mex_k\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots,a_n\) (\(1\le a_i\le 10^9\))  — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальный \(mex_k\), которого возможно добиться с помощью операций.

H. Тест Сакурако

Бинарный поиск жадные алгоритмы математика Перебор теория чисел *2100

Сакурако вскоре будет сдавать тест. Тест можно описать как массив целых чисел \(n\) и задание на нем:

Задав целое число \(x\), Сакурако может выполнить следующую операцию любое количество раз:

  • Выбрать целое число \(i\) (\(1\le i\le n\)) такое, что \(a_i\ge x\);
  • Изменить значение \(a_i\) на \(a_i-x\).

Применяя эту операцию произвольное количество раз, она хочет найти минимальную возможную медиану\(^{\text{∗}}\) массива \(a\).

Сакурако знает массив, но не знает целое число \(x\). Кто-то проболтался, что одно из \(q\) значений \(x\) будет в следующем тесте, поэтому Сакурако спрашивает вас, каков ответ для каждого такого \(x\).

\(^{\text{∗}}\)Медиана массива длины \(n\) — это элемент, который стоит в середине отсортированного массива (в \(\frac{n+2}{2}\)-й позиции для чётного \(n\), и в \(\frac{n+1}{2}\)-й для нечётного)

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^5\))  — количество элементов массива и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1\le a_i\le n\))  — элементы массива.

Следующие \(q\) строк содержат по одному целому числу \(x\) (\(1\le x\le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(10^5\). То же самое гарантируется и для суммы \(q\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел  — ответ для каждого запроса.

E. Бот для игры: Камень-ножницы-бумага

*особая задача жадные алгоритмы Строки

«Камень-ножницы-бумага» — это игра для двух игроков. Игра состоит из раундов. В каждом раунде каждый игрок выбирает один из трех ходов: камень, бумага или ножницы. В зависимости от выбранных ходов происходит следующее:

  • если один игрок выбрал камень, а другой игрок выбрал бумагу, выигрывает игрок, выбравший бумагу, и получает одно очко;
  • если один игрок выбрал ножницы, а другой игрок выбрал бумагу, выигрывает игрок, выбравший ножницы, и получает одно очко;
  • если один игрок выбрал ножницы, а другой игрок выбрал камень, выигрывает игрок, выбравший камень, и получает одно очко;
  • если оба игрока выбрали один и тот же ход, никто не выигрывает и никто не получает очко.

Монокарп решил сыграть против бота. В ходе игры Монокарп заметил, что поведение бота очень предсказуемо, а именно:

  • в первом раунде он выбирает камень;
  • в каждом раунде, кроме первого, он выбирает тот ход, который выигрывает у хода оппонента в предыдущем раунде (например, если в предыдущем раунде его оппонент сыграл ножницы, то сейчас бот выберет камень).

У Монокарпа есть любимая строка \(s\), состоящая из символов R, P и/или S. Монокарп решил сыграть серию раундов против бота. Однако он хочет, чтобы выполнялись оба следующих условия:

  • итоговый счет был в пользу Монокарпа (то есть количество раундов, которые он выиграл, было строго больше, чем количество раундов, которые выиграл бот);
  • в последовательности ходов бота (где R обозначает камень, P обозначает бумагу, а S — ножницы) строка \(s\) встречалась как непрерывная подстрока.

Помогите Монокарпу и посчитайте минимальное количество раундов, которое ему необходимо сыграть против бота, чтобы удовлетворить оба вышеописанных условия.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящая из символов R, P и/или S.

Дополнительное ограничение на входные данные: сумма длин строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество раундов, которое необходимо сыграть Монокарпу против бота, чтобы удовлетворить оба вышеописанных условия.

Примечание

В первом примере Монокарп может сыграть PPR, тогда ходы бота будут RSS, и счет будет \(2:1\) в пользу Монокарпа.

Во втором примере Монокарп может сыграть P, тогда ход бота будет R, и счет будет \(1:0\) в пользу Монокарпа.

В третьем примере Монокарп может сыграть RPR, тогда ходы бота будут RPS, и счет будет \(1:0\) в пользу Монокарпа.

В четвертом примере Монокарп может сыграть RRRSPR, тогда ходы бота будут RPPPRS, и счет будет \(3:2\) в пользу Монокарпа.

В пятом примере Монокарп может сыграть PRRSPRS, тогда ходы бота будут RSPPRSP, и счет будет \(6:1\) в пользу Монокарпа.

В шестом примере Монокарп может сыграть PRRRS, тогда ходы бота будут RSPPP, и счет будет \(3:2\) в пользу Монокарпа.

В седьмом примере Монокарп может сыграть RSR, тогда ходы бота будут RPR, и счет будет \(1:0\) в пользу Монокарпа.

F. Хороший подмассив

*особая задача жадные алгоритмы Структуры данных

Задан целочисленный массив \(a\) размера \(n\).

Назовем массив хорошим, если его можно получить при помощи следующего алгоритма: создать массив, состоящий из одного любого целого числа; а затем произвольное количество раз выполнить следующую операцию: выбрать элемент из уже существующих в массиве (назовем его \(x\)) и в конец массива добавить \(x\), \((x-1)\) или \((x+1)\).

Например, массивы \([1, 2, 1]\), \([5]\) и \([3, 2, 1, 4]\) хорошие, а \([2, 4]\) и \([3, 1, 2]\) — нет.

Ваша задача — посчитать количество хороших непрерывных подмассивов массива \(a\). Два подмассива с одинаковыми элементами, которые различаются своими позициями в массиве \(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\)-го по \(1\)-й элемент;
  • с \(1\)-го по \(2\)-й элемент;
  • с \(2\)-го по \(2\)-й элемент;
  • с \(3\)-го по \(3\)-й элемент.

Во втором примере единственный подмассив, не являющийся хорошим, — это подмассив с \(3\)-го по \(4\)-й элемент.

H. Странная матрица

*особая задача графы жадные алгоритмы

Задана матрица \(a\) размера \(n \times m\), состоящая из целых чисел от \(0\) до \(31\) включительно.

Назовем матрицу странной, если для любых ее двух различных строк \(i\) и \(j\) выполняются оба следующих условия:

  • для каждого набора из \(k\) индексов \((x_1, x_2, \dots, x_k)\), где \(1 \le x_1 < x_2 < \cdots < x_k \le m\), выполняется равенство \(a_{i, x_1} \mathbin{\&} a_{j, x_1} \mathbin{\&} a_{i, x_2} \mathbin{\&} a_{j, x_2} \mathbin{\&} \cdots \mathbin{\&} a_{i, x_k} \mathbin{\&} a_{j, x_k} = 0\) (где \(\mathbin{\&}\) — побитовое И двух чисел);
  • для каждого набора из \(k\) индексов \((x_1, x_2, \dots, x_k)\), где \(1 \le x_1 < x_2 < \cdots < x_k \le m\), выполняется равенство \(a_{i, x_1} \mathbin{|} a_{j, x_1} \mathbin{|} a_{i, x_2} \mathbin{|} a_{j, x_2} \mathbin{|} \cdots \mathbin{|} a_{i, x_k} \mathbin{|} a_{j, x_k} = 31\) (где \(\mathbin{|}\) — побитовое ИЛИ двух чисел).

Вы можете выполнять следующее действие любое количество раз: взять любую строку матрицы и число \(y\) от \(0\) до \(31\) включительно; а затем применить побитовое исключающее ИЛИ (XOR) с числом \(y\) ко всем элементам выбранной строки. Стоимость такой операции равна \(y\).

Ваша задача — определить минимальную стоимость, чтобы сделать матрицу странной. Или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 50\); \(1 \le k \le m\)).

Далее следует \(n\) строк, \(i\)-я из них содержит по \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \dots, a_{i, m}\) (\(0 \le a_{i, j} \le 31\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость, чтобы сделать матрицу странной; или -1, если матрицу невозможно сделать странной.

B. Бой на выживание

жадные алгоритмы Конструктив математика *900

Ералим, будучи боссом мафии, управляет группой из \(n\) бойцов. Боец \(i\) обладает рейтингом \(a_i\).

Ералим устраивает турнир из \(n - 1\) боёв, в каждом из которых выбираются два ещё не выбывших бойца \(i\) и \(j\) (\(1 \le i < j \le n\)). В результате боя боец \(i\) выбывает из турнира, а рейтинг бойца \(j\) уменьшается на величину рейтинга бойца \(i\). То есть \(a_j\) уменьшается на \(a_i\). Обратите внимание, что рейтинг бойца \(j\) может стать отрицательным. При этом номера бойцов не меняются.

Ералим хочет узнать, какой максимальный рейтинг сможет сохранить последний оставшийся боец, если он будет выбирать их для боёв оптимальным образом.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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 10^9\)) — рейтинги бойцов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число – какой максимальный рейтинг сможет сохранить последний оставшийся боец.

Примечание

В первом примере можно организовать бой между бойцами с индексами \(1\) и \(2\), где боец с индексом \(2\) выиграет. Тогда рейтинг последнего бойца, то есть бойца с индексом \(2\), будет \(1 - 2 = -1\).

Во втором примере можно сначала провести бой между бойцами с индексами \(1\) и \(2\), где победит боец с индексом \(2\), а затем провести бой между бойцами с индексами \(2\) и \(3\), где победит боец с индексом \(3\).

Рейтинг бойца с индексом \(2\) после первого боя будет \(2 - 2 = 0\). Рейтинг бойца с индексом \(3\) после второго боя будет \(8 - 0 = 8\).

D. Минимизировать разницу

Бинарный поиск жадные алгоритмы *1900

Жан, уставший после контеста, дал единственную задачу, которую не решил во время контеста, своему другу, Сунгату. Однако и он не смог решить, поэтому мы просим вас попробовать решить эту задачу.

Дан массив \(a_1, a_2, \ldots, a_n\) длины \(n\). Мы можем выполнить с массивом любое количество (возможно, ноль) операций.

За одну операцию мы выбираем позицию \(i\) (\(1 \leq i \leq n - 1\)), и выполняется следующее действие:

  • \(a_i := a_i - 1\), и \(a_{i+1} := a_{i+1} + 1\).

Найдите минимальное возможное значение \(\max(a_1, a_2, \ldots, a_n) - \min(a_1, a_2, \ldots, a_n)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^{12}\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное возможное значение \(\max(a_1, a_2, \ldots, a_n) - \min(a_1, a_2, \ldots, a_n)\).

Примечание

В третьем наборе входных данных можно дважды проделать операцию с \(i = 1\).

После этого массив \(a = [2, 3, 2, 3]\), \(\max(2, 3, 2, 3) - \min(2, 3, 2, 3) = 3 - 2 = 1\).

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\), и у Боба не останется вершин, которые можно посетить, и он проиграет.

A. Робин Помогает

жадные алгоритмы реализация *800

В каждом есть немного разбойника и немного героя.

Герой-разбойник Робин Гуд знаменит тем, что отнимает у богатых и отдает бедным.

Робин встречает \(n\) людей последовательно, начиная с \(1\)-го и заканчивая \(n\)-м. У \(i\)-го человека есть \(a_i\) золотых монет. Если \(a_i \ge k\), Робин заберет все \(a_i\) золотых монет, а если \(a_i=0\), Робин даст \(1\) золотую монету, если у него есть. Робин начинает с \(0\) золотых монет.

Узнайте, сколько людей получат золото от Робина.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 50, 1 \le k \le 100\)) — количество людей и порог, при котором Робин Гуд забирает золото.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\)) — количество золота каждого человека.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество людей, которые получат золото от Робина Гуда.

Примечание

В первом наборе входных данных Робин забирает \(2\) золота у первого человека и даёт золото второму.

Во втором наборе входных данных Робин забирает \(3\) золота и дает \(1\) золото каждому из следующих \(2\) людей.

В третьем наборе входных данных Робин забирает \(3\) золота и, таким образом, дает золото \(3\) другим людям.

C. Робин Гуд в городе

Бинарный поиск жадные алгоритмы математика *1100

В Шервуде мы судим человека не по его богатству, а по его заслугам.

Оглянитесь вокруг, богатые становятся богаче, а бедные — беднее. Нам нужно отнять у богатых и отдать бедным. Нам нужен Робин Гуд!

В городе живут \(n\) человек. Сейчас богатство \(i\)-го человека составляет \(a_i\) золота. Но угадайте что? Самый богатый человек только что нашел дополнительную бочку золота!

Более формально, найдите \(a_j=max(a_1, a_2, \dots, a_n)\), измените \(a_j\) на \(a_j+x\), где \(x\) — это количество золота в бочке. Если есть несколько максимумов, можно взять любой из них.

Человек несчастен, если его богатство строго ниже половины среднего богатства\(^{\text{∗}}\). Если строго больше половины общего населения \(n\) несчастны, Робин Гуд появится по народному требованию.

Определите минимальное значение \(x\), необходимое для появления Робина Гуда, или выведите \(-1\), если это невозможно.

\(^{\text{∗}}\)Среднее богатство определяется как общее богатство, деленное на общее население \(n\), то есть \(\frac{\sum a_i}{n}\), результат является вещественным числом.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — общее население.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — богатство каждого человека.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество золота, которое самый богатый человек должен найти, чтобы Робин Гуд пришел в город. Если это невозможно, выведите \(-1\) вместо этого.

Примечание

В первом наборе входных данных невозможно, чтобы один человек был несчастным.

Во втором наборе входных данных всегда есть \(1\) счастливый человек (самый богатый).

В третьем наборе входных данных дополнительное золото не требуется, поэтому ответ \(0\).

В четвертом наборе входных данных, после добавления \(15\) золота, среднее богатство становится \(\frac{25}{4}\), и половина этого среднего составляет \(\frac{25}{8}\), в результате чего \(3\) человека оказываются несчастными.

В пятом наборе входных данных, после добавления \(16\) золота, среднее богатство становится \(\frac{31}{5}\), в результате чего \(3\) человека оказываются несчастными.

D. Роберт Гуд и миссис Гуд

жадные алгоритмы Перебор сортировки Структуры данных *1400

Впечатли своего брата, но не огорчай свою мать.

Брат и мать Робина собираются в гости, и Робин должен выбрать день приезда для каждого гостя.

Все доступные дни пронумерованы от \(1\) до \(n\). У Робина и его веселой компании запланировано всего \(k\) рискованных 'работ'. \(i\)-я работа проходит между днями \(l_i\) и \(r_i\) включительно, для \(1 \le i \le k\).

Посетители остаются на \(d\) непрерывных дней, все эти \(d\) дней должны быть между днем \(1\) и \(n\) включительно. Если работа проходит в любой из \(d\) дней, визит пересекается с работой (длина пересечения не важна).

Робин хочет, чтобы визит его брата пересекался с максимальным количеством различных работ, а визит его матери — с минимальным.

Найдите подходящие дни начала визита для брата и матери Робина. Если есть несколько подходящих дней, выберите самый ранний.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(d\), \(k\) (\(1 \le n \le 10^5, 1 \le d, k \le n\)) — количество дней, продолжительность визитов и количество работ.

Затем следуют \(k\) строк, каждая содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — начальный и конечный день каждой работы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа, лучшие дни начала визитов брата и матери Робина соответственно. Оба визита должны укладываться между днем \(1\) и \(n\) включительно.

Примечание

В первом примере единственная работа занимает все \(2\) дня, оба гостя должны приехать в день \(1\).

Во втором примере день \(2\) пересекается с \(2\) работами, а день \(1\) пересекается только с \(1\).

В третьем примере Роберт посещает дни \([1,2]\), миссис Гуд посещает дни \([4,5]\).

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]\).

В третьем наборе входных данных оптимально не укреплять ни один лагерь.

G. Молочные дни

жадные алгоритмы Перебор реализация Структуры данных *2200

Что сделано, то сделано, и испорченное молоко не исправить.

Маленький Джон настолько мал, насколько ночь — это день, он был известен как гигант, возможно, ростом \(2.1\) метра. Это связано с его любовью к молоку.

В его молочном дневнике \(n\) записей, показывающих, что он приобрел \(a_i\) пинт свежего молока в день \(d_i\). Молоко теряет свежесть с течением времени и остается пригодным для питья максимум \(k\) дней. Другими словами, свежее молоко, приобретенное в день \(d_i\), будет пригодно для питья с дня \(d_i\) по день \(d_i+k-1\) включительно.

Каждый день маленький Джон пьет пригодное для питья молоко, максимум \(m\) пинт. Другими словами, если молока меньше \(m\) пинт, он выпьет все и не будет насыщен; если молока \(m\) пинт или больше, он выпьет ровно \(m\) пинт и будет насыщен, и это будет день молочного насыщения.

Маленький Джон всегда сначала пьет самое свежее пригодное для питья молоко.

Определите количество дней молочного насыщения маленького Джона.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)), количество наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(m\), \(k\) (\(1\le n\), \(m\), \(k \le 10^5\)), количество записей в дневнике, максимальное количество пинт, необходимое для дня молочного насыщения, и продолжительность свежести молока.

Затем следуют \(n\) строк каждого набора входных данных, каждая с двумя целыми числами \(d_i\) и \(a_i\) (\(1\le d_i\), \(a_i \le 10^6\)), день, в который было приобретено молоко, и количество приобретенных пинт. Они отсортированы по возрастанию значений \(d_i\), и все значения \(d_i\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество дней молочного насыщения.

Примечание

В первом наборе входных данных \(5\) пинт молока хороши в течение \(3\) дней до порчи.

Во втором наборе входных данных произойдёт следующее:

  • в день \(1\) он получит \(5\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\));
  • в день \(2\) он получит \(7\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\) и \(4\) пинты с дня \(2\));
  • в день \(3\) он выпьет \(3\) пинты с дня \(2\) (останется \(2\) пинты с дня \(1\) и \(1\) пинта с дня \(2\));
  • в день \(4\) молоко приобретённое в день \(1\) испортится и он выпьет \(1\) пинту с дня \(2\) (больше молока не осталось).

H. Стрельба из лука Робина Гуда

жадные алгоритмы разделяй и властвуй Структуры данных хэши *1900

В такие времена стрельба из лука всегда была основным спортом дня, ведь йомены Ноттингемшира были лучшими стрелками из длинного лука во всей Англии, но в этом году шериф колебался...

Шериф Ноттингема организовал турнир по стрельбе из лука. Это финальный раунд, и Робин Гуд играет против Шерифа!

В ряд выставлено \(n\) мишеней, пронумерованных от \(1\) до \(n\). Когда игрок стреляет в мишень \(i\), его счет увеличивается на \(a_i\), и мишень \(i\) уничтожается. Игра состоит из ходов, и игроки поочередно делают свои ходы. Робин Гуд всегда начинает игру, затем Шериф и так далее. Игра продолжается до тех пор, пока все мишени не будут уничтожены. Оба игрока начинают со счетом \(0\).

В конце игры игрок с наибольшим счетом выигрывает, а другой игрок проигрывает. Если оба игрока имеют одинаковый счет, это ничья, и никто не выигрывает и не проигрывает. На каждом ходу игрок может стрелять в любую мишень, которая еще не была поражена. Оба игрока играют оптимально, чтобы получить максимальный возможный счет.

Шериф Ноттингема подозревает, что он может проиграть игру! Этого не должно произойти, вы должны помочь Шерифу. Шериф задаст \(q\) запросов, каждый из которых будет указывать \(l\) и \(r\). Это означает, что игра будет проводиться только с мишенями \(l, l+1, \dots, r\), так как остальные будут удалены Шерифом перед началом игры.

Для каждого запроса \(l\), \(r\) определите, может ли Шериф не проиграть игру, когда рассматриваются только мишени \(l, l+1, \dots, r\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\), \(q\) (\(1 \le n,q \le 2\cdot10^5\)) — количество мишеней и количество запросов, которые задаст Шериф.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — очки за поражение каждой мишени.

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — диапазон мишеней, который рассматривается для каждого запроса.

Гарантируется, что сумма как \(n\), так и \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES», если Шериф не проиграет игру, когда рассматриваются только мишени \(l, l+1, \dots, r\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

A. Разбиение карт

2-sat жадные алгоритмы математика Перебор реализация *1600

У вас есть несколько карт. На каждой карте написано целое число от \(1\) до \(n\): в частности, для каждого \(i\) от \(1\) до \(n\) у вас есть \(a_i\) карт, на которых написано число \(i\).

Также существует магазин, в котором продается неограниченное количество карт каждого типа. У вас есть \(k\) монет, поэтому вы можете купить в общей сложности не более \(k\) новых карт, и карты, которые вы покупаете, могут содержать любые целые числа от \(\mathbf{1}\) до \(\mathbf{n}\), включительно.

После покупки новых карт вы должны разбить все свои карты на колоды согласно следующим правилам:

  • все колоды должны иметь одинаковый размер;
  • нет пары карт с одинаковым числом в одной колоде.

Найдите максимально возможный размер колоды после покупки карт и их оптимального разбиения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^{16}\)) — количество различных типов карт и количество монет.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{10}\), \(\sum a_i \geq 1\)) — количество карт типа \(i\), имеющихся у вас в начале, для каждого \(1 \leq i \leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер колоды при оптимальных действиях.

Примечание

В первом наборе входных данных вы можете купить одну карту с числом \(1\), и ваш набор карт станет таким: \([1, 1, 1, 1, 2, 2, 3, 3]\). Вы можете разбить их на колоды \([1, 2], [1, 2], [1, 3], [1, 3]\). Они все имеют размер \(2\), и все содержат разные значения. Можно показать, что невозможно получить разбиение с колодами размером больше \(2\), поэтому ответ — \(2\).

Во втором наборе входных данных вы можете купить две карты с числом \(1\) и одну карту с числом \(3\), и ваш набор карт станет таким: \([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 5]\). Его можно разбить на колоды \([1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 2, 5], [2, 3, 5], [2, 4, 5]\). Можно показать, что нельзя получить разбиение с колодами размером больше \(3\), поэтому ответ — \(3\).

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\).

C. Стрижка деревьев

Деревья жадные алгоритмы Перебор поиск в глубину и подобное сортировки *1700

Вам дано дерево с \(n\) вершинами, корень которого находится в вершине \(1\). В этой задаче лист — это некорневая вершина со степенью \(1\).

За одну операцию можно удалить лист и смежное с ним ребро (возможно, появятся новые листья). Какое минимальное количество операций нужно выполнить, чтобы получилось дерево, также с корнем в вершине \(1\), в котором все листья находятся на одинаковом расстоянии от корня?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 5 \cdot 10^5\)) — количество вершин.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\), \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), описывающих ребро, соединяющее \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество операций, необходимое для достижения цели.

Примечание

В первых двух наборах входных данных деревья выглядят так:

В первом наборе входных данных, удалив ребра \((1, 3)\) и \((2, 5)\), вы получите дерево, у которого все листья (вершины \(6\) и \(7\)) находятся на одинаковом расстоянии от корня (вершины \(1\)), которое равняется \(3\). Ответ — \(2\), так как это минимальное количество ребер, которое нужно удалить для достижения цели.

Во втором наборе входных данных удаление ребер \((1, 4)\) и \((5, 7)\) приводит к дереву, в котором все листья (вершины \(4\) и \(5\)) находятся на одинаковом расстоянии от корня (вершины \(1\)), которое равняется \(2\).

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\). Это максимальный счет, который вы можете получить.

E1. Сложные отрезки (простая версия)

Бинарный поиск жадные алгоритмы математика разделяй и властвуй снм сортировки Структуры данных *3300

Это простая версия задачи. В этой версии ограничения на \(n\) и ограничение по времени ниже. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Назовём множество (замкнутых) отрезков сложным, если оно может быть разбито на некоторые подмножества так, что

  • все подмножества имеют одинаковый размер; и
  • пара отрезков пересекается тогда и только тогда, когда эти два отрезка находятся в одном и том же подмножестве.

Вам даны \(n\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_n, r_n]\). Найдите максимальный размер сложного подмножества этих отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^4\)) — количество отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2n\)) — левые концы отрезков.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i \leq r_i \le 2n\)) — правые концы отрезков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный размер сложного подмножества заданных отрезков.

Примечание

В первом наборе входных данных все пары отрезков пересекаются, поэтому оптимально сформировать одну группу, содержащую все три отрезка.

Во втором наборе входных данных не существует подходящего разбиения для всех пяти отрезков. Корректное разбиение с четырьмя отрезками выглядит следующим образом: \(\{\{ [1, 5], [2, 4] \}, \{ [6, 9], [8, 10] \}\}\).

В третьем наборе входных данных оптимально составить одну группу, содержащую все отрезки, кроме второго.

E2. Сложные отрезки (сложная версия)

Бинарный поиск жадные алгоритмы математика разделяй и властвуй снм сортировки Структуры данных *3400

Это сложная версия задачи. В этой версии ограничения на \(n\) и ограничение по времени выше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Назовём множество (замкнутых) отрезков сложным, если оно может быть разбито на некоторые подмножества так, что

  • все подмножества имеют одинаковый размер; и
  • пара отрезков пересекается тогда и только тогда, когда эти два отрезка находятся в одном и том же подмножестве.

Вам даны \(n\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_n, r_n]\). Найдите максимальный размер сложного подмножества этих отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2n\)) — левые концы отрезков.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i \leq r_i \le 2n\)) — правые концы отрезков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный размер сложного подмножества заданных отрезков.

Примечание

В первом наборе входных данных все пары отрезков пересекаются, поэтому оптимально сформировать одну группу, содержащую все три отрезка.

Во втором наборе входных данных не существует подходящего разбиения для всех пяти отрезков. Корректное разбиение с четырьмя отрезками выглядит следующим образом: \(\{\{ [1, 5], [2, 4] \}, \{ [6, 9], [8, 10] \}\}\).

В третьем наборе входных данных оптимально составить одну группу, содержащую все отрезки, кроме второго.

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\). Это максимальный счет, который вы можете получить.

A. ЛНПП

Бинарный поиск битмаски жадные алгоритмы Перебор реализация Строки *800

Настоящее название этой задачи — «Лексикографически наибольшая подпоследовательность-палиндром» — слишком длинное, чтобы уместиться в заголовке страницы.

Дана строка s, состоящая только из строчных латинских букв. Найдите ее лексикографически наибольшую подпоследовательность, являющуюся палиндромом.

Непустую строку s[p1p2... pk] = sp1sp2... spk (1  ≤  p1 < p2 < ... < pk  ≤  |s|) будем называть подпоследовательностью строки s = s1s2... s|s|, где |s| — длина строки s. Например, строки «abcb», «b» и «abacaba» являются подпоследовательностями строки «abacaba».

Строка x = x1x2... x|x| лексикографически больше строки y = y1y2... y|y|, если либо |x| > |y| и x1 = y1, x2 = y2, ..., x|y| = y|y|, либо существует такое число r (r < |x|, r < |y|), что x1 = y1, x2 = y2, ..., xr = yr и xr  +  1 > yr  +  1. Символы в строках сравниваются как их ASCII-коды. Например, строка «ranger» лексикографически больше строки «racecar», а строка «poster» лексикографически больше строки «post».

Строка s = s1s2... s|s| называется палиндромом, если она в точности совпадает со строкой rev(s) = s|s|s|s| - 1... s1. Иными словами, строка называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, строками-палиндромами являются «racecar», «refer» и «z».

Входные данные

В единственной строке записана непустая строка s, состоящая только из строчных букв латинского алфавита и имеющая длину не более 10.

Выходные данные

Выведите лексикографически наибольшую подпоследовательность строки s, являющуюся палиндромом.

Примечание

Из всех различных подпоследовательностей строки «radar» палиндромами являются «a», «d», «r», «aa», «rr», «ada», «rar», «rdr», «raar» и «radar». Лексикографически наибольшей из них является «rr».

A. Минимальное число операций

битмаски жадные алгоритмы математика Перебор теория чисел *800

Даны два целых числа \(n\) и \(k\).

За одну операцию вы можете вычесть из \(n\) любую степень \(k\). Формально, за одну операцию вы можете заменить \(n\) на \((n-k^x)\) для любого неотрицательного целого числа \(x\).

Найдите минимальное число операций, необходимое, чтобы сделать \(n\) равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите минимальное число операций на отдельной строке.

Примечание

В первом наборе входных данных \(n = 5\) и \(k = 2\). Можно выполнить следующую последовательность операций:

  1. Вычесть \(2^0 = 1\) из \(5\). После этого \(n\) принимает значение \(5 - 1 = 4\).
  2. Вычесть \(2^2 = 4\) из \(4\). После этого \(n\) принимает значение \(4 - 4 = 0\).

Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(2\) операции. Значит, \(2\) и есть ответ на задачу.

Во втором наборе входных данных \(n = 3\) и \(k = 5\). Можно выполнить следующую последовательность операций:

  1. Вычесть \(5^0 = 1\) из \(3\). После этого \(n\) принимает значение \(3 - 1 = 2\).
  2. Вычесть \(5^0 = 1\) из \(2\). После этого \(n\) принимает значение \(2 - 1 = 1\).
  3. Вычесть \(5^0 = 1\) из \(1\). После этого \(n\) принимает значение \(1 - 1 = 0\).

Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(3\) операции. Значит, \(3\) и есть ответ на задачу.

A. Значимое среднее

жадные алгоритмы математика сортировки Структуры данных *800

У Пака Чанека есть массив \(a\) из \(n\) целых положительных чисел. Поскольку в настоящее время он изучает, как вычислять среднее арифметическое двух чисел, он хочет попрактиковаться в этом на своем массиве \(a\).

Пока в массиве \(a\) есть хотя бы два элемента, Пак Чанек будет выполнять следующую трехшаговую операцию:

  1. Выбрать два различных индекса \(i\) и \(j\) (\(1 \leq i, j \leq |a|\); \(i \neq j\)), где \(|a|\) обозначает текущий размер массива \(a\).
  2. Добавить \(\lfloor \frac{a_i+a_j}{2} \rfloor\)\(^{\text{∗}}\) в конец массива.
  3. Удалить из массива элементы \(a_i\) и \(a_j\) и объединить оставшиеся части массива.

Например, предположим, что \(a=[5,4,3,2,1,1]\). Если мы выберем \(i=1\) и \(j=5\), то получим массив \(a=[4,3,2,1,3]\). Если мы выберем \(i=4\) и \(j=3\), то получим массив \(a=[5,4,1,1,2]\).

После всех операций массив будет состоять из одного элемента \(x\). Найдите максимально возможное значение \(x\), если Пак Чанек выполнит все операции оптимально.

\(^{\text{∗}}\)\(\lfloor x \rfloor\) обозначает функцию округления вниз числа \(x\). Результатом этой функции является наибольшее целое число, которое меньше или равно \(x\). Например, \(\lfloor 6 \rfloor = 6\), \(\lfloor 2.5 \rfloor=2\), \(\lfloor -3.6 \rfloor=-4\) и \(\lfloor \pi \rfloor=3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 50\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Обратите внимание, что сумма \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимально возможное значение \(x\) после применения всех операций.

Примечание

В первом наборе входных данных массив изначально равен \(a=[1,7,8,4,5]\). Пак Чанек выполнит следующие операции:

  1. Выбрать \(i=1\) и \(j=2\), тогда \(a=[8,4,5,4]\).
  2. Выбрать \(i=3\) и \(j=2\), тогда \(a=[8,4,4]\).
  3. Выбрать \(i=2\) и \(j=3\), тогда \(a=[8,4]\).
  4. Выбрать \(i=1\) и \(j=2\), тогда \(a=[6]\).

После всех операций массив состоит из одного элемента \(x=6\). Можно доказать, что не существует последовательности операций, в результате которой число \(x\) будет больше \(6\).

B. Максимизируйте MEX

жадные алгоритмы математика Перебор теория чисел *1200

Вам дан массив \(a\) из \(n\) целых положительных чисел и целое число \(x\). Вы можете выполнить следующую двухшаговую операцию любое число раз (возможно, ноль):

  1. Выбрать индекс \(i\) (\(1 \leq i \leq n\)).
  2. Увеличить \(a_i\) на \(x\) (другими словами, \(a_i := a_i + x\)).

Найдите максимальное значение \(\operatorname{MEX}\) массива \(a\) при оптимальном выполнении операций.

\(\operatorname{MEX}\) (минимальное исключенное) массива — это наименьшее целое неотрицательное число, которого нет в массиве. Например:

  • \(\operatorname{MEX}\) массива \([2,2,1]\) равен \(0\), потому что \(0\) нет в массиве.
  • \(\operatorname{MEX}\) массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) есть в массиве, а \(2\) — нет.
  • \(\operatorname{MEX}\) массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) есть в массиве, а \(4\) — нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le x \le 10^9\)) — длина массива и число, которое будет использоваться в операции.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный \(\operatorname{MEX}\) массива \(a\) при оптимальном выполнении операций.

Примечание

В первом наборе входных данных \(\operatorname{MEX}\) массива \(a\) равен \(4\) без выполнения каких-либо операций, что является максимумом.

Во втором наборе входных данных \(\operatorname{MEX}\) массива \(a\) равен \(5\) без выполнения каких-либо операций. Если мы выполним две операции, обе с \(i=1\), то получим массив \(a=[5,3,4,1,0,2]\). Тогда \(\operatorname{MEX}\) массива \(a\) станет \(6\), что является максимумом.

В третьем наборе входных данных \(\operatorname{MEX}\) массива \(a\) без выполнения каких-либо операций равен \(0\), что является максимумом.

C1. Координация презентации (простая версия)

жадные алгоритмы Конструктив *1300

Это простая версия задачи. В двух версиях отличаются ограничения на \(q\) и ограничение по времени отличаются. В этой версии \(q=0\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Команда, состоящая из \(n\) участников, пронумерованных от \(1\) до \(n\), должна представить слайд-шоу на большом собрании. Слайд-шоу содержит \(m\) слайдов.

Имеется массив \(a\) длины \(n\). Изначально участники собрания стоят в очереди в порядке \(a_1, a_2, \ldots, a_n\) от начала до конца. Слайд-шоу состоит из последовательного показа слайдов с \(1\) по \(m\). Каждый слайд будет представлен участником, стоящим в начале очереди. После представления каждого слайда вы можете переместить участника, стоящего в начале очереди, на любую позицию в очереди (без изменения порядка остальных участников). Например, предположим, что очередь участников имеет вид \([\color{red}{3},1,2,4]\). После того как участник \(3\) представит текущий слайд, вы можете изменить очередь участников на \([\color{red}{3},1,2,4]\), \([1,\color{red}{3},2,4]\), \([1,2,\color{red}{3},4]\) или \([1,2,4,\color{red}{3}]\).

Также имеется массив \(b\) длины \(m\). Слайд-шоу считается хорошим, если можно так перемещать участников после выступлений, чтобы слайд \(i\) был представлен участником \(b_i\) для всех \(i\) от \(1\) до \(m\).

Однако ваш назойливый начальник хочет сделать \(q\) обновлений массива \(b\). В \(i\)-м обновлении он выберет слайд \(s_i\) и участника \(t_i\) и присвоит \(b_{s_i} := t_i\). Заметим, что эти обновления постоянны, то есть изменения, внесенные в массив \(b\), будут применяться при обработке последующих обновлений.

Для каждого из \(q+1\) состояний массива \(b\) (начального состояния и после каждого из \(q\) обновлений) определите, является ли слайд-шоу хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 2 \cdot 10^5\); \(q=0\)) — количество участников, количество слайдов и количество обновлений.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — начальный порядок расположения участников от начала до конца очереди. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно один раз.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера участников, которые должны представлять каждый слайд.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строку, соответствующих \(q+1\) состоянию массива \(b\). Выведите «YA», если слайд-шоу хорошее, и «TIDAK» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YA», «Ya», «ya» и «YA» будут распознаны как положительные ответы.

Примечание

Для первого набора входных данных вам не нужно перемещать участников, так как оба слайда представляет участник \(1\), который уже находится в начале очереди.

Для второго набора входных данных можно переместить участников так, чтобы презентация была хорошей:

  1. \([1,2,3]\), не перемещайте участника \(1\).
  2. \([1,2,3]\), переместите участника \(1\) после участника \(3\).
  3. \([2,3,1]\), переместите участника \(2\) после участника \(3\).
  4. \([3,2,1]\), не перемещайте участника \(3\).
  5. \([3,2,1]\), переместите участника \(3\) после участника \(1\).
  6. \([2,1,3]\), не перемещайте участника \(2\).

C2. Координация презентации (сложная версия)

жадные алгоритмы Конструктив реализация сортировки Структуры данных *1900

Это сложная версия задачи. В двух версиях отличаются ограничения на \(q\) и ограничение по времени отличаются. В этой версии \(0 \leq q \leq 2 \cdot 10^5\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Команда, состоящая из \(n\) участников, пронумерованных от \(1\) до \(n\), должна представить слайд-шоу на большом собрании. Слайд-шоу содержит \(m\) слайдов.

Имеется массив \(a\) длины \(n\). Изначально участники собрания стоят в очереди в порядке \(a_1, a_2, \ldots, a_n\) от начала до конца. Слайд-шоу состоит из последовательного показа слайдов с \(1\) по \(m\). Каждый слайд будет представлен участником, стоящим в начале очереди. После представления каждого слайда вы можете переместить участника, стоящего в начале очереди, на любую позицию в очереди (без изменения порядка остальных участников). Например, предположим, что очередь участников имеет вид \([\color{red}{3},1,2,4]\). После того как участник \(3\) представит текущий слайд, вы можете изменить очередь участников на \([\color{red}{3},1,2,4]\), \([1,\color{red}{3},2,4]\), \([1,2,\color{red}{3},4]\) или \([1,2,4,\color{red}{3}]\).

Также имеется массив \(b\) длины \(m\). Слайд-шоу считается хорошим, если можно так перемещать участников после выступлений, чтобы слайд \(i\) был представлен участником \(b_i\) для всех \(i\) от \(1\) до \(m\).

Однако ваш назойливый начальник хочет сделать \(q\) обновлений массива \(b\). В \(i\)-м обновлении он выберет слайд \(s_i\) и участника \(t_i\) и присвоит \(b_{s_i} := t_i\). Заметим, что эти обновления постоянны, то есть изменения, внесенные в массив \(b\), будут применяться при обработке последующих обновлений.

Для каждого из \(q+1\) состояний массива \(b\) (начального состояния и после каждого из \(q\) обновлений) определите, является ли слайд-шоу хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 2 \cdot 10^5\), \(0 \leq q \leq 2 \cdot 10^5\)) — количество участников, количество слайдов и количество обновлений.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — начальный порядок расположения участников от начала до конца очереди. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно один раз.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера участников, которые должны представлять каждый слайд.

Каждая из следующих \(q\) строк содержит по два целых числа \(s_i\) и \(t_i\) (\(1 \le s_i \le m\), \(1 \le t_i \le n\)) — параметры обновления.

Гарантируется, что сумма \(n\), сумма \(m\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строку, соответствующих \(q+1\) состоянию массива \(b\). Выведите «YA», если слайд-шоу хорошее, и «TIDAK» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YA», «Ya», «ya» и «YA» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных изначально вам не нужно перемещать участников, так как оба слайда будут представлены участником \(1\), который уже находится в начале очереди. После этого присваивается \(b_1 := 2\), теперь слайд \(1\) должен быть представлен участником \(2\). Это невозможно, так как участник \(1\) представит слайд \(1\) первым. Затем устанавливается \(b_1 = 1\), \(b\) становится таким же, как и начальный \(b\), что делает слайд-шоу хорошим.

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\).

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\).

A. Автобус в Пенхамо

жадные алгоритмы Конструктив математика реализация *800

Ya vamos llegando a Péeeenjamoo ♫♫♫

В Пенхамо едут \(n\) семей, чтобы стать свидетелями крупнейшего в Мексике марафона по выгуливанию куриц на поводках. \(i\)-я семья состоит из \(a_i\) человек. Все семьи будут путешествовать на одном автобусе, состоящем из \(r\) рядов с \(2\) сиденьями в каждом.

Человек считается счастливым, если:

  • Другой член семьи сидит в том же ряду, что и он; или
  • Он сидит один в своем ряду (рядом с пустым местом).

Определите максимальное количество счастливых людей при оптимальной рассадке. Обратите внимание, что в автобусе должны сидеть все.

Гарантируется, что все члены всех семей могут поместиться в автобусе. Формально, гарантируется, что \(\displaystyle\sum_{i=1}^{n}a_i \le 2r\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(r\) (\(1 \le n \le 100\); \(1 \le r \le 500\)) — количество семей и количество рядов в автобусе.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10\)) — количество членов семьи в каждой семье.

Выходные данные

Для каждого набора входных данных выведите максимальное количество счастливых людей при оптимальной рассадке.

Примечание

В первом наборе входных данных два члена первой семьи могут сидеть вместе в первом ряду, а два члена второй семьи могут сидеть вместе во втором ряду. Оставшийся член второй семьи может сидеть в третьем ряду вместе с членом третьей семьи. Такая рассадка показана ниже, и \(4\) счастливых человека окрашены в зеленый цвет.

\(\color{green}{1}\)\(\color{green}{1}\)
\(\color{green}{2}\)\(\color{green}{2}\)
\(2\)\(3\)

Для второго набора входных данных ниже показан возможный вариант рассадки с \(6\) счастливыми людьми.

\(\color{green}{3}\)\(\color{green}{3}\)
\(\color{green}{1}\)\(\color{green}{1}\)
\(\color{green}{2}\)\(\color{green}{2}\)

Для третьего набора входных данных ниже показана возможная рассадка с \(6\) счастливыми людьми.

\(\color{green}{4}\)\(\color{green}{4}\)
\(\color{green}{}\)\(\color{green}{2}\)
\(\color{green}{3}\)\(\color{green}{3}\)
\(\color{green}{1}\)\(\color{green}{}\)
\(\color{green}{}\)\(\color{green}{}\)

B. Продавец Карел

Бинарный поиск жадные алгоритмы математика *1300

Карел работает продавцом в автосалоне. В автосалоне имеется \(n\) различных моделей автомобилей. В наличии есть \(a_i\) автомобилей \(i\)-й модели. Карел — отличный продавец и может убедить клиентов купить до \(x\) автомобилей (на выбор Карела), при условии, что это автомобили разных моделей.

Определите минимальное количество клиентов, которое должен привлечь Карел, чтобы продать все автомобили.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 5 \cdot 10^5\); \(1 \le x \le 10\)) — количество различных моделей автомобилей и максимальное количество автомобилей, которое Карел может убедить клиента купить.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количество автомобилей каждой модели.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможное количество клиентов, необходимое для продажи всех автомобилей.

Примечание

В первом наборе входных данных Карелу всего нужно привлечь \(3\) покупателя. Он убедит покупателей купить следующие модели автомобилей:

  • Клиент \(1\) купит \(2\) автомобиля моделей \(1\) и \(3\).
  • Клиент \(2\) купит \(2\) автомобиля моделей \(1\) и \(2\).
  • Клиент \(3\) купит \(2\) автомобиля моделей \(1\) и \(3\).

Во втором наборе входных данных Карелу нужно всего привлечь \(3\) покупателя. Он убедит покупателей купить следующие модели автомобилей:

  • Клиент \(1\) купит \(2\) автомобиля моделей \(1\) и \(3\).
  • Клиент \(2\) купит \(3\) автомобиля моделей \(1\), \(2\) и \(3\).
  • Клиент \(3\) купит \(1\) автомобиль модели \(3\).

A. Склеивание массивов

жадные алгоритмы Конструктив математика сортировки *1300

Даны \(n\) массивов \(a_1\), \(\ldots\), \(a_n\). Длина каждого массива равна двум. Таким образом, \(a_i = [a_{i, 1}, a_{i, 2}]\). Вам надо склеить массивы в один массив длины \(2n\) так, чтобы количество инверсий\(^{\dagger}\) в получившемся массиве было как можно меньше. Обратите внимание, что вам не нужно считать само количество инверсий.

Более формально, вам надо выбрать перестановку\(^{\ddagger}\) \(p\) длины \(n\), чтобы массив \(b = [a_{p_1,1}, a_{p_1,2}, a_{p_2, 1}, a_{p_2, 2}, \ldots, a_{p_n,1}, a_{p_n,2}]\) содержал как можно меньше инверсий.

\(^{\dagger}\)Количество инверсий в массиве \(c\) — это количество пар индексов \(i\) и \(j\), таких что \(i < j\) и \(c_i > c_j\).

\(^{\ddagger}\)Перестановкой длины \(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 10^5\)) — количество массивов.

Каждая из следующих \(n\) строк содержит два целых числа \(a_{i,1}\) и \(a_{i,2}\) (\(1 \le a_{i,j} \le 10^9\)) — элементы \(i\)-го массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2n\) целых чисел — элементы полученного вами массива. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы склеили массивы в порядке \(2, 1\). Рассмотрим инверсии в полученном массиве \(b = [2, 3, 1, 4]\):

  • \(i = 1\), \(j = 3\), так как \(b_1 = 2 > 1 = b_3\);
  • \(i = 2\), \(j = 3\), так как \(b_2 = 3 > 1 = b_3\).

Таким образом, количество инверсий равно \(2\). Можно доказать, что это минимально возможное количество инверсий.

Во втором наборе входных данных мы склеили массивы в порядке \(3, 1, 2\). Рассмотрим инверсии в полученном массиве \(b = [2, 1, 3, 2, 4, 3]\):

  • \(i = 1\), \(j = 2\), так как \(b_1 = 2 > 1 = b_2\);
  • \(i = 3\), \(j = 4\), так как \(b_3 = 3 > 2 = b_4\);
  • \(i = 5\), \(j = 6\), так как \(b_5 = 4 > 3 = b_6\).

Таким образом, количество инверсий равно \(3\). Можно доказать, что это минимально возможное количество инверсий.

В третьем наборе входных данных мы склеили массивы в порядке \(4, 2, 1, 5, 3\).

C. Ч+К+С

графы жадные алгоритмы Конструктив поиск в глубину и подобное реализация Строки хэши *2400

Вам даны два сильно связных\(^{\dagger}\) ориентированных графа, в каждом из которых ровно \(n\) вершин, но может быть разное количество рёбер. Посмотрев на них внимательно, вы заметили важную особенность — длина любого цикла в этих графах делится на \(k\).

Каждая из \(2n\) вершин относится ровно к одному из двух типов: входящая или исходящая. Для каждой вершины вам известен её тип.

Вам нужно определить, можно ли провести ровно \(n\) ориентированных рёбер между исходными графами так, чтобы выполнялись следующие четыре условия:

  • Концы любого добавленного ребра лежат в разных графах.
  • Из каждой исходящей вершины исходит ровно одно добавленное ребро.
  • В каждую входящую вершину входит ровно одно добавленное ребро.
  • В получившемся графе длина любого цикла делится на \(k\).

\(^{\dagger}\)Сильно связный граф — это граф, в котором из каждой вершины существует путь до любой другой вершины.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\)) — количество вершин в каждом из графов и значение, на которое делится длина каждого цикла.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \in \{0, 1\}\)). Если \(a_i = 0\), то вершина \(i\) первого графа является входящей. Если \(a_i = 1\), то вершина \(i\) первого графа является исходящей.

Третья строка каждого набора входных данных содержит одно целое число \(m_1\) (\(1 \le m_1 \le 5 \cdot 10^5\)) — количество рёбер в первом графе.

Следующие \(m_1\) строк содержат описания рёбер первого графа. \(i\)-я из них содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — ребро в первом графе, ведущее из вершины \(v_i\) в вершину \(u_i\).

Далее в таком же формате следует описание второго графа.

Следующая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(b_i \in \{0, 1\}\)). Если \(b_i = 0\), то вершина \(i\) второго графа является входящей. Если \(b_i = 1\), то вершина \(i\) второго графа является исходящей.

Следующая строка содержит одно целое число \(m_2\) (\(1 \le m_2 \le 5 \cdot 10^5\)) — количество рёбер во втором графе.

Следующие \(m_2\) строк содержат описания рёбер второго графа. \(i\)-я из них содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — ребро во втором графе, ведущее из вершины \(v_i\) в вершину \(u_i\).

Гарантируется, что оба графа являются сильно связными, а также длины всех циклов кратны \(k\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Гарантируется, что сумма \(m_1\) и сумма \(m_2\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно провести \(n\) новых рёбер так, чтобы выполнялись все условия, и «NO» (без кавычек) иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно провести из первого графа во второй граф рёбра \((1, 3)\) и \((4, 2)\) (первое число в паре — номер вершины в первом графе, второе число в паре — номер вершины во втором графе), а из второго графа в первый граф провести рёбра \((1, 2)\), \((4, 3)\) (первое число в паре — номер вершины во втором графе, второе число в паре — номер вершины в первом графе).

Во втором наборе входных данных всего есть \(4\) входящих вершины и \(2\) исходящих, поэтому нельзя провести \(3\) рёбер.

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\).

F. Холмы и ямы

жадные алгоритмы математика матрицы Структуры данных *3500

В пустынном городе с холмистым ландшафтом мэрия решила выровнять поверхность дороги, закупив самосвал. Дорога разделена на \(n\) участков, пронумерованных от \(1\) до \(n\) слева направо. Высота поверхности на \(i\)-м участке равна \(a_i\). Если высота \(i\)-го участка больше \(0\), то самосвал должен забрать песок с \(i\)-го участка дороги, а если высота \(i\)-го участка меньше \(0\), то самосвал должен засыпать песком яму на \(i\)-м участке дороги. Гарантируется, что изначальные высоты не равны \(0\).

Когда самосвал находится на \(i\)-м участке дороги, он может либо забрать оттуда \(x\) единиц песка, и тогда высота поверхности на \(i\)-м участке уменьшится на \(x\), либо засыпать туда \(x\) единиц песка (при условии, что у него в кузове сейчас есть хотя бы \(x\) единиц песка), и тогда высота поверхности на \(i\)-м участке дороги увеличится на \(x\).

Самосвал может начать свой путь на любом участке дороги. Перемещение на соседний слева или справа участок дороги занимает \(1\) минуту, при этом временем загрузки и разгрузки песка можно пренебречь. Кузов самосвала имеет бесконечную вместимость и изначально пуст.

Вам нужно найти минимальное время, за которое самосвал сможет выровнять песок так, чтобы высота на каждом участке стала равна \(0\). Обратите внимание, что после всех передвижений в кузове самосвала может остаться песок. Вам нужно решить эту задачу независимо, если оставить только участки с номерами от \(l_i\) до \(r_i\). При этом использовать песок вне отрезка нельзя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество участков и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\), \(a_i \neq 0\)) — изначальная высота на каждом участке.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка участков, для которого нужно определить минимальное время.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите минимальное время, необходимое, чтобы выровнять песок на отрезке \([l_i, r_i]\), или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных нужно добавить \(179\) единиц песка на единственном участке. Но забрать их неоткуда, поэтому это невозможно.

Во втором наборе входных данных:

  • В первом запросе самосвал может начать путь на втором участке. Он может забрать \(2\) единицы песка, после чего на втором участке высота станет равна \(0\). Затем самосвал может переехать на третий участок. Он может высыпать туда \(1\) единицу песка, после чего на третьем участке высота станет равна \(0\). Затем самосвал может переехать на четвёртый участок. Там он может забрать \(3\) единицы песка, после чего на четвёртом участке высота станет равна \(0\). Суммарно самосвал потратит на перемещения \(2\) минуты.
  • Во втором запросе самосвал может начать путь на четвёртом участке. Он может забрать \(3\) единицы песка, после чего на четвёртом участке высота станет равна \(0\). Затем самосвал может переехать на пятый участок. Он может высыпать туда \(1\) единицу песка, после чего на пятом участке высота станет равна \(0\). Затем самосвал может переехать на четвёртый участок, а потом на третий. Он может высыпать \(1\) единицу песка, после чего на третьем участке высота станет равна \(0\). Затем самосвал может переехать на второй участок. Он может забрать \(2\) единицы песка. Затем он может переехать на первый участок. Он может высыпать \(2\) единицы песка, после чего на первом участке высота станет равна \(0\). Суммарно самосвал потратит на перемещения \(5\) минут.
  • В третьем запросе самосвал не сможет сделать высоту на каждом участке равной \(0\).

A. Выгодный процент

жадные алгоритмы математика *800

У Алисы есть \(a\) монет. Она может открыть в банке вклад «Выгодный», но при этом минимальная сумма для открытия этого вклада равна \(b\) монет.

Также в банке есть вклад «Невыгодный», который можно открыть на любое количество монет. Алиса заметила, что если открыть вклад «Невыгодный» на \(x\) монет, то минимальная сумма для открытия вклада «Выгодный» уменьшится на \(2x\) монет. При этом эти монеты потом нельзя будет положить на вклад «Выгодный».

Помогите Алисе и определите, какое максимальное количество монет она может положить на вклад «Выгодный», если до этого положит какое-то количество монет (возможно, \(0\)) на вклад «Невыгодный». Если Алиса никогда не сможет открыть вклад «Выгодный», то выведите \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)) — количество монет у Алисы и изначальная минимальная сумма для открытия вклада «Выгодный».

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное количество монет, которое Алиса может положить на вклад «Выгодный». Если Алиса никогда не сможет открыть вклад «Выгодный», то выведите \(0\).

Примечание

В первом наборе входных данных \(a \ge b\), поэтому Алиса сразу может открыть вклад «Выгодный» на все \(10\) монет.

Во втором наборе входных данных Алиса может открыть вклад «Невыгодный» на \(2\) монеты. Тогда у неё останется \(5\) монет, но минимальная сумма для открытия вклада «Выгодный» уменьшится на \(4\) монеты и станет равна \(5\) монетам. Тогда Алиса сможет открыть вклад Выгодный на \(5\) монет.

В третьем наборе входных данных Алиса не сможет открыть вклад «Выгодный».

A. Два экрана

Бинарный поиск жадные алгоритмы Строки *800

Рассмотрим два экрана, которые могут отображать последовательности заглавных латинских букв. Изначально оба экрана ничего не отображают.

За одну секунду вы можете выполнить одно из следующих двух действий:

  • выбрать экран и заглавную латинскую букву, и добавить эту букву в конец последовательности, отображаемой на этом экране;
  • выбрать экран и скопировать последовательность с него на другой экран, перезаписывая последовательность, которая была отображена на другом экране.

Вам нужно вычислить минимальное количество секунд, которое вам нужно потратить, чтобы первый экран отображал последовательность \(s\), а второй экран отображал последовательность \(t\).

Входные данные

В первой строке задано одно целое число \(q\) (\(1 \le q \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит последовательность \(s\), а вторая строка содержит последовательность \(t\) (\(1 \le |s|, |t| \le 100\)). Обе последовательности состоят из заглавных латинских букв.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное количество секунд, которое вам нужно потратить, чтобы первый экран отображал последовательность \(s\), а второй экран отображал последовательность \(t\).

Примечание

В первом наборе входных данных возможна следующая последовательность действий:

  • потратить \(6\) секунд, чтобы написать последовательность GARAGE на первом экране;
  • скопировать последовательность с первого экрана на второй экран;
  • потратить \(7\) секунд, чтобы завершить последовательность на втором экране, написав FORSALE.

Во втором наборе входных данных возможна следующая последовательность действий:

  • потратить \(1\) секунду, чтобы написать последовательность A на втором экране;
  • скопировать последовательность со второго экрана на первый экран;
  • потратить \(4\) секунды, чтобы завершить последовательность на первом экране, написав BCDE;
  • потратить \(4\) секунды, чтобы завершить последовательность на втором экране, написав ABCD.

В третьем наборе входных данных самый быстрый способ — это набрать оба сообщения по одному символу, что займет \(16\) секунд.

C. Новая игра

Бинарный поиск жадные алгоритмы Перебор реализация сортировки *1300

Монокарп решил сыграть в новую игру. Для игры используется колода из \(n\) карточек, причем на \(i\)-й карточке записано ровно одно целое число \(a_i\).

В начале игры на первом ходе Монокарп может взять себе любую карточку из колоды. В процессе каждого следующего хода Монокарп может взять себе ровно одну карточку, на которой записано либо такое же число, которое было записано на карточке, взятой на предыдущем ходе, либо число на единицу большее, чем число, которое было записано на карточке, взятой на предыдущем ходе.

Иными словами, если на предыдущем ходе Монокарп взял себе карточку, на которой записано число \(x\), то на текущем ходе он может взять себе либо карточку, на которой записано число \(x\), либо карточку, на которой записано число \(x + 1\). Монокарп может взять любую карточку, которая удовлетворяет этим условиям, независимо от того, где именно она в колоде.

После того как Монокарп взял себе карточку на очередном ходе, она удаляется из колоды.

По правилам игры количество различных чисел, записанных на карточках, которые Монокарп забрал себе, не должно превышать \(k\).

Если после очередного хода Монокарп не может взять карточку, не нарушая описанных правил, игра заканчивается.

Перед вами стоит задача определить максимальное количество карточек, которые Монокарп может забрать себе из колоды в процессе игры, если на первом ходе он может взять любую карточку из колоды.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 200\,000\)) — количество карточек в колоде и максимальное количество различных чисел, которые могут быть записаны на карточках, которые Монокарп забирает себе.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{9}\)), где \(a_i\) равно числу, которое записано на \(i\)-й карточке.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество карточек, которые Монокарп может забрать себе из колоды в процессе игры, если на первом ходе он может взять любую карточку из колоды.

Примечание

В первом примере Монокарпу нужно взять себе любую из карточек, на которых записано число \(3\). В процессе двух следующих ходов ему нужно взять себе две оставшиеся в колоде карточки, на которых записано число \(3\). В процессе трех следующих ходов ему нужно взять себе три карточки, на которых записано число \(4\). После этого Монокарп не сможет взять ни одной карточки из колоды, при этом у него будет \(6\) карточек.

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\).

Если существует несколько ответов, выведите любой из них.

A. Перпендикулярные отрезки

геометрия жадные алгоритмы Конструктив математика *900

Вам задана координатная плоскость и три целых числа \(X\), \(Y\) и \(K\). Найдите два отрезка \(AB\) и \(CD\) такие, что

  1. координаты точек \(A\), \(B\), \(C\) и \(D\) являются целыми числами;
  2. \(0 \le A_x, B_x, C_x, D_x \le X\) и \(0 \le A_y, B_y, C_y, D_y \le Y\);
  3. длина отрезка \(AB\) не менее \(K\);
  4. длина отрезка \(CD\) не менее \(K\);
  5. отрезки \(AB\) и \(CD\) являются перпендикулярными: если провести прямые, содержащие \(AB\) и \(CD\), они пересекутся под прямым углом.

Обратите внимание, что отрезкам не обязательно пересекаться. Отрезки перпендикулярны, пока прямые, которые они задают, перпендикулярны.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой и единственной строке каждого набора заданы три целых числа \(X\), \(Y\) и \(K\) (\(1 \le X, Y \le 1000\); \(1 \le K \le 1414\)).

Дополнительное ограничение на входные данные: значения \(X\), \(Y\) и \(K\) выбраны таким образом, что ответ существует.

Выходные данные

Для каждого набора входных данных выведите две строки. Первая строка должна содержать \(4\) целых числа \(A_x\), \(A_y\), \(B_x\) и \(B_y\) — координаты первого отрезка.

Вторая строка также должна содержать \(4\) целых числа \(C_x\), \(C_y\), \(D_x\) и \(D_y\) — координаты второго отрезка.

Если существует несколько ответов, выведите любой из них.

Примечание

Ответ для первого набора входных данных показан ниже:

Ответ для второго набора входных данных:
Ответ для третьего набора входных данных:
Ответ для четвертого набора входных данных:

B. Черные клетки

Бинарный поиск жадные алгоритмы Конструктив Перебор *1300

Задана полоска, разделенная на клетки, клетки пронумерованы слева направо от \(0\) до \(10^{18}\). Изначально все клетки белые.

Вы можете выполнять следующее действие: выбрать две белые клетки \(i\) и \(j\), такие что \(i \ne j\) и \(|i - j| \le k\), и покрасить их в черный цвет.

Задан список \(a\). Все клетки из этого списка должны быть покрашены в чёрный. Также в черный цвет может быть покрашено не более одной клетки, не входящей в этот список. Ваша задача — определить, для какого минимального значения \(k\) это возможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 < a_i < 10^{18}\); \(a_i < a_{i + 1}\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(k\), для которого возможно покрасить все заданные клетки.

Примечание

В первом наборе входных данных с параметром \(k=1\) можно покрасить клетки \((1, 2)\).

Во втором наборе входных данных с параметром \(k=1\) можно покрасить клетки \((7, 8)\).

В третьем наборе входных данных с параметром \(k=2\) можно покрасить клетки \((2, 4)\) и \((8, 9)\).

В четвертом наборе входных данных с параметром \(k=3\) можно покрасить клетки \((0, 1)\), \((5, 8)\) и \((10, 13)\).

C. Коллекционные фигурки

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация Структуры данных *1500

Рядом с домом Монокарпа есть магазин, в котором продаются коллекционные фигурки. Скоро выйдет новый набор фигурок; в этом наборе содержится \(n\) фигурок, \(i\)-я фигурка стоит \(i\) монет и доступна для покупки с \(i\)-го дня по \(n\)-й день.

Для каждого из следующих \(n\) дней Монокарп знает, может ли он посетить магазин в этот день.

Каждый раз, когда Монокарп посещает магазин, он может купить любое количество фигурок, которые продаются в магазине (конечно, он не может купить фигурку, которая еще не доступна для покупки). Если Монокарп покупает хотя бы две фигурки в один день, он получает скидку, равную стоимости самой дорогой фигурки, которую он покупает (другими словами, он получает самую дорогую из фигурок, которые он покупает, бесплатно).

Монокарп хочет купить ровно одну \(1\)-ю фигурку, одну \(2\)-ю фигурку, ..., одну \(n\)-ю фигурку из набора. Он не может купить одну и ту же фигурку дважды. Какова минимальная сумма денег, которую он должен потратить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество фигурок в наборе (и количество дней);
  • вторая строка содержит строку \(s\) (\(|s| = n\), каждый \(s_i\) равен либо 0, либо 1). Если Монокарп может посетить магазин в \(i\)-й день, то \(s_i\) равно 1; в противном случае \(s_i\) равно 0.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(s_n\) равно 1, так что Монокарп всегда сможет купить все фигурки в \(n\)-й день;
  • сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную сумму денег, которую Монокарп должен потратить.

Примечание

В первом наборе входных данных Монокарп покупает \(1\)-ю фигурку в \(1\)-й день и тратит \(1\) монету.

Во втором наборе входных данных Монокарп может купить \(1\)-ю и \(3\)-ю фигурки в \(3\)-й день, \(2\)-ю и \(4\)-ю фигурки в \(4\)-й день, а также \(5\)-ю и \(6\)-ю фигурки в \(6\)-й день. Тогда он потратит \(1+2+5=8\) монет.

В третьем наборе входных данных Монокарп может купить \(2\)-ю и \(3\)-ю фигурки в \(3\)-й день, а все остальные фигурки в \(7\)-й день. Тогда он потратит \(1+2+4+5+6 = 18\) монет.

B. Сталинская сортировка

жадные алгоритмы Перебор *1100

Сталинская сортировка — это юмористический алгоритм сортировки. Вместо траты сил на сортировку элементов должным образом, элементы на неправильных позициях просто удаляются. Сложность алгоритма — \(\mathcal{O}(n)\).

Алгоритм устроен следующим образом: начиная со второго элемента массива, если текущий элемент строго меньше предыдущего элемента (игнорируя те, которые уже были удалены), то удалите текущий элемент. Продолжайте проход по массиву до тех пор, пока он не будет отсортирован по неубыванию. Например, массив \([1, 4, 2, 3, 6, 5, 5, 7, 7]\) превращается в \([1, 4, 6, 7, 7]\) после сталинской сортировки.

Назовём массив уязвимым, если вы можете отсортировать его в невозрастающем порядке, применив сталинскую сортировку к любым его подотрезкам\(^{\text{∗}}\) столько угодно раз.

Для массива \(a\), состоящего из \(n\) целых чисел, определите минимальное количество элементов, которое нужно удалить из массива, чтобы он стал уязвимым.

\(^{\text{∗}}\)Массив \(a\) является подмассивом \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которое нужно удалить из массива, чтобы он стал уязвимым.

Примечание

В первом наборе входных данных оптимально будет удалить числа \(3\) и \(9\). Тогда у нас останется \(a = [6, 4, 2, 5, 2]\). Чтобы показать, что этот массив уязвим, мы можем сначала применить сталинскую сортировку к подмассиву \([4, 2, 5]\), чтобы получить \(a = [6, 4, 5, 2]\), а затем применить сталинскую сортировку к подмассиву \([6, 4, 5]\), чтобы получить массив \(a = [6, 2]\), который является невозрастающим.

Во втором наборе входных данных массив уже является невозрастающим, поэтому нам не нужно удалять элементы.

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\) нельзя сделать пустым ни одной последовательностью операций.

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\), так как Дама перетащит её к листьям.

A. Множество

жадные алгоритмы математика *800

Вам дано натуральное число \(k\) и множество \(S\) всех целых чисел от \(l\) до \(r\) (включительно).

Вы можете выполнять следующую двухшаговую операцию любое количество раз (возможно, ноль):

  1. Сначала выберите такое число \(x\) из множества \(S\), что в \(S\) есть как минимум \(k\) чисел, кратных \(x\) (включая само \(x\));
  2. Затем удалите число \(x\) из \(S\) (обратите внимание, что ничего другое не удаляется).

Найдите максимально возможное количество раз, которое можно выполнить данную операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(l\), \(r\) и \(k\) (\(1\le l\le r\leq 10^9\), \(1\leq k\le r-l+1\)) — минимальное число в \(S\), максимальное число в \(S\) и параметр \(k\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество раз, которое можно выполнить операцию из условия.

Примечание

В первом наборе входных данных изначально \(S = \{3,4,5,6,7,8,9\}\). Одна возможная оптимальная последовательность операций:

  1. Выберите \(x = 4\) для первой операции, так как в \(S\) есть два числа, кратных \(4\): \(4\) и \(8\). \(S\) становится равным \(\{3,5,6,7,8,9\}\);
  2. Выберите \(x = 3\) для второй операции, так как в \(S\) есть три числа, кратных \(3\): \(3\), \(6\) и \(9\). \(S\) становится равным \(\{5,6,7,8,9\}\).

Во втором наборе входных данных изначально \(S=\{4,5,6,7,8,9\}\). Одна возможная оптимальная последовательность операций:

  1. Выберите \(x = 5\), \(S\) становится равным \(\{4,6,7,8,9\}\);
  2. Выберите \(x = 6\), \(S\) становится равным \(\{4,7,8,9\}\);
  3. Выберите \(x = 4\), \(S\) становится равным \(\{7,8,9\}\);
  4. Выберите \(x = 8\), \(S\) становится равным \(\{7,9\}\);
  5. Выберите \(x = 7\), \(S\) становится равным \(\{9\}\);
  6. Выберите \(x = 9\), \(S\) становится равным \(\{\}\).

В третьем наборе входных данных изначально \(S=\{7,8,9\}\). Для каждого \(x\) из \(S\) в \(S\) нет другого числа, кратного \(x\) (кроме самого \(x\)). Поскольку \(k = 2\), вы не можете выполнить никаких операций.

В четвертом наборе входных данных изначально \(S=\{2,3,4,5,6,7,8,9,10\}\). Одна возможная оптимальная последовательность операций:

  1. Выберите \(x = 2\), \(S\) становится равным \(\{3,4,5,6,7,8,9,10\}\);
  2. Выберите \(x = 4\), \(S\) становится равным \(\{3,5,6,7,8,9,10\}\);
  3. Выберите \(x = 3\), \(S\) становится равным \(\{5,6,7,8,9,10\}\);
  4. Выберите \(x = 5\), \(S\) становится равным \(\{6,7,8,9,10\}\).

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]\).

D. Классный граф

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное снм Структуры данных *1900

Вам дан неориентированный граф с \(n\) вершинами и \(m\) рёбрами.

Вы можете выполнить следующую операцию не более чем \(2\cdot \max(n,m)\) раз:

  • Выберите три различные вершины \(a\), \(b\) и \(c\). Затем для каждого из рёбер \((a,b)\), \((b,c)\) и \((c,a)\) выполните следующее:
    • Если ребро не существует, добавьте его. В противном случае, если оно существует, удалите его.

Граф называется классным, если и только если выполняется одно из следующих условий:

  • Граф не имеет рёбер, или
  • Граф является деревом.

Вам нужно сделать граф классным, выполняя указанные выше операции. Обратите внимание, что вы можете использовать не более чем \(2\cdot \max(n,m)\) операций.

Можно показать, что всегда существует хотя бы одно решение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3\le n\le 10^5\), \(0\le m\le \min\left(\frac{n(n-1)}{2},2\cdot 10^5\right)\)) — количество вершин и количество рёбер.

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\)) — две вершины, которые соединяет \(i\)-е ребро.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Гарантируется, что в данном графе нет петель или кратных рёбер.

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(k\) (\(0\le k\le 2\cdot \max(n, m)\)) — количество операций.

Затем выведите \(k\) строк, \(i\)-я строка содержит три различных целых числа \(a\), \(b\) и \(c\) (\(1\le a,b,c\le n\)) — три целых числа, которые вы выбрали в \(i\)-й операции.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных граф уже классный, потому что рёбер нет.

Во втором наборе входных данных, после выполнения единственной операции, граф становится деревом, поэтому он классный.

В третьем наборе входных данных граф уже классный, потому что он является деревом.

В четвёртом наборе входных данных, после выполнения единственной операции, граф не имеет рёбер, поэтому он классный.

В пятом наборе входных данных:

ОперацияГраф до операцииГраф после операции
\(1\)
\(2\)
\(3\)

Обратите внимание, что после первой операции граф уже стал классным, и есть две лишние операции. Поскольку граф по-прежнему классный после двух лишних операций, это является допустимым ответом.

F. Палиндромы везде

графы жадные алгоритмы Конструктив *2500

Дан цикл с \(n\) вершинами, пронумерованными от \(0\) до \(n-1\). Для каждого \(0\le i\le n-1\) существует неориентированное ребро между вершиной \(i\) и вершиной \(((i+1)\bmod n)\) с цветом \(c_i\) (\(c_i=\texttt{R}\) или \(\texttt{B}\)).

Проверьте, выполняется ли следующее условие для каждой пары вершин \((i,j)\) (\(0\le i<j\le n-1\)):

  • Существует палиндромный маршрут между вершиной \(i\) и вершиной \(j\). Обратите внимание, что маршрут может не быть простым. Формально, должна существовать последовательность \(p=[p_0,p_1,p_2,\ldots,p_m]\), такая что:
    • \(p_0=i\), \(p_m=j\);
    • Для всех \(0\leq x\le m-1\), либо \(p_{x+1}=(p_x+1)\bmod n\), либо \(p_{x+1}=(p_{x}-1)\bmod n\);
    • Для всех \(0\le x\le y\le m-1\) таких, что \(x+y=m-1\), ребро между \(p_x\) и \(p_{x+1}\) имеет такой же цвет, как и ребро между \(p_y\) и \(p_{y+1}\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3\leq n\leq10^6\)) — количество вершин в цикле.

Вторая строка содержит строку \(c\) длиной \(n\) (\(c_i=\texttt{R}\) или \(\texttt{B}\)) — цвет каждого ребра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует палиндромный маршрут между любой парой вершин, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных легко показать, что существует палиндромный маршрут между любыми двумя вершинами.

Во втором наборе входных данных между любыми двумя вершинами существует маршрут, состоящий только из красных рёбер.

В третьем наборе входных данных цикл выглядит следующим образом: \(0\color{red}{\overset{\texttt{R}}{\longleftrightarrow}}1\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}2\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}3\color{red}{\overset{\texttt{R}}{\longleftrightarrow}}4\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}0\). Возьмём \((i,j)=(0,3)\) в качестве примера, тогда \(0\color{red}{\overset{\texttt{R}}{\longrightarrow}}1\color{blue}{\overset{\texttt{B}}{\longrightarrow}}2\color{blue}{\overset{\texttt{B}}{\longrightarrow}}3\color{red}{\overset{\texttt{R}}{\longrightarrow}}4\color{blue}{\overset{\texttt{B}}{\longrightarrow}}0\color{blue}{\overset{\texttt{B}}{\longrightarrow}}4\color{red}{\overset{\texttt{R}}{\longrightarrow}}3\) является палиндромным маршрутом. Таким образом, условие выполняется для \((i,j)=(0,3)\).

В четвёртом наборе входных данных не существует палиндромного маршрута для \((i,j)=(0,2)\).

I. Вызов дисперсии

графы жадные алгоритмы Потоки *3400

Кевин недавно узнал определение дисперсии. Для массива \(a\) длины \(n\) дисперсия \(a\) определяется следующим образом:

  • Пусть \(x=\dfrac{1}{n}\displaystyle\sum_{i=1}^n a_i\), т.е. \(x\) — это среднее арифметическое массива \(a\);
  • Тогда дисперсия \(a\) равна \(\) V(a)=\frac{1}{n}\sum_{i=1}^n(a_i-x)^2. \(\)

Теперь Кевин даст вам массив \(a\), состоящий из \(n\) целых чисел, а также целое число \(k\). Вы можете выполнять следующую операцию над \(a\):

  • Выберите отрезок \([l,r]\) (\(1\le l\le r\le n\)), затем для каждого \(l\le i\le r\) увеличьте \(a_i\) на \(k\).

Для каждого \(1\le p\le m\) вам нужно найти минимально возможную дисперсию \(a\) после выполнения ровно \(p\) операций, независимо для каждого \(p\).

Для простоты вам нужно только вывести ответы, домноженные на \(n^2\). Можно доказать, что результаты всегда являются целыми числами.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n,m\le 5000\), \(\color{red}{n\cdot m\le 2\cdot 10^4}\), \(1\le k\le 10^5\)) — длину массива \(a\), максимальное количество операций и число, которое добавляется к \(a_i\) в операции из условия.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1\le a_i\le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\cdot m\) по всем тестам не превышает \(2\cdot 10^4\).

Выходные данные

Для каждого теста выведите \(m\) целых чисел в одной строке, где \(p\)-е целое число обозначает минимально возможную дисперсию \(a\) после выполнении ровно \(p\) операций, домноженную на \(n^2\).

Примечание

В первом наборе входных данных:

  • Для \(p = 1\) вы можете выполнить операцию на \([1, 1]\), изменив \(a\) с \([1, 2, 2]\) на \([2, 2, 2]\). Поскольку все элементы равны, дисперсия равна \(0\).
  • Для \(p = 2\) вы можете выполнить операцию на \([1, 3]\), а затем на \([1, 1]\), изменив \(a\) с \([1, 2, 2]\) на \([2, 3, 3]\), а затем на \([3, 3, 3]\). Поскольку все элементы равны, дисперсия равна \(0\).

Во втором наборе входных данных:

  • \(p=1\): \([\underline{1,}\,2,2]\to [3,2,2]\);
  • \(p=2\): \([1,\underline{2,2}] \to [\underline{1,}\,4,4] \to [3,4,4]\).

В третьем наборе входных данных:

  • \(p=1\): \([10,\underline{1,1,1,1,10,1,1,1,1}]\to[10,2,2,2,2,11,2,2,2,2]\);
  • \(p=2\): \([10,1,1,1,1,10,\underline{1,1,1,1}] \to [10,\underline{1,1,1,1},10,2,2,2,2] \to [10,2,2,2,2,10,2,2,2,2]\).

В восьмом наборе входных данных для всех \(p\) оптимально выполнить операцию над всем массивом \(p\) раз.

C. Фотограф

жадные алгоритмы сортировки *1400

Валера давно мечтал работать фотографом, и поэтому купил себе новый фотоаппарат. С каждым днем он получал все больше и больше заказов на фотографии, и в один прекрасный день Валере понадобилась программа, которая будет определять, сколько максимум человек он сможет обслужить.

Память фотоаппарата составляет d мегабайт. Фотоаппарат Валеры умеет делать фотографии в высоком и низком качестве. Одна фотография в низком качестве занимает a мегабайт памяти, одна фотография в высоком качестве занимает b мегабайт памяти. По необъяснимым причинам каждый клиент просит сделать ему несколько фотографий в низком и несколько фотографий в высоком качестве. Более формально, i-ый клиент приходит с просьбой сделать ему xi фотографий в низком качестве и yi фотографий в высоком качестве.

Валера хочет обслужить как можно больше клиентов, чтобы они остались довольны его работой. Чтобы i-ый клиент остался доволен работой Валеры, ему нужно выполнить заказ клиента полностью, то есть сделать xi фотографий в низком качестве и yi фотографий в высоком качестве. Чтобы сделать одну фотографию в низком качестве, в памяти фотоаппарата должно быть не менее a мегабайт свободной памяти. Аналогично чтобы сделать одну фотографию в высоком качестве, в памяти фотоаппарата должно быть не менее b мегабайт свободной памяти. Изначально память фотоаппарата пуста. Также Валера не удаляет фотографии из фотоаппарата, поэтому память фотоаппарата постепенно заполняется.

Посчитайте, какое максимальное количество клиентов Валера сможет успешно обслужить, а также выведите номера этих клиентов.

Входные данные

В первой строке заданы два целых числа n и d (1 ≤ n ≤ 105, 1 ≤ d ≤ 109) — количество клиентов и размер памяти фотоаппарата соответственно. Во второй строке заданы два целых числа a и b (1 ≤ a ≤ b ≤ 104) — размер одной фотографии в низком и высоком качестве соответственно.

Далее в n строках задано описание клиентов. В i-ой строке содержатся два целых числа xi и yi (0 ≤ xi, yi ≤ 105) — количество требуемых i-ому клиенту фотографий в низком и высоком качестве соответственно.

Все числа во всех строках разделены единичными пробелами.

Выходные данные

В первую строку выведите ответ на задачу — максимальное количество клиентов, которое Валера сможет успешно обслужить. Во вторую строку выведите номера этих клиентов в произвольном порядке. Все номера должны быть различны. Если ответов несколько, выведите любой из них. Клиенты нумеруются, начиная с 1, в том порядке, в котором они заданы во входных данных.

E. Перевозки

жадные алгоритмы сортировки *2300

Валера приехал в Японию и купил много роботов для своих исследований. Он уже в аэропорте, до вылета осталось совсем немного, поэтому Валере срочно нужно доставить всех роботов до багажного отделения.

Роботы самоходные, и некоторые из них даже имеют отсеки для перевозки других роботов. Точнее, про i-го робота известно ci — количество роботов, которое он может перевезти. При этом, каждый из ci перевозимых роботов может дополнительно перевозить других роботов.

Однако для того, чтобы роботы поехали, в них нужно залить топливо, поэтому Валера потратил все свои последние деньги и купил S литров топлива. Он узнал, что каждый робот имеет ограничение на преодолеваемое расстояние. Таким образом, у i-го робота, помимо характеристики ci, имеются две характеристики fi и li — количество топлива (в литрах), необходимое i-ому роботу для движения, и максимальное расстояние, которое может проехать робот.

Ввиду ограниченного количества времени и топлива, Валера хочет перевезти в багажное отделение максимально возможное количество роботов. Он действует следующим образом.

  • Сначала Валера выбирает некоторых роботов, которые самостоятельно поедут в багажное отделение. При этом суммарное количество топлива, необходимое для движения всех этих роботов, не должно превосходить S.
  • Затем Валера рассаживает роботов по отсекам так, чтобы было перевезено как можно больше роботов. Обратите внимание, что роботы, которые не движутся сами, но находятся на движущихся роботах непосредственно или через других роботов, также могут быть нагружены.
  • После этого, все выбранные и рассаженные роботы, вместе с Валерой, отправятся к багажному отделению, а остальные будут утрачены.

До багажного отделения нужно проехать d метров. Поэтому те роботы, которые будут перевозить остальных, должны иметь показатель li не меньше, чем d. Во время движения Валера не может останавливаться и менять каким-либо образом расположение роботов.

Помогите Валере узнать, какое максимальное количество роботов удастся увезти домой, и какое при этом минимальное количество топлива придется затратить, ведь оставшееся топливо очень пригодится Валере при исследованиях.

Входные данные

В первой строке через пробел заданы три целых числа n, d, S (1 ≤ n ≤ 105, 1 ≤ d, S ≤ 109). Первое число означает количество роботов, второе — расстояние до багажного отделения, третье — количество топлива, имеющееся у Валеры.

В следующих n строках заданы описания роботов. В i-ой строке через пробел заданы три целых числа ci, fi, li (0 ≤ ci, fi, li ≤ 109) — характеристики i-го робота. Первое число — количество роботов, которое i-ый робот может перевезти, второе — количество топлива, необходимое i-ому роботу для движения, третье — максимальное расстояние, которое может проехать i-ый робот.

Выходные данные

Выведите через пробел два целых числа — максимальное количество роботов, которое Валера сможет довезти до багажного отделения, и минимальное количество топлива, которое при этом он затратит. Если Валере не удастся довезти до багажного отделения ни одного робота, то выведите два нуля.

A. Подарок от орангутана

жадные алгоритмы Конструктив математика сортировки *800

Исследуя джунгли, вы наткнулись на редкого орангутана с галстуком-бабочкой! Вы пожали орангутану руку и предложили ему немного еды и воды. В ответ...

Орангутан подарил вам массив \(a\) длины \(n\). Используя \(a\), вы построили два массива \(b\) и \(c\), каждый из которых будет содержать \(n\) элементов, следующим образом:

  • \(b_i = \min(a_1, a_2, \ldots, a_i)\) для каждого \(1 \leq i \leq n\).
  • \(c_i = \max(a_1, a_2, \ldots, a_i)\) для каждого \(1 \leq i \leq n\).

Определим счёт массива \(a\) как \(\sum_{i=1}^n c_i - b_i\) (т.е. сумму \(c_i - b_i\) по всем \(1 \leq i \leq n\)). Прежде чем вычислять счёт, вы можете переставить элементы \(a\) в любом порядке.

Найдите максимальный счёт, который вы можете получить, если оптимально переставите элементы \(a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — количество элементов в \(a\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 1000\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите максимальный счёт, который вы можете получить.

Примечание

В первом наборе входных данных нет другого способа переставить элементы \(a\). Таким образом, \(b = [69]\) и \(c = [69]\). Единственный возможный счёт — \(69 - 69 = 0\).

Во втором наборе входных данных можно переставить элементы \(a\) так: \([7, 5, 6]\). Тогда \(b = [7, 5, 5]\) и \(c = [7, 7, 7]\). Счёт в этом случае будет равен \((7 - 7) + (7 - 5) + (7 - 5) = 4\). Можно показать, что это максимально возможный счёт.

C. ИСТИННАЯ битва

жадные алгоритмы игры Перебор *1100

Алиса и Боб играют в игру. Имеется список из \(n\) булевых значений, каждое из которых равняется либо true, либо false, заданный в виде бинарной строки\(^{\text{∗}}\) длины \(n\) (где \(\texttt{1}\) представляет true, а \(\texttt{0}\) представляет false). Изначально между булевыми значениями нет никаких операторов.

Алиса и Боб будут поочерёдно ставить между булевыми значениями операторы and (обозначающие логическое «И») и операторы or (обозначающие логическое «ИЛИ»), причём Алиса будет ходить первой. Таким образом, игра будет состоять из \(n-1\) ходов, поскольку в списке \(n\) булевых значений. Алиса стремится к тому, чтобы итоговое значение было равно true, а Боб — к тому, чтобы оно было равно false. По данному списку булевых значений определите, выиграет ли Алиса, если оба игрока будут играть оптимально.

Чтобы вычислить итоговое значение выражения, выполняйте следующие шаги, пока выражение не будет состоять только из одного true или false:

  • Если условие содержит операторы and, выберите любой из них и замените окружающее его подвыражение его значением.
  • В противном случае условие содержит операторы or. Выберите любой из них и замените подвыражение, окружающее оператор or, его значением.
Например, выражение true or false and false имеет значение true or (false and false) \(=\) true or false \(=\) true. Можно показать, что значение любого составного выражения определено однозначно.

\(^{\text{∗}}\)Бинарная строка — это строка, состоящая только из символов \(\texttt{0}\) и \(\texttt{1}\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длина строки.

Вторая строка содержит бинарную строку длины \(n\), состоящую из символов \(\texttt{0}\) и \(\texttt{1}\) — список булевых значений.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES« (без кавычек), если Алиса выиграет, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных Алиса может поместить and между двумя булевыми значениями. Игра закончится, так как других мест для размещения операторов нет, и Алиса выиграет, потому что true and true равняется true.

Во втором наборе входных данных Алиса может поместить or между левым false и средним true. Боб может поместить and между средним true и правым false. Выражение false or true and false равняется false.

Обратите внимание, что эти примеры могут не быть оптимальными стратегиями для Алисы или Боба.

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]\) не может стать пустым ни при какой последовательности корректных операций.

G1. Уничтожение Вселенной (простая версия)

жадные алгоритмы Комбинаторика математика *2900

Это простая версия задачи. В этой версии \(n \leq 5000\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Орангутаны — могущественные существа — настолько могущественные, что им нужна всего \(1\) единица времени, чтобы уничтожить все уязвимые планеты во Вселенной!

Во Вселенной существует \(n\) планет. Каждая планета имеет интервал уязвимости \([l, r]\), в течение которого она будет подвержена разрушению орангутанами. Орангутаны также могут расширять интервал уязвимости любой планеты на \(1\) единицу.

В частности, предположим, что расширение происходит на планете \(p\) с интервалом уязвимости \([l_p, r_p]\). Тогда результирующий интервал уязвимости может быть либо \([l_p - 1, r_p]\), либо \([l_p, r_p + 1]\).

При заданном множестве планет орангутаны могут уничтожить все планеты, если интервалы уязвимости всех планет из множества пересекаются хотя бы в одной общей точке. Назовём счётом такого набора минимальное количество расширений, которое необходимо выполнить.

Орангутанов интересует сумма счётов всех непустых подмножеств планет во Вселенной. Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 5000\)) — количество планет во Вселенной.

Следующие \(n\) строк содержат по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — начальный интервал уязвимости \(i\)-й планеты.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите целое число — сумму счётов всех непустых подмножеств планет во Вселенной, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных есть семь непустых подмножеств планет, которые мы должны рассмотреть:

  • Для каждого из подмножеств \(\{[1,1]\}, \{[2,3]\}, \{[3,3]\}\), оценка равна \(0\).
  • Для подмножества \(\{[2,3], [3,3]\}\) оценка равна \(0\), потому что точка \(3\) уже содержится в интервале уязвимости обеих планет.
  • Для подмножества \(\{[1,1], [2,3]\}\) оценка равна \(1\). Используя одну операцию по изменению интервала уязвимости второй планеты на \([1,3]\), обе планеты теперь имеют точку \(1\) в своем интервале.
  • Для подмножества \(\{[1,1], [3,3]\}\) оценка равна \(2\). С помощью двух операций по изменению интервала уязвимости первой планеты на \([1,3]\), обе планеты теперь имеют точку \(3\) в своем интервале.
  • Для подмножества \(\{[1,1], [2,3], [3,3]\}\) оценка равна \(2\). С помощью одной операции по изменению интервала уязвимости первой планеты на \([1,2]\) и одной операции по изменению интервала уязвимости третьей планеты на \([2,3]\), все три планеты будут иметь точку \(2\) в своем интервале.

Сумма оценок всех непустых подмножеств первого набора входных данных равна \(0 \cdot 4 + 1 \cdot 1 + 2\cdot2 = 5\).

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\).

В третьем наборе входных данных высоты колонн уже являются неубывающими, поэтому никаких операций не требуется.

B. Пенчик и палочки для сатэ

жадные алгоритмы Перебор сортировки *900

Пенчик и его друг Кохане путешествуют по Индонезии, и следующая их остановка — Сурабая!

В шумных продуктовых лавках Сурабайи Коханэ купил \(n\) палочек для сатэ и выложил их в линию, причем \(i\)-я палочка для сатэ имеет длину \(p_i\). Известно, что \(p\) — перестановка\(^{\text{∗}}\) длины \(n\).

Пенчик хочет отсортировать палочки для сатэ в порядке возрастания их длины, так, чтобы выполнялось \(p_i=i\) для всех \(1\le i\le n\). Для развлечения они придумали правило: они могут менять местами только соседние палочки для сатэ, длина которых отличается ровно на \(1\). Формально, они могут выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать индекс \(i\) (\(1\le i\le n-1\)) такой, что \(|p_{i+1}-p_i|=1\);
  • Поменять местами \(p_i\) и \(p_{i+1}\).

Определите, можно ли отсортировать перестановку \(p\), а значит и палочки для сатэ, выполнив вышеописанную операцию некоторое количество раз.

\(^{\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 2\cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если можно отсортировать перестановку \(p\) с помощью данных операций. В противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем отсортировать перестановку \(p = [2, 1, 3, 4]\), выполнив операцию над индексом \(1\) (\(|p_2 - p_1| = |1 - 2| = 1\)), в результате чего получим \(p = [1, 2, 3, 4]\).

Для второго набора входных данных можно доказать, что перестановку \(p = [4, 2, 3, 1]\) невозможно отсортировать данными операциями. Для примера приведём последовательности операций, которые можно выполнить над перестановкой:

  • Выбрать \(i = 2\) (\(|p_3 - p_2| = |3 - 2| = 1\)). В результате получится \(p = [4, 3, 2, 1]\).
  • Выбрать \(i = 1\) (\(|p_2 - p_1| = |3 - 4| = 1\)). В результате получится \(p = [3, 4, 2, 1]\).
  • Выбрать \(i = 3\) (\(|p_4 - p_3| = |1 - 2| = 1\)). В результате получится \(p = [3, 4, 1, 2]\).

К сожалению, после выполнения этих операций перестановка \(p\) останется неотсортированной.

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\).

A. Схема

жадные алгоритмы математика реализация теория чисел *800

Алиса только что создала схему с \(n\) лампочками и \(2n\) переключателями. Каждый компонент (лампочка или переключатель) имеет два состояния: включен или выключен. Лампочки и переключатели расположены таким образом:

  • Каждая лампочка подключена к ровно двум переключателям.
  • Каждый переключатель подключен к ровно одной лампочке. Неизвестно, к какой лампочке подключен каждый переключатель.
  • Когда все переключатели выключены, все лампочки также выключены.
  • Если переключатель переключается (с включенного на выключенный или наоборот), состояние лампочки, к которой он подключен, также переключается.

Алиса принесла схему, которая показывает только состояния \(2n\) переключателей, своей сестре Ирис и задала ей загадку: каково минимальное и максимальное количество лампочек, которые могут быть включены?

Зная проделки своей младшей сестры слишком хорошо, Ирис не тратит больше секунды, чтобы дать Алисе правильный ответ. Можете ли вы сделать также?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество лампочек в схеме.

Вторая строка каждого набора входных данных содержит \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(0 \le a_i \le 1\)) — состояния переключателей в схеме. \(a_i = 0\) означает, что \(i\)-й переключатель выключен, а \(a_i = 1\) означает, что \(i\)-й переключатель включен.

Выходные данные

Для каждого набора входных данных выведите два целых числа — минимальное и максимальное количество лампочек, которые могут быть включены, соответственно.

Примечание

В первом наборе входных данных в схеме только одна лампочка, и ни один переключатель не включен, поэтому лампочка точно выключена.

Во втором наборе входных данных в схеме только одна лампочка, но один переключатель, подключенный к ней, включен, поэтому лампочка включена.

В третьем наборе входных данных в схеме только одна лампочка, оба переключателя включены, поэтому лампочка выключена, так как переключается дважды.

В четвёртом наборе входных данных, чтобы не было включенных лампочек, переключатели могут быть расположены следующим образом:

  • Переключатель \(1\) и переключатель \(4\) подключены к лампочке \(1\). Поскольку оба переключателя выключены, лампочка \(1\) также выключена.
  • Переключатель \(2\) и переключатель \(6\) подключены к лампочке \(2\). Поскольку оба переключателя выключены, лампочка \(2\) также выключена.
  • Переключатель \(3\) и переключатель \(5\) подключены к лампочке \(3\). Оба переключателя включены, поэтому лампочка \(3\) переключается дважды из своего первоначального выключенного состояния и, следовательно, также остается выключенной.

А чтобы включить \(2\) лампочки, переключатели могут быть расположены следующим образом:

  • Переключатель \(1\) и переключатель \(2\) подключены к лампочке \(1\). Поскольку оба переключателя выключены, лампочка \(1\) также выключена.
  • Переключатель \(3\) и переключатель \(4\) подключены к лампочке \(2\). Поскольку переключатель \(3\) включен, а переключатель \(4\) выключен, лампочка \(2\) переключается один раз из своего первоначального выключенного состояния, поэтому она включена.
  • Переключатель \(5\) и переключатель \(6\) подключены к лампочке \(3\). Поскольку переключатель \(5\) включен, а переключатель \(6\) выключен, лампочка \(3\) переключается один раз из своего первоначального выключенного состояния, поэтому она включена.

B. Медианы

жадные алгоритмы Конструктив математика реализация *1100

Дан массив \(a = [1, 2, \ldots, n]\), где \(n\)нечетное, и целое число \(k\).

Ваша задача — выбрать нечетное положительное целое число \(m\) и разбить массив \(a\) на \(m\) подмассивов\(^{\dagger}\) \(b_1, b_2, \ldots, b_m\) так, чтобы:

  • Каждый элемент массива \(a\) принадлежит ровно одному подмассиву.
  • Для всех \(1 \le i \le m\), \(|b_i|\)нечетное, т.е. длина каждого подмассива нечетная.
  • \(\operatorname{median}([\operatorname{median}(b_1), \operatorname{median}(b_2), \ldots, \operatorname{median}(b_m)]) = k\), т.е. медиана\(^{\ddagger}\) массива медиан всех подмассивов должна равняться \(k\). \(\operatorname{median}(c)\) обозначает медиану массива \(c\).

\(^{\dagger}\)Подмассив массива \(a\) длины \(n\) — это массив \([a_l, a_{l + 1}, \ldots, a_r]\) для некоторых целых чисел \(1 \le l \le r \le n\).

\(^{\ddagger}\)Медиана массива нечетной длины — это средний элемент после сортировки массива в неубывающем порядке. Например: \(\operatorname{median}([1,2,5,4,3]) = 3\), \(\operatorname{median}([3,2,1]) = 2\), \(\operatorname{median}([2,1,2,1,2,2,2]) = 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n < 2 \cdot 10^5\), \(n\)нечетное) — длина массива \(a\) и требуемая медиана массива медиан всех подмассивов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если подходящего разбиения нет, выведите \(-1\) в одной строке.
  • В противном случае, в первой строке выведите нечетное целое число \(m\) (\(1 \le m \le n\)) — количество подмассивов в разбиении, а во второй строке выведите \(m\) различных целых чисел \(p_1, p_2 , p_3 , \ldots, p_m\) (\(1 = p_1 < p_2 < p_3 < \ldots < p_m \le n\)) — обозначающие левые границы каждого подмассива.

А именно, для корректного ответа \([p_1, p_2, \ldots, p_m]\):

  • \(b_1 = \left[ a_{p_1}, a_{p_1 + 1}, \ldots, a_{p_2 - 1} \right]\)
  • \(b_2 = \left[ a_{p_2}, a_{p_2 + 1}, \ldots, a_{p_3 - 1} \right]\)
  • \(\ldots\)
  • \(b_m = \left[ a_{p_m}, a_{p_m + 1}, \ldots, a_n \right]\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных при данном разбиении \(m = 1\) и \(b_1 = [1]\). Очевидно, что \(\operatorname{median}([\operatorname{median}([1])]) = \operatorname{median}([1]) = 1\).

Во втором наборе входных данных при данном разбиении \(m = 3\) и:

  • \(b_1 = [1]\)
  • \(b_2 = [2]\)
  • \(b_3 = [3]\)

Следовательно, \(\operatorname{median}([\operatorname{median}([1]), \operatorname{median}([2]), \operatorname{median}([3])]) = \operatorname{median}([1, 2, 3]) = 2\).

В третьем наборе входных данных нет корректного разбиения для \(k = 3\).

В четвертом наборе входных данных при данном разбиении \(m = 5\) и:

  • \(b_1 = [1, 2, 3]\)
  • \(b_2 = [4, 5, 6]\)
  • \(b_3 = [7, 8, 9]\)
  • \(b_4 = [10, 11, 12]\)
  • \(b_5 = [13, 14, 15]\)

Следовательно, \(\operatorname{median}([\operatorname{median}([1, 2, 3]), \operatorname{median}([4, 5, 6]), \operatorname{median}([7, 8, 9]), \operatorname{median}([10, 11, 12]), \operatorname{median}([13, 14, 15])]) = \operatorname{median}([2, 5, 8, 11, 14]) = 8\).

D. Генокракен

графы Деревья жадные алгоритмы интерактив Конструктив реализация Структуры данных *1800

Это интерактивная задача.

Очистив Прибрежную Зону, Гретель обнаружила монстра по имени Генокракен и удерживает его для своих научных исследований.

Нервная система монстра может быть представлена как дерево\(^{\dagger}\) из \(n\) вершин (на самом деле, всё не должно постоянно напоминать деревья\(\ldots\)), пронумерованных от \(0\) до \(n-1\), с вершиной \(0\) в качестве корня.

Цель Гретель — узнать точную структуру нервной системы монстра. Более конкретно, она хочет узнать значения \(p_1, p_2, \ldots, p_{n-1}\) дерева, где \(p_i\) (\(0 \le p_i < i\)) является прямым предком вершины \(i\) (\(1 \le i \le n - 1\)).

Она не знает точно, как расположены вершины, но знает несколько приятных фактов:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей\(^{\ddagger}\). Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершины нумеруются таким образом, что если \(1 \le x \le y \le n - 1\), то \(p_x \le p_y\).
  • Вершина \(1\) гарантированно имеет ровно две смежные вершины (включая вершину \(0\)).
Дерево на этой картинке не удовлетворяет условию, потому что если мы удалим вершину \(0\), то вершина \(2\) (которая изначально была смежной с вершиной \(0\)) не будет концом пути \(4-2-5\).Дерево на этой картинке не удовлетворяет условию, потому что должно выполняться \(p_3 \le p_4\).Дерево на этой картинке не удовлетворяет условию, потому что вершина \(1\) имеет только одну смежную вершину.

Гретель может делать запросы к защитной камере:

  • «? a b» (\(1 \le a, b < n\), \(a \ne b\)) — камера проверит, содержит ли простой путь между вершинами \(a\) и \(b\) вершину \(0\).

Однако, чтобы избежать неожиданных последствий от чрезмерной стимуляции существа, Гретель хочет сделать не более \(2n - 6\) запросов. Хотя Гретель одарена, она не может сделать всё сразу, так что можете ли вы протянуть ей руку помощи?

\(^{\dagger}\)Дерево — это связный граф, в котором каждая пара различных вершин имеет ровно один простой путь, соединяющий их.

\(^{\ddagger}\)Путь — это дерево, вершины которого могут быть записаны в порядке \(v_1, v_2, \ldots, v_k\) так, что рёбра имеют вид \((v_i, v_{i+1})\) (\(1 \le i < k\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных взаимодействие начинается с чтения целого числа \(n\).

Затем вы можете делать запросы следующего вида:

  • «? a b» (без кавычек) (\(1 \le a, b < n\), \(a \ne b\)).

После запроса прочитайте целое число \(r\) — ответ на ваш запрос. Вам разрешено использовать не более \(2n - 6\) запросов этого типа.

  • Если простой путь между вершинами \(a\) и \(b\) не содержит вершину \(0\), вы получите \(r = 0\).
  • Если простой путь между вершинами \(a\) и \(b\) содержит вершину \(0\), вы получите \(r = 1\).
  • В случае, если вы сделаете более \(2n-6\) запросов или сделаете некорректный запрос, вы получите \(r = -1\). После получения такого ответа ваша программа должна немедленно завершиться, чтобы получить вердикт «Неправильный ответ». В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит чтение из закрытого потока.

Когда вы определите структуру, выведите строку в формате «! \(p_1 \space p_2 \ldots p_{n-1}\)» (без кавычек), где \(p_i\) (\(0 \le p_i < i\)) обозначает индекс прямого предка вершины \(i\). Этот запрос не учитывается в лимите \(2n - 6\) запросов.

После решения одного набора входных данных программа должна сразу же переходить к следующему. После решения всех наборов входных данных программа должна быть немедленно завершена.

После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор неадаптивный. Дерево не меняется в процессе взаимодействия.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(p_1, p_2, \ldots, p_{n-1}\) (\(0 \le p_1 \le p_2 \le \ldots \le p_{n-1} \le n - 2\), \(0 \le p_i < i\)) — прямые предки вершин \(1\), \(2\), ..., \(n-1\) в системе соответственно.

В каждом наборе входных данных значения \(p_1, p_2, \ldots, p_{n-1}\) должны обеспечивать следующее в дереве:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей. Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершина \(1\) имеет ровно две смежные вершины (включая вершину \(0\)).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).

Во втором наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).
  • Ответ на «? 2 4» равен \(0\). Это означает, что простой путь между вершинами \(2\) и \(4\) не содержит вершину \(0\).

В третьем наборе входных данных нервная система Генокракена образует следующее дерево:

E. Сбалансированный

жадные алгоритмы Конструктив математика реализация Структуры данных *2400

Дан циклический массив \(a\) из \(n\) элементов, где \(n\)нечетное. За одну операцию вы можете сделать следующее:

  • Выберите индекс \(1 \le i \le n\) и увеличьте \(a_{i - 1}\) на \(1\), \(a_i\) на \(2\) и \(a_{i + 1}\) на \(1\). Элемент перед первым элементом является последним элементом, так как это циклический массив.

Циклический массив называется сбалансированным, если все его элементы равны между собой.

Найдите любую последовательность операций, чтобы сделать этот циклический массив сбалансированным, или определите, что это невозможно. Обратите внимание, что вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n < 2 \cdot 10^5\), \(n\)нечетное) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{6}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если невозможно сделать циклический массив сбалансированным, выведите \(-1\).
  • В противном случае выведите \(n\) целых чисел \(v_1, v_2, \ldots, v_n\) (\(0 \leq v_i \leq 10^{18}\)) — где \(v_i\) обозначает количество операций, примененных к индексу \(i\). Можно доказать, что если существует какое-то решение, то существует решение при данных ограничениях. Если существует несколько решений при данных ограничениях, выведите любое из них.
Примечание

В первом наборе входных данных:

  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [3, 3, 3]\).

Во втором наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 5]\).
  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [6, 6, 6]\).

В третьем наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 1, 2, 3]\).
  • После \(3\) операций, примененных к индексу \(i = 3\), массив \(a = [5, 7, 7, 5, 3]\).
  • После \(2\) операций, примененных к индексу \(i = 5\), массив \(a = [7, 7, 7, 7, 7]\).

B. Сакурако и вода

жадные алгоритмы Конструктив Перебор *900

Во время своего похода с Косукэ, Сакурако и Косукэ нашли долину, которую можно представить в виде матрицы \(n \times n\), где на пересечении \(i\)-й строки и \(j\)-го столбца находится гора высотой \(a_{i,j}\). Если \(a_{i,j} < 0\), то там находится озеро.

Косукэ очень боится воды, поэтому Сакурако нужно помочь ему:

  • С помощью своей магии она может выбрать квадратный участок гор и увеличить высоту каждой горы на главной диагонали этого участка ровно на один.

Более формально, она может выбрать подматрицу с верхним левым углом, расположенным в \((i, j)\), и нижним правым углом в \((p, q)\), так что \(p-i=q-j\). И добавить один к каждому элементу на пересечении \((i + k)\)-й строки и \((j + k)\)-го столбца, для всех \(k\), где \(0 \le k \le p-i\).

Определите минимальное количество раз, которое Сакурако должна использовать свою магию, чтобы все озера исчезли.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Каждый набор входных данных описывается следующим образом:

  • первая строка каждого набора входных данных состоит из одного числа \(n\) (\(1 \le n \le 500\))
  • каждая из следующих \(n\) строк состоит из \(n\) целых чисел, разделенных пробелами, которые соответствуют высоте гор в матрице \(a\) (\(-10^5 \le a_{i,j} \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого теста выведите минимальное количество раз, которое Сакурако придется использовать свою магию, чтобы все озера исчезли.

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\).

Выходные данные

Для каждого теста выведите одно целое число: максимальное количество непересекающихся красивых отрезков.

E. Сакурако, Косукэ и перестановка

графы жадные алгоритмы математика Перебор поиск в глубину и подобное снм Структуры данных *1400

Экзамены Сакурако закончились, она справилась на отлично. В награду она получила перестановку \(p\). Косукэ был не совсем доволен, потому что он провалил один экзамен и не получил подарок. Он решил пробраться в её комнату (спасибо за код от её замка) и испортить перестановку так, чтобы она стала простой.

Перестановка \(p\) считается простой, если для каждого \(i\) \((1\le i \le n)\) выполняется одно из условий:

  • \(p_i=i\)
  • \(p_{p_i}=i\)

Например, перестановки \([1, 2, 3, 4]\), \([5, 2, 4, 3, 1]\) и \([2, 1]\) являются простыми, а \([2, 3, 1]\) и \([5, 2, 1, 4, 3]\) — нет.

За одну операцию Косукэ может выбрать индексы \(i,j\) \((1\le i,j\le n)\) и поменять местами элементы \(p_i\) и \(p_j\).

Сакурако вот-вот вернется домой. Ваша задача — вычислить минимальное количество операций, которые необходимо выполнить Косукэ, чтобы сделать перестановку простой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

  • Первая строка содержит одно целое число \(n\) (\(1\le n \le 10^6\)) — длину перестановки \(p\).
  • Вторая строка содержит \(n\) целых чисел \(p_i\) (\(1\le p_i\le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Гарантируется, что \(p\) является перестановкой.

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, которые необходимо выполнить Косукэ, чтобы перестановка стала простой.

Примечание

В первом и втором примерах перестановки уже простые.

В четвёртом примере достаточно поменять местами \(p_2\) и \(p_4\). Таким образом перестановка станет равна \([2, 1, 4, 3]\) за \(1\) операцию.

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\);

B. Возрождение Рахша

жадные алгоритмы реализация Структуры данных *1000

Верный конь Рустама, Рахш, уже не тот, что раньше. Некогда могущественный и быстрый, Рахш со временем стал слабее. Рустам беспокоится, что если слишком много частей тела Рахша потеряют силу одновременно, Рахш может полностью остановиться. Чтобы поддержать своего спутника, Рустам решает укрепить Рахша, чтобы ни одна часть его тела не стала слишком слабой.

Тело Рахша можно представить в виде последовательности пятен, представленных бинарной строкой \(s\) длины \(n\), где символ \(0\) означает слабое место, а \(1\) — сильное. Цель Рустама — убедиться, что ни один интервал из \(m\) последовательных пятен не является полностью слабым (все пятна обозначены \(0\)).

К счастью, Рустам обладает особой способностью под названием Тимар, унаследованной от его матери Рудабе при рождении. С помощью Тимар он может выбрать любой отрезок длины \(k\) и мгновенно усилить его (изменить каждый символ на этом отрезке на \(1\)). Ваша задача состоит в том, чтобы определить минимальное число раз, которое Рустаму нужно использовать Тимар, чтобы на теле Рахша не осталось последовательных полностью слабых участков длины \(m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три числа \(n\), \(m\), \(k\) (\(1 \le m, k \le n \le 2 \cdot 10^5\)). Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов \(s_1s_2 \ldots s_n\) (\(s_i \in \{\)0,1\(\}\) для всех \(1 \le i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное число раз, которое Рустаму необходимо использовать Тимар, чтобы поддерживать движение Рахша, гарантируя отсутствие последовательных полностью слабых участков длины \(m\).

Примечание

В первом наборе входных данных мы должны применить операцию к каждому символу 0.

Во втором наборе входных данных \(s\) уже удовлетворяет условию.

В третьем наборе входных данных мы можем выполнить операцию над интервалом \([3,4]\) для получения 001100.

D. Мудрость Дария

жадные алгоритмы Конструктив реализация сортировки *1600

Дарий Великий строит \(n\) каменных колонн, каждая из которых состоит из основания и либо \(0\), либо \(1\), либо \(2\) фрагментов надписей, расположенных сверху.

На каждом ходе Дарий может выбрать две колонны \(u\) и \(v\) такие, чтобы разница в количестве надписей между этими колоннами равнялась ровно \(1\), и перенести одну надпись с колонны с большим количеством надписей на другую. Гарантируется, что по крайней мере одна колонна содержит ровно \(1\) надпись.

Поскольку красота является главной опорой исторических зданий, Дарий хочет, чтобы колонны были расположены по возрастанию высоты. Чтобы избежать чрезмерных усилий работников, он просит вас спланировать последовательность из максимум \(n\) ходов, чтобы расположить колонны в порядке неубывания высоты, исходя из количества надписей. Минимизация количества ходов не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 3000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) — количество каменных колонн (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), где \(a_i \in \{0,1,2\}\) обозначает изначальное количество надписей на \(i\)-й колонне. Гарантируется, что по крайней мере на одной колонне находится ровно \(1\) надпись.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество перемещений, использованных для сортировки колонн (\(0 \leq k \leq n\)).

Затем выведите \(k\) строк, каждая из которых содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)), представляющие индексы колонн, участвующих в \(i\)-м перемещении. Во время каждого хода должно выполняться \(|a_{u_i} - a_{v_i}| = 1\), и одна надпись переносится с колонны с большим количеством надписей на другую.

Можно доказать, что при заданных ограничениях решение всегда существует.

Примечание

Состояние колонн в первом наборе входных данных:

  • Изначально: \(0, 2, 0, 1\)
  • После первого хода: \(0, 1, 0, 2\)
  • После второго хода: \(0, 0, 1, 2\)

Состояние колонн во втором наборе входных данных:

  • Изначально: \(1, 2, 0\)
  • После первого хода: \(0, 2, 1\)
  • После второго хода: \(0, 1, 2\)

В третьем наборе входных данных высоты колонн уже отсортированы в порядке возрастания.

E. Гармония перестановок

жадные алгоритмы Комбинаторика Конструктив математика хэши *2200

Райан хочет преподнести Рейхане подарок, чтобы завоевать её сердце. Однако Рейхане привередлива и примет только k-гармоничное множество перестановок.

Определим k-гармоничное множество перестановок как набор \(k\) попарно различных перестановок \(p_1, p_2, \ldots, p_k\) такого размера \(n\), что для каждой пары индексов \(i\) и \(j\) (где \(1 \leq i, j \leq n\)) выполняется следующее условие:

\(\) p_1[i] + p_2[i] + \ldots + p_k[i] = p_1[j] + p_2[j] + \ldots + p_k[j] \(\)

Ваша задача состоит в том, чтобы помочь Райану, либо предоставив допустимое k-гармоничное множество перестановок для заданных значений \(n\) и \(k\), либо определив, что такого набора не существует.

Мы называем последовательность длины \(n\) перестановкой, если она содержит каждое целое число от \(1\) до \(n\) ровно один раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из двух целых чисел \(n\) и \(k\) (\(1 \leq n, k \leq 10^5\)).

Гарантируется, что сумма \(n \cdot k\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если k-гармоничное множество перестановок существует, выведите YES в первой строке. Затем выведите \(k\) строк, которые содержат различные перестановки целых чисел от \(1\) до \(n\).

Если такого набора не существует, в единственной строке выведите NO.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Если существует несколько ответов, вы можете вывести любой из них.

Примечание

В 1 наборе входных данных мы имеем \(p_1 = [1, 2, 3]\), \(p_2 = [2, 3, 1]\), и \(p_3 = [3, 1, 2]\). Можно заметить, что \(p_1[1] + p_2[1] + p_3[1] = p_1[2] + p_2[2] + p_3[2] = p_1[3] + p_2[3] + p_3[3] = 6\).

Во 2 наборе входных данных у нас есть \(p_1 = [1, 2, 3, 4]\) и \(p_2 = [4, 3, 2, 1]\). Можно заметить, что \(p_1[1] + p_2[1] = p_1[2] + p_2[2] = p_1[3] + p_2[3] = p_1[4] + p_2[4] = 5\).

В 3 наборе входных данных, поскольку в \(p_1\) есть пять различных элементов, очевидно, что ответ — «No».

G1. Часы Симурга (простая версия)

жадные алгоритмы Конструктив реализация сортировки *3500

Единственное различие между двумя версиями задачи заключается в том, учитываются ли пересечения во всех точках или только в целых точках.

Легендарная мифическая птица Симург отвечает за охрану обширных земель, и для этой цели она наняла \(n\) бдительных воинов. Каждый воин находится в боевой готовности в течение определенного отрезка времени \([l_i, r_i]\), где \(l_i\) — время начала (включительно), а \(r_i\) — время окончания (включительно), оба являются целыми положительными числами.

Один из доверенных советников Симурга, Зал, обеспокоен тем, что если несколько воинов будут караулить в одно и то же время и будут одеты в один и тот же цвет, они могут стать неотличимыми, что вызовет путаницу в дозоре. Чтобы предотвратить это, всякий раз, когда несколько воинов находятся на страже в один и тот же (возможно, нецелый) момент времени, должен быть хотя бы один цвет, который носит ровно один воин.

Таким образом, ваша задача состоит в том, чтобы определить минимальное необходимое количество цветов и назначить цвет \(c_i\) каждому отрезку дозора воина \([l_i, r_i]\) таким образом, чтобы для каждого (возможно, нецелого) момента времени \(t\) существовал цвет, который принадлежит ровно одному отрезку, содержащему \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество воинов, размещенных Симургом.
  • Каждая из следующих \(n\) строк содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 10^9\)) — начало и окончание отрезка времени воина.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Выведите минимальное необходимое количество цветов \(k\).
  • Затем выведите строку из \(n\) целых чисел \(c_i\) (\(1 \leq c_i \leq k\)), где каждое \(c_i\) — это цвет, присвоенный \(i\)-му воину.
Примечание

Мы можем представить отрезок наблюдения каждого воина в виде отрезка по оси X;

В 1 наборе входных данных у нас есть два независимых отрезка, которые могут быть окрашены в один и тот же цвет.

Во 2 наборе входных данных точка 2 является общей для двух отрезков, что означает, что мы не можем раскрасить их в один и тот же цвет.

В 3 наборе входных данных отрезки могут быть окрашены, как показано ниже (отрезки покрашены в выбранный цвет; области закрашены цветом, если данный цвет встречается в этот момент времени ровно один раз):

В 4 наборе входных данных отрезки могут быть окрашены, как показано ниже:

В 5 наборе входных данных отрезки могут быть окрашены, как показано ниже. Изображение справа демонстрирует пример неправильной раскраски для этого набора входных данных; на момент времени \(5.5\) нет уникального цвета:

G2. Часы Симурга (сложная версия)

жадные алгоритмы реализация *3500

Единственное различие между двумя версиями задачи заключается в том, учитываются ли пересечения во всех точках или только в целых точках.

Легендарная мифическая птица Симург отвечает за охрану обширных земель, и для этой цели она наняла \(n\) бдительных воинов. Каждый воин находится в боевой готовности в течение определенного отрезка времени \([l_i, r_i]\), где \(l_i\) — время начала (включительно), а \(r_i\) — время окончания (включительно), оба являются целыми положительными числами.

Один из доверенных советников Симурга, Зал, обеспокоен тем, что если несколько воинов будут караулить в одно и то же время и будут одеты в один и тот же цвет, они могут стать неотличимыми, что вызовет путаницу в дозоре. Чтобы предотвратить это, всякий раз, когда несколько воинов находятся на страже в один и тот же целый момент времени, должен быть хотя бы один цвет, который носит ровно один воин.

Таким образом, ваша задача состоит в том, чтобы определить минимальное необходимое количество цветов и назначить цвет \(c_i\) каждому отрезку дозора воина \([l_i, r_i]\) таким образом, чтобы для каждого (целого) момента времени \(t\) существовал цвет, который принадлежит ровно одному отрезку, содержащему \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество воинов, размещенных Симургом.
  • Каждая из следующих \(n\) строк содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 10^9\)) — начало и окончание отрезка времени воина.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Выведите минимальное необходимое количество цветов \(k\).
  • Затем выведите строку из \(n\) целых чисел \(c_i\) (\(1 \leq c_i \leq k\)), где каждое \(c_i\) — это цвет, присвоенный \(i\)-му воину.
Примечание

Мы можем представить отрезок наблюдения каждого воина в виде отрезка по оси X;

В 1 наборе входных данных отрезки могут быть окрашены, как показано ниже (отрезки покрашены в выбранный цвет; области закрашены цветом, если данный цвет встречается в этот момент времени ровно один раз):

Во 2 наборе входных данных отрезки могут быть окрашены, как показано ниже:

В 3 наборе входных данных интервалы могут быть окрашены, как показано ниже:

B. Все любят тройки

жадные алгоритмы Конструктив математика теория чисел *900

Есть 3 героя и 3 злодея, то есть всего 6 человек.

Дано целое положительное число \(n\). Найдите наименьшее целое число, такое, что его десятичное представление имеет длину \(n\), оно состоит только из цифр \(3\) и \(6\), и оно делится и на \(33\), и на \(66\). Если такого числа не существует, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 500\)) — длина десятичного представления числа.

Выходные данные

Для каждого набора входных данных выведите наименьшее подходящее целое число, если оно существует, и \(-1\) в противном случае.

Примечание

Для \(n=1\) такого целого числа не существует, так как ни \(3\), ни \(6\) не делится на \(33\).

Для \(n=2\) число \(66\) состоит только из \(6\) и делится как на \(33\), так и на \(66\).

Для \(n=3\) такого целого числа не существует. Только \(363\) делится на \(33\), но оно не делится на \(66\).

Для \(n=4\) числа \(3366\) и \(6666\) делятся и на \(33\), и на \(66\), причем \(3366\) — наименьшее.

D. Действительно, ещё одна задача о числах

Бинарный поиск жадные алгоритмы математика разделяй и властвуй реализация Структуры данных *1800

Three r there are's in strawberry.

Вам дан массив \(b\) длины \(m\). Вы можете выполнить следующую операцию любое количество раз (возможно, нулевое):

  • Выбрать два различных индекса \(i\) и \(j\), где \(\bf{1\le i < j\le m}\) и \(b_i\) является чётным числом, поделить \(b_i\) на \(2\) и умножить \(b_j\) на \(2\).

Ваша задача — максимизировать сумму массива после выполнения любого количества таких операций. Поскольку она может быть большой, выведите эту сумму по модулю \(10^9+7\).

Поскольку эта задача слишком простая, вам дается массив \(a\) длины \(n\), и вам нужно решить задачу для каждого префикса \(a\).

Другими словами, обозначив максимальную сумму \(b\) после выполнения любого количества таких операций как \(f(b)\), вам нужно вывести \(f([a_1])\), \(f([a_1,a_2])\), \(\ldots\), \(f([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\)) — длина \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — начальные значения массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, являющимися ответами для каждого префикса \(a\) по модулю \(10^9+7\).

Примечание

Для каждого префикса в первом наборе входных данных возможен следующий массив после применения операций:

  • \([1]\): сумма равна \(1\);
  • \([1, 2]\): сумма равна \(3\);
  • \([1, 1, 6]\): сумма равна \(8\);
  • \([1, 1, 3, 8]\): сумма равна \(13\);
  • \([1, 1, 3, 1, 40]\): сумма равна \(46\);
  • \([1, 1, 3, 1, 5, 48]\): сумма равна \(59\);
  • \([1, 1, 3, 1, 5, 3, 112]\): сумма равна \(126\);
  • \([1, 1, 3, 1, 5, 3, 7, 128]\): сумма равна \(149\);
  • \([1, 1, 3, 1, 5, 3, 7, 1, 1152]\): сумма равна \(1174\);
  • \([1, 1, 3, 1, 5, 3, 7, 1, 9, 1280]\): сумма равна \(1311\).

E. Монстр

Бинарный поиск жадные алгоритмы Конструктив математика Перебор реализация Тернарный поиск *2300

Мужик, этот босс в Genshin такой сложный. Хорошо, что у них есть пополнение на \(6\) монет всего за \( \$4.99\). Мне следует быть осторожнее и не тратить больше, чем нужно, иначе мама меня поймает...

Вы сражаетесь с монстром со здоровьем \(z\), используя оружие с уроном \(d\). Изначально \(d=0\). Вы можете выполнять следующие действия.

  • Увеличить \(d\) — урон вашего оружия на \(1\), потратив \(x\) монет.
  • Атаковать монстра, нанеся ему \(d\) урона, потратив \(y\) монет.

Вы не можете выполнять первую операцию более \(k\) раз подряд.

Найдите минимальное количество монет, необходимое для того, чтобы победить монстра, нанеся ему хотя бы \(z\) урона.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(x\), \(y\), \(z\) и \(k\) (\(1\leq x, y, z, k\leq 10^8\)) — стоимость первой операции, стоимость второй операции, здоровье монстра и ограничение на первую операцию.

Выходные данные

Для каждого набора входных данных выведите минимальное количество монет, необходимое для победы над монстром.

Примечание

В первом наборе входных данных \(x = 2\), \(y = 3\), \(z = 5\) и \(k = 5\). Вот стратегия, которая обеспечивает наименьшую возможную стоимость в \(12\) монет:

  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.

Вы наносите в общей сложности \(3 + 3 = 6\) урона, побеждая монстра, который имеет \(5\) здоровья. Суммарное количество монет, которое вы потратите, составляет \(2 + 2 + 2 + 3 + 3 = 12\) монет.

Во втором наборе входных данных \(x = 10\), \(y = 20\), \(z = 40\) и \(k = 5\). Вот стратегия, которая позволяет достичь наименьшей возможной стоимости в \(190\) монет:

  • Увеличить урон на \(5\), что стоит \(5\cdot x\) = \(50\) монет.
  • Атаковать монстра один раз, нанеся ему \(5\) урона, потратив \(20\) монет.
  • Увеличить урон на \(2\), потратив \(2\cdot x\) = \(20\) монет.
  • Атаковать монстра \(5\) раз, нанеся \(5\cdot 7 = 35\) урона, потратив \(5\cdot y\) = \(100\) монет.

Всего вы нанесли \(5 + 35 = 40\) урона, победив монстра, у которого ровно \(40\) здоровья. Вы потратили \(50 + 20 + 20 + 100 = 190\) монет.

B. Стартап

жадные алгоритмы сортировки *800

Арсений придумал очередной бизнес-план — продавать газировку в автомате! Для этого он приобрёл автомат с \(n\) полками, а также \(k\) бутылок, \(i\)-я бутылка характеризуется номером бренда \(b_i\) и стоимостью \(c_i\).

На каждую полку можно поставить сколько угодно бутылок, но все бутылки на одной полке должны быть одного и того же бренда.

Арсений знает, что все бутылки, которые он выставит на полки автомата, будут проданы. Поэтому он попросил вас вычислить, какую максимальную сумму он сможет заработать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)), где \(n\) — количество полок в автомате, а \(k\) — количество бутылок в распоряжении Арсения.

Следующие \(k\) строк содержат по два целых числа \(b_i\) и \(c_i\) (\(1 \le b_i \le k, 1 \le c_i \le 1000\)) — бренд и стоимость \(i\)-й бутылки.

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и что сумма \(k\) по всем наборам входных данных также не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную сумму, которую может заработать Арсений.

Примечание

В первом наборе входных данных у Арсения \(3\) полки в автомате. Он может расположить, например, две бутылки бренда \(2\) на первой полке и бутылку бренда \(1\) на второй. Тогда суммарная стоимость бутылок будет равна \(6 + 7 + 15 = 28\).

Во втором наборе у него есть только одна полка. Нетрудно показать, что оптимальным вариантом будет разместить на ней бутылку бренда \(1\). Тогда суммарная стоимость будет равна \(15\).

В третьем наборе входных данных у него есть целых \(6\) полок, поэтому он может разместить все имеющиеся бутылки итоговой стоимостью \(7 + 5 = 12\).

E. Пустить реки вспять

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1600

Сговор древних мудрецов, решивших повернуть реки для собственного удобства, поставил мир на грань. Но перед реализацией своего грандиозного плана они решили тщательно продумать стратегию — на то они и мудрецы.

Существует \(n\) стран, в каждой из которых ровно по \(k\) регионов. Для \(j\)-го региона \(i\)-й страны они вычислили значение \(a_{i,j}\), которое отражает количество воды в нём.

Мудрецы намереваются создать каналы между \(j\)-м регионом \(i\)-й страны и \(j\)-м регионом \((i + 1)\)-й страны для всех \(1 \leq i \leq (n - 1)\) и для всех \(1 \leq j \leq k\).

В силу того, что все \(n\) стран находятся на большом склоне, вода стекает в сторону страны с наибольшим номером. По прогнозу мудрецов, после создания системы каналов новое значение \(j\)-го региона \(i\)-й страны станет равно \(b_{i,j} = a_{1,j} | a_{2,j} | ... | a_{i,j}\), где \(|\) — операция побитового «ИЛИ».

После перераспределения воды мудрецы стремятся выбрать наиболее подходящую страну для проживания, поэтому они пришлют вам \(q\) запросов на рассмотрение.

Каждый запрос будет содержать \(m\) требований.

Каждое требование содержит три параметра: номер региона \(r\), знак \(o\)\(<\)» или «\(>\)») и значение \(c\). Если \(o\) = «\(<\)», то в \(r\)-м регионе выбранной вами страны новое значение должно быть строго меньше значения ограничения \(c\), а если \(o\) = «\(>\)» — строго больше.

Иными словами, выбранная вами страна \(i\) должна удовлетворять всем \(m\) требованиям. Если в очередном требовании \(o\) = «\(<\)», то должно выполняться \(b_{i,r} < c\), а если \(o\) = «\(>\)» — то \(b_{i,r} > c\).

В ответ на каждый запрос вам следует вывести одно целое число — номер подходящей страны. Если таких стран несколько, выведите наименьший из возможных. Если таких стран не существует, выведите \(-1\).

Входные данные

Первая строка содержит три целых числа \(n\), \(k\), и \(q\) (\(1 \leq n, k, q \leq 10^5\)) — количество стран, регионов и запросов соответственно.

Далее следует \(n\) строк, \(i\)-я из которых содержит \(k\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,k}\) (\(1 \leq a_{i,j} \leq 10^9\)), где \(a_{i,j}\) — значение \(j\)-го региона \(i\)-й страны.

Далее описывается \(q\) запросов.

Первая строка каждого запроса содержит одно целое число \(m\) (\(1 \leq m \leq 10^5\)) — количество требований.

Затем идут \(m\) строк, содержащих значения целое число \(r\), символ \(o\) и целое число \(c\) (\(1 \leq r \leq k\), \(0 \leq c \leq 2 \cdot 10^9\)), где \(r\) и \(c\) — номер региона и значение, а \(o\) — символ «\(<\)» либо «\(>\)» — знак.

Гарантируется, что \(n \cdot k\) не превышает \(10^5\) и что сумма \(m\) по всем запросам также не превышает \(10^5\).

Выходные данные

Для каждого запроса на новой строке выведите целое число — наименьший номер подходящей страны, либо \(-1\), если такой страны не существует.

Примечание

В примере изначальные значения регионов имеют вид:

\(1\)\(3\)\(5\)\(9\)
\(4\)\(6\)\(5\)\(3\)
\(2\)\(1\)\(2\)\(7\)

После создания каналов новые значения будут выглядеть так:

\(1\)\(3\)\(5\)\(9\)
\(1 | 4\)\(3 | 6\)\(5 | 5\)\(9 | 3\)
\(1 | 4 | 2\)\(3 | 6 | 1\)\(5 | 5 | 2\)\(9 | 3 | 7\)
\(\downarrow\)
\(1\)\(3\)\(5\)\(9\)
\(5\)\(7\)\(5\)\(11\)
\(7\)\(7\)\(7\)\(15\)

В первом запросе необходимо вывести минимальный номер страны (т.е. строки), где после перераспределения воды в первом регионе (т.е. столбце) новое значение будет больше четырёх и меньше шести, а во втором — меньше восьми. Этим требованиям удовлетворяет только страна с номером \(2\).

Во втором запросе нет ни одной страны, удовлетворяющей заданным требованиям.

В третьем запросе подходит только страна с номером \(3\).

В четвёртом запросе все три страны удовлетворяют условиям, поэтому ответом является наименьший номер \(1\).

C. Любимая перестановка Суперультры

жадные алгоритмы Конструктив математика теория чисел *1000

Суперультра, маленькая красная панда, отчаянно хочет примогемы. В своих мечтах он слышит голос, который говорит ему, что он должен решить следующую задачу, чтобы получить пожизненный запас примогемов. Помогите Суперультре!

Постройте перестановку\(^{\text{∗}}\) \(p\) длины \(n\) так, чтобы \(p_i + p_{i+1}\) было составным\(^{\text{†}}\) для всех \(1 \leq i \leq n - 1\). Если это невозможно, выведите \(-1\).

\(^{\text{∗}}\)Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (число \(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (длина \(n=3\), но в массиве есть \(4\)).

\(^{\text{†}}\)Целое число \(x\) является составным, если у него есть хотя бы один другой делитель, кроме \(1\) и \(x\). Например, \(4\) является составным, потому что \(2\) является делителем.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если невозможно построить \(p\), выведите \(-1\) на новой строке. В противном случае выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\).

Примечание

В первом примере можно показать, что любая перестановка размера \(3\) содержит два смежных элемента, сумма которых является простым числом. Например, в перестановке \([2,3,1]\) сумма \(2+3=5\) является простым числом.

Во втором примере мы можем проверить, что пример вывода верен, потому что \(1+8\), \(8+7\), \(7+3\), \(3+6\), \(6+2\), \(2+4\) и \(4+5\) все составные. Могут быть и другие правильные конструкции.

D. Акулий серфинг

жадные алгоритмы Структуры данных *1300

Муалани любит серфинг на своей акульей доске!

Путь серфинга Муалани можно смоделировать с помощью числовой прямой. Она начинает с позиции \(1\), а путь заканчивается на позиции \(L\). Когда она находится в позиции \(x\) с силой прыжка \(k\), она может прыгнуть в любую целую позицию в интервале \([x, x+k]\). Изначально ее сила прыжка равна \(1\).

Однако ее путь серфинга не совсем гладкий. На ее пути есть \(n\) препятствий. Каждое препятствие представлено отрезком \([l, r]\), что означает, что она не может прыгнуть на любую позицию в отрезке \([l, r]\).

Также на определенных позициях на пути есть \(m\) усилений. Усиление \(i\) расположено на позиции \(x_i\) и имеет значение \(v_i\). Когда Муалани находится на позиции \(x_i\), она может собрать усиление, чтобы увеличить свою силу прыжка на \(v_i\). На одной и той же позиции может быть несколько усилений. Когда она находится на позиции с несколькими усилениями, она может выбрать, взять или игнорировать каждое отдельное усиление. Ни одно усиление не находится в отрезке любого препятствия.

Каково минимальное количество усилений, которые она должна собрать, чтобы достичь позиции \(L\) и завершить путь? Если завершить путь невозможно, выведите \(-1\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(L\) (\(1 \leq n, m \leq 2 \cdot 10^5, 3 \leq L \leq 10^9\)) — количество препятствий, количество усилений и позицию конца.

Следующие \(n\) строк содержат по два целых числа \(l_i\) и \(r_i\) (\(2 \leq l_i \leq r_i \leq L-1\)) — границы отрезка для \(i\)-го препятствия. Гарантируется, что \(r_i + 1 < l_{i+1}\) для всех \(1 \leq i < n\) (т.е. все препятствия не перекрываются, отсортированы по возрастанию позиций, и конец предыдущего препятствия не является последовательным с началом следующего препятствия).

Следующие \(m\) строк содержат по два целых числа \(x_i\) и \(v_i\) (\(1 \leq x_i, v_i \leq L\)) — позицию и значение для \(i\)-го усиления. На одной и той же позиции \(x\) может быть несколько усилений. Гарантируется, что \(x_i \leq x_{i+1}\) для всех \(1 \leq i < m\) (т.е. усиления отсортированы по неубывания позиции) и ни одно усиление не находится в отрезке любого препятствия.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество усилений, которые она должна собрать, чтобы достичь позиции \(L\). Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных она может собрать усиления \(1\), \(2\), \(3\) и \(5\), чтобы преодолеть все препятствия.

Во втором наборе входных данных она не может перепрыгнуть первое препятствие.

В четвертом наборе входных данных, собрав оба усиления, она сможет перепрыгнуть препятствие.

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\).

A. Bonus Project

жадные алгоритмы игры *1400

There is a team of \(n\) software engineers numbered from \(1\) to \(n\). Their boss promises to give them a bonus if they complete an additional project. The project requires \(k\) units of work in total. The bonus promised to the \(i\)-th engineer is \(a_i\) burles. The boss doesn't assign specific tasks to engineers; it is expected that every engineer will voluntarily complete some integer amount of work units. The bonus will be paid to the entire team only if the project is completed; in other words, if the total amount of voluntary work units on the project is greater than or equal to \(k\).

The amount of work that can be performed by each engineer is not limited. However, all engineers value their labour. The \(i\)-th engineer estimates one unit of their work as \(b_i\) burles. If the bonus is paid, the benefit \(s_i\) of the \(i\)-th engineer for completing \(c\) units of work is defined as \(s_i = a_i - c \cdot b_i\). If the bonus is not paid, the engineer will not volunteer to do any work.

Engineers work together for many years, so they know how the bonus is going to be distributed and how much their colleagues value the labour. That is, all \(a_i\) and all \(b_i\) are known to every engineer in the team.

Engineers are eager to get the bonus, so they agreed on the following process of work distribution between them:

  • the first engineer says: "I will complete \(c_1\) units of work", where \(c_1\) is a non-negative integer;
  • then, the second engineer says: "I will complete \(c_2\) units of work", where \(c_2\) is a non-negative integer;
  • ... and so on;
  • finally, the \(n\)-th engineer says: "I will complete \(c_n\) units of work", where \(c_n\) is a non-negative integer.

Every engineer voices \(c_i\) in a way to maximize their own benefit \(s_i\). If the expected benefit is going to be zero, an engineer will still agree to work to get the experience and to help their colleagues obtain the bonus. However, if the benefit is expected to be negative for some reason (an engineer needs to perform an excessive amount of work or the project is not going to be completed), that engineer will not work at all (completes zero amount of work units).

Given that every engineer acts perfectly, your task is to find out the numbers \(c_i\) voiced by every engineer.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 1000\); \(1 \le k \le 10^6\)) — the number of engineers in the company and the number of work units the project requires, respectively.

The second line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), where \(a_i\) is the bonus which will be paid to the \(i\)-th engineer if the project is completed.

The third line contains \(n\) integers \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 1000\)), where \(b_i\) is the work unit cost for the \(i\)-th engineer.

Output

Print \(n\) integers \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le k\)) — the amount of work completed by each engineer given that every engineer behaves optimally. Note that the answer is unique.

Note

In the first example, engineers distributed the work across them and got the bonus, even though the benefit for the third engineer is zero.

In the second example, the bonus project requires too many work units to complete, so it's more beneficial for engineers not to work at all.

B. Make It Equal

Бинарный поиск жадные алгоритмы математика Перебор *2100

You are given an integer array \(a\) of size \(n\). The elements of the array are numbered from \(1\) to \(n\).

You can perform the following operation any number of times (possibly, zero): choose an index \(i\) from \(1\) to \(n\); decrease \(a_i\) by \(2\) and increase \(a_{(i \bmod n) + 1}\) by \(1\).

After you perform the operations, all elements of the array should be non-negative equal integers.

Your task is to calculate the minimum number of operations you have to perform.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Additional constraint on the input: the sum of \(n\) over all test cases doesn't exceed \(2 \cdot 10^5\).

Output

For each test case, print a single integer — the minimum number of operations you have to perform. If it is impossible to make all elements of the array equal, print -1.

C. DIY

геометрия жадные алгоритмы сортировки Структуры данных *1400

You are given a list of \(n\) integers \(a_1, a_2, \dots, a_n\). You need to pick \(8\) elements from the list and use them as coordinates of four points. These four points should be corners of a rectangle which has its sides parallel to the coordinate axes. Your task is to pick coordinates in such a way that the resulting rectangle has the maximum possible area. The rectangle can be degenerate, i. e. its area can be \(0\). Each integer can be used as many times as it occurs in the list (or less).

Input

The first line contains one integer \(t\) (\(1 \le t \le 25\,000\)) — the number of test cases.

The first line of each test case contains one integer \(n\) (\(8 \le n \le 2 \cdot 10^5\)).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Additional constraint on the input: the sum of \(n\) over all test cases does not exceed \(2 \cdot 10^5\).

Output

For each test case, print the answer as follows:

  • if it is impossible to construct a rectangle which meets the constraints from the statement, print a single line containing the word NO (case-insensitive);
  • otherwise, in the first line, print YES (case-insensitive). In the second line, print \(8\) integers \(x_1, y_1, x_2, y_2, x_3, y_3, x_4, y_4\) — the coordinates of the corners of the rectangle. You can print the corners in any order.

E. Barrels

жадные алгоритмы математика Структуры данных *2900

Suppose you have \(n\) water barrels standing in a row, numbered from \(1\) to \(n\).

All barrels are equal and have a bottom area equal to one unit, so the volume of the water inside a barrel is equal to the height of the water column. Initially, the \(i\)-th barrel has \(v_i\) units of water.

Adjacent barrels are connected by pipes. In other words, for each \(i\) from \(1\) to \(n - 1\), barrels \(i\) and \(i + 1\) are connected by a single horizontal pipe at height \(h_i\). The widths of the pipes are negligible. These pipes allow water to flow between barrels.

Now you want to play with barrels. Your plan is to maximize the volume of the water in the first barrel by throwing clay into barrels. In one step, you can choose any barrel and throw one unit of clay into it. One unit of clay has the same volume as one unit of water. Clay is heavier than water and doesn't mix with it, so it falls to the bottom of the barrel, distributing evenly.

Clay has a sticky structure, so it seals pipes if the clay column is high enough. More formally, suppose the pipe is at height \(h\). If the height of the clay column is also \(\boldsymbol{h}\) (or lower), the pipe is working. But the moment you add more clay into the barrel, the pipe becomes sealed instantly, preventing any water from moving between barrels.

You have a mountain of clay, so you can repeat the step described above any number of times. However, between the steps, you have to wait until the water reaches the new equilibrium.

What is the maximum water volume you can collect in the first barrel?

Assume that the barrels are high enough, so the water doesn't overflow, and the pipe widths are negligible.

Input

The first line contains a single integer \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — the number of barrels.

The second line contains \(n\) integers \(v_1, v_2, \dots, v_n\) (\(0 \le v_i \le 10^6\)), where \(v_i\) is the initial water volume in the \(i\)-th barrel.

The third line contains \(n - 1\) integers \(h_1, h_2, \dots, h_{n - 1}\) (\(1 \le h_i \le 10^6\)), where \(h_i\) is the height of the pipe between the \(i\)-th and the \((i + 1)\)-st barrel.

Additional constraint on the input: the given water heights are in an equilibrium.

Output

Print a single number — the maximum volume of water in the first barrel. 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}\).

Note

An optimal strategy for the first example is shown in the picture below:

J. Waiting for...

жадные алгоритмы реализация *800

Monocarp is waiting for a bus at the bus stop. Unfortunately, there are many people who want to ride a bus too.

You are given a list of events of two types:

  • B \(b_i\) — a bus with \(b_i\) free seats arrives at the stop;
  • P \(p_i\) — \(p_i\) people arrive at the stop.

These events are listed in a chronological order.

When a bus arrives, the following happens. All people at the bus stop (except for Monocarp) try to enter the bus. If there are enough free seats for all of them, then they all enter the bus. Otherwise, some people remain at the bus stop (the number of people who enter the bus is equal to the number of free seats).

If there is still at least one free seat after all people (except for Monocarp) enter the bus, then Monocarp can decide to enter this bus as well (but he might choose to wait for another bus). For each bus, you have to determine if it is possible for Monocarp to take that bus.

Input

The first line contains one integer \(n\) \((1 \le n \le 10^3)\) — the number of events.

Then, \(n\) lines follow. The \(i\)-th of them contains the description of the \(i\)-th event in one of the two following formats:

  • B \(b_i\) (\(1 \le b_i \le 10^6\)) — a bus with \(b_i\) free seats arrives at the stop;
  • P \(p_i\) (\(1 \le p_i \le 10^6\)) — \(p_i\) people arrive at the stop.

Additional constraint on the input: there is at least one event of type B.

Output

For each event of type B, print YES if it is possible for Monocarp to take the corresponding bus, or NO otherwise (case-insensitive).

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.

B. Shohag любит строки

жадные алгоритмы Конструктив реализация Строки *1000

Для строки \(p\) определим \(f(p)\) — количество уникальных непустых подстрок\(^{\text{∗}}\) строки \(p\).

У Shohag есть строка \(s\). Помогите ему найти непустую строку \(p\), такую, что \(p\) является подстрокой \(s\), а \(f(p)\) чётно, или скажите, что такой строки не существует.

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) символов из начала и несколько (возможно, ноль или все) символов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 10^5\)), состоящую из строчных латинских букв.

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите непустую строку, удовлетворяющую условиям, или \(-1\), если такой строки не существует. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы можем выбрать \(p = \) abaa, потому что это подстрока \(s\), а уникальными подстроками \(p\) являются a, b, aa, ab, ba, aba, baa и abaa — всего \(8\) уникальных подстрок, что является чётным числом.

Во втором наборе входных данных мы можем выбрать только \(p = \) a, но у этой строки есть одна уникальная подстрока, что является нечётным числом, поэтому эта строка не подходит.

В третьем наборе входных данных вся строка содержит \(52\) уникальных подстроки, поэтому сама строка является корректным ответом.

D. Shohag любит НОД

жадные алгоритмы Конструктив математика теория чисел *1700

У Shohag есть целое число \(n\) и множество \(S\) из \(m\) различных целых чисел. Помогите ему найти лексикографически наибольший\(^{\text{∗}}\) массив целых чисел \(a_1, a_2, \ldots, a_n\) такой, что \(a_i \in S\) для каждого \(1 \le i \le n\), а также для всех пар \(1 \le i \lt j \le n\) должно выполняться \(a_{\operatorname{gcd}(i, j)} \neq \operatorname{gcd}(a_i, a_j)\)\(^{\text{†}}\). Или скажите, что таких массивов не существует.

\(^{\text{∗}}\)Массив \(a\) лексикографически больше массива \(b\) такой же длины, если \(a \ne b\), и в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент больше, чем соответствующий элемент в \(b\).

\(^{\text{†}}\)\(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 10^5\)).

Вторая строка содержит \(m\) различных целых чисел в порядке возрастания, представляющих элементы множества \(S\) (\(1 \le x \le n\) для каждого \(x \in S\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если нет решения, выведите \(-1\). Иначе выведите \(n\) целых чисел — лексикографически наибольший массив, удовлетворяющий условиям.

Примечание

В первом наборе входных данных каждый элемент массива принадлежит заданному множеству \(S = \{3, 4, 6\}\), а все пары индексов массива удовлетворяют необходимым условиям. В частности, для пары \((2, 3)\): \(a_{\operatorname{gcd}(2, 3)} = a_1 = 6\) и \(\operatorname{gcd}(a_2, a_3) = \operatorname{gcd}(4, 4) = 4\), поэтому они не равны. Существуют и другие массивы, удовлетворяющие условиям, но этот — лексикографически наибольший.

В третьем наборе входных данных массива не существует, так как возможно только \(a = [2, 2]\), но для этого массива для пары \((1, 2)\) имеем: \(a_{\operatorname{gcd}(1, 2)} = a_1 = 2\) и \(\operatorname{gcd}(a_1, a_2) = \operatorname{gcd}(2, 2) = 2\), то есть они равны, что недопустимо!

B. Раскрасить полоску

жадные алгоритмы Конструктив математика *1000

Изначально есть массив нулей \(a_1, a_2, \ldots, a_n\) длины \(n\).

Вы можете выполнять операции двух типов:

  1. Выбрать индекс \(i\) такой, что \(1 \le i \le n\) и \(a_i = 0\), после чего записать в \(a_i\) значение \(1\);
  2. Выбрать индексы \(l\) и \(r\) такие, что \(1 \le l \le r \le n\), \(a_l = 1\), \(a_r = 1\) и \(a_l + \ldots + a_r \ge \lceil\frac{r - l + 1}{2}\rceil\), после чего записать значение \(1\) в \(a_i\) для всех \(l \le i \le r\).

За какое минимальное количество операций первого типа вы можете получить массив, все элементы которого равны единице?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Обратите внимание, что ограничение на сумму \(n\) по всем наборам входных данных отсутствует.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество операций первого типа.

Примечание

В первом наборе можно выполнить операцию \(1\)-го типа с \(i = 1\).

Во втором наборе можно выполнить следующую последовательность операций:

  1. Операция \(1\)-го типа, \(i = 1\). После выполнения этой операции массив будет выглядеть так: \([1, 0]\).
  2. Операция \(1\)-го типа, \(i = 2\). После выполнения этой операции массив будет выглядеть так: \([1, 1]\).
Последовательность операций во втором тесте

В третьем наборе можно выполнить следующую последовательность операций:

  1. Операция \(1\)-го типа, \(i = 1\). После выполнения этой операции массив будет выглядеть так: \([1, 0, 0, 0]\).
  2. Операция \(1\)-го типа, \(i = 4\). После выполнения этой операции массив будет выглядеть так: \([1, 0, 0, 1]\).
  3. Операция \(2\)-го типа, \(l = 1\), \(r = 4\). На данном отрезке \(a_l + \ldots + a_r = a_1 + a_2 + a_3 + a_4 = 2\), что не меньше, чем \(\lceil\frac{r - l + 1}{2}\rceil = 2\). После выполнения этой операции массив будет выглядеть так: \([1, 1, 1, 1]\).
Последовательность операций в третьем тесте

C. Упорядоченные перестановки

битмаски жадные алгоритмы Комбинаторика Конструктив математика *1600

Рассмотрим перестановку\(^{\text{∗}}\) \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\). Введём следующую сумму\(^{\text{†}}\):

\(\)S(p) = \sum_{1 \le l \le r \le n} \min(p_l, p_{l + 1}, \ldots, p_r)\(\)

Рассмотрим все перестановки длины \(n\) с максимальным значением \(S(p)\). Необходимо вывести \(k\)-ю из них в лексикографическом\(^{\text{‡}}\) порядке, или сообщить, что их меньше \(k\).

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^{\text{†}}\)Например:

  • Для перестановки \([1, 2, 3]\), значение \(S(p)\) равно \(\min(1) + \min(1, 2) + \min(1, 2, 3) + \min(2) + \min(2, 3) + \min(3) =\) \(1 + 1 + 1 + 2 + 2 + 3 = 10\).
  • Для перестановки \([2, 4, 1, 3]\) значение \(S(p)\) равно \(\min(2) + \min(2, 4) + \min(2, 4, 1) + \min(2, 4, 1, 3) \ +\) \( \min(4) + \min(4, 1) + \min(4, 1, 3) \ +\) \(\min(1) + \min(1, 3) \ +\) \(\min(3) =\) \(2 + 2 + 1 + 1 + 4 + 1 + 1 + 1 + 1 + 3 = 17\).

\(^{\text{‡}}\)Массив \(a\) лексикографически меньше массива \(b\), если и только если выполняется одно из следующего:

  • \(a\) — префикс \(b\), но \(a \ne b\); или
  • в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент меньше, чем соответствующий элемент в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^{12}\)) — длина перестановки и номер искомой перестановки.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если подходящих перестановок меньше \(k\), выведите \(-1\).

Иначе выведите \(k\)-ю подходящую перестановку.

Примечание

Посчитаем искомую сумму для всех перестановок длины \(3\) в лексикографическом порядке:

ПерестановкаЗначение \(S(p)\)
\([1, 2, 3]\)\(10\)
\([1, 3, 2]\)\(10\)
\([2, 1, 3]\)\(9\)
\([2, 3, 1]\)\(10\)
\([3, 1, 2]\)\(9\)
\([3, 2, 1]\)\(10\)

В первом наборе необходимо вывести вторую подходящую перестановку длины \(3\). Посмотрев на таблицу, мы видим, что это перестановка \([1, 3, 2]\).

Во втором наборе необходимо вывести третью подходящую перестановку длины \(3\). Посмотрев на таблицу, мы видим, что это перестановка \([2, 3, 1]\).

D. Непростое дерево

Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное теория чисел *1900

Дано дерево с \(n\) вершинами.

Вам необходимо создать массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из различных целых чисел от \(1\) до \(2 \cdot n\). При этом для каждого ребра \(u_i \leftrightarrow v_i\) дерева значение \(|a_{u_i} - a_{v_i}|\) не должно быть простым числом.

Найдите любой массив, удовлетворяющий этим условиям, либо сообщите, что такого массива нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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 \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если массив, удовлетворяющий условиям, существует, выведите его элементы \(a_1, a_2, \ldots, a_n\). Иначе, выведите единственное число \(-1\).

Примечание

Ниже представлены возможные ответы. Вместо номеров вершин в них записаны соответствующие элементы массива \(a\).

Изображение дерева в первом наборе
Изображение дерева во втором наборе

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\).

Дерево из второго набора показано ниже:

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.

M. Selection Sort

Бинарный поиск жадные алгоритмы Структуры данных *2000

Every student enrolled in the algorithms course is required to submit an assignment this week. The task is to implement an \(O(n^2)\)-time algorithm to sort \(n\) given integers in non-decreasing order. Alice has already completed her assignment, and her implementation is shown below.

int alice_sort(int *s, int n){
for(int i = 0; i < n; ++i){
for(int j = i + 1; j < n; ++j){
if(s[i] > s[j]){
int swap = s[i];
s[i] = s[j];
s[j] = swap;
}
}
}
return 0;
}

While you have access to Alice's code, you prefer not to simply copy it. Instead, you want to use Alice's sorting function as a building block for your own solution. There are two ways as listed below you can utilize her function, but each of them can be applied at most once. The order in which these two operations are invoked can be arbitrary.

  • Prefix sort: choose a length \(i \in \{1, 2, \ldots, n\}\) and call \(\texttt{alicesort(}s, i\texttt{)}\). This sorts the first \(i\) elements in the array \(s\).
  • Suffix sort: choose a length \(i \in \{1, 2, \ldots, n\}\) and call \(\texttt{alicesort(}s+n-i, i\texttt{)}\). This sorts the last \(i\) elements in the array \(s\).

Due to the time complexity of the sorting algorithm, the cost of performing either a prefix or suffix sort is \(i^2\), where \(i\) is the length of the chosen subarray. Your goal is to determine the minimum cost to sort the input array \(s\) of \(n\) integers in non-decreasing order using Alice's function, following the rules mentioned above.

For example, Let \(s=[3,2,5,5,4,1]\). We can first perform a suffix sort of length \(4\), and the array becomes \([3,2,1,4,5,5]\). Then, we perform a prefix sort of length \(3\), and the array becomes \([1,2,3,4,5,5]\), which is a sorted array. The cost is \(4^2+3^2=25\). Here is another example, let \(s=[4,3,2,1]\). We can complete the sorting by performing only a prefix sort of length \(4\), and the cost is \(4^2=16\).

Input

The first line contains exactly one integer \(n\) which indicates the number of integers in the array \(s\). The second line contains the \(n\) integers in \(s=[s_0, s_1, \ldots, s_{n-1}]\).

  • \(1 \le n \le 10^6\)
  • For all \(i\) (\(0\le i < n\)), \(0\le s_i < 2^{31}-1\).
Output

Output an integer on a line, indicating the minimum cost to sort the input array \(s\) of \(n\) integers in non-decreasing order using Alice's function, following the rules mentioned above.

A. Жадный Монокарп

жадные алгоритмы сортировки *800

Есть \(n\) сундуков; \(i\)-й сундук изначально содержит \(a_i\) монет. Для каждого сундука вы можете выбрать любое неотрицательное (\(0\) или больше) количество монет, чтобы добавить в этот сундук, с одним ограничением: суммарное количество монет во всех сундуках должно стать не менее \(k\).

После того как вы закончите добавлять монеты в сундуки, придет жадный Монокарп, которому нужны монеты. Он будет брать сундуки по одному, и поскольку он жадный, он всегда будет выбирать сундук с максимальным количеством монет. Монокарп остановится, как только общее количество монет в сундуках, которые он забрал, станет не менее \(k\).

Вы хотите, чтобы Монокарп забрал как можно меньше монет, поэтому вам нужно добавлять монеты в сундуки таким образом, чтобы, когда Монокарп закончит забирать сундуки, у него было ровно \(k\) монет. Вычислите минимальное количество монет, которое вам нужно добавить.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 50\); \(1 \le k \le 10^7\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество монет, которое нужно добавить, чтобы, когда Монокарп закончит забирать сундуки, у него было ровно \(k\) монет. Можно показать, что при данных ограничениях задачи это всегда возможно.

Примечание

В первом примере не нужно добавлять монеты. Когда Монокарп придет, он возьмет сундук с \(4\) монетами, так что у него будет ровно \(4\) монеты.

Во втором примере вы можете добавить \(1\) монету в \(4\)-й сундук, так что, когда Монокарп придет, он возьмет сундук с \(4\) монетами, затем еще один сундук с \(4\) монетами и сундук с \(2\) монетами.

В третьем примере вы можете добавить \(3\) монеты в \(1\)-й сундук и \(5\) монет во \(2\)-й сундук.

В четвертом примере вы можете добавить \(1\) монету в \(1\)-й сундук и \(1\) монету в \(3\)-й сундук.

B. Игра с цветными шариками

жадные алгоритмы игры *900

Алиса и Боб играют в игру. У них есть \(n\) шариков, \(i\)-й из них имеет цвет \(c_i\). Игроки ходят по очереди; сначала ходит Алиса, затем Боб, затем снова Алиса, затем опять Боб и так далее.

Во время своего хода игрок должен взять один из оставшихся шариков и убрать его из игры. Если шариков больше не осталось (все \(n\) шариков были взяты), игра заканчивается.

Очки Алисы в конце игры рассчитываются следующим образом:

  • она получает \(1\) очко за каждый цвет \(x\), для которого она взяла хотя бы один шарик этого цвета;
  • дополнительно она получает \(1\) очко за каждый цвет \(x\), для которого она взяла все шарики этого цвета (конечно, учитываются только цвета, присутствующие в игре).

Например, предположим, что есть \(5\) шариков, их цвета \([1, 3, 1, 3, 4]\), и игра проходит следующим образом: Алиса берет \(1\)-й шарик, затем Боб берет \(3\)-й шарик, затем Алиса берет \(5\)-й шарик, затем Боб берет \(2\)-й шарик, и, наконец, Алиса берет \(4\)-й шарик. Тогда Алиса получает \(4\) очка: \(3\) очка за наличие хотя бы одного шарика для цветов \(1\), \(3\) и \(4\), и \(1\) очко за наличие всех шариков цвета \(4\). Обратите внимание, что эта стратегия не обязательно является оптимальной для обоих игроков.

Алиса хочет максимизировать свои очки в конце игры. Боб хочет минимизировать их. Оба игрока играют оптимально (т. е. Алиса выбирает стратегию, которая позволяет ей получить как можно больше очков, а Боб выбирает стратегию, которая минимизирует количество очков, которые может получить Алиса).

Вычислите очки Алисы в конце игры.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество шариков;
  • вторая строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета шариков.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — очки Алисы в конце игры, предполагая, что оба игрока играют оптимально.

Примечание

Во втором наборе входных данных примера цвета всех шариков различны, поэтому, независимо от того, как действуют игроки, Алиса получает \(4\) очка — у нее все шарики двух цветов и ни одного шарика третьего цвета.

В третьем наборе входных данных примера цвета всех шаров одинаковы, поэтому, независимо от того, как действуют игроки, Алиса получает \(1\) очко за то, что у нее хотя бы один (но не все) шарик цвета \(4\).

C. Спортивная рыбалка

жадные алгоритмы *1800

Алиса и Боб участвуют в соревновании по ловле рыбы! В общей сложности они поймали \(n\) рыб, пронумерованных от \(1\) до \(n\) (чем больше рыба, тем больше ее индекс). Некоторые из этих рыб были пойманы Алисой, другие — Бобом.

Их результаты будут оцениваться следующим образом. Сначала будет выбрано целое число \(m\), и все рыбы будут разделены на \(m\) непустых групп. Первая группа должна содержать несколько (по крайней мере одну) самых маленьких рыб, вторая группа — несколько (по крайней мере одну) следующих по размеру рыб и так далее. Каждая рыба должна принадлежать ровно одной группе, и каждая группа должна являться непрерывным подотрезком рыб. Обратите внимание, что нумерацию групп менять нельзя: например, рыбы в первой группе не могут быть больше рыб во второй группе, потому что первая группа содержит несколько самых маленьких рыб.

Затем каждой рыбе будет присвоено значение в зависимости от индекса ее группы: каждая рыба в первой группе получает значение, равное \(0\), каждая рыба во второй группе получает значение, равное \(1\), и так далее. Таким образом, каждая рыба в \(i\)-й группе получает значение, равное \((i-1)\).

Счет каждого участника равен суммарному значению всех рыб, которые он поймал.

Вы хотите, чтобы счет Боба превышал счет Алисы не менее чем на \(k\) очков. Какое минимальное количество групп (\(m\)) необходимо создать для разделения рыб? Если это невозможно, сообщите об этом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)).

Вторая строка содержит строку, состоящую ровно из \(n\) символов. \(i\)-й символ равен 0 (обозначает, что \(i\)-я рыба была поймана Алисой) или 1 (обозначает, что \(i\)-я рыба была поймана Бобом).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество групп, на которые нужно разделить рыб; или -1, если это невозможно.

Примечание

В первом примере вы можете разделить рыб на группы следующим образом: первые три рыбы образуют \(1\)-ю группу, последняя рыба образует \(2\)-ю группу. Тогда счет Боба будет \(1\), а счет Алисы будет \(0\).

В третьем примере вы можете разделить рыб на группы следующим образом: первая рыба образует \(1\)-ю группу, последние три рыбы образуют \(2\)-ю группу. Тогда счет Боба будет \(2\), а счет Алисы будет \(1\).

E. Пары вершин

Бинарный поиск Деревья жадные алгоритмы Перебор поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2900

Дано дерево, состоящее из \(2n\) вершин. Напомним, что деревом называется связный неориентированный граф, в котором нет циклов. На каждой вершине написано одно целое число от \(1\) до \(n\). Каждое число от \(1\) до \(n\) написано ровно на двух различных вершинах. У каждой вершины также есть стоимость — вершина \(i\) стоит \(2^i\).

Требуется выбрать в дереве такое подмножество вершин, что:

  • подмножество связно; то есть, из каждой вершины подмножества можно добраться до любой другой вершины подмножества, проходя только через вершины подмножества;
  • каждое число от \(1\) до \(n\) написано хотя бы на одной вершине подмножества.

Среди всех таких подмножеств требуется найти такое, что суммарная стоимость вершин в нем минимальна. Обратите внимание, что не требуется минимизировать количество вершин в подмножестве.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le n\)). Каждое число от \(1\) до \(n\) встречается ровно два раза.

В каждой из следующих \(2n-1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le 2n\)) — ребра дерева. Данные ребра образуют валидное дерево.

Выходные данные

В первой строке выведите одно целое число \(k\) — количество вершин в подмножестве.

Во второй строке выведите \(k\) различных целых чисел от \(1\) до \(2n\) — номера вершин в выбранном подмножестве. Вершины можно выводить в произвольном порядке.

Примечание

На данных изображениях нарисованы ответы на первые два примера. В скобках около номеров вершин подписаны числа, написанные на них.

В первом примере есть такие валидные подмножества: \([2, 4, 5]\) (стоимость равна \(2^2 + 2^4 + 2^5 = 52\)), \([2, 4, 5, 6]\) (стоимость равна \(116\)), \([1, 6, 3]\) (стоимость равна \(74\)), \([2, 6, 3]\) (стоимость равна \(76\)) и многие другие.

Во втором примере стоимость подмножества \([4, 6, 3, 1]\) равна \(90\).

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]\).

E. Преобразование матриц

битмаски графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *2300

Даны две матрицы \(A\) и \(B\) размером \(n \times m\), заполненные целыми числами от \(0\) до \(10^9\). Вы можете выполнять следующие операции над матрицей \(A\) в любом порядке любое количество раз:

  • &=: выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x \ge 0\)) и заменить каждый элемент в строке \(i\) на результат побитового И между числом \(x\) и этим элементом. Формально, для каждого \(j \in [1, m]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ & } x\);
  • |=: выбрать два целых числа \(j\) и \(x\) (\(1 \le j \le m\), \(x \ge 0\)) и заменить каждый элемент в столбце \(j\) на результат побитового ИЛИ между числом \(x\) и этим элементом. Формально, для каждого \(i \in [1, n]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ | } x\);

В разных операциях можно выбирать разные значения \(x\).

Определите, возможно ли преобразовать матрицу \(A\) в матрицу \(B\) с помощью нескольких (возможно, нуля) указанных операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных задается следующим образом:

  • первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\); \(n \cdot m \le 10^3\)) — размеры матриц \(A\) и \(B\);
  • в следующих \(n\) строках содержится описание матрицы \(A\), где \(i\)-я строка содержит \(m\) целых чисел \(A_{i,1}, A_{i,2}, \dots, A_{i,m}\) (\(0 \le A_{i,j} \le 10^9\));
  • в следующих \(n\) строках содержится описание матрицы \(B\), где \(i\)-я строка содержит \(m\) целых чисел \(B_{i,1}, B_{i,2}, \dots, B_{i,m}\) (\(0 \le B_{i,j} \le 10^9\)).
Выходные данные

Для каждого набора входных данных выведите Yes, если можно преобразовать \(A\) в \(B\), или No в противном случае. Каждую букву можно выводить в любом регистре.

Примечание

Рассмотрим второй набор входных данных и приведем последовательность операций, позволяющих получить из матрицы \(A\) матрицу \(B\):

Изначально матрица выглядит так:

\(\begin{bmatrix} 10&10\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 1\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 2\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 0&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 1\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&0\\ 21&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 2\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&21\\ 21&21\\ \end{bmatrix}\)

Таким образом, мы преобразовали матрицу \(A\) в матрицу \(B\).

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.

C. Сложная задача

жадные алгоритмы математика *800

Ball — преподаватель в Университете Пейперфолда. Места в его классе расположены в \(2\) ряда по \(m\) мест в каждом.

Ball обучает \(a + b + c\) обезьян, и он хочет разместить как можно больше обезьян на местах. Ball знает, что \(a\) из них хотят сидеть только в ряду \(1\), \(b\) из них хотят сидеть только в ряду \(2\), а \(c\) из них не имеют предпочтений. На каждом месте может сидеть только одна обезьяна, и предпочтения каждой обезьяны должны быть соблюдены, если она сидит.

Какое максимальное количество обезьян может посадить Ball?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит четыре целых числа \(m\), \(a\), \(b\) и \(c\) (\(1 \leq m, a, b, c \leq 10^8\)).

Выходные данные

Для каждого набора входных данных выведите максимальное количество обезьян, которые вы можете рассадить по местам.

Примечание

Во втором наборе входных данных \(6\) обезьян хотят сидеть в первом ряду, но доступно только \(3\) места. Обезьяны, которые не имеют предпочтений, и обезьяны, которые предпочитают сидеть во втором ряду, могут сидеть во втором ряду вместе. Таким образом, ответ равен \(3+2=5\).

D. Задача посложнее

жадные алгоритмы Конструктив математика *1100

Дана последовательность положительных целых чисел. Положительное целое число называется модой последовательности, если оно встречается максимальное количество раз среди всех положительных целых чисел. Например, модой последовательности \([2,2,3]\) является \(2\), а для последовательности \([9,9,8,8,7,7]\) может считаться модой любое из чисел \(9\), \(8\) или \(7\).

Вы дали НЛО массив \(a\) длиной \(n\). Чтобы поблагодарить вас, НЛО решает построить другой массив \(b\) длиной \(n\) так, чтобы \(a_i\) была модой последовательности \([b_1, b_2, \ldots, b_i]\) для всех \(1 \leq i \leq n\).

Однако НЛО не знает, как построить массив \(b\), поэтому вы должны ей помочь. Обратите внимание, что для вашего массива должно выполняться условие \(1 \leq b_i \leq n\) для всех \(1 \leq i \leq n\).

Входные данные

Первая строка содержит \(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\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)) в новой строке. Можно показать, что массив \(b\) всегда можно построить. Если существует несколько возможных массивов, вы можете вывести любой из них.

Примечание

Давайте проверим корректность нашего образца вывода в наборе входных данных \(2\)

  • При \(i = 1\), \(1\) является единственной возможной модой для \([1]\).
  • При \(i = 2\), \(1\) является единственной возможной модой для \([1, 1]\).
  • При \(i = 3\), \(1\) является единственной возможной модой для \([1, 1, 2]\).
  • При \(i = 4\), \(1\) или \(2\) могут считаться модой для \([1, 1, 2, 2]\). Поскольку \(a_i = 2\), этот массив является допустимым.

E. Безумная задача

Бинарный поиск жадные алгоритмы математика реализация теория чисел *1300

Даны пять целых чисел \(k\), \(l_1\), \(r_1\), \(l_2\) и \(r_2\). Вам нужно помочь Wave посчитать количество упорядоченных пар \((x, y)\), таких что выполняются все следующие условия:

  • \(l_1 \leq x \leq r_1\).
  • \(l_2 \leq y \leq r_2\).
  • Существует неотрицательное целое число \(n\), такое что \(\frac{y}{x} = k^n\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит пять целых чисел \(k\), \(l_1\), \(r_1\), \(l_2\) и \(r_2\) (\(2 \leq k \leq 10^9, 1 \leq l_1 \leq r_1 \leq 10^9, 1 \leq l_2 \leq r_2 \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите количество подходящих упорядоченных пар \((x, y)\) на новой строке.

Примечание

В третьем наборе входных данных подходящие упорядоченные пары следующие:

  • \((5,15)\)
  • \((5,45)\)
  • \((6,18)\)
  • \((6,54)\)
  • \((7,21)\)
  • \((7,63)\)

В четвертом наборе входных данных единственная допустимая упорядоченная пара это \((1,1\,000\,000\,000)\)

A. Scrambled Scrabble

жадные алгоритмы Перебор *1700

You are playing a word game using a standard set of \(26\) uppercase English letters: AZ. In this game, you can form vowels and consonants as follows.

  • The letters A, E, I, O, and U can only form a vowel.
  • The letter Y can form either a vowel or a consonant.
  • Each of the remaining letters other than A, E, I, O, U, and Y can only form a consonant.
  • The string NG can form a single consonant when concatenated together.

Denote a syllable as a concatenation of a consonant, a vowel, and a consonant in that order. A word is a concatenation of one or more syllables.

You are given a string \(S\) and you want to create a word from it. You are allowed to delete zero or more letters from \(S\) and rearrange the remaining letters to form the word. Find the length of the longest word that can be created, or determine if no words can be created.

Input

A single line consisting of a string \(S\) (\(1 \leq |S| \leq 5000\)). The string \(S\) consists of only uppercase English letters.

Output

If a word cannot be created, output 0. Otherwise, output a single integer representing the length of longest word that can be created.

Note

Explanation for the sample input/output #1

A possible longest word is JAKCARTAP, consisting of the syllables JAK, CAR, and TAP.

Explanation for the sample input/output #2

The whole string \(S\) is a word consisting of one syllable which is the concatenation of the consonant NG, the vowel E, and the consonant NG.

Explanation for the sample input/output #3

The whole string \(S\) is a word consisting of one syllable which is the concatenation of the consonant Y, the vowel Y, and the consonant Y.

Explanation for the sample input/output #4

The whole string \(S\) is a word consisting of two syllables: DAN and GAN.

C. Saraga

жадные алгоритмы Строки *1400

The word saraga is an abbreviation of sarana olahraga, an Indonesian term for a sports facility. It is created by taking the prefix sara of the word sarana and the suffix ga of the word olahraga. Interestingly, it can also be created by the prefix sa of the word sarana and the suffix raga of the word olahraga.

An abbreviation of two strings \(S\) and \(T\) is interesting if there are at least two different ways to split the abbreviation into two non-empty substrings such that the first substring is a prefix of \(S\) and the second substring is a suffix of \(T\).

You are given two strings \(S\) and \(T\). You want to create an interesting abbreviation of strings \(S\) and \(T\) with minimum length, or determine if it is impossible to create an interesting abbreviation.

Input

The first line consists of a string \(S\) (\(1 \leq |S| \leq 200\,000\)).

The second line consists of a string \(T\) (\(1 \leq |T| \leq 200\,000\)).

Both strings \(S\) and \(T\) only consist of lowercase English letters.

Output

If it is impossible to create an interesting abbreviation, output -1.

Otherwise, output a string in a single line representing an interesting abbreviation of strings \(S\) and \(T\) with minimum length. If there are multiple solutions, output any of them.

Note

Explanation for the sample input/output #1

You can split saga into s and aga, or sa and ga. The abbreviation saraga is interesting, but saga has a smaller length.

Explanation for the sample input/output #2

The abbreviation belhijau is also interesting with minimum length, so it is another valid solution.

A. Переставьте столбцы и найдите путь

жадные алгоритмы сортировки *1200

Дана матрица, состоящая из \(2\) строк и \(n\) столбцов. Строки нумеруются от \(1\) до \(2\) сверху вниз; столбцы нумеруются от \(1\) до \(n\) слева направо. Обозначим ячейку на пересечении \(i\)-й строки и \(j\)-го столбца как \((i,j)\). Каждая ячейка содержит одно целое число; изначально число в ячейке \((i,j)\) равно \(a_{i,j}\).

Вы можете выполнять следующую операцию любое количество раз (возможно, ноль):

  • выбрать два столбца и поменять их местами (т. е. выбрать два целых числа \(x\) и \(y\) такие, что \(1 \le x < y \le n\), затем поменять местами \(a_{1,x}\) с \(a_{1,y}\), а также \(a_{2,x}\) с \(a_{2,y}\)).

После выполнения операций вам нужно выбрать путь от ячейки \((1,1)\) до ячейки \((2,n)\). Для каждой ячейки \((i,j)\) на пути, кроме последней, следующая ячейка на пути должна быть либо \((i+1,j)\), либо \((i,j+1)\). Разумеется, путь не может выходить за пределы матрицы.

Стоимость пути — это сумма всех чисел во всех \((n+1)\) ячейках, принадлежащих пути. Вам нужно выполнить операции и выбрать путь так, чтобы его стоимость была максимальной.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество столбцов в матрице;
  • вторая строка содержит \(n\) целых чисел \(a_{1,1}, a_{1,2}, \ldots, a_{1,n}\) (\(-10^5 \le a_{i,j} \le 10^5\)) — элементы первой строки матрицы;
  • третья строка содержит \(n\) целых чисел \(a_{2,1}, a_{2,2}, \ldots, a_{2,n}\) (\(-10^5 \le a_{i,j} \le 10^5\)) — элементы второй строки матрицы.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную стоимость пути, которую вы можете получить.

Примечание

Ниже приведены объяснения первых трех наборов входных данных из примера. Левая матрица — это матрица, заданная во входных данных, правая — состояние матрицы после нескольких (возможно, нуля) перестановок столбцов. Оптимальный путь выделен зеленым цветом.

B. В конец со штрафом

Бинарный поиск жадные алгоритмы сортировки Структуры данных *1600

Вам дан массив целых чисел \(a\) длиной \(n\). Вы можете выполнять следующую операцию ноль или более раз:

  • За одну операцию вы выбираете индекс \(i\) (\(1 \le i \le n\)), присваиваете \(a_i := a_i + 1\), и затем перемещаете \(a_i\) в конец массива (в самую правую позицию). Например, если \(a = [3, 5, 1, 9]\), и вы выбрали \(i = 2\), массив станет \([3, 1, 9, 6]\).

Найдите лексикографически наименьший\(^{\text{∗}}\) массив, который вы можете получить, выполняя эти операции.

\(^{\text{∗}}\)Массив \(c\) лексикографически меньше массива \(d\), если и только если выполняется одно из следующего:

  • \(c\) — префикс \(d\), но \(c \ne d\); или
  • в первой позиции, где \(c\) и \(d\) различны, в массиве \(c\) элемент меньше, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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^9\)), элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьший массив, который вы можете получить.

C. Искатели приключений

Бинарный поиск жадные алгоритмы сортировки Структуры данных Тернарный поиск *2100

Однажды четверо римских торговцев встретились в одном из римских мансионов, чтобы обсудить свои торговые планы. У торговцев была следующая проблема: торговали они одним и тем же видом товара, поэтому, если они занимались торговлей в одном и том же городе, неизбежно терпели убытки. Было решено распределить города, в которых будет вестись торговля, между собой.

Карту Рима можно в этой задаче представить как плоскость, на которой в некоторых местах отмечены точки — города Римской империи.

Торговцы хотят выбрать некоторую разделяющую точку \((x_0, y_0)\). Затем в городе с координатами \((x_i, y_i)\) будет торговать только

  • первый торговец, если \(x_0 \le x_i\) и \(y_0 \le y_i\);
  • второй торговец, если \(x_0 > x_i\) и \(y_0 \le y_i\);
  • третий торговец, если \(x_0 \le x_i\) и \(y_0 > y_i\);
  • четвертый торговец, если \(x_0 > x_i\) и \(y_0 > y_i\).

Торговцы хотят выбрать точку \((x_0, y_0)\) так, чтобы максимизировать минимальное количество городов, которое достанется кому-либо из них торговцев (то есть максимально честно). Помогите им найти такую точку.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(4 \le n \le 10^5\)) — количество городов на карте.

Далее идут \(n\) строк, в каждой из которых записаны два целых числа \(x_i, y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты городов.

Обратите внимание, что некоторые точки могут совпадать. Это связано с тем, что некоторые города могут находиться настолько близко, что их невозможно разделить на карте в заданном масштабе.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

В первой строке выведите одно целое число \(k\) (\(0 \le k \le \frac{n}{4}\)) — максимально возможное количество городов, которое достанется каждому торговцу.

Во второй строке выведите два целых числа \(x_0\) и \(y_0\) (\(|x_0|, |y_0| \le 10^9\)) — координаты разделяющей точки. Если подходящих точек может быть несколько, то разрешается вывести любую из них.

E1. Хеопс и контест (простая версия)

жадные алгоритмы Конструктив *2900

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии \(m\) равно \(2\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

В Древнем Египте проходит соревнование по решению задач с \(n\) участниками, пронумерованными от \(1\) до \(n\). Каждый участник представляет определенный город; города пронумерованы от \(1\) до \(m\). Из каждого города есть как минимум один участник.

У \(i\)-го участника есть сила \(a_i\), специализация \(s_i\) и мудрость \(b_i\), при этом \(b_i \ge a_i\). Каждая задача в соревновании будет иметь некоторую сложность \(d\) и уникальную тему \(t\). \(i\)-й участник решит задачу, если

  • \(a_i \ge d\), т.е. его сила не меньше сложности задачи, или
  • \(s_i = t\), и \(b_i \ge d\), т.е. его специализация соответствует теме задачи, и его мудрость не меньше сложности задачи.

Хеопс хочет выбрать задачи таким образом, чтобы каждый участник из города \(i\) решил строго больше задач, чем каждый участник из города \(j\), для всех \(i < j\).

Пожалуйста, найдите набор из не более чем \(5n\) задач, где темы всех задач попарно различны, чтобы воля Хеопса была удовлетворена, или укажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\), \(m\) (\(2 \mathbf{=} m \le n \le 3 \cdot {10}^5\)) — количество участников и количество городов.

Следующие \(n\) строк описывают участников. \(i\)-я строка содержит три целых числа — \(a_i\), \(b_i\), \(s_i\) (\(0 \le a_i, b_i, s_i \le {10}^9\), \(a_i \le b_i\)) — силу, мудрость и специализацию \(i\)-го участника соответственно.

Следующие \(m\) строк описывают города. В \(i\)-й строке первое число является целым \(k_i\) (\(1 \le k_i \le n\)) — количество участников из \(i\)-го города. За ним следуют \(k_i\) целых числа \(q_{i, 1}, q_{i, 2}, \ldots, q_{i, k_i}\) — (\(1 \le q_{i, j} \le n\), \(1 \le j \le k_i\)) — индексы участников из этого города. Гарантируется, что каждый участник упоминается ровно один раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Если существует набор задач, который удовлетворяет условиям Хеопса, то в первой строке выведите одно целое число \(p\) (\(1 \le p \le 5n\)) — количество задач в вашем решении.

Затем выведите \(p\) строк, каждая из которых содержит два целых числа \(d\) и \(t\) (\(0 \le d, t \le {10}^9\)) — сложность и тема соответствующей задачи. Темы должны быть различными.

Если нет набора задач, который соответствует желаниям Хеопса, выведите \(-1\) вместо этого.

E2. Хеопс и контест (сложная версия)

жадные алгоритмы реализация *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии \(m\) произвольно. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

В Древнем Египте проходит соревнование по решению задач с \(n\) участниками, пронумерованными от \(1\) до \(n\). Каждый участник представляет определенный город; города пронумерованы от \(1\) до \(m\). Из каждого города есть как минимум один участник.

У \(i\)-го участника есть сила \(a_i\), специализация \(s_i\) и мудрость \(b_i\), при этом \(b_i \ge a_i\). Каждая задача в соревновании будет иметь некоторую сложность \(d\) и уникальную тему \(t\). \(i\)-й участник решит задачу, если

  • \(a_i \ge d\), т.е. его сила не меньше сложности задачи, или
  • \(s_i = t\), и \(b_i \ge d\), т.е. его специализация соответствует теме задачи, и его мудрость не меньше сложности задачи.

Хеопс хочет выбрать задачи таким образом, чтобы каждый участник из города \(i\) решил строго больше задач, чем каждый участник из города \(j\), для всех \(i < j\).

Пожалуйста, найдите набор из не более чем \(5n\) задач, где темы всех задач попарно различны, чтобы воля Хеопса была удовлетворена, или укажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\), \(m\) (\(2 \le m \le n \le 3 \cdot {10}^5\)) — количество участников и количество городов.

Следующие \(n\) строк описывают участников. \(i\)-я строка содержит три целых числа — \(a_i\), \(b_i\), \(s_i\) (\(0 \le a_i, b_i, s_i \le {10}^9\), \(a_i \le b_i\)) — силу, мудрость и специализацию \(i\)-го участника соответственно.

Следующие \(m\) строк описывают города. В \(i\)-й строке первое число является целым \(k_i\) (\(1 \le k_i \le n\)) — количество участников из \(i\)-го города. За ним следуют \(k_i\) целых числа \(q_{i, 1}, q_{i, 2}, \ldots, q_{i, k_i}\) — (\(1 \le q_{i, j} \le n\), \(1 \le j \le k_i\)) — индексы участников из этого города. Гарантируется, что каждый участник упоминается ровно один раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Если существует набор задач, который удовлетворяет условиям Хеопса, то в первой строке выведите одно целое число \(p\) (\(1 \le p \le 5n\)) — количество задач в вашем решении.

Затем выведите \(p\) строк, каждая из которых содержит два целых числа \(d\) и \(t\) (\(0 \le d, t \le {10}^9\)) — сложность и тема соответствующей задачи. Темы должны быть различными.

Если нет набора задач, который соответствует желаниям Хеопса, выведите \(-1\) вместо этого.

F1. Яндексовая клинопись (простая версия)

жадные алгоритмы Конструктив Структуры данных *3300

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии в шаблоне нет знаков вопроса. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

В этой версии задачи в шаблоне нет знаков вопроса.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

Операции применяются сверху вниз, слева направо. После вставки очередной тройки символов в получившейся строке не должно быть двух подряд идущих одинаковых символов.

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

F2. Яндексовая клинопись (сложная версия)

жадные алгоритмы Конструктив реализация Структуры данных *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии нет ограничений на количество знаков вопроса. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

В этой версии задачи количество знаков вопроса может быть произвольным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X» и «?».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

Операции применяются сверху вниз, слева направо. После вставки очередной тройки символов в получившейся строке не должно быть двух подряд идущих одинаковых символов.

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

B. Замените символ

жадные алгоритмы Комбинаторика Перебор Строки *900

Вам дана строка \(s\) длиной \(n\), состоящая только из строчных латинских букв.

Вы должны сделать ровно одну операцию следующего вида:

  • Выбрать любые два индекса \(i\) и \(j\) (\(1 \le i, j \le n\)). Вы можете выбрать \(i = j\).
  • Установить \(s_i := s_j\).

Вам нужно минимизировать количество различных перестановок\(^\dagger\) строки \(s\). Выведите любую строку с наименьшим количеством различных перестановок после выполнения ровно одной операции.

\(^\dagger\) Перестановка строки — это расположение её символов в любом порядке. Например, «bac» является перестановкой «abc», но «bcc» — нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 500\)). Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длиной \(n\). Строка состоит только из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите требуемую строку \(s\) после выполнения ровно одной операции. Если есть несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы можем получить следующие строки за одну операцию: «abc», «bbc», «cbc», «aac», «acc», «aba» и «abb».

Строка «abc» имеет \(6\) различных перестановок: «abc», «acb», «bac», «bca», «cab», и «cba».

Строка «cbc» имеет \(3\) различных перестановки: «bcc», «cbc», и «ccb», что является наименьшим из всех получаемых строк. На самом деле, все получаемые строки, кроме «abc», имеют \(3\) перестановки, так что любая из них будет принята.

A. Кевин и кодовый замок

жадные алгоритмы математика Перебор реализация теория чисел *800

Кевин попал из-за Грейс в ловушку в Прибрежной деревне. На выходе из деревни находится кодовый замок, который можно открыть только в том случае, если Кевин его разгадает.

В начале на кодовом замке написано целое число \( x \), и Кевин может ноль или больше раз выполнить любую из следующих двух операций:

  1. Если \( x \neq 33 \), он может выбрать две последовательные цифры \( 3 \) из \( x \) и удалить их одновременно. Например, если \( x = 13\,323 \), он может удалить вторую и третью \( 3 \), изменив \( x \) на \( 123 \).
  2. Если \( x \geq 33 \), он может изменить \( x \) на \( x - 33 \). Например, если \( x = 99 \), он может выбрать эту операцию, чтобы изменить \( x \) на \( 99 - 33 = 66 \).

Когда значение \( x \) на кодовом замке становится \( 0 \), Кевин может открыть замок и сбежать из деревни. Пожалуйста, определите, возможно ли Кевин открыть кодовый замок и сбежать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^4\)).

Единственная строка каждого набора содержит положительное целое число \(x\) (\(1\leq x\leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите «YES», если Кевин может открыть кодовый замок и сбежать, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Решение в первом примере: \(165\xrightarrow{-33}132\xrightarrow{-33}99\xrightarrow{-33}66\xrightarrow{-33}33\xrightarrow{-33}0\).

Решение во втором примере: \(6369\xrightarrow{-33}6{\color{red}{33}}6\xrightarrow{\text{удалить «33»}}66\xrightarrow{-33}33\xrightarrow{-33}0\).

Для третьего набора можно доказать, что, независимо от выполняемых операций, \(666\) не может быть преобразовано в \(0\).

B. Кевин и перестановка

жадные алгоритмы Конструктив *900

Кевин — мастер задач, связанных с перестановками. Вы прогуливаетесь с Кевин в Темном лесу, и во время досуга он хочет задать вам следующий вопрос.

Даны два положительных целых числа \( n \) и \( k \), постройте перестановку\(^{\text{∗}}\) \( p \) длины \( n \), чтобы минимизировать сумму минимальных значений всех подмассивов\(^{\text{†}}\) длины \( k \). Формально, вам нужно минимизировать

\(\) \sum_{i=1}^{n-k+1}\left( \min_{j=i}^{i+k-1} p_j\right). \(\)

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^{\text{†}}\)Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца. Два подмассива считаются различными, если различаются множества позиций удаленных элементов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^3\)).

Единственная строка каждого набора содержит два целых числа \( n \) и \( k \) (\( 1\le k\le n\le 10^5 \)).

Гарантируется, что сумма \( n \) по всем наборам не превышает \( 10^5 \).

Выходные данные

Для каждого набора выведите \( n \) целых чисел в одной строке — перестановку \( p \), которую вы построили.

Если есть несколько ответов, вы можете вывести любой из них.

Примечание

В первом наборе, для \( k=2 \), рассмотрим все подмассивы длины \( 2 \): минимальное значение \( p_1,p_2 \) равно \( 1 \), минимальное значение \( p_2,p_3 \) равно \( 1 \), и минимальное значение \( p_3,p_4 \) равно \( 2 \). Сумма \( 1+1+2=4 \) является наименьшей среди всех возможных перестановок.

Во втором наборе все подмассивы длины \( 1 \) имеют минимальные значения \( 5, 2, 1, 6, 4, 3 \), и сумма \( 5+2+1+6+4+3=21 \) доказано является наименьшей.

C. Кевин и бинарные строки

битмаски жадные алгоритмы Перебор реализация Строки *1200

Кевин обнаружил бинарную строку \(s\), которая начинается с 1 и передал её вам. Ваша задача — выбрать две непустые подстроки\(^{\text{∗}}\) строки \(s\) (которые могут пересекаться), чтобы максимизировать значение XOR этих двух подстрок.

XOR двух бинарных строк \(a\) и \(b\) определяется как результат операции \(\oplus\), примененной к двум числам, полученным путем представления \(a\) и \(b\) как бинарных чисел, где самый левый бит является старшим. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ (XOR).

Выбранные вами строки могут содержать ведущие нули.

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов с начала и нескольких (возможно, ни одного или всех) символов с конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^3\)).

Единственная строка каждого набора содержит бинарную строку \(s\), которая начинается с 1 (\(1\le\lvert s\rvert\le 5000\)).

Гарантируется, что сумма \(\lvert s\rvert\) по всем наборам не превышает \(5000\).

Выходные данные

Для каждого тестового случая выведите четыре целых числа \(l_1, r_1, l_2, r_2\) (\(1 \le l_1 \le r_1 \le |s|\), \(1 \le l_2 \le r_2 \le |s|\)) — в случае если две подстроки, которые вы выбрали, это \(s_{l_1} s_{l_1 + 1} \ldots s_{r_1}\) и \(s_{l_2} s_{l_2 + 1} \ldots s_{r_2}\).

Если есть несколько решений, выведите любое из них.

Примечание

В первом наборе мы можем выбрать \( s_2=\texttt{1} \) и \( s_1 s_2 s_3=\texttt{111} \), и \( \texttt{1}\oplus\texttt{111}=\texttt{110} \). Можно доказать, что невозможно получить больший результат. Кроме того, \( l_1=3\), \(r_1=3\), \(l_2=1\), \(r_2=3 \) также является допустимым решением.

Во втором наборе, \( s_1 s_2 s_3=\texttt{100} \), \( s_1 s_2 s_3 s_4=\texttt{1000} \), результат \( \texttt{100}\oplus\texttt{1000}=\texttt{1100} \), что является максимумом.

D. Кевин и воспоминания о соревнованиях

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

Кевин раньше попадал в воспоминания Рио, и в воспоминаниях Рио когда-то проводились серии соревнований. Кевин помнит всех участников и все задачи соревнований того времени, но он забыл конкретные раунды, распределение задач и точные рейтинги.

Всего есть \( m \) задач, при этом \( i \)-я задача имеет сложность \( b_i \). Пусть каждое соревнование состоит из \( k \) задач, в результате чего получается \( \lfloor \frac{m}{k} \rfloor \) соревнований. Это означает, что вы выбираете \( \lfloor \frac{m}{k} \rfloor \cdot k \) задач для соревнований в любом сочетании, при этом каждая задача выбирается не более одного раза, а оставшиеся \(m\bmod k\) задач остаются неиспользованными. Например, если \(m = 17\) и \(k = 3\), вы должны создать ровно \(5\) соревнований, состоящих из \(3\) задач каждое, и ровно \(2\) задачи останутся неиспользованными.

В соревнованиях участвовало всего \( n \) участников, причем Кевин был \(1\)-м участником. У \( i \)-го участника рейтинг \( a_i \). Во время соревнований участник решает все задачи, сложность которых не превышает его рейтинг, то есть \( i \)-й участник решает \( j \)-ю задачу тогда и только тогда, когда \( a_i \geq b_j \). В каждом соревновании ранг Кевина равен одному плюс количеству участников, которые решают больше задач, чем он.

Для каждого \( k = 1, 2, \ldots, m \) Кевин хочет знать минимальную сумму его рангов по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Другими словами, для некоторого значения \(k\), после выбора задач для каждого соревнования, вы вычисляете ранг Кевина в каждом соревновании и суммируете эти ранги по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Ваша цель — минимизировать это значение.

Обратите внимание, что соревнования для разных значений \(k\) независимы. Это означает, что для разных значений \(k\) вы можете независимо выбирать распределение задач в соревнованиях.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 5\cdot 10^4 \)).

Первая строка каждого набора содержит два целых числа \( n \) и \( m \) (\( 1 \le n, m \leq 3\cdot 10^5 \)) — количество участников и количество задач.

Вторая строка каждого набора содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 0 \le a_i \le 10^9 \)) — рейтинг каждого участника.

Третья строка каждого набора содержит \( m \) целых чисел \( b_1, b_2, \ldots, b_m \) (\( 0 \le b_i \le 10^9 \)) — сложность каждой задачи.

Гарантируется, что сумма \( n \) и сумма \( m \) по всем тестам не превышают \( 3 \cdot 10^5 \).

Выходные данные

Для каждого набора выведите \(m\) целых чисел — минимальную сумму рангов Кевина для каждого \( k = 1, 2, \ldots, m\).

Примечание

Для первого набора:

Когда \(k=1\), поскольку каждое соревнование содержит только одну задачу, распределение на самом деле уникально. Например, в соревновании, которое включает только третью задачу (которая имеет сложность \(4\)), все участники, кроме \(2\)-го, могут ее решить. Поскольку никто не решает строго больше задач, чем Кевин, его ранг в этом соревновании равен \(1\). Аналогично, в всех \(4\) соревнованиях ранги Кевина равны \(1,3,1,2\), и сумма равна \(7\).

Когда \(k=2\), один из оптимальных способов — выбрать \(1\)-ю и \(3\)-ю задачи для формирования одного соревнования, а \(2\)-ю и \(4\)-ю — для другого. В первом соревновании \(4\) участника соответственно решают \(2,1,2,2\) задачи, поэтому ранг Кевина равен \(1\); во втором они соответственно решают \(0,0,2,1\), поскольку \(2\) участника (\(3\)-й и \(4\)-й) решают больше задач, чем Кевин, его ранг равен \(1+2=3\). Таким образом, ответ равен \(1+3=4\). Можно доказать, что нет способа достичь меньшей суммы.

Когда \(k=3\), мы можем просто выбрать \(1\)-ю, \(3\)-ю и \(4\)-ю задачи, чтобы сделать соревнование, и ранг Кевина равен \(2\), что является оптимальным.

Когда \(k=4\), поскольку есть только одно соревнование, распределение также уникально, и ранг Кевина равен \(3\).

E. Кевин и двудольный граф

графы жадные алгоритмы Конструктив *2000

Оружейный завод нуждается в шаблоне дизайна постера и обращается за помощью к Кевину.

Шаблон дизайна постера — это двудольный граф с \( 2n \) вершинами в левой части и \( m \) вершинами в правой части, где существует ребро между каждой вершиной в левой части и каждой вершиной в правой части, в результате чего получается в общей сложности \( 2nm \) рёбер.

Кевин должен раскрасить каждое ребро в положительное целое число из отрезка \( [1, n] \). Шаблон дизайна постера является хорошим, если в двудольном графе нет одноцветных циклов\(^{\text{∗}}\).

Кевин нуждается в вашей помощи в построении хорошего двудольного графа или в том, чтобы сообщить ему, если это невозможно.

\(^{\text{∗}}\)Одноцветным циклом называется простой цикл, в котором все рёбра окрашены в один и тот же цвет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 100 \)).

Единственная строка каждого набора входных данных содержит два целых числа \( n \) и \( m \) (\( 1 \le n, m \leq 10^3 \)) — двудольный граф имеет \( 2n \) вершин в левой части и \( m \) вершин в правой части.

Гарантируется, что сумма \( n \) и сумма \( m \) по всем наборам входных данных не превышают \( 10^3 \).

Выходные данные

Для каждого набора входных данных, если решения нет, выведите «No».

В противном случае выведите «Yes», а затем выведите \( 2n \) строк, каждая из которых содержит \( m \) положительных целых чисел. \( j \)-е целое число в \( i \)-й строке представляет цвет ребра между \( i \)-й вершиной в левой части и \( j \)-й вершиной в правой части.

Если есть несколько ответов, вы можете вывести любой из них.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Для первого набора входных данных граф показан следующим образом:

Для второго набора входных данных можно доказать, что нет допустимого решения.

A. MEX-уничтожение

жадные алгоритмы реализация *800

Дракон Эвирир пробрался в замок волшебника и нашел таинственное приспособление. Врожденные инстинкты дракона заставили его поиграть с приспособлением (уничтожить его)...

Дракон Эвирир нашел массив длины \(n\) из целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию он может выбрать непустой подмассив\(^{\text{∗}}\) \(b\) массива \(a\) и заменить его одним числом — значением \(\operatorname{mex}(b)\)\(^{\text{†}}\). Он хочет использовать эту операцию некоторое количество раз, чтобы в результате массив \(a\) состоял только из нулей. Можно доказать, что это всегда возможно при заданных ограничениях.

Каково минимальное количество операций, необходимое для достижения цели?

\(^{\text{∗}}\)Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{†}}\)Наименьшее исключенное (MEX) набора чисел \(f_1, f_2, \ldots, f_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(f\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел, разделенных пробелом — массив \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке минимальное количество операций, необходимых для получения массива \(a\), который содержит только нули.

Примечание

В первом наборе входных данных Эвирир может выбрать подмассив \(b = [1, 2, 3]\) и заменить его на \(\operatorname{mex}(1, 2, 3) = 0\), изменив \(a\) с \([0, \underline{1, 2, 3}]\) на \([0, 0]\) (где выбранный подмассив подчеркнут). Следовательно, ответ равен \(1\).

Во втором наборе входных данных \(a\) уже состоит только из \(0\), поэтому выполнение операций не требуется.

В третьем наборе входных данных Эвирир может изменять \(a\) следующим образом: \([1, \underline{0, 1, 0, 1}] \to [\underline{1, 2}] \to [0]\), так как \(\operatorname{mex}(0, 1, 0, 1) = 2\) и \(\operatorname{mex}(1, 2) = 0\).

В четвертом наборе входных данных Эвирир может выбрать в качестве \(b\) весь массив \(a\), изменив значение \(a\) с \([\underline{3, 1, 4, 1, 5}]\) на \([0]\).

C. MEX-цикл

жадные алгоритмы Конструктив Перебор реализация *1500

У дракона Эвирира много друзей. У него есть целых 3 друга! Это на одного больше, чем у среднестатистического дракона.

Вам даны целые числа \(n\), \(x\), и \(y\). В кругу сидят \(n\) драконов, пронумерованных целыми числами \(1, 2, \ldots, n\). Для каждого \(i\) (\(1 \le i \le n\)) дракон номер \(i\) дружит с драконами \(i - 1\) и \(i + 1\) (здесь под номером \(0\) подразумевается дракон \(n\), а под номером \(n + 1\) подразумевается дракон \(1\)). Кроме того, драконы \(x\) и \(y\) дружат друг с другом (если они уже друзья, то ничего не меняется). Обратите внимание, что любая дружба является взаимной.

Выведите \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) таких, чтобы для каждого дракона \(i\) (\(1 \le i \le n\)) выполнялось следующее:

  • Пусть \(f_1, f_2, \ldots, f_k\) — друзья дракона \(i\). Тогда \(a_i = \operatorname{mex}(a_{f_1}, a_{f_2}, \ldots, a_{f_k})\).\(^{\text{∗}}\)

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_m\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(x\), \(y\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le x < y \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)), которые удовлетворяют условию. Если существует несколько решений, выведите любое из них. Можно доказать, что при ограничениях задачи решение с \(0 \le a_i \le 10^9\) всегда существует.

Примечание

Для первого набора входных данных:

  • \(i = 1\): Друзья дракона \(1\) — драконы \(2, 3, 5\). \(\operatorname{mex}(a_2, a_3, a_5) = \operatorname{mex}(2, 1, 1) = 0 = a_1\), так что условие для дракона \(1\) выполнено.
  • \(i = 2\): Друзья дракона \(2\) — это драконы \(1, 3\). \(\operatorname{mex}(a_1, a_3) = \operatorname{mex}(0, 1) = 2 = a_2\).
  • \(i = 3\): Друзья дракона \(3\) — это драконы \(1, 2, 4\). \(\operatorname{mex}(a_1, a_2, a_4) = \operatorname{mex}(0, 2, 0) = 1 = a_3\).
  • \(i = 4\): Друзья дракона \(4\) — это драконы \(3, 5\). \(\operatorname{mex}(a_3, a_5) = \operatorname{mex}(1, 1) = 0 = a_4\).
  • \(i = 5\): Друзья дракона \(5\) — это драконы \(1, 4\). \(\operatorname{mex}(a_1, a_4) = \operatorname{mex}(0, 0) = 1 = a_5\).

B. Маленький Слоник и сортировка

жадные алгоритмы Перебор *1400

Маленький Слоник любит сортировки.

У него есть массив a из n целых чисел. Пусть элементы массива пронумерованы от 1 до n, тогда элемент номер i обозначим ai. За один шаг Маленький Слоник может выбрать произвольную пару целых чисел l и r (1 ≤ l ≤ r ≤ n) и увеличить ai на 1 для всех i таких, что l ≤ i ≤ r.

Помогите Маленькому Слонику найти минимальное количество шагов, за которое он может преобразовать массив a в произвольный отсортированный по неубыванию массив. Массив a, состоящий из n элементов, отсортирован по неубыванию, если для любого i (1 ≤ i < n) выполняется ai ≤ ai + 1.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — размер массива a. В следующей строке задано n целых чисел, разделенных единичными пробелами, — массив a (1 ≤ ai ≤ 109). Элементы массива в строке перечислены в порядке увеличения их номера.

Выходные данные

В единственной строке выведите единственное целое число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере массив уже отсортирован по неубыванию, поэтому ответ 0.

Во втором примере нужно использовать две операции: первый раз увеличить числа от второго до третьего (после этого массив станет следующим: [3, 3, 2]), а второй раз увеличить только последний элемент (массив станет: [3, 3, 3]).

В третьем примере нужно использовать как минимум 6 шагов. Возможная последовательность операций: (2; 3), (2; 3), (2; 3), (3; 3), (3; 3), (3; 3). После этого массив преобразуется в [7, 7, 7, 47].

B. Переливайка

жадные алгоритмы математика Перебор *1100

Дан массив \(a\) длины \(n\). За одну операцию можно выбрать индекс \(i\) от \(2\) до \(n-1\) и сделать одно из следующих действий:

  • Вычесть \(1\) из \(a_{i-1}\), затем прибавить \(1\) к \(a_{i+1}\).

  • Вычесть \(1\) из \(a_{i+1}\), затем прибавить \(1\) к \(a_{i-1}\).

При этом все полученные после каждой операции числа должны оставаться неотрицательными. Можно ли сделать все элементы массива равными за какое-то количество таких операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит число \(n\) (\(3 \le n \le 2\cdot 10^5\)).

Вторая строка каждого набора данных содержит \(n\) чисел \(a_i\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора данных выведите «YES» без кавычек, если можно сделать все элементы равными после некоторого числа данных операций, иначе выведите «NO» без кавычек.

Ответ можно выводить в любом регистре: «yes», «YeS», «nO»  — также являются корректными выводами.

D. Максимизация цифровой строки

жадные алгоритмы математика Перебор Строки *1300

Дана строка \(s\), состоящая из цифр от \(0\) до \(9\). За одно действие можно выбрать любую цифру, кроме \(0\) или самой левой цифры, уменьшить её на \(1\) и поменять с цифрой слева от неё местами.

Например, за одну операцию из строки \(1023\) можно получить строки \(1103\), \(1022\).

Найдите, какую лексикографически максимальную строку можно получить с помощью этой операции.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждая строка набора данных содержит строку \(s\) из цифр (\(1 \le |s| \le 2\cdot 10^5\)), где \(|s|\)  — это длина строки \(s\). Строка не содержит ведущих нулей.

Гарантируется, что сумма \(|s|\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в единственной строке.

Примечание

В первом примере подойдёт следующая последовательность операций: \(19 \rightarrow 81\).

Во втором примере подойдёт следующая последовательность операций: \(1709 \rightarrow 1780 \rightarrow 6180 \rightarrow 6710\).

В четвёртом примере подойдёт следующая последовательность операций: \(51476 \rightarrow 53176 \rightarrow 53616 \rightarrow 53651 \rightarrow 55351 \rightarrow 55431\).

A. Подготовка к олимпиаде

жадные алгоритмы *800

Монокарп и Стереокарп готовятся к олимпиаде. До олимпиады осталось \(n\) дней. Для \(i\)-го из этих дней известно, что Монокарп решит \(a_i\) задач в этот день, если будет тренироваться; а Стереокарп решит \(b_i\) задач, если будет тренироваться.

Монокарп может тренироваться в любой день, в который захочет. А вот Стереокарп следит за Монокарпом и тренируется следующим образом: если в день \(i\) Монокарп тренировался, и \(i < n\), то в день \((i+1)\) Стереокарп будет тренироваться.

Монокарп хочет организовать свой процесс тренировок так, чтобы разность между количеством задач, которые решит он, и количеством задач, которые решит Стереокарп, была как можно больше. Формально, Монокарп хочет максимизировать значение \((m-s)\), где \(m\) — количество задач, которые решит он, а \(s\) — количество задач, которые решит Стереокарп. Помогите Монокарпу определить максимально возможную вышеописанную разность.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную разность между количеством задач, которые решит Монокарп, и количеством задач, которые решит Стереокарп.

Примечание

Разберем пример из условия:

  • в первом наборе входных данных Монокарпу выгодно тренироваться оба дня, тогда Стереокарп будет тренироваться в день \(2\);
  • во втором наборе входных данных Монокарпу выгодно тренироваться в единственный день, а Стереокарп не будет тренироваться вообще;
  • в третьем наборе входных данных Монокарпу выгодно тренироваться в последний день (и только в него);
  • в четвертом наборе входных данных Монокарпу выгодно тренироваться в дни \(1, 3, 4, 6\), тогда Стереокарп будет тренироваться в дни \(2, 4, 5\).

E. Лучшая цена

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

В самый крупный магазин Берляндии поступила партия елей. В магазин уже пришли \(n\) клиентов, которые хотят их купить.

Перед началом продаж магазину осталось определиться с ценой за одну елку (цена одинакова для всех покупателей). Для этого у магазина есть некоторая информация о каждом клиенте.

Для \(i\)-го клиента известно два целых числа \(a_i\) и \(b_i\), которые определяют его поведение:

  • если цена товара не более \(a_i\), то клиент купит елку и оставит положительный отзыв;
  • иначе, если цена товара не более \(b_i\), то клиент купит елку, но оставит отрицательный отзыв;
  • иначе клиент не будет покупать елку вообще.

Ваша задача — посчитать максимально возможный заработок магазина, если можно получить не более \(k\) отрицательных отзывов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le n\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 2 \cdot 10^9\); \(a_i < b_i\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный заработок магазина, если можно получить не более \(k\) отрицательных отзывов.

Примечание

Рассмотрим пример из условия:

  • в первом наборе входных данных надо поставить цену, равную \(1\). Тогда оба клиента купят по одной елке и не оставят ни одного отрицательного отзыва;
  • во втором наборе входных данных надо поставить цену, равную \(5\). Тогда единственный клиент купит елку и оставит отрицательный отзыв;
  • в третьем наборе входных данных надо поставить цену, равную \(3\). Тогда все клиенты купят по одной елке, и магазин получит два отрицательных отзыва.
  • в четвертом наборе входных данных надо поставить цену, равную \(7\). Тогда два клиента купят по одной елке, и магазин получит один отрицательный отзыв.

F. Джокер

жадные алгоритмы математика Перебор реализация *2000

Рассмотрим колоду из \(n\) карт. Позиции в колоде пронумерованы от \(1\) до \(n\) сверху вниз. На \(m\)-й позиции расположен джокер.

К колоде последовательно применяются \(q\) операций. Во время \(i\)-й операции необходимо взять карту на \(a_i\)-й позиции и переместить её либо в начало, либо в конец колоды. Например, если колода имеет вид \([2, 1, 3, 5, 4]\), и \(a_i=2\), то после операции колода будет \([1, 2, 3, 5, 4]\) (карту со второй позиции перенесли в начало) или \([2, 3, 5, 4, 1]\) (карту со второй позиции перенесли в конец).

Ваша задача — посчитать количество различных позиций, в которых может находиться джокер после каждой из операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le n \le 10^9\); \(1 \le m \le n\); \(1 \le q \le 2 \cdot 10^5\)).

Вторая строка содержит \(q\) целых чисел \(a_1, a_2, \dots, a_q\) (\(1 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — количество различных позиций, в которых может находиться джокер после каждой из операций.

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\) не образовывают невырожденный треугольник.

B. Выдающийся импрессионист

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1200

If it was so, then let's make it a deal...
— MayDay, Gentleness

К сожалению, даже после десяти лет копирования картин известных художников, Эрик все еще не смог стать искусным художником-импрессионистом. Он хочет что-то забыть, но феномен белого медведя продолжает нависать над ним.

Эрик до сих пор помнит \(n\) впечатлений в виде целочисленного массива. Он записал их как \(w_1, w_2, \ldots, w_n\). Однако у него плохая память на впечатления. Для каждого \(1 \leq i \leq n\) он только запомнил, что выполнялось условие \(l_i \leq w_i \leq r_i\).

Эрик считает, что впечатление \(i\) является уникальным тогда и только тогда, когда существует массив \(w_1, w_2, \ldots, w_n\), в котором \(w_i \neq w_j\) выполняется для всех \(1 \leq j \leq n\), где \(j \neq i\).

Пожалуйста, помогите Эрику определить, является ли впечатление \(i\) уникальным для каждого \(1 \leq i \leq n\), независимо для каждого \(i\). Возможно, ваше суждение поможет переписать финальную историю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) — количество впечатлений.

Далее следует \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 2\cdot n\)) — минимально возможное значение и максимально возможное значение для \(w_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\): для каждого \(1 \leq i \leq n\), если впечатление \(i\) уникально, то \(s_i=\texttt{1}\); в противном случае, \(s_i=\texttt{0}\). Выводите строку без пробелов.

Примечание

В первом наборе входных данных единственным возможным массивом \(w\) является \([1, 1]\), в котором ни \(1\), ни \(2\) впечатления не являются уникальными (поскольку \(w_1 = w_2\)).

Во втором наборе входных данных все впечатления могут быть уникальными:

  • Для \(i = 1\) мы можем сделать \(w\) равным \([1, 3, 2, 3]\), и в нём \(w_1 \neq w_2\), \(w_1 \neq w_3\) и \(w_1 \neq w_4\);
  • Для \(i = 2\) мы можем сделать \(w\) равным \([2, 3, 1, 2]\), и в нём \(w_2 \neq w_1\), \(w_2 \neq w_3\) и \(w_2 \neq w_4\);
  • Для \(i = 3\) мы можем сделать \(w\) равным \([1, 1, 3, 1]\);
  • Для \(i = 4\) мы можем сделать \(w\) равным \([2, 3, 3, 1]\).

В третьем наборе входных данных, для \(i = 4\) мы можем сделать \(w\) равным \([3, 2, 2, 1, 3, 2]\). Таким образом, впечатление \(4\) — уникально.

D. Оптимальность изысканных произведений

Бинарный поиск жадные алгоритмы математика расписания сортировки Структуры данных *1700

As a tester, when my solution has a different output from the example during testing, I suspect the author first.
— Chris, a comment

Хотя Ирис иногда ставит задачу, решение которой неверно, она по-прежнему настаивает на создании задач с помощью своего воображения; в конце концов, все мы упрямы... И, как всегда, Ирис поставила перед собой задачу, которую она решила неправильно, и Крис должен её спасать! Но в этот раз вы будете играть роль Криса:

  • Крису даны два массива \(a\) и \(b\), оба состоящие из \(n\) целых чисел.
  • Ирис интересуется наибольшим возможным значением \(P = \prod\limits_{i=1}^n \min(a_i, b_i)\) после произвольной перестановки \(b\). Обратите внимание, что она хочет только узнать максимальное значение \(P\), элементы самого массива \(b\) не переставляются.
  • Будет внесено \(q\) изменений. Каждое изменение может быть обозначено двумя целыми числами \(o\) и \(x\) (значение \(o\) может быть \(1\) или \(2\), \(1 \leq x \leq n\)). Если \(o = 1\), то Ирис увеличивает \(a_x\) на \(1\); в противном случае она увеличивает \(b_x\) на \(1\).
  • Ирис спрашивает у Криса максимальное значение \(P\) суммарно \(q + 1\) раз: один раз перед изменениями, затем после каждого изменения.
  • Поскольку \(P\) может быть очень большим, Крису нужно только вычислить его по модулю \(998\,244\,353\).

Крис вскоре справился с этой задачей, но он так устал, что заснул. Помимо благодарности Крису, теперь ваша очередь написать программу для вычисления ответов по заданным входным данным.

Обратите внимание: поскольку входные и выходные данные большие, вам, возможно, потребуется оптимизировать их для решения данной задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2\cdot 10^5\), \(1 \leq q \leq 2\cdot 10^5\)) — длина массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 5\cdot 10^8\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых числа \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 5\cdot 10^8\)) — массив \(b\).

Затем следует \(q\) строк, каждая строка содержит два целых числа \(o\) и \(x\) (\(o \in \{1, 2\}\), \(1 \leq x \leq n\)), представляющие операцию.

Гарантируется, что и сумма \(n\), и сумма \(q\) по всем наборам входных данных не превосходят \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на одной строке \(q + 1\) целых числа — ответы Криса по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • Перед внесением изменений Крис может переставить \(b\) в таком порядке: \([1, 2, 3]\), и тогда \(P = \prod\limits_{i=1}^n \min(a_i, b_i) = 1 \cdot 1 \cdot 2 = 2\). Можно доказать, что это максимально возможное значение. Например, если Крис переставит \(b = [2, 3, 1]\), то \(P\) будет равно \(1 \cdot 1 \cdot 1 = 1 < 2\), что не является оптимальным.
  • После первого изменения Крис может переставить \(b\) в таком порядке: \([1, 2, 3]\), и тогда \(P = 1 \cdot 1 \cdot 3 = 3\), что является максимально возможным значением.
  • После второго изменения Крис может переставить \(b\) в таком порядке: \([2, 2, 3]\), и тогда \(P = 1 \cdot 1 \cdot 3 = 3\), что является максимально возможным значением.
  • После третьего изменения Крис может переставить \(b\) в таком порядке: \([2, 2, 3]\), и тогда \(P = 6\), что является максимально возможным значением.
  • После четвертого изменения Крис может переставить \(b\) в таком порядке:\([2, 2, 4]\), и тогда \(P = 6\), что является максимально возможным значением.

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}. \(\)

G. Наивные разбиения строк

Бинарный поиск жадные алгоритмы математика Перебор Строки теория чисел хэши *3400

And I will: love the world that you've adored; wish the smile that you've longed for. Your hand in mine as we explore, please take me to tomorrow's shore.
— Faye Wong, As Wished

У Коколи есть строка \(t\) длины \(m\), состоящая из строчных латинских букв, и он хотел бы разделить её на части. Он называет пару строк \((x, y)\) прекрасной тогда и только тогда, когда существует последовательность строк \(a_1, a_2, \ldots, a_k\), такая, что:

  • \(t = a_1 + a_2 + \ldots + a_k\), где \(+\) обозначает конкатенацию строк.
  • Для каждого \(1 \leq i \leq k\) выполняется по крайней мере одно из следующих условий: \(a_i = x\), или \(a_i = y\).

У Коколи есть другая строка \(s\) длины \(n\), состоящая из строчных латинских букв. Теперь, для каждого \(1 \leq i < n\), Коколи хочет, чтобы вы определили, является ли пара строк \((s_1s_2 \ldots s_i, \, s_{i+1}s_{i+2} \ldots s_n)\) прекрасной.

Обратите внимание: поскольку входные и выходные данные большие, вам, возможно, потребуется оптимизировать их для решения этой задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(T\) (\(1 \leq T \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq m \leq 5 \cdot 10^6\)) — длины строк \(s\) и \(t\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую только из строчных латинских букв.

Третья строка каждого набора входных данных содержит строку \(t\) длины \(m\), состоящую только из строчных латинских букв.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(r\) длины \(n - 1\): для каждого \(1 \leq i < n\), если \(i\)-я пара красива, \(r_i=\texttt{1}\); в противном случае, \(r_i=\texttt{0}\). Не выводите пробелы.

Примечание

В первом наборе входных данных, \(s = \tt aba\), \(t = \tt ababa\).

  • Для \(i = 1\): Коколи может разделить так: \(t = \texttt{a} + \texttt{ba} + \texttt{ba}\), поэтому пара строк \((\texttt{a}, \texttt{ba})\) прекрасна.
  • Для \(i = 2\): Коколи может разделить так: \(t = \texttt{ab} + \texttt{ab} + \texttt{a}\), поэтому пара строк \((\texttt{ab}, \texttt{a})\) прекрасна.

Во втором наборе входных данных, \(s = \tt czzz\), \(t = \tt czzzzzczzz\).

  • Для \(i = 1\): Можно доказать, что не существует разбиения \(t\) с использованием строк \(\texttt{c}\) и \(\texttt{zzz}\).
  • Для \(i = 2\): Коколи может разделить \(t\) на \(\texttt{cz} + \texttt{zz} + \texttt{zz} + \texttt{cz} + \texttt{zz}\).
  • Для \(i = 3\): Коколи может разделить \(t\) на \(\texttt{czz} + \texttt{z} + \texttt{z} + \texttt{z} + \texttt{czz} + \texttt{z}\).

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\).

A. Две лягушки

жадные алгоритмы игры Конструктив математика *800

Бродя по кишащим аллигаторами болоту Эверглейдс, мужчина из Флориды попал в весьма своеобразную схватку.

В ряд расположено \(n\) кувшинок, пронумерованных от \(1\) до \(n\) слева направо. Алиса и Боб — лягушки, изначально расположенные на разных кувшинках \(a\) и \(b\), соответственно. Они прыгают по очереди, начиная с Алисы.

Во время хода лягушка может перепрыгнуть либо на одну позицию влево, либо на одну позицию вправо, но только если кувшинка, на которую она прыгает, существует. Например, в первый ход Алиса может перейти либо на кувшинку \(a-1\), либо на \(a+1\), при условии, что эти кувшинки находятся в пределах допустимых значений. Важно отметить, что каждая лягушка обязана прыгнуть во время своего хода и не может остаться на той же кувшинке.

Однако существуют некоторые ограничения:

  • Две лягушки не могут занимать одну и ту же кувшинку. Это означает, что Алиса не может перепрыгнуть на кувшинку, которую в данный момент занимает Боб, и наоборот.
  • Если лягушка не может совершить корректный прыжок в свой ход, она проигрывает игру. В результате выигрывает другая лягушка.

Определите, может ли Алиса гарантированно выиграть, предполагая, что оба игрока играют оптимально. Можно доказать, что игра закончится после конечного числа ходов, если оба игрока будут играть оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 100\), \(1 \leq a, b \leq n\), \(a\neq b\)) — количество кувшинок и начальные позиции Алисы и Боба, соответственно.

Обратите внимание, что нет ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO», обозначающую, есть ли у Алисы выигрышная стратегия.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных у Алисы нет разрешённых ходов. Следовательно, Алиса проигрывает в первый ход.

Во втором наборе входных данных Алиса может перейти только на кувшинку \(2\). Тогда у Боба нет разрешённых ходов. Следовательно, в данном случае у Алисы есть выигрышная стратегия.

В третьем наборе входных данных Алиса может перейти только на кувшинку \(1\). Затем Боб может перейти на кувшинку \(2\). Алиса больше не в состоянии двигаться и проигрывает, отдавая победу Бобу. Можно показать, что Боб всегда может выиграть, независимо от ходов Алисы; следовательно, у Алисы нет выигрышной стратегии.

A. Две лягушки

жадные алгоритмы игры Конструктив математика *800

Бродя по кишащим аллигаторами болоту Эверглейдс, мужчина из Флориды попал в весьма своеобразную схватку.

В ряд расположено \(n\) кувшинок, пронумерованных от \(1\) до \(n\) слева направо. Алиса и Боб — лягушки, изначально расположенные на разных кувшинках \(a\) и \(b\), соответственно. Они прыгают по очереди, начиная с Алисы.

Во время хода лягушка может перепрыгнуть либо на одну позицию влево, либо на одну позицию вправо, но только если кувшинка, на которую она прыгает, существует. Например, в первый ход Алиса может перейти либо на кувшинку \(a-1\), либо на \(a+1\), при условии, что эти кувшинки находятся в пределах допустимых значений. Важно отметить, что каждая лягушка обязана прыгнуть во время своего хода и не может остаться на той же кувшинке.

Однако существуют некоторые ограничения:

  • Две лягушки не могут занимать одну и ту же кувшинку. Это означает, что Алиса не может перепрыгнуть на кувшинку, которую в данный момент занимает Боб, и наоборот.
  • Если лягушка не может совершить корректный прыжок в свой ход, она проигрывает игру. В результате выигрывает другая лягушка.

Определите, может ли Алиса гарантированно выиграть, предполагая, что оба игрока играют оптимально. Можно доказать, что игра закончится после конечного числа ходов, если оба игрока будут играть оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 100\), \(1 \leq a, b \leq n\), \(a\neq b\)) — количество кувшинок и начальные позиции Алисы и Боба, соответственно.

Обратите внимание, что нет ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO», обозначающую, есть ли у Алисы выигрышная стратегия.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных у Алисы нет разрешённых ходов. Следовательно, Алиса проигрывает в первый ход.

Во втором наборе входных данных Алиса может перейти только на кувшинку \(2\). Тогда у Боба нет разрешённых ходов. Следовательно, в данном случае у Алисы есть выигрышная стратегия.

В третьем наборе входных данных Алиса может перейти только на кувшинку \(1\). Затем Боб может перейти на кувшинку \(2\). Алиса больше не в состоянии двигаться и проигрывает, отдавая победу Бобу. Можно показать, что Боб всегда может выиграть, независимо от ходов Алисы; следовательно, у Алисы нет выигрышной стратегии.

B. Крафтинг

жадные алгоритмы Конструктив сортировки *1000

Как и следовало ожидать, Флорида является домом для многих причудливых магических сил, и мужчина из Флориды стремится укротить их.

Существует \(n\) различных типов магических материалов, пронумерованных от \(1\) до \(n\). Изначально у вас есть \(a_i\) единиц материала \(i\) для каждого \(i\) от \(1\) до \(n\). Вы можете выполнять следующую операцию:

  • Выберите материал \(i\) (где \(1\le i\le n\)). Потратьте по \(1\) единице каждого из остальных материалов (то есть всех \(j\), таких, что \(j\neq i\)), чтобы получить \(1\) единицу материала \(i\). Более формально, после выбора материала \(i\) обновите массив \(a\) следующим образом: \(a_i := a_i + 1\) и \(a_j := a_j - 1\) для всех \(j\), где \(j\neq i\) и \(1\le j\le n\). Обратите внимание, что все \(a_j\) должны оставаться неотрицательными, т.е. вы не можете тратить ресурсы, которых у вас нет.

Вы пытаетесь создать артефакт, используя эти материалы. Чтобы успешно создать артефакт, у вас должно быть по крайней мере \(b_i\) единиц материала \(i\) для каждого \(i\) от \(1\) до \(n\). Определите, возможно ли создать артефакт, выполнив операцию любое количество раз (возможно, ноль).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 2\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\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO» — может ли артефакт быть создан.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных выполните операцию над материалом \(1\). После этого у нас будет ровно столько ресурсов, сколько требуется: \(1\) единица материала \(1\) и по \(4\) единицы каждого из материалов \(2\) и \(3\).

Во втором наборе входных данных можно показать, что независимо от того, как выполняются операции, создать артефакт невозможно.

В третьем наборе входных данных мы можем выполнить операцию с материалом \(1\) дважды. После этих операций у нас будет \(3\) единицы материала \(1\) и \(8\) единиц материала \(2\), чего более чем достаточно для создания артефакта.

C. Тропа

жадные алгоритмы Конструктив математика Перебор *1400

Во Флориде нет гор, и мужчина из Флориды не может осознать их существование. Ему действительно нужна ваша помощь в этом деле.

Среди дикой природы находится горная местность, представленная в виде прямоугольной сетки с \(n\) строками и \(m\) столбцами. Каждая ячейка в сетке в соответствии с её положением обозначается \((i, j)\), где \(i\) — индекс строки, а \(j\) — индекс столбца. Высота ячейки \((i, j)\) обозначается \(a_{i,j}\).

Однако в этом регионе произошли некоторые изменения. Путь, состоящий из \(n + m - 1\) ячеек, начинающийся в левом верхнем углу \((1, 1)\) и заканчивающийся в правом нижнем углу \((n, m)\), был очищен. Иными словами, для каждой ячейки \((i, j)\) вдоль этого пути высота \(a_{i,j}\) была установлена равной \(0\). Каждая ячейка пути находится либо на одну ячейку ниже предыдущей (\(\mathtt{D}\)), либо на одну ячейку правее (\(\mathtt{R}\)).

Известно, что до того, как в регион были внесены изменения, он обладал магическим свойством: все строки и все столбцы имели одинаковую сумму высот. Более формально, существует целое число \(x\) такое, что \(\sum_{j=1}^m a_{i, j} = x\) для всех \(1\le i\le n\), и \(\sum_{i=1}^n a_{i, j} = x\) для всех \(1\le j\le m\).

Ваша задача состоит в том, чтобы назначить новые высоты ячейкам на пути таким образом, чтобы вышеупомянутое магическое свойство было восстановлено. Можно доказать, что решение всегда существует. Если существует несколько решений, удовлетворяющих данному свойству, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 1000\)) — количество строк и столбцов в таблице.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n+m-2\) (\(s_i = \mathtt{D}\) или \(s_i = \mathtt{R}\)) — шаги, которые путь выполняет от \((1, 1)\) до \((n, m)\). Символ \(\mathtt{D}\) представляет собой шаг вниз, а \(\mathtt{R}\) представляет шаг вправо.

В \(i\)-й из следующих \(n\) строк содержится по \(m\) целых чисел \(a_{i,1}, a_{i, 2}, \ldots, a_{i,m}\) (\(-10^6 \leq a_{i,j} \leq 10^6\)) — высота ячеек сетки. Гарантируется, что если ячейка \((i, j)\) лежит на пути, то \(a_{i,j} = 0\).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел, представляющих восстановленную сетку высот \(b_{i, j}\). Высоты должны удовлетворять \(-10^{15} \leq b_{i,j} \leq 10^{15}\), и дополнительно \(a_{i,j} = b_{i,j}\), если \((i, j)\) не находится на пути. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных сетка была заполнена таким образом, чтобы каждая строка и каждый столбец содержали числа \(1, 2, 3\) в некотором порядке, что приводит к общей сумме \(6\).

Во втором наборе входных данных сетка была заполнена таким образом, что сумма в каждой строке и в каждом столбце равнялась \(0\).

D. Пугало

жадные алгоритмы математика реализация *2000

На своей апельсиновой плантации мужчина из Флориды получает очередное спам-письмо, доставленное вороной. Естественно, он отправляет его обратно самым неудобным из возможных способов.

Ворона сидит на позиции \(0\) числовой прямой. Есть \(n\) пугал, расположенных на целочисленных координатах \(a_1, a_2, \ldots, a_n\) вдоль числовой прямой. Эти пугала были зачарованы, что позволяет им перемещаться влево и вправо со скоростью \(1\) единица в секунду.

Ворона боится пугал и хочет держаться на расстоянии по крайней мере \(k\) от ближайшего пугала, расположенного на позиции вороны или левее. Для этого ворона использует свою способность к телепортации следующим образом:

  • Пусть \(x\) — текущее положение вороны, а \(y\) — максимальная координата пугала, такая, что \(y \le x\). Если \(x - y < k\), то есть пугало находится слишком близко, то ворона мгновенно телепортируется на позицию \(y + k\).

Эта телепортация происходит мгновенно и непрерывно. Ворона будет продолжать проверять, нет ли пугал, расположенных на её позиции или слева от неё, и телепортироваться всякий раз, когда кто-то подойдет слишком близко (что может произойти в нецелый момент времени). Обратите внимание, что помимо телепортации, ворона не будет передвигаться сама по себе.

Ваша задача состоит в том, чтобы определить минимальное время, необходимое для того, чтобы ворона оказалась на позиции, большей или равной \(\ell\). При этом пугала двигаются оптимально, чтобы позволить вороне достичь своей цели. Для удобства мы просим вывести значение, вдвое больше минимального времени, необходимого вороне для достижения целевой позиции \(\ell\). Можно доказать, что это значение всегда будет целым числом.

Обратите внимание, что пугала могут стартовать, останавливаться или менять направление в любой момент (возможно, в нецелые моменты времени).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, k, \ell\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq k \leq \ell \leq 10^8\)) — количество пугал, расстояние телепортации и целевое положение вороны, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq \ell\)) — начальные позиции \(n\) пугал.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, представляющее удвоенное минимальное время, необходимое вороне для телепортации в положение, большее или равное \(\ell\).

Примечание

В первом наборе входных данных ворона мгновенно телепортируется на позицию \(3\) из-за пугала на позиции \(0\). Затем это пугало может переместиться на позицию \(2\), заставляя ворону непрерывно постепенно перемещаться из положения \(3\) в положение \(5\), завершая путешествие за \(2\) секунды. Следовательно, ответ равен \(4\).

Во втором наборе входных данных пугало \(1\) и пугало \(2\) могут переместиться на позиции \(0\) и \(3\) соответственно за \(2\) секунды, в то время как пугало \(3\) остается на позиции \(5\). Ворона телепортируется на позицию \(2\) благодаря пугалу \(1\). Затем пугало \(1\) перемещается вправо, в то время как пугало \(2\) и пугало \(3\) перемещаются влево в течение \(0.5\) секунд. Это приводит к тому, что ворона непрерывно перемещается из положения \(2\) в положение \(2.5\) из-за того, что пугало \(1\) перемещается вправо из положения \(0\). По истечении этой половины секунды пугала окажутся на позициях \(0.5, 2.5, 4.5\). Пугало \(2\), теперь находящееся на позиции \(2.5\), заставляет ворону мгновенно телепортироваться на позицию \(4.5\), а пугало \(3\) на позиции \(4.5\) заставляет её мгновенно телепортироваться на позицию \(6.5\), что превосходит \(\ell = 5\). Таким образом, ворона завершает перемещение за \(2.5\) секунды, а ответ равен \(5\).

Можно показать, что это минимально возможное время для обоих наборов входных данных.

E. Стога сена

жадные алгоритмы Конструктив Перебор сортировки Структуры данных *2800

В следующее новолуние вселенная сбросится, начиная с Флориды. Мужчина из Флориды должен остановить это, но сначала ему нужно найти важный артефакт.

Есть \(n\) стогов сена, пронумерованных от \(1\) до \(n\), где стог сена \(i\) содержит \(a_i\) тюков сена. Под одним из стогов сена возможно спрятана иголка, но вы не знаете, под каким именно. Ваша задача состоит в том, чтобы переместить тюки сена так, чтобы каждый стог сена был пустым хотя бы один раз, что позволит вам проверить, спрятана ли иголка под этим конкретным стогом сена.

Однако этот процесс не так прост. Как только стог сена \(i\) будет опустошен в первый раз, ему будет присвоено ограничение по высоте, и он больше не сможет содержать более \(b_i\) тюков сена. Более формально ход описывается следующим образом:

  • Выберите два стога сена \(i\) и \(j\). Если стог сена \(i\) не был опустошен ранее или в стоге сена \(i\) содержится строго меньше, чем \(b_i\) тюков сена, вы можете переместить ровно \(1\) тюк сена из стога \(j\) в стог \(i\).

Обратите внимание: Перед опустошением стога его высота не ограничена, и вы можете переместить в этот стог столько тюков, сколько захотите.

Найдите минимальное количество ходов, необходимых для того, чтобы каждый стог сена был опустошен хотя бы один раз, или сообщите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 5\cdot 10^5\)) — количество стогов сена.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\) и \(b_i\) (\(1\le a_i, b_i\le 10^9\)) — начальное количество тюков сена в \(i\)-м стоге сена и предел высоты, который ему присваивается после того, как он опустошается в первый раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для обеспечения того, чтобы каждый стог сена был опустошен хотя бы один раз. Если невозможно опустошить каждый стог сена хотя бы один раз, выведите -1.

Примечание

В первом наборе входных данных мы можем выполнить следующую последовательность действий:

  • Переместите \(3\) тюка из стога \(1\) в стог \(2\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(5\).
  • Переместите \(5\) тюков из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).

Приведенная выше последовательность требует \(3 + 5 = 8\) ходов. Невозможно использовать менее \(8\) ходов, так как следующая последовательность ходов недопустима:

  • Переместите \(2\) тюка из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).
  • Переместите \(4\) тюка из стога \(1\) в стог \(2\). В стоге \(1\) теперь \(1\) тюк, в то время как в стоге \(2\) находится \(4\) тюка.
  • Стог \(1\) нельзя очистить, так как высота стога \(2\) уже равна \(4\), поэтому больше нельзя перемещать тюки из стога \(1\) в стог \(2\).

Во втором наборе входных данных задача невыполнима. Это связано с тем, что ограничения по высоте обоих стогов слишком малы, и как только один из стогов опустошается, другой стог не может стать пустым из-за небольших ограничений по высоте.

В третьем наборе входных данных можно показать, что следующая последовательность ходов является оптимальной:

  • Переместите \(1\) тюк из стога \(1\) в стог \(3\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(2\) в стог \(1\).
  • Переместите \(1\) тюк из стога \(2\) в стог \(3\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(3\) в стог \(2\). Стог \(3\) теперь пуст, и ему присвоено ограничение по высоте, равное \(1\).

Приведенная выше последовательность требует \(1 + 3 + 1 + 3 = 8\) ходов.

B. Горилла и зачет

жадные алгоритмы сортировки *1000

Из-за нехватки преподавателей в самой высокой параллели «Т-поколения» было принято решение поставить огромного самца гориллы принимать зачет у школьников. Но не все так просто, для того чтобы доказать свою компетентность, ему нужно решить следующую задачу.

Для массива \(b\) определим функцию \(f(b)\) как минимальное количество следующих операций, чтобы сделать массив \(b\) пустым:

  • взять два целых числа \(l\) и \(r\), такие что \(l \le r\), пусть \(\min(b_l, b_{l+1}, \ldots, b_r)\) равен \(x\), затем
  • удалить из массива все такие \(b_i\), что \(l \le i \le r\) и \(b_i = x\), удаленные элементы удаляются, индексы перенумеруются

Дан массив \(a\) длины \(n\) и целое число \(k\). Вы можете не более \(k\) раз выбрать любой индекс \(i\) (\(1 \le i \le n\)) и произвольное число \(p\), и заменить \(a_i\) на \(p\).

Помогите горилле и определите, какое минимальное значение \(f(a)\) можно получить после таких замен.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(0 \le k \le n\)) — длина массива \(a\) и максимальное число изменений соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — минимальное значение \(f(a)\).

Примечание

В первом наборе входных данных \(f([48\,843]) = 1\), так как массив состоит из одного числа, а значит, можно его удалить за одну операцию.

Во втором наборе входных данных можно изменить второе число на \(2\), получив массив \([2, 2, 2]\), \(f([2, 2, 2]) = 1\), так как можно взять в качестве подотрезка весь массив, минимум на нем равен \(2\), поэтому мы удалим все числа \(2\) из массива, и массив станет пустым.

C. Поездка на олимпиаду

битмаски жадные алгоритмы Конструктив математика *1500

В предстоящем году будет много командных олимпиад, поэтому преподавателям «Т-поколения» предстоит собрать команду из трех школьников для участия в них. Любые три школьника покажут достойный результат на любой командной олимпиаде. Но выиграть олимпиаду это еще пол дела, для начала нужно до нее добраться...

У каждого школьника есть самостоятельность, выражаемая целым числом. В «Т-поколении» есть по одному школьнику с самостоятельностями от \(l\) до \(r\) включительно. Для команды из трех школьников с самостоятельностями \(a\), \(b\) и \(c\) значение их командной самостоятельности равно \((a \oplus b) + (b \oplus c) + (a \oplus c)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Ваша задача — выбрать любую тройку школьников с максимально возможной командной самостоятельностью.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(0 \le l, r < 2^{30}\), \(r - l > 1\)) — минимальная и максимальная самостоятельности школьников.

Выходные данные

Для каждого набора входных данных выведите три попарно различных целых числа \(a, b\) и \(c\), такие что \(l \le a, b, c \le r\) и значение выражения \((a \oplus b) + (b \oplus c) + (a \oplus c)\) максимально возможное. Если существует несколько троек с максимальным значением, можно вывести любую.

Примечание

В первом наборе входных данных единственная, с точностью до перестановки, подходящая тройка чисел (\(a, b, c\)) это (\(0, 1, 2\)).

Во втором наборе входных данных одна из подходящих троек это (\(8, 7, 1\)), \((8 \oplus 7) + (7 \oplus 1) + (8 \oplus 1) = 15 + 6 + 9 = 30\), можно показать, что \(30\) — максимально возможное значение \((a \oplus b) + (b \oplus c) + (a \oplus c)\) при \(0 \le a, b, c \le 8\).

D. Заказ мерча

жадные алгоритмы математика матрицы реализация Структуры данных *2000

«Т-поколение» решило закупить мерч на различные нужды, таким образом, у них есть \(n\) различных кофт, пронумерованных от \(1\) до \(n\). Где \(i\)-я кофта имеет размер \(a_i\). Теперь им нужно отправить какой-нибудь подотрезок кофт на олимпиаду. Необходимо, чтобы кофты подошли как можно большему количеству людей, но при том, чтобы не пришлось брать их слишком много.

Им нужно выбрать два индекса \(l\) и \(r\) (\(1 \le l \le r \le n\)) и максимизировать значение удобства, равное \(\)\operatorname{max} (a_l, a_{l + 1}, \ldots, a_r) - \operatorname{min} (a_l, a_{l + 1}, \ldots, a_r) - (r - l),\(\) то есть, разброс размеров минус количество кофт.

Иногда размеры кофт меняются, известно, что было \(q\) изменений размеров. В каждом изменении размер некоторой \(p\)-й кофты становится равным \(x\).

Помогите кружку и определите максимальное значение удобства среди всех возможных пар \((l, r)\) изначально, а также после каждого изменения размера.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество кофт и количество изменений размеров.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — размеры кофт.

В каждой из следующих \(q\) строк каждого набора входных данных содержатся два целых числа \(p\) и \(x\) (\(1 \le p \le n\), \(1 \le x \le 10^9\)) — очередное изменение размеров.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение удобства по всем возможным парам \((l, r)\) до всех действий, а также после изменения размеров.

Примечание

Рассмотрим первый пример.

  • До изменений можно взять все кофты, тогда значение удобства будет равно \(\operatorname{max} (a_1, a_2) - \operatorname{min} (a_1, a_2) - (2 - 1) = 10 - 1 - 1 = 8\).
  • После первого запроса размеры обеих кофт будут равны \(10\), можно взять только первую кофту и значение удобства будет равно \(10 - 10 - 0 = 0\).
  • После второго запроса размер первой кофты будет равен \(10\), а второй \(2\), можно взять все кофты и значение удобства будет равно \(\operatorname{max} (a_1, a_2) - \operatorname{min} (a_1, a_2) - (2 - 1) = 10 - 2 - 1 = 7\).

H. Перерыв и кофемашины

жадные алгоритмы математика Структуры данных *3500

В Т-Поколении очень долгие занятия. За один день надо успеть разобрать тренировочный и тематический тур, прочитать лекцию с новым материалом, а если получится, то еще и провести мини-семинар. Поэтому предусмотрен перерыв, где школьники могут уйти попить кофе и пообщаться между собой.

Всего есть \(n+2\) кофемашины, которые находятся в последовательно расположенных комнатах вдоль длинного коридора. Кофемашины пронумерованы числами от \(0\) до \(n+1\), при чем сразу после начала перерыва у \(i\)-й кофемашины собралось \(a_i\) школьников.

Школьники слишком громко общаются между собой, а преподавателям надо сделать очень важное объявление. Поэтому они хотят собрать наибольшее количество школьников около какой-нибудь одной кофемашины. Преподавателям слишком лениво бегать по коридорам и собирать школьников, поэтому они придумали более изощренный способ ими манипулировать:

  • В любой момент преподаватели могут выбрать комнату \(i\) (\(1 \le i \le n\)) и выключить там свет;
  • Если в этой комнате находилось \(x\) учеников, тогда после выключения света \(\lfloor \frac12 x \rfloor\) учеников отправятся в комнату \((i-1)\), а \(\lfloor \frac12 x \rfloor\) других школьников отправятся в комнату \((i+1)\).
  • Если \(x\) было нечетным, то один школьник остается в той же комнате.
  • После этого свет в комнате \(i\) включается обратно.

Преподаватели еще не решили, где они будут собирать школьников, а поэтому для каждого \(i\) от \(1\) до \(n\) вам следует определить, какое наибольшее количество школьников можно собрать около \(i\)-й кофемашины.

Преподаватели могут выключать свет в любых комнатах на свое усмотрение, в любом порядке, возможно, выключая свет в одной и той же комнате несколько раз.

Обратите внимание, что значения \(a_0\) и \(a_{n+1}\) никак не влияют на ответ в задаче, поэтому их значения вам даны не будут.

Входные данные

В первой строке указано единственное число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных указано число \(n\) (\(1 \le n \le 10^6\)).

Во второй строке каждого набора указаны числа \(a_1, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество школьников у кофемашин с номерами \(1, 2, \ldots, n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(b_1, \ldots, b_n\), где \(b_i\) равно наибольшему количеству школьников, которое может оказаться у кофемашины с номером \(i\).

Примечание

Разберем первый тестовый пример:

  • Чтобы максимизировать количество школьников у \(1\)-й кофемашины, все, что нужно — это ничего не делать.
  • Чтобы максимизировать количество школьников у \(2\)-й кофемашины, достаточно один раз выключить свет в \(1\)-й комнате.

A. Миля и два массива

жадные алгоритмы Конструктив сортировки *800

Массив называется хорошим, если для любого элемента \(x\), который встречается в этом массиве, верно, что \(x\) встречается хотя бы дважды в этом массиве. Например, массивы \([1, 2, 1, 1, 2]\), \([3, 3]\), \([1, 2, 4, 1, 2, 4]\) являются хорошими, а массивы \([1]\), \([1, 2, 1]\) и \([2, 3, 4, 4]\) не являются хорошими.

У Мили есть два хороших массива \(a\) и \(b\) длины \(n\). Он может произвольным образом переставить местами элементы в массиве \(a\). После этого он получает массив \(c\) длины \(n\), где \(c_i = a_i + b_i\) (\(1 \le i \le n\)).

Определите, может ли Миля переставить местами элементы в массиве \(a\) так, чтобы в массиве \(c\) было хотя бы \(3\) различных числа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \le n \le 50\)) — длина массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы массива \(b\).

Выходные данные

Для каждого набора входных данных выведите \(«\)YES\(»\) (без кавычек), если можно получить хотя бы \(3\) различных элемента в массиве \(c\), и \(«\)NO\(»\) иначе.

Вы можете вывести каждую букву в любом регистре (например, \(«\)YES\(»\), \(«\)Yes\(»\), \(«\)yes\(»\), \(«\)yEs\(»\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно поменять местами второй и третий элементы. Тогда массив \(a = [1, 1, 2, 2]\), \(b = [1, 2, 1, 2]\), а тогда \(c = [2, 3, 3, 4]\).

Во втором наборе входных данных можно не менять местами элементы. Тогда \(c = [2, 3, 4, 4, 3, 2]\).

В третьем наборе входных данных массив \(a\) не изменится от перестановки элементов в нём. Тогда \(c = [2, 2, 2]\), поэтому ответ \(«\)NO\(»\).

B. Стоимость массива

жадные алгоритмы Конструктив математика Перебор *1300

Вам дан массив \(a\) длины \(n\) и чётное число \(k\) (\(2 \le k \le n\)). Вам требуется разбить массив \(a\) на ровно \(k\) непустых подмассивов\(^{\dagger}\) так, чтобы каждый элемент массива \(a\) принадлежал ровно одному подмассиву.

Далее все подмассивы с чётными номерами (второй, четвёртый, \(\ldots\), \(k\)-й) склеивают в один массив \(b\). После этого в конец массива \(b\) добавляют \(0\).

Стоимостью массива \(b\) называется минимальный индекс \(i\), такой что \(b_i \neq i\). Например, стоимость массива \(b = [1, 2, 4, 5, 0]\) равна \(3\), т.к. \(b_1 = 1\), \(b_2 = 2\), \(b_3 \neq 3\). Определите минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении массива \(a\) на подмассивы.

\(^{\dagger}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(k\) — чётное) — длина массива \(a\) и количество подмассивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении.

Примечание

В первом наборе входных данных существует всего два возможных разбиения: \([[1], [1, 1]]\) и \([[1, 1], [1]]\). В любом случае \(b_1 = 1\), а \(b_2 \ne 2\), поэтому стоимость равна \(2\).

Во втором наборе входных данных существует единственное возможное разбиение, при котором \(b = [1, 2, 3, 4, 0]\), поэтому стоимость равна \(5\) (\(b_5 = 0 \ne 5\)).

В третьем наборе входных данных подходит следующее разбиение: \([[1], [1, 1], [2], [2]]\). Тогда \(b = [1, 1, 2, 0]\), и стоимость равна \(2\).

C. Обслуживание клиентов

жадные алгоритмы Конструктив математика Паросочетания Перебор сортировки *1600

Никир устроился работать регулировщиком очередей в компанию «Чёрный Контур». Ему нужно будет выбирать порядок обслуживания клиентов. Всего есть \(n\) очередей, в каждой из которых изначально стоит \(0\) человек. В каждый из следующих \(n\) моментов времени происходит два последовательных события:

  1. Во все очереди приходят новые клиенты. Более формально, в \(j\)-й момент времени количество людей в \(i\)-й очереди увеличивается на положительное целое число \(a_{i,j}\).
  2. Никир выбирает ровно одну из \(n\) очередей, которую будут обслуживать в этот момент времени. Количество клиентов в этой очереди становится равным \(0\).

Пусть количество людей в \(i\)-й очереди после всех событий равно \(x_i\). Никир хочет, чтобы MEX\(^{\dagger}\) набора чисел \(x_1, x_2, \ldots, x_n\) был как можно больше. Помогите ему определить максимальное значение, которое он сможет получить при оптимальном порядке обслуживания очередей.

\(^{\dagger}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(y\), которое не встречается в наборе чисел \(c\).

Например:

  • \(\operatorname{MEX}([2,2,1])= 0\), так как \(0\) не принадлежит массиву.
  • \(\operatorname{MEX}([3,1,0,1]) = 2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) нет.
  • \(\operatorname{MEX}([0,3,1,2]) = 4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 300\)) — количество очередей и моментов времени.

\(i\)-я из следующих \(n\) строк содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,n}\) (\(1 \le a_{i,j} \le 10^9\)) — количество новых клиентов в \(i\)-й очереди в каждый из моментов времени.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное значение \(\operatorname{MEX}([x_1, x_2, \ldots, x_n])\), которое можно получить.

Примечание

В первом наборе входных данных можно обслужить вторую очередь в момент времени \(1\) и первую очередь в момент времени \(2\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 1]) = 2\).

Во втором наборе входных данных можно оба раза обслужить первую очередь. В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 20\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 20]) = 1\).

В третьем наборе входных данных можно обслужить третью очередь в момент времени \(1\), вторую очередь в момент времени \(2\) и первую очередь в момент времени \(3\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек, в третьей очереди останется \(x_3 = 2\) человека. Тогда ответ равен \(\operatorname{MEX}([0, 1, 2]) = 3\).

D. Граф и граф

графы жадные алгоритмы кратчайшие пути Структуры данных *1900

Вам даны два связных неориентированных графа с одинаковым количеством вершин. В обоих графах в какой-то вершине находится фишка. В первом графе фишка изначально находится в вершине \(s_1\), во втором графе фишка изначально находится в вершине \(s_2\). Далее бесконечное количество раз повторяются следующая операция:

  • Пусть сейчас в первом графе фишка находится в вершине \(v_1\), а во втором графе в вершине \(v_2\).
  • Выбирается какая-то вершина \(u_1\), смежная с \(v_1\), в первом графе.
  • Выбирается какая-то вершина \(u_2\), смежная с \(v_2\), во втором графе.
  • Фишки перемещаются в выбранные вершины: в первом графе фишка перемещается из \(v_1\) в \(u_1\), во втором графе из \(v_2\) в \(u_2\).
  • Стоимость такой операции равна \(|u_1 - u_2|\).

Определите минимально возможную суммарную стоимость всех операций или сообщите, что это значение будет бесконечно большим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(s_1\) и \(s_2\) (\(2 \le n \le 1000\), \(1 \le s_1, s_2 \le n\)) — количество вершин в каждом графе, номер вершины в первом графе, где изначально находится фишка, и номер вершины во втором графе, где изначально находится фишка.

Вторая строка каждого набора входных данных содержит одно целое число \(m_1\) (\(1 \le m_1 \le 1000\)) — количество рёбер в первом графе.

\(i\)-я из следующих \(m_1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\)) — номера концов \(i\)-го ребра в первом графе.

Следующая строка каждого набора входных данных содержит одно целое число \(m_2\) (\(1 \le m_2 \le 1000\)) — количество рёбер во втором графе.

\(j\)-я из следующих \(m_2\) строк содержит два целых числа \(c_j\) и \(d_j\) (\(1 \le c_j, d_j \le n\), \(c_j \ne d_j\)) — номера концов \(j\)-го ребра во втором графе.

Гарантируется, что сумма \(n\), сумма \(m_1\) и сумма \(m_2\) по всем наборам входных данных не превосходят \(1000\).

Гарантируется, что оба графа являются связными.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную суммарную стоимость всех операций или \(-1\), если это значение будет бесконечно большим.

Примечание

В первом наборе входных данных можно построить бесконечную последовательность переходов в вершины \(2, 3, 4, 1, 2, 3, 4, 1, \ldots\), по которой фишка может двигаться как в первом, так и во втором графе.

Во втором наборе входных данных можно доказать, что стоимость любой операции будет больше \(0\), поэтому суммарная стоимость всех операций будет бесконечно большой.

E1. Хватит гамать (простая версия)

жадные алгоритмы Конструктив Перебор Строки хэши *2500

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно найти только минимальное количество операций. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которые необходимо выполнить.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

B. Карточная игра Фермера Джона

жадные алгоритмы сортировки *1000

\(n\) коров Фермера Джона играют в карточную игру! У Фермера Джона есть колода из \(n \cdot m\) карт, пронумерованных от \(0\) до \(n \cdot m-1\). Он раздает \(m\) карт каждой из своих \(n\) коров.

Фермер Джон хочет, чтобы игра была честной, поэтому каждая корова может сыграть только \(1\) карту за раунд. Он решает определить порядок ходов, который задается перестановкой\(^{\text{∗}}\) \(p\) длины \(n\), так что корова с номером \(p_i\) будет \(i\)-й коровой, которая положит карту наверх центральной стопки в раунде.

Другими словами, в каждом раунде происходят следующие события:

  • Корова с номером \(p_1\) кладет любую карту из своей колоды наверх центральной стопки.
  • Корова с номером \(p_2\) кладет любую карту из своей колоды наверх центральной стопки.
  • ...
  • Корова с номером \(p_n\) кладет любую карту из своей колоды наверх центральной стопки.

Есть одна загвоздка. Изначально в центральной стопке находится карта с номером \(-1\). Чтобы положить карту, номер карты должен быть больше номера карты на верхней части центральной стопки. Затем вновь положенная карта становится верхней картой центральной стопки. Если корова не может положить ни одной карты из своей колоды, игра считается проигранной.

Фермер Джон задается вопросом: существует ли \(p\), такое что все его коровы смогут опустошить свою колоду после игры во все \(m\) раундов? Если да, выведите любое допустимое \(p\). В противном случае выведите \(-1\).

\(^{\text{∗}}\)Перестановка длины \(n\) содержит каждое целое число от \(1\) до \(n\) ровно один раз

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 400\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 2\,000\)) — количество коров и количество карт, которые получает каждая корова.

Следующие \(n\) строк содержат по \(m\) целых чисел каждая — карты, полученные каждой коровой. Гарантируется, что все указанные числа (по всем \(n\) строкам) различны и находятся в диапазоне от \(0\) до \(n \cdot m - 1\), включительно.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2\,000\).

Выходные данные

Для каждого набора входных данных выведите следующее на новой строке:

  • Если \(p\) существует, выведите \(n\) целых числа, разделенных пробелами: \(p_1, p_2, \ldots, p_n\).
  • В противном случае выведите \(-1\).
Примечание

В первом примере один из порядков ходов, который позволяет сыграть все карты, заключается в том, чтобы первой корове ходить перед второй коровой. Карты, которые будут сыграны: \(0\rightarrow1\rightarrow2\rightarrow3\rightarrow4\rightarrow5\).

Во втором примере только одна корова, поэтому если корова сыграет все свои карты в порядке возрастания, колода будет опустошена.

В третьем примере можно показать, что не существует допустимого порядка ходов, который позволяет сыграть все карты.

C. Игра математиков

жадные алгоритмы игры сортировки *900

Алиса и Боб играют в игру. На доске написано \(n\) (\(n\) четное) целых чисел \(x_1, x_2, \ldots, x_n\). Также дано целое число \(k\) и целое число score, которое изначально равно \(0\). Игра длится \(\frac{n}{2}\) ходов, в которых последовательно происходят следующие события:

  • Алиса выбирает целое число с доски и стирает его. Назовем выбранное Алисой число \(a\).
  • Боб выбирает целое число с доски и стирает его. Назовем выбранное Бобом число \(b\).
  • Если \(a+b=k\), добавляем \(1\) к score.

Алиса играет, чтобы минимизировать score, в то время как Боб играет, чтобы максимизировать score. Предполагая, что оба игрока используют оптимальные стратегии, каков будет score после окончания игры?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5, 1 \leq k \leq 2\cdot n\), \(n\) четное).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(x_1,x_2,\ldots,x_n\) (\(1 \leq x_i \leq n\)) — числа на доске.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите score, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных один из возможных сценариев игры выглядит следующим образом:

  • Алиса выбирает \(1\), а Боб выбирает \(3\). Счет увеличивается, так как \(1+3=4\). Теперь на доске остаются два целых числа \(2\) и \(2\).
  • Алиса и Боб оба выбирают \(2\). Счет увеличивается, так как \(2+2=4\).
  • Игра заканчивается, так как на доске больше нет целых чисел.

В третьем наборе входных данных невозможно, чтобы сумма выбранных Алиской и Бобом целых чисел была равна \(1\), поэтому мы отвечаем \(0\).

Обратите внимание, что это всего лишь пример того, как может проходить игра для демонстрационных целей. Это может не быть самыми оптимальными стратегиями Алисы или Боба.

D. Сортировка вычитанием минимума

жадные алгоритмы *1100

Дана последовательность \(a\), состоящая из \(n\) положительных целых чисел.

Вы можете выполнять следующую операцию любое количество раз.

  • Выберите индекс \(i\) (\(1 \le i < n\)) и вычтите \(\min(a_i,a_{i+1})\) из обоих \(a_i\) и \(a_{i+1}\).

Определите, возможно ли сделать последовательность неубывающей, используя операцию любое количество раз.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов входных данных следует далее.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Если возможно сделать последовательность неубывающей, выведите «YES» в новой строке. В противном случае выведите «NO» в новой строке.

Вы можете вывести ответ в любом регистре. Например, строки «yEs», «yes», и «Yes» также будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных массив уже отсортирован.

Во втором наборе входных данных можно показать, что это невозможно.

В третьем наборе входных данных, после выполнения операции на \(i=1\), массив становится \([0,1,2,3]\), который теперь находится в неубывающем порядке.

E. Составление графа

графы жадные алгоритмы поиск в глубину и подобное снм *1500

Даны два простых неориентированных графа \(F\) и \(G\) с \(n\) узлами. У графа \(F\) есть \(m_1\) рёбер, а у графа \(G\)\(m_2\) рёбер. Вы можете выполнять одну из следующих двух операций любое количество раз:

  • Выберите два целых числа \(u\) и \(v\) (\(1 \leq u,v \leq n\)), такие что между \(u\) и \(v\) в графе \(F\) есть ребро. Затем удалите это ребро из \(F\).
  • Выберите два целых числа \(u\) и \(v\) (\(1 \leq u,v \leq n\)), такие что между \(u\) и \(v\) в графе \(F\) нет ребра. Затем добавьте ребро между \(u\) и \(v\) в \(F\).

Определите минимальное количество операций, необходимых для того, чтобы для всех целых чисел \(u\) и \(v\) (\(1 \leq u,v \leq n\)) существовал путь от \(u\) до \(v\) в \(F\) если и только если существует путь от \(u\) до \(v\) в \(G\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество независимых наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \leq n \leq 2\cdot 10^5\), \(0 \leq m_1,m_2 \leq 2\cdot 10^5\)) — количество узлов, количество рёбер в \(F\) и количество рёбер в \(G\).

Следующие \(m_1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v\leq n\)) — между \(u\) и \(v\) в графе \(F\) есть ребро. Гарантируется, что нет повторяющихся рёбер и петель.

Следующие \(m_2\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u,v\leq n\)) — между \(u\) и \(v\) в графе \(G\) есть ребро. Гарантируется, что нет повторяющихся рёбер и петель.

Гарантируется, что сумма \(n\), сумма \(m_1\) и сумма \(m_2\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество операций, необходимых на новой строке.

Примечание

В первом наборе входных данных вы можете выполнить следующие три операции:

  1. Добавить ребро между вершиной \(1\) и вершиной \(3\).
  2. Удалить ребро между вершиной \(1\) и вершиной \(2\).
  3. Удалить ребро между вершиной \(2\) и вершиной \(3\).
Можно показать, что меньшее количество операций невозможно достичь.

Во втором наборе входных данных графы \(F\) и \(G\) уже изначально удовлетворяют условию.

В пятом наборе входных данных рёбра от \(1\) до \(3\) и от \(2\) до \(3\) должны быть оба удалены.

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]\) соответственно. Оба массива теперь отсортированы.

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]\).

F1. Кевин и бинарная строка (простая версия)

жадные алгоритмы реализация *2100

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии строка \(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}\).

A. Строка

жадные алгоритмы Конструктив математика Строки *800

Вам дана строка \(s\) длины \(n\), состоящая из символов \(\mathtt{0}\) и \(\mathtt{1}\). За одну операцию вы можете выбрать непустую подпоследовательность \(t\) из \(s\), такую, что любые два соседних символа \(t\) различны. Затем вы инвертируете каждый символ в \(t\) (\(\mathtt{0}\) становится \(\mathtt{1}\), а \(\mathtt{1}\) становится \(\mathtt{0}\)). Например, если \(s=\mathtt{\underline{0}0\underline{101}}\) и \(t=s_1s_3s_4s_5=\mathtt{0101}\), то после операции \(s\) станет \(\mathtt{\underline{1}0\underline{010}}\).

Вычислите минимальное количество операций, необходимых для того, чтобы сделать все символы \(s\) равными \(\mathtt{0}\).

Напомним, что для строки \(s = s_1s_2\ldots s_n\), любая строка \(t=s_{i_1}s_{i_2}\ldots s_{i_k}\) (\(k\ge 1\)), где \(1\leq i_1 < i_2 < \ldots <i_k\leq n\), является подпоследовательностью \(s\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1\le |s|\le 50\)), где \(|s|\) обозначает длину строки \(s\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, необходимых для изменения всех символов в \(s\) на \(\mathtt{0}\).

Примечание

В первом наборе входных данных вы можете инвертировать \(s_1\). Строка \(s\) станет \(\mathtt{0}\), поэтому ответ равен \(1\).

В четвертом наборе входных данных вы можете выполнить следующие три операции по порядку:

  1. Инвертируйте \(s_1s_2s_3s_4s_5\). Тогда \(s\) станет \(\mathtt{\underline{01010}}\).
  2. Инвертируйте \(s_2s_3s_4\). Тогда \(s\) станет \(\mathtt{0\underline{010}0}\).
  3. Инвертируйте \(s_3\). Тогда \(s\) станет \(\mathtt{00\underline{0}00}\).

Можно показать, что вы не можете изменить все символы в \(s\) на \(\mathtt{0}\) менее чем за три операции, поэтому ответ равен \(3\).

B. Часовой механизм

жадные алгоритмы математика *900

У вас есть последовательность из \(n\) часов, расположенных в ряд, где начальное время на \(i\)-х часах равно \(a_i\). Каждую секунду по порядку происходит следующее:

  • Время на каждых часах уменьшается на \(1\). Если время на каких-то часах достигает \(0\), вы немедленно проигрываете.
  • Вы можете перейти к соседним часам или остаться на тех же часах, на которых вы находитесь в данный момент.
  • Вы можете сбросить время часов, на которых находитесь, обратно на их начальное значение \(a_i\).

Обратите внимание, что вышеуказанные события происходят по порядку. Если время на часах достигает \(0\) в определенную секунду, даже если вы можете переместиться к этим часам и сбросить их время в течение этой секунды, вы всё равно проиграете.

Вы можете начать с любых часов. Определите, возможно ли продолжать этот процесс бесконечно, не проигрывая.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — количество часов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальные времена, установленные на часах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно продолжать этот процесс бесконечно, или «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных вы можете перемещаться между двумя часами, бесконечно сбрасывая их.

В третьем наборе входных данных предположим, что вы начинаете с часов \(1\) и следуете стратегии ниже:

Изначально, \(a=[4,10,5]\).

  1. \(a\) становится \([3, 9, 4]\). Вы перемещаетесь к часам \(2\) и сбрасываете их время, в результате чего \(a=[3, 10, 4]\).
  2. \(a\) становится \([2, 9, 3]\). Вы перемещаетесь к часам \(3\) и сбрасываете их время, в результате чего \(a=[2, 9, 5]\).
  3. \(a\) становится \([1, 8, 4]\). Вы перемещаетесь к часам \(2\) и сбрасываете их время, в результате чего \(a=[1, 10, 4]\).
  4. \(a\) становится \([0, 9, 3]\). Вы перемещаетесь к часам \(1\), но проигрываете, потому что \(a_1\) достигает \(0\).

Можно доказать, что никакая другая стратегия также не позволяет вам продолжать этот процесс бесконечно.

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\)):

Можно доказать, что это оптимальное решение.

E1. Игра (простая версия)

графы Деревья жадные алгоритмы игры поиск в глубину и подобное Структуры данных *2000

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно только найти только одну из возможных вершин, которую может выбрать Чирно. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Чирно и Дайёсей играют в игру с деревом\(^{\text{∗}}\) из \(n\) вершин, корнем которого является вершина \(1\). Значение \(i\)-й вершины равно \(w_i\). Они по очереди делают ходы; первым ходит Чирно.

На каждом ходу, предполагая, что противник выбрал \(j\) на последнем ходу, игрок может выбрать любую оставшуюся вершину \(i\), удовлетворяющую условию \(w_i>w_j\), и удалить поддерево\(^{\text{†}}\) вершины \(i\). В частности, Чирно может выбрать любую вершину и удалить её поддерево на первом ходу.

Первый игрок, который не может сделать ход, выигрывает, и они оба надеются победить. Найдите одну из возможных вершин, которую может выбрать Чирно на первом ходу, чтобы выиграть, если оба игрока будут играть оптимально.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Вершина \(u\) принадлежит поддереву вершины \(i\), если любой путь от \(1\) до \(u\) проходит через \(i\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 4\cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le n\)) — значения вершин.

Следующие \(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\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку.

Если Чирно может выиграть, выведите любую вершину, которую она может выбрать на первом ходу.

В противном случае выведите «0» (без кавычек).

Примечание

В первом наборе входных данных:

  1. Если Чирно выберет \(1\) или \(3\) на первом ходу, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.
  2. Если Чирно выберет \(2\) или \(4\) на первом ходу, Дайёсей сможет выбрать только \(3\), но после этого Чирно не сможет сделать ход, поэтому Чирно выигрывает.

Таким образом, все возможные вершины, которые может выбрать Чирно — это \(2\) и \(4\).

Во втором наборе входных данных, независимо от того, какую вершину выберет Чирно, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.

В третьем и четвертом наборах входных данных единственной возможной вершиной, которую может выбрать Чирно на первом ходу, является \(2\).

В пятом наборе входных данных все возможные вершины, которые может выбрать Чирно на первом ходу — это \(3,4,6,7\) и \(10\).

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\).

B. Обновление подпоследовательности

жадные алгоритмы Конструктив сортировки Структуры данных *1100

После того как Маленький Джон несколько сотен раз одалживал у тетушки шурупы для расширения, она решила прийти и забрать неиспользованные.

Но поскольку они являются важной частью домашнего дизайна, Маленький Джон решает спрятать некоторые из них в самых недоступных местах — под экологически чистыми древесными фанерами.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и отрезок \([l,r]\) (\(1 \le l \le r \le n\)).

Вы должны выполнить следующую операцию над последовательностью ровно один раз.

  • Выберите любую подпоследовательность\(^{\text{∗}}\) последовательности \(a\) и разверните её. Обратите внимание, что подпоследовательность не обязательно должна быть непрерывной.

Формально, выберите любое количество индексов \(i_1,i_2,\ldots,i_k\) так, чтобы \(1 \le i_1 < i_2 < \ldots < i_k \le n\). Затем одновременно измените \(i_x\)-й элемент на оригинальное значение \(i_{k-x+1}\)-го элемента для всех \(1 \le x \le k\).

Найдите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) после выполнения операции.

\(^{\text{∗}}\)Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(l\), \(r\) (\(1 \le l \le r \le n \le 10^5\)) — длина \(a\) и отрезок \([l,r]\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_{i} \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(10^5\).

Выходные данные

Для каждого тестового случая выведите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) в отдельной строке.

Примечание

Во втором тестовом случае массив \(a=[1,2,3]\), а интервал \([2,3]\).

После выбора подпоследовательности \(a_1,a_3\) и её разворота, последовательность становится \([3,2,1]\). Затем сумма \(a_2+a_3\) становится равной \(3\). Можно показать, что минимально возможное значение суммы равно \(3\).

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\).

D. Игра с треугольниками

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных Тернарный поиск *2000

Даже маленькому Джону нужны деньги, чтобы купить дом. Но он недавно потерял работу; как же он теперь заработает деньги? Конечно, играя в игру, которая дает ему деньги в качестве награды! Ну, может быть, не в те игры, о которых вы думаете.

На плоскости есть \(n+m\) различных точек \((a_1,0), (a_2,0), \ldots, (a_{n},0), (b_1,2), (b_2,2), \ldots, (b_{m},2)\). Изначально ваш счет равен \(0\). Чтобы увеличить свой счет, вы можете выполнить следующую операцию:

  • Выберите три различные точки, которые не лежат на одной прямой.
  • Увеличьте свой счет на площадь треугольника, образованного этими тремя точками.
  • Затем удалите три точки с плоскости.
Пример игры, где операция выполняется дважды.

Пусть \(k_{\max}\) — максимальное количество операций, которое можно выполнить. Например, если нельзя выполнить эту операцию ни разу, то \(k_\max\) равно \(0\). Кроме того, определим \(f(k)\) как максимальный возможный счет, который можно получить, выполнив операцию ровно \(k\) раз. Здесь \(f(k)\) определено для всех целых чисел \(k\), таких что \(0 \le k \le k_{\max}\).

Найдите значение \(k_{\max}\) и найдите значения \(f(x)\) для всех целых чисел \(x=1,2,\ldots,k_{\max}\) независимо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le {3 \cdot 10^4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1,a_2,\ldots,a_{n}\) — точки на \(y=0\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) попарно различных целых чисел \(b_1,b_2,\ldots,b_{m}\) — точки на \(y=2\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, учитывая, что максимальное количество операций равно \(k_{\max}\), вы должны вывести не более двух строк:

  • Первая строка содержит значение \(k_{\max}\);
  • Вторая строка содержит \(k_{\max}\) целых числа, обозначающих \(f(1),f(2),\ldots,f(k_{\max})\). Вы можете опустить эту строку, если \(k_{\max}\) равно \(0\).

Обратите внимание, что в условиях этой задачи можно показать, что все значения \(f(x)\) являются целыми числами, не превышающими \(10^{16}\).

Примечание

В первом наборе входных данных есть \(1+3=4\) точки \((0,0),(0,2),(1,2),(-1,2)\).

Можно показать, что вы не можете выполнить две или более операций. Значение \(k_{\max}\) равно \(1\), и вас просят только о значении \(f(1)\).

Вы можете выбрать \((0,0)\), \((-1,2)\) и \((1,2)\) в качестве трех вершин треугольника. После этого ваш счет увеличивается на площадь треугольника, которая равна \(2\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\). Следовательно, значение \(f(1)\) равно \(2\).

В пятом наборе входных данных есть \(8+2=10\) точек.

Можно показать, что вы не можете выполнить три или более операций. Значение \(k_{\max}\) равно \(2\), и вас просят о значениях \(f(1)\) и \(f(2)\).

Чтобы максимизировать счет с помощью только одной операции, вы можете выбрать три точки \((198\,872\,582,0)\), \((-1\,000\,000\,000,2)\) и \((1\,000\,000\,000,2)\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\,000\,000\,000\). Следовательно, значение \(f(1)\) равно \(2\,000\,000\,000\).

Чтобы максимизировать счет с помощью ровно двух операций, вы можете выбрать следующую последовательность операций.

  • Выберите три точки \((-509\,489\,796,0)\), \((553\,177\,666,0)\) и \((-1\,000\,000\,000,2)\). Три точки удаляются.
  • Выберите три точки \((-400\,714\,529,0)\), \((564\,040\,265,0)\) и \((1\,000\,000\,000,2)\). Три точки удаляются.

Тогда счет после двух операций становится \(2\,027\,422\,256\). Можно показать, что максимальное значение вашего счета после выполнения ровно двух операций равно \(2\,027\,422\,256\). Следовательно, значение \(f(2)\) равно \(2\,027\,422\,256\).

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\).

A. Скибидус и Амог'у

жадные алгоритмы Конструктив Перебор реализация Строки *800

Скибидус приземляется на чужой планете, где местное племя Амог говорит на языке Амог'у. В Амог'у существуют две формы существительных: единственное и множественное.

Учитывая, что корень существительного записывается как \(S\), две формы записываются следующим образом:

  • Единственное: \(S\) \(+\) «us»
  • Множественное: \(S\) \(+\) «i»

Здесь \(+\) обозначает конкатенацию строк. Например, abc \(+\) def \(=\) abcdef.

Например, когда \(S\) записывается как «amog», то форма единственного числа записывается как «amogus», а форма множественного числа записывается как «amogi». Обратите внимание, что существительные Амог'у могут иметь пустой корень — в частности, «us» является формой единственного числа для «i».

Дано существительное Амог'у в форме единственного числа, пожалуйста, преобразуйте его в соответствующее существительное во множественном числе.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(W\), которая является существительным Амог'у в единственном числе. Гарантируется, что \(W\) состоит только из строчных английских букв, имеет длину не более \(10\) и заканчивается на «us».

Выходные данные

Для каждого набора входных данных выведите соответствующее существительное во множественном числе на отдельной строке.

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]\), которая отсортирована в неубывающем порядке.

C2. Скибидус и Fanum tax (сложная версия)

Бинарный поиск жадные алгоритмы *1300

Это сложная версия задачи. В этой версии \(m \leq 2\cdot 10^5\).

Скибидус получил два массива \(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\), \(1 \leq m \leq 2\cdot 10^5\)).

Следующая строка каждого набора входных данных содержит \(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_2:=b_1-a_2=6-4=2\) и \(a_3:=b_3-a_3=8-6=2\). Последовательность \([2,2,2,5]\) отсортирована в неубывающем порядке.

В последнем случае мы можем применить операции на каждом индексе. Последовательность становится \([-1,0,1]\), которая отсортирована в неубывающем порядке.

D. Скибидус и сигма

жадные алгоритмы сортировки *1200

Обозначим оценку массива \(b\) с \(k\) элементами как \(\sum_{i=1}^{k}\left(\sum_{j=1}^ib_j\right)\). Иными словами, пусть \(S_i\) обозначает сумму первых \(i\) элементов массива \(b\). Тогда оценка может быть записана как \(S_1+S_2+\ldots+S_k\).

Скибидусу даны \(n\) массивов \(a_1,a_2,\ldots,a_n\), каждый из которых содержит \(m\) элементов. Будучи тем самым сигмой, он хотел бы объединить их в любом порядке, чтобы получить один массив, содержащий \(n\cdot m\) элементов. Пожалуйста, найдите максимальную возможную оценку, которую Скибидус может достичь с помощью своего объединенного массива!

Формально, среди всех возможных перестановок\(^{\text{∗}}\) \(p\) длины \(n\), выведите максимальную оценку для \(a_{p_1} + a_{p_2} + \dots + a_{p_n}\), где \(+\) обозначает объединение\(^{\text{†}}\).

\(^{\text{∗}}\)Перестановка длины \(n\) содержит все целые числа от \(1\) до \(n\) ровно один раз.

\(^{\text{†}}\)Объединение двух массивов \(c\) и \(d\) с длинами \(e\) и \(f\) соответственно (т.е. \(c + d\)) это \(c_1, c_2, \ldots, c_e, d_1, d_2, \ldots d_f\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 2 \cdot 10^5\)) — количество массивов и длину каждого массива.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) (\(1 \leq a_{i,j} \leq 10^6\)) — элементы \(i\)-го массива.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальную оценку среди всех возможных перестановок \(p\) на новой строке.

Примечание

Для первого набора входных данных есть две возможности для \(p\):

  • \(p = [1, 2]\). Тогда \(a_{p_1} + a_{p_2} = [4, 4, 6, 1]\). Его оценка равна \(4+(4+4)+(4+4+6)+(4+4+6+1)=41\).
  • \(p = [2, 1]\). Тогда \(a_{p_1} + a_{p_2} = [6, 1, 4, 4]\). Его оценка равна \(6+(6+1)+(6+1+4)+(6+1+4+4)=39\).

Максимально возможная оценка равна \(41\).

Во втором наборе входных данных одна из оптимальных расстановок окончательного объединенного массива: \([4,1,2,1,2,2,2,2,3,2,1,2]\). Мы можем вычислить, что оценка равна \(162\).

E. Скибидус и rizz

жадные алгоритмы Конструктив Строки *1600

С приближением Дня Святого Валентина Скибидус отчаянно нуждается в способе привлечь внимание своей возлюбленной! К счастью, он знает, как это сделать: создать идеальную двоичную строку!

Дана двоичная строка\(^{\text{∗}}\) \(t\), пусть \(x\) представляет количество \(\texttt{0}\) в \(t\), а \(y\) представляет количество \(\texttt{1}\) в \(t\). Тогда её баланс определяется как значение \(\max(x-y, y-x)\).

Скибидус дает вам три целых числа \(n\), \(m\) и \(k\). Он просит вас помочь ему построить двоичную строку \(s\) длиной \(n+m\) из ровно \(n\) символов \(\texttt{0}\) и \(m\) символов \(\texttt{1}\), так что максимальный баланс среди всех её подстрок\(^{\text{†}}\) равен ровно \(k\). Если это невозможно, выведите -1.

\(^{\text{∗}}\)Двоичная строка состоит только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) путем удаления нескольких (возможно, нуля или всех) символов с начала и нескольких (возможно, нуля или всех) символов с конца.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(0 \leq n, m \leq 2\cdot 10^5\), \(1 \leq k \leq n + m\), \(n+m\geq 1\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если возможно построить строку \(s\), выведите её на новой строке. Если существует несколько возможных строк \(s\), выведите любую. В противном случае выведите -1 на новой строке.

Примечание

В первом примере мы должны построить \(s\) так, чтобы он содержал одну \(\texttt{0}\), две \(\texttt{1}\) и максимальный баланс \(1\) среди всех её подстрок. Одним из возможных корректных \(s\) является \(\texttt{101}\), потому что:

  • Рассмотрим подстроку, ограниченную индексами \([1, 1]\). Её баланс равен \(\max(0 - 1, 1 - 0) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([1, 2]\). Её баланс равен \(\max(1 - 1, 1 - 1) = 0\).
  • Рассмотрим подстроку, ограниченную индексами \([1, 3]\). Её баланс равен \(\max(1 - 2, 2 - 1) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([2, 2]\). Её баланс равен \(\max(1 - 0, 0 - 1) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([2, 3]\). Её баланс равен \(\max(1 - 1, 1 - 1) = 0\).
  • Рассмотрим подстроку, ограниченную индексами \([3, 3]\). Её баланс равен \(\max(0 - 1, 1 - 0) = 1\).

Среди всех возможных подстрок максимальный баланс равен \(1\).

Во втором примере подстрока с максимальным балансом — это \(0100\), которая имеет баланс \(max(3-1, 1-3)=2\).

F. Скибидус и slay

графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *1700

Определим мажорирующий элемент последовательности из \(k\) элементов как уникальное значение, которое появляется строго более чем \(\left \lfloor {\frac{k}{2}} \right \rfloor\) раз. Если такое значение не существует, то последовательность не имеет мажорирующего элемента. Например, последовательность \([1,3,2,3,3]\) имеет мажорирующий элемент \(3\), потому что оно появляется \(3 > \left \lfloor {\frac{5}{2}} \right \rfloor = 2\) раза, но \([1,2,3,4,5]\) и \([1,3,2,3,4]\) не имеют мажорирующего элемента.

Скибидус нашел дерево\(^{\text{∗}}\) из \(n\) вершин и массив \(a\) длиной \(n\). Вершина \(i\) имеет значение \(a_i\), написанное на ней, где \(a_i\) — это целое число в диапазоне \([1, n]\).

Для каждого \(i\) от \(1\) до \(n\) определите, существует ли нетривиальный простой путь\(^{\text{†}}\) такой, что \(i\) является мажорирующим элементом последовательности целых чисел, написанных на вершинах, которые образуют путь.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Последовательность вершин \(v_1, v_2, ..., v_m\) (\(m \geq 2\)) образует нетривиальный простой путь, если \(v_i\) и \(v_{i+1}\) соединены ребром для всех \(1 \leq i \leq m - 1\) и все \(v_i\) попарно различны. Обратите внимание, что путь должен состоять как минимум из \(2\) вершин.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\))  — количество вершин.

Вторая строка каждого набора содержит \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\))  — целые числа, написанные на вершинах.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающих две вершины, соединенные ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)).

Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите двоичную строку \(s\) длиной \(n\) на отдельной строке. \(s_i\) должно вычисляться следующим образом:

  • Если существует нетривиальный путь, содержащий \(i\) как мажорирующий элемент, то \(s_i\) равно '1';
  • В противном случае \(s_i\) равно '0'.
Примечание

В первом примере нет нетривиального пути с \(1\), \(2\) или \(3\) в качестве мажорирующего элемента, поэтому выводимая двоичная строка — «000».

Во втором примере \(1\rightarrow 2\rightarrow 4\) — это нетривиальный путь с \(3\) в качестве мажорирующего элемента.

A. Идентификация объектов

графы жадные алгоритмы интерактив реализация *1400

Это интерактивная задача.

Вам дан массив \(x_1, \ldots, x_n\) из чисел от \(1\) до \(n\). Также у жюри есть заранее фиксированный, но скрытый от вас массив \(y_1, \ldots, y_n\) из чисел от \(1\) до \(n\). Элементы массива \(y\) вам неизвестны. Дополнительно известно, что для всех \(i\) выполнено \(x_i \neq y_i\), а также все пары \((x_i, y_i)\) различны.

Жюри загадало один из двух объектов, вам нужно угадать, какой именно:

  • Объект A: Ориентированный граф на \(n\) вершинах с номерами от \(1\) до \(n\), и с \(n\) рёбрами вида \(x_i \to y_i\).
  • Объект B: \(n\) точек на координатной плоскости. \(i\)-я точка имеет координаты \((x_i, y_i)\).

Чтобы отгадать, какой объект загадало жюри, вы можете делать запросы. В одном запросе вы должны задать два числа \(i, j\) \((1 \leq i, j \leq n, i \neq j)\). В ответ вам будет возвращено одно число:

  • Если жюри загадало Объект A, вам вернут длину кратчайшего пути (в рёбрах) от вершины \(i\) до вершины \(j\) в графе, или же \(0\), если пути нет.
  • Если жюри загадало Объект B, вам вернут Манхэттенское расстояние между точками \(i\) и \(j\), то есть: \(|x_i -x_j| + |y_i - y_j|\)

У вас есть \(2\) запроса, чтобы определить, какой из объектов загадало жюри.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — длина массива \(x\) и \(y\), в начале каждого набора входных данных.

Далее, в следующей строке считайте \(n\) целых чисел: \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq n\)) — элементы массива \(x\).

Массив \(y_1, y_2, \ldots, y_n\) фиксирован для каждого теста. Иными словами, интерактор не адаптивен.

Гарантируется, что \(x_i \neq y_i\) для всех \(1 \leq i \leq n\), а также все пары \((x_i, y_i)\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Чтобы задать запрос, выведите «? \(i\) \(j\)» (без кавычек, \(1 \le i, j \le n, i \neq j\)). Затем вы должны считать ответ на запрос, который является целым неотрицательным числом.

Чтобы дать ответ, выведите «! A», если загадан Объект A или «! B» если загадан Объект B (вывод без кавычек). Заметьте, что вывод ответа не считается одним из \(2\) запросов.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода\(^{\text{∗}}\). В противном случае вы получите вердикт Решение «зависло». На любом шаге взаимодействия, если вы считали \(-1\) вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока. Обратите внимание, что если запрос корректный, ответ на него никогда не будет равен \(-1\).

Взломы

Первая строка должна содержать целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длину загаданного массива.

Вторая строка каждого набора должна содержать \(n\) целых чисел — \(x_1, x_2, \ldots, x_n\) (\(1 \le x_i \le n\)).

Третья строка каждого набора должна содержать \(n\) целых чисел — \(y_1, y_2, \ldots, y_n\) (\(1 \le y_i \le n\)).

Необходимо, чтобы \(x_i \neq y_i\) для всех \(1 \le i \le n\), а также все пары \((x_i, y_i)\) должны быть различны.

В четвёртой строке должен содержаться один символ: A или B, обозначающий, какой из объектов вы хотите загадать.

Сумма \(n\) по всем наборам не должна превосходить \(2 \cdot 10^5\).

\(^{\text{∗}}\)Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом наборе входных данных \(x = [2,2,3]\), \(y = [1,3,1]\) и загадан Объект A.

Во втором наборе входных данных \(x = [5,1,4,2,3]\), \(y = [3,3,2,4,1]\) и загадан объект B.

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\).

E. Тропический сезон

Бинарный поиск жадные алгоритмы реализация Структуры данных *3300

Перед вами находятся \(n\) бочек бесконечной вместимости. В \(i\)-й бочке изначально находится \(a_i\) килограмм воды. В этой задаче мы считаем, что все бочки сами по себе весят одинаково.

Вам известно, что на поверхности ровно одной из бочек распределено небольшое количество тропического яда, общий вес нанесённого яда составляет \(0.179\) килограмм. Но вы не знаете, на какой именно бочке находится яд. Ваша задача определить эту ядовитую бочку.

Все бочки стоят на весах. К сожалению, весы не показывают точный вес каждой из бочек. Вместо этого, для каждой пары бочек они показывают результат сравнения между весами этих бочек. Таким образом, для любых двух бочек вы можете определить, совпадают ли их веса, а если нет, вес какой из бочек больше. Яд и вода учитываются в весе бочки.

Весы работают постоянно, и информацию с них можно использовать в неограниченном количестве.

Также вам доступны переливания. Вы можете переливать воду из любой бочки в любую другую в любых количествах.

Но для переливания вам надо взять в руки бочку, из которой вы будете переливать, поэтому если это окажется ядовитая бочка, вы умрёте. Такого исхода допустить нельзя.

Однако в ядовитую бочку наливать воду можно, её вы не касаетесь.

Другими словами, вы можете выбрать числа \(i, j, x\) (\(i \neq j, 1 \leq i, j \leq n, 0 < x \leq a_i\), бочка под номером \(i\) не является ядовитой) и выполнить \(a_i := a_i - x\), \(a_j := a_j + x\). Где \(x\) не обязательно является целым числом.

Возможно ли гарантированно определить, в какой из бочек яд, и остаться живым, используя переливания и информацию с весов? Вам известно, что яд находится ровно на одной из бочек.

Также мы просим вас обработать \(q\) запросов. В каждом запросе либо удаляется одна из имеющихся бочек, либо добавляется дополнительная бочка с каким-то количеством воды. После каждого запроса надо ответить, возможно ли гарантированно определить ядовитую бочку, если известно, что она ровно одна?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — объёмы воды в имеющихся бочках.

В следующих \(q\) строках вводятся запросы, по одному в строке. Каждый запрос имеет вид, либо + x, либо - x, что означает, соответственно, добавление и удаление бочки с \(x\) килограммами воды. Гарантируется, что при запросе - x одна из имеющихся бочек имеет объём \(x\), а также, что по ходу запросов всегда остаётся хотя бы одна бочка. Во всех запросах выполняется \(1 \leq x \leq 10^6\).

Выходные данные

Выведите \(q+1\) строку, ответ на задачу до всех запросов и после каждого запроса. Если возможно определить ядовитую бочку, выведите «Yes», иначе «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом тесте, до всех запросов, веса бочек \([2, 2, 4, 11]\). Вы можете посмотреть на значение сравнения первой и второй бочки. Если результат не равенству, можно однозначно заключить, что бочка с большим весом — ядовитая. Если же результат равенству, обе бочки неядовиты. Тогда можно перелить всё содержимое первой бочки во вторую. После чего во второй и в третьей бочки будет по \(4\) килограмма воды. Посмотрим на значение сравнения второй и третьей бочки. Если результат не равенству, бочка с большим весом — ядовитая. Иначе, обе бочки не ядовитые. И единственная бочка, которая может быть ядовитой — бочка 4. Итого с такой стратегией, мы можем безопасно определить ядовитую бочку.

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)\).

Как видим, в результате таких операций возможно сделать содержимое мешков равным, поэтому ответ существует.

C. Девяткино

жадные алгоритмы математика Перебор поиск в глубину и подобное *1500

Вам дано положительное целое число \(n\). За одну операцию можно прибавить к \(n\) любое целое положительное число, десятичная запись которого содержит только цифру \(9\), возможно, повторённую несколько раз.

Какое минимальное количество операций необходимо проделать, чтобы число \(n\) содержало хотя бы одну цифру \(7\) в своей десятичной записи?

Например, если \(n = 80\), достаточно одной операции: можно прибавить \(99\) к \(n\), после операции \(n = 179\), содержит цифру \(7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(10 \leq n \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, необходимое, чтобы число \(n\) содержало цифру \(7\).

Примечание

В первом наборе входных данных достаточно трёх операций: \(51 + 9 + 9 + 9 = 78\), содержит цифру \(7\). Можно показать, что за одну или две операции невозможно добиться цели.

Во втором наборе входных данных достаточно двух операций: \(60 + 9 + 9 = 78\).

В третьем наборе входных данных достаточно одной операции: \(61 + 9 = 70\).

В четвёртом наборе входных данных \(n\) уже содержит цифру \(7\), поэтому никаких операций проводить не требуется.

В пятом наборе входных данных можно прибавить \(99\) к \(n\) и получить число, содержащее цифру \(7\).

C. Тропинки и полянки

графы жадные алгоритмы Конструктив снм *2400

Вася пришел погулять в парк. В парке есть n полянок пронумерованных от 1 до n. Между полянками есть m тропинок. Тропинки пронумерованы от 1 до m, причем i-ая тропинка соединяет полянки номер xi и yi. Номера соединяемых полянок могут совпадать (xi = yi) — это значит, что тропинка ведет с какой-то полянки на нее же. Также между двумя полянками может быть несколько непересекающихся тропинок.

Вася стоит на полянке номер 1, он хочет прогуляться по всем тропинкам парка ровно один раз, так чтобы в итоге вернуться на полянку номер 1. К сожалению, Вася не знает возможна такая прогулка или нет. Помогите Васе, определите возможна такая прогулка или нет. Если такая прогулка невозможна, найдите, какое минимальное количество тропинок придется дополнительно проложить в парке, чтобы описанная прогулка стала возможной.

Переходить с тропинки на тропинку Вася может только на полянках. По тропинкам можно двигаться в обоих направлениях. Если Вася зашел на тропинку, соединяющую полянки a и b, со стороны полянки a, то он обязан выйти с этой тропинки со стороны полянки b.

Входные данные

В первой строке записано два целых числа n и m (1 ≤ n ≤ 106, 0 ≤ m ≤ 106) — количество полянок в парке и количество тропинок в парке соответственно. В следующих m строках задано описание тропинок. В i-й строке задано описание i-й тропинки — два числа, записанных через пробел, xi, yi (1 ≤ xi, yi ≤ n) — номера полянок, которые эта тропинка соединяет.

Выходные данные

Выведите одно число — ответ на задачу. Если прогулка Васи возможна без строительства дополнительных тропинок выведите 0, иначе выведите минимальное количество тропинок, которые придется дополнительно проложить в парке, чтобы описанная прогулка стала возможной.

Примечание

В первом тестовом примере описанная прогулка возможна и без постройки дополнительных тропинок. Например, сначала можно пройти по первой тропинке, потом по второй и, наконец, по третьей.

Во втором тестовом примере описанная прогулка невозможна без постройки дополнительных тропинок. Чтобы прогулка стала возможной, достаточно построить одну тропинку между полянками номер один и два.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

A. Игра

жадные алгоритмы поиск в глубину и подобное *1700

Фурик и Рубик любят играть в компьютерные игры. Недавно Фурик нашел новую игру, которая очень заинтересовала Рубика. Игра состоит из n частей, причем для прохождения каждой части, возможно, требуется пройти некоторые другие. Известно, что игру можно пройти полностью, то есть нет циклических зависимостей между частями игры.

У Рубика есть 3 компьютера, на которых он может играть в эту игру. Все компьютеры находятся в разных домах и, как оказалось, каждую часть игры можно пройти только на одном из этих компьютеров. Пронумеруем компьютеры целыми числами от 1 до 3. Рубик может выполнять следующие действия:

  • Пройти какую-то часть игры на каком-то компьютере. Рубик тратит на прохождение любой части на любом компьютере ровно 1 час.
  • Переместиться от 1-го компьютера ко 2-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 1-го компьютера к 3-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 1-му. На это действие Рубик тратит ровно 2 часа.
  • Переместиться от 2-го компьютера к 3-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера к 1-му. На это действие Рубик тратит ровно 1 час.
  • Переместиться от 3-го компьютера ко 2-му. На это действие Рубик тратит ровно 2 часа.

Помогите Рубику найти минимальное количество часов, которое ему понадобится для прохождения всех частей игры. Изначально Рубик может находиться у компьютера, который он считает нужным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 200) — количество частей игры. В следующей строке заданы n целых чисел, i-е число — ci (1 ≤ ci ≤ 3) обозначает номер компьютера, на котором нужно пройти часть игры номер i.

В следующих n строках задано описание частей игры. В i-й из них сначала содержится целое число ki (0 ≤ ki ≤ n - 1), далее ki различных целых чисел ai, j (1 ≤ ai, j ≤ nai, j ≠ i) — номера частей, которые требуется пройти до части номер i.

Числа во всех строках разделены единичными пробелами. Можете считать, что части игры некоторым образом пронумерованы от 1 до n. Гарантируется, что между частями игры нет циклических зависимостей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

Пояснение ко второму примеру: перед началом игры выгоднее всего находиться у 3-го компьютера. Сначала пройдем часть номер 5. Далее перейдем к 1-му компьютеру и пройдем 3-ю и 4-ю часть. Далее перейдем ко 2-му компьютеру и пройдем 1-ю и 2-ю часть. В сумме получаем 1+1+2+1+2, что равно 7 часам.

B. Домашнее задание

жадные алгоритмы Конструктив математика Перебор *1600

Фурик очень любит уроки математики, поэтому, в отличии от Рубика, он их не посещает. Но теперь Фурик хочет получить хорошую оценку по математике. Для этого Лариса Ивановна, учительница математики, дала ему новое задание. Фурик сразу же решил эту задачу, а вы сможете?

Задан набор из цифр, вам нужно найти максимальное целое число, которое можно составить из этих цифр. Составленное число должно делиться на 2, 3, 5 без остатка. Можно использовать не все цифры из набора, запрещено использовать лидирующие нули.

Каждую цифру разрешено использовать в числе столько раз, сколько она встречается в наборе.

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 100000) — количество цифр в наборе. Во второй строке находится n цифр, цифры разделены единичным пробелом.

Выходные данные

В единственной строке выведите ответ на задачу. Если такого числа не существует, тогда вы должны вывести -1.

Примечание

В первом примере существует только 1 число, которое можно составить — 0. Во втором примере искомое число 5554443330. В третьем примере невозможно составить нужного числа.

B. Олимпийская медаль

жадные алгоритмы математика *1300

Медаль на Всемирной Олимпиаде по Программированию представляет собой металлический диск, состоящий из двух частей: кольца с внешним радиусом r1 см, внутренним радиусом r2 см (0 < r2 < r1), сделанного из металла плотностью p1 г/см3 и внутреннего диска радиусом r2 см, сделанного из металла плотностью p2 г/см3. Диск вложен внутрь кольца.

Жюри Олимпиады определилось, что r1 примет одно из возможных значений x1, x2, ..., xn. Какое именно значение примет r1 — решать жюри. Аналогично, жюри Олимпиады определилось, что p1 примет одно из возможных значений y1, y2, ..., ym, а p2 примет значение из списка z1, z2, ..., zk.

В соответствии с древнейшими традициями отношение массы внешнего кольца mout и массы внутреннего диска min должно быть равно , где A, B — найденные в древних книгах константы. Теперь, для начала производства медалей, осталось выбрать значения для r1, p1, p2 и вычислить подходящее значение r2.

Жюри хочет осуществить такой выбор, что радиус r2 максимален. Помогите жюри найти искомое значение r2. Значение r2 не обязано быть целым числом.

Медаль имеет одинаковую толщину по всей площади, то есть толщина внутреннего диска совпадает с толщиной внешнего кольца.

Входные данные

В первой строке входных данных записано целое число n и последовательность целых чисел x1, x2, ..., xn. Во второй строке входных данных записано целое число m и последовательность целых чисел y1, y2, ..., ym. В третьей строке входных данных записано целое число k и последовательность целых чисел z1, z2, ..., zk. В последней строке записано два целых числа A и B.

Все заданные во входных данных числа положительные и не превосходят 5000. Каждая из трех последовательностей содержит различные числа. Числа в строках разделяются пробелами.

Выходные данные

Выведите одно вещественное число — искомую величину r2 с абсолютной или относительной погрешностью не более 10 - 6. Гарантируется, что существует решение, удовлетворяющее условиям задачи.

Примечание

В первом примере нужно выбрать следующие значения: r1 = 3, p1 = 2, p2 = 1.

D. Жара

жадные алгоритмы *1900

Между официальной столицей Берляндии и ее культурной столицей есть единственная дорога, пролегающая через n областей. В каждой области свой уникальный климат, поэтому летом в i-ой (1 ≤ i ≤ n) области стоит устойчивая температура ti градусов.

Этим летом группа из m школьников хочет добраться из официальной столицы в культурную для посещения музеев и достопримечательностей. Для перевоза школьников между городами организаторы экскурсии используют автобусы, но в них иногда бывает очень жарко, точнее, если при проезде i-ой области в некотором автобусе находятся k школьников, то температура внутри автобуса равна ti + k градусов.

Разумеется, мало кому нравится, когда в автобусе жарко, и поэтому, если при проезде i-ой области температура в некотором автобусе больше, чем Ti градусов, то каждый из школьников в этом автобусе требует неустойку за некомфортные условия в размере xi рублей, причем, неустойка взымается в каждой области, где температура в автобусе превышает установленный предел.

Для экономии денег организаторы поездки могут в начале поездки и между областями произвольным образом менять количество автобусов (конечно же, для проезда любой области требуется хотя бы один автобус), на которых едут дети, а также произвольным образом пересаживать их между автобусами, однако, каждый из автобусов на i-ом участке обойдется организаторам в costi рублей. Обратите внимание, что плата за пересадку не взимается.

Ваша задача — найти минимальное количество рублей, которое придется потратить организаторам, чтобы перевезти всех школьников.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n ≤ 1051 ≤ m ≤ 106) — количество областей на пути и количество школьников в группе соответственно. Далее в n строках записаны по четыре целых числа: в i-ой из них записаны ti, Ti, xi и costi (1 ≤ ti, Ti, xi, costi ≤ 106). Числа в строках разделены единичными пробелами.

Выходные данные

Выведите единственное целое число — минимальное количество рублей, которое придется потратить организаторам, чтобы перевезти всех школьников.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере при проезде первой области организаторы будут использовать один автобус, однако температура внутри него станет равна 30 + 10 = 40 градусов, и каждый из 10 школьников потребует неустойку. При проезде второй области так же будет использован только один автобус, но температура внутри будет меньше критической. Итого организаторы потратят 100 + 10 + 10 = 120 рублей.

C. Набор персонала

жадные алгоритмы *1800

Новоиспеченный берляндский бизнесмен Виталий собирается открыть свой магазин бытовой техники. Дело осталось за малым — нужно набрать персонал.

Магазин будет работать без выходных, хотя и не круглосуточно. Каждый день в магазине должны работать не менее k сотрудников.

В Берляндии принят закон, который определяет порядок рабочих и выходных дней. А именно: каждый сотрудник должен выходить на работу ровно n дней подряд, после чего ровно m дней отдыхать; затем опять работать n дней и m дней отдыхать, и так далее. Виталий не хочет нарушать закон. К счастью, здесь имеется лазейка: закон вступает в силу в тот день, когда сотрудник был нанят. Например, если сотрудник был нанят в день x, то он должен работать в дни [x, x + 1, ..., x + n - 1], [x + m + n, x + m + n + 1, ..., x + m + 2n - 1] и так далее. Причем день x Виталий может выбирать произвольно.

Есть еще одна деталь: ключ от магазина. Берляндский закон запрещает делать копии ключей, поэтому ключ только один. Виталий планирует доверить ключ сотрудникам магазина. При этом в каждый из дней ключ обязательно должен быть у сотрудника, у которого сегодня рабочий день — иначе в этот день просто никто не сможет попасть внутрь магазина. В течение дня владелец ключа может передать этот ключ другому сотруднику, если у него сегодня тоже рабочий день. Виталий сам передаст ключ самому первому нанятому сотруднику в его первый рабочий день.

Каждому из сотрудников нужно платить зарплату. Поэтому Виталий хочет нанять как можно меньше сотрудников так, чтобы магазин мог нормально функционировать в каждый из дней от 1 до бесконечности. Другими словами в каждый день с номером от 1 до бесконечности, в магазине должно работать не менее k сотрудников, при этом обязательно у одного из работающих сотрудников должен быть ключ от магазина.

Помогите Виталию — определите наименьшее необходимое количество сотрудников, а так же дни, в которые их следует нанять.

Входные данные

В первой строке записаны три целых числа n, m и k (1 ≤ m ≤ n ≤ 1000, n ≠ 1, 1 ≤ k ≤ 1000).

Выходные данные

В первой строке выведите единственное целое число z — наименьшее необходимое количество сотрудников.

Во второй строке выведите z целых положительных чисел, разделяя их пробелами: i-ое из этих чисел ai (1 ≤ ai ≤ 104) должно обозначать номер дня, в который следует нанять i-ого сотрудника.

Если существует несколько ответов — выведите любой.

C. Цветная полоска

дп жадные алгоритмы Перебор *1600

Цветная полоска представляет собой n расположенных в ряд клеточек, каждая из которых покрашена в один из k цветов. Требуется перекрасить наименьшее количество клеточек так, чтобы никакие две соседние клетки не были одинакового цвета. Перекрашивать клетки можно в любые цвета от 1 до k.

Входные данные

В первой строке входных данных записано два целых числа n и k (1 ≤ n ≤ 5·105; 2 ≤ k ≤ 26). Вторая строка состоит из n прописных букв латинского алфавита. Буква «A» обозначает первый цвет, «B» — второй и так далее. В строке используются только первые k букв латинского алфавита. Каждая буква обозначает цвет соответствующей клетки полоски.

Выходные данные

Выведите единственное число — искомое минимальное количество перекрашиваний. Во вторую строку выведите любой из возможных вариантов полоски после перекрашиваний.

D. Отрезки

жадные алгоритмы сортировки *1900

Дано n отрезков на числовой прямой. Вы можете забить в любую целочисленную точку числовой прямой гвоздь, при этом все отрезки, содержащие эту точку, оказываются прибиты. Если гвоздь попадает в конец отрезка, то этот отрезок считается прибитым. Какое наименьшее число гвоздей нужно забить чтобы все отрезки оказались прибиты?

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 1000) — количество отрезков. Далее в n строках содержится описание отрезков. Каждый отрезок описывается двумя целыми числами — координатами концов. Все координаты не превосходят по модулю 10000. Отрезки могут вырождаться в точки.

Выходные данные

В первую строку выведите одно число — какое наименьшее число гвоздей нужно забить чтобы все отрезки оказались прибиты. Во вторую строку выведите координаты забитых гвоздей через пробел в любом порядке. Если решений несколько, выведите любое.

D. Олимпиада

Бинарный поиск жадные алгоритмы сортировки *1900

Мальчик Вася участвовал в олимпиаде. Учитель мальчика знает, что Вася получил за оба тура олимпиады в сумме не меньше, чем x баллов. У учителя есть результаты первого тура и результаты второго тура олимпиады, но вот беда — в результатах указаны лишь баллы, без фамилий. Учителю необходимо знать, на что Вася может рассчитывать.

Помогите учителю Васи, найдите два числа — наилучшее и наихудшее место, которое мог занять Вася. Учтите, что в итоговой таблице участники сортируются по сумме баллов за оба тура (у участника на первом месте больше всего баллов). Если два (или более) участника получили одинаковое количество баллов, жюри может им назначить места по своему усмотрению. Гарантируется, что каждый участник олимпиады участвовал в обоих турах олимпиады.

Входные данные

В первой строке записаны через пробел два целых числа n, x (1 ≤ n ≤ 105; 0 ≤ x ≤ 2·105) — количество участников олимпиады и минимальное количество набранных Васей баллов.

Во второй строке записаны n целых чисел через пробел: a1, a2, ..., an (0 ≤ ai ≤ 105) — баллы участников в первом туре.

В третьей строке записаны n целых чисел через пробел: b1, b2, ..., bn (0 ≤ bi ≤ 105) — баллы участников во втором туре.

Баллы участников заданы в произвольном порядке. Гарантируется, что Вася присутствовал на олимпиаде — существуют два целых числа i, j (1 ≤ i, j ≤ n) такие, что ai + bj ≥ x.

Выходные данные

Выведите через пробел два целых числа — наилучшее и наихудшее место из тех, что мог занять Вася на олимпиаде.

Примечание

В первом тестовом примере в любом случае все 5 участников набирают по 2 балла. В зависимости от решения жюри, Васе могут присудить как первое (наилучшее) место, так и последнее (наихудшее), пятое.

Во втором тестовом примере в лучшем для Васи случае он снова выигрывает: он может набрать 12 баллов и стать абсолютным победителем, если итоговая таблица будет выглядеть так — {4:8, 6:4, 3:6, 4:4, 4:3, 5:0}.

В этой таблице все участники расположены по убыванию количества баллов, и для участника показано, сколько баллов он набрал в первом и во втором туре.

В худшем случае, он может занять пятое место, если таблица выглядит так — {4:8, 4:6, 6:4, 5:4, 4:3, 3:0}, а он набрал в первом и втором турах 4 и 3 балла соответственно.

A. Башня из игральных костей

жадные алгоритмы Конструктив *1100

Игральная кость — это куб, на гранях которого изображены различные целые числа от 1 до 6 в виде черных точек. При этом сумма чисел на противоположных гранях игральной кости всегда равна 7. Обратите внимание, что под заданные ограничения подходят всего две игральные кости, которые являются зеркальным отражением друг друга (они изображены на рисунке слева).

Алиса и Боб играют в кости. Алиса построила башню из n игральных костей. Известно, что в этой башне соседние игральные кости соприкасаются гранями с разными числами. Боб хочет однозначно определить числа, написанные на гранях всех игральных костей, из которых построена башня. К сожалению, Боб смотрит на башню со стороны, и поэтому он не видит всех чисел на гранях. Боб видит число на вершине башни, а также числа на двух соседних боковых сторонах (то, что видно Бобу, показано на рисунке справа).

Помогите Бобу, скажите, можно ли по данной информации однозначно определить числа на всех гранях игральных костей, из которых сложена башня, или нет?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100) — количество игральных костей в башне.

Во второй строке записано целое число x (1 ≤ x ≤ 6) — число, которое видит Боб на вершине башни. В следующих n строках записаны по два целых числа через пробел: в i-ой строке записаны числа ai, bi (1 ≤ ai, bi ≤ 6; ai ≠ bi) — числа, которые видит Боб на боковых гранях i-ой игральной кости башни.

Считайте, что кости в башне пронумерованы сверху вниз от 1 до n. То есть самая верхняя игральная кость имеет номер 1 (та кость, верхнюю грань которой видит Боб). Гарантируется, что можно составить башню из игральных костей, которая будет иметь заданный во входных данных вид.

Выходные данные

Выведите «YES» (без кавычек), если можно однозначно определить числа на всех гранях всех игральных костей башни. Если этого сделать нельзя — выведите «NO» (без кавычек).

B. Всем известные числа

Бинарный поиск жадные алгоритмы теория чисел *1600

Числа k-боначчи (k целое, k > 1) являются обобщением чисел Фибоначчи и определяются следующим образом:

  • F(k, n) = 0, для целых n, 1 ≤ n < k;
  • F(k, k) = 1;
  • F(k, n) = F(k, n - 1) + F(k, n - 2) + ... + F(k, n - k), для целых n, n > k.

Обратите внимание, мы определяем числа k-боначчи, F(k, n), только для целых значений n и k.

Вам задано число s, представьте его в виде суммы нескольких (хотя бы двух) различных чисел k-боначчи.

Входные данные

В первой строке записано два целых числа s и k (1 ≤ s, k ≤ 109k > 1).

Выходные данные

В первую строку выведите целое число m (m ≥ 2) — количество чисел в найденном представлении. Во вторую строку выведите m различных целых чисел a1, a2, ..., am. Каждое выведенное число должно быть числом k-боначчи. Сумма выведенных чисел должна быть равна s.

Гарантируется, что ответ существует. Если существует несколько ответов, разрешается вывести любой.

B. Непослушные кучки камней

жадные алгоритмы *1900

На столе перед Вами лежат n кучек камней размера a1, a2, ..., an.

За одно действие можно взять одну кучку и присоединить ее к другой. Причем при присоединении кучки i к кучке j размер кучки j увеличивается на текущий размер кучки i, а кучка i перестает существовать. Стоимость операции присоединения равна размеру присоединяемой кучки.

Ваша задача — определить минимальную стоимость, за которую можно собрать все камни в одну кучу.

Чтобы жизнь не казалась Вам слишком сладкой, кучки камней сговорились и решили, что каждая позволит совершить операцию присоединения к себе не более k раз (после чего только ее саму можно будет присоединить к другой кучке).

Более того, чтобы совсем сбить Вас с толку, кучки камней сообщили Вам q вариантов (необязательно различных) того, чему может быть равно k.

Ваша задача — найти минимальную стоимость для каждого из q вариантов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество кучек камней. Во второй строке записаны n целых чисел через пробел: a1, a2, ..., an (1 ≤ ai ≤ 109) — первоначальные размеры кучек камней.

В третьей строке записано целое число q (1 ≤ q ≤ 105) — количество запросов. В последней строке — q целых чисел через пробел k1, k2, ..., kq (1 ≤ ki ≤ 105) — значения числа k для разных запросов. Обратите внимание, числа ki могут повторяться.

Выходные данные

Выведите q чисел — ответы на запросы в том порядке, в котором запросы заданы во входных данных. Выведенные числа разделяйте пробельными символами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом случае одним из способов достижения оптимального ответа является следующий: поочередно добавить 4-ю и 5-ю кучки ко 2-й; затем добавить 1-ю кучку к 3-й; добавить 2-ю кучку к 3-й. Первые две операции стоят по 1; третья — 2, четвертая — 5 (размер 2-й кучки после первых двух операций уже не 3, а 5).

Во втором случае можно добавить 2-ю кучку к 3-й (стоимость операции — 3); затем 1-ю к 3-й (стоимость — 2); далее 5-ю к 4-й (стоимость — 1); и, наконец, 4-ю к 3-й (стоимость — 2).

D. Всего лишь таблица

жадные алгоритмы Конструктив *2100

Гарри Поттеру задали сложное домашнее задание. Дана прямоугольная таблица, размера n × m клеток. В каждой клетке таблицы записано целое число. Гарри умеет применять два заклинания: первое меняет знак у каждого из чисел в выбранной мальчиком строке, второе — в выбранном столбце. Задача Гарри, используя эти заклинания, сделать так, чтобы сумма чисел в каждой строке и в каждом столбце стала неотрицательна.

В одиночку мальчику не справиться. Помогите юному волшебнику!

Входные данные

В первой строке записаны два числа n и m (1 ≤ n,  m ≤ 100) — количество строк и столбцов таблицы.

Далее следуют n строк, в каждой по m целых чисел: j-е число в i-й строке равно числу ai, j (|ai, j| ≤ 100), стоящему на пересечении j-го столбца и i-й строки таблицы.

Строки таблицы нумеруются от 1 до n. Столбцы таблицы нумеруются от 1 до m.

Выходные данные

В первую строку выведите число a — количество требуемых применений первого заклинания. Далее через пробел выведите a чисел: номера строк, к которым требуется применить заклинание. Номера строк не должны повторяться!

Во вторую строку выведите число b — количество требуемых применений второго заклинания. Далее через пробел выведите b чисел: номера столбцов, к которым требуется применить заклинание. Номера столбцов также не должны повторяться!

Если существует несколько решений, разрешается вывести любое.

D. Башни

дп жадные алгоритмы *2100

Город D состоит из n башен, установленных последовательно на одной прямой. Высота i-той по порядку башни (слева направо) в последовательности равна hi. Мэр города затеял перестройку, после которой город должен стать красивым. В красивом городе все башни расположены слева направо по неубыванию высот.

Перестройка состоит из выполнения нескольких (возможно нуля) операций. За одну операцию разрешается краном поднять любую башню и установить ее целиком на верх какой-то соседней башни. Другими словами, можно взять i-тую по порядку башню, и установить на верх либо (i - 1)-ой (если такая существует), либо (i + 1)-ой (если такая существует) по порядку башни. Высота получившейся башни равняется сумме высот соединенных башен. После этого две соединенные башни уже нельзя разъединить никаким образом, но с получившейся башней можно снова проводить подобные операции. Обратите внимание на то, что после выполнения одной операции общее количество башен, стоящих на прямой, уменьшается на 1.

Помогите мэру определить наименьшее количество операций, с помощью которых можно перестроить город в красивый.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 5000) — количество башен в городе. Следующая строка содержит n целых чисел, разделенных пробелами: i-тое по порядку число hi (1 ≤ hi ≤ 105) обозначает высоту i-той по порядку башни (слева направо) в изначальной последовательности башен.

Выходные данные

Выведите единственное целое число — наименьшее количество операций, которое требуется, чтобы перестроить город в красивый.

A. Дана строка...

жадные алгоритмы Перебор *1200

Дана строка, состоящая из маленьких латинских букв. Ваша задача — найти длину ее самой длинной подстроки, встречающейся в строке хотя бы 2 раза. Вхождения подстрок могут перекрываться (см. пример 2).

Входные данные

В первой строке входных данных записана строка. Гарантируется, что строка не пуста, состоит из маленьких латинских букв, и ее длина не превосходит 100.

Выходные данные

Выведите одно число — длину самой длинной подстроки, встречающейся в строке хотя бы 2 раза.

A. Драконы

жадные алгоритмы сортировки *1000

Кирито застрял на очередном уровне MMORPG, в которую он играет. Чтобы пройти игру дальше, ему нужно победить всех n драконов, которые живут на этом уровне. Как Кирито, так и драконы обладают силой, которая выражается целым числом. В схватке между двумя противниками исход схватки определяется их силой. Изначально сила Кирито равна s.

Если Кирито вступает в схватку с i-ым (1 ≤ i ≤ n) драконом и его сила не больше, чем сила этого дракона xi, то Кирито проигрывает схватку и умирает. Если же сила Кирито больше, чем сила дракона, то он побеждает дракона и получает бонус — его сила увеличивается на yi.

Кирито может сражаться с драконами в произвольном порядке. Определите, сможет ли он пройти на следующий уровень игры, то есть победить всех драконов, не умирая ни разу.

Входные данные

Первая строка содержит два целых числа s и n (1 ≤ s ≤ 104, 1 ≤ n ≤ 103), разделенные пробелом. Далее следуют n строк: i-ая строка содержит целые числа xi и yi (1 ≤ xi ≤ 104, 0 ≤ yi ≤ 104), разделенные пробелом — силу i-го дракона и бонус за победу над ним.

Выходные данные

В единственной строке выведите «YES» (без кавычек), если Кирито сможет пройти на следующий уровень, и «NO» (без кавычек), если не сможет.

Примечание

В первом примере сила Кирито изначально равна 2. Поскольку сила первого дракона меньше 2, то Кирито может с ним сразиться и победить его. После этого он получает бонус и его сила возрастает до 2 + 99 = 101. Теперь он может победить второго дракона и пройти на следующий уровень.

Во втором примере сила Кирито слишком мала, чтобы он мог сразиться с единственным драконом и победить.

A. Команда

жадные алгоритмы Перебор *800

Однажды трое лучших друзей Петя, Вася и Тоня решили создать команду и участвовать в соревновании по программированию. Обычно на соревнованиях по программированию участникам предлагается несколько задач. Еще перед началом друзья договорились, что они будут реализовывать задачу, если как минимум двое из них придумали и уверены в решении, в противном случае ребята не будут писать решение этой задачи.

На этом соревновании организаторы предложили n задач. Для каждой задачи известно, кто из друзей придумал и уверен в ее решении. Помогите друзьям найти количество задач, по которым они будут писать решение.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 1000) — количество задач на соревновании. Далее в n строках записано по три целых числа, каждое из которых равно 0 или 1. Если первое число в строке равно 1, то Петя уверен в решении этой задачи, в противном случае он не уверен в решении. Второе число обозначает мнение Васи, а третье — мнение Тони. Числа в строках разделены пробелами.

Выходные данные

Выведите единственное целое число — количество задач, которые друзья будут реализовывать на соревновании.

Примечание

В первом примере решение первой задачи знают Петя и Вася, а решение второй знают все трое. Значит, они будут писать решения по этим задачам. Решение третьей задачи знает только Петя, но этого недостаточно, и друзья не будут ее писать.

Во втором примере друзья будут реализовывать только вторую задачу, так как ее решение знают Вася и Тоня.

B. Магия, волшебство и чудеса

жадные алгоритмы Конструктив *1500

Великий Маг и Волшебник Вася очень любит всяческие чудеса и чародейство. Одним взмахом волшебной палочки он умеет превращать одни предметы в какие-нибудь иные. Но, как вы все прекрасно знаете, нет большей магии во Вселенной, чем магия чисел. Именно поэтому Вася очень любит математику и много время проводит, превращая одни числа в другие числа.

Сегодня утром перед ним лежат в ряд n карточек с целыми числами, каждое из которых не меньше 1, но и не больше l. Когда Вася взмахивает волшебной палочкой, то из ряда исчезают две самые правые карточки, а на их месте волшебным образом возникает новая карточка, на которой написана разность левого из исчезнувших чисел и правого. Васе было очень интересно узнать, что будет происходить дальше, и поэтому он махал и махал волшебной палочкой, пока на столе не осталась единственная карточка.

Предположим, что перед Васей изначально лежали такие карточки: 4, 1, 1, 3 (перечислены слева направо). Тогда после первого взмаха на столе будет: 4, 1, -2; после второго: 4, 3; и после третьего на столе останется единственная карточка с числом 1.

Обратите внимание, что несмотря на то, что изначально все числа на карточках были не меньше 1 и не больше l, числа на появившихся карточках могут быть любыми, никаких ограничений на них не накладывается.

Сейчас уже вечер. Вася очень устал и захотел вернуть все обратно, однако совершенно не помнит, какие карточки у него были утром. Он только помнит, что их было n штук, на них были написаны целые числа от 1 до l, и после всех волшебных действий у него осталась единственная карточка с числом d.

Помогите Васе восстановить набор карточек с числами.

Входные данные

В единственной строке через пробел записаны три целых числа: n (2 ≤ n ≤ 100) — начальное количество карточек на столе, d (|d| ≤ 104) — число на карточке, которая осталась на столе после всех магических действий, и l (1 ≤ l ≤ 100) — ограничение на начальные числа.

Выходные данные

Если Вася ошибся, то есть не существует ни одного набора, удовлетворяющего условию, то выведите единственное число -1, в противном случае выведите искомый набор из n целых чисел в пределах от 1 до l. Числа разделяйте пробелами. Числа выводите в том порядке, в котором они были записаны на карточках слева направо. Если существует несколько подходящих наборов чисел, то можете вывести любой из них.

A. Циклы

Бинарный поиск графы жадные алгоритмы Конструктив *1600

Джон Доу задумался о графах. После раздумья он понял, что хочет нарисовать неориентированный граф, в котором будет ровно k циклов длины 3.

Цикл длины 3 — это неупорядоченная тройка различных вершин графа a, b и c, таких, что каждая пара из них соединена ребром графа.

Джон долго рисовал, но у него ничего не получилось. Помогите ему найти такой граф. Обратите внимание, чтобы Джон смог без проблем за день нарисовать найденный граф, количество вершин в найденном графе не должно превышать 100.

Входные данные

В единственной строке записано целое число k (1 ≤ k ≤ 105) — количество циклов длины 3 в искомом графе.

Выходные данные

В первой строке выведите целое число n (3 ≤ n ≤ 100) — количество вершин в найденном графе. В следующих n строках выведите по n символов «0» и «1»: i-тый символ j-той из этих строк должен быть равен «0», если между вершинами i и j нет ребра и «1» в противном случае. Обратите внимание, так как искомый граф неориентированный, i-тый символ j-той строки должен быть равен j-тому символу i-той строки. Граф не должен содержать петель, поэтому i-тый символ i-той строки должен быть равен «0» для всех i.

H. Слияние двух колод

жадные алгоритмы Конструктив *2000

У вас на столе лежат две колоды карт, причем некоторые карты в этих колодах лежат рубашкой вверх, а некоторые — рубашкой вниз. Вы хотите получить из них одну колоду, в которой каждая карта лежит рубашкой вверх. Вы собираетесь сделать это в два этапа.

Первый этап заключается в слиянии обеих колод в одну так, что относительный порядок карт из одной и той же колоды не изменяется. То есть для любых двух различных карт i и j из одной колоды, если карта i лежала выше карты j, то после слияния карта i так же должна лежать выше карты j.

Второй этап заключается в выполнении над полученной после первого этапа колодой операций переворота. За одну операцию переворота вы можете взять несколько верхних карт, целиком перевернуть и положить обратно. Таким образом, переворачивается каждая из взятых карт, а порядок этих карт меняется на противоположный. То есть, самая нижняя карта из тех, что вы взяли, окажется сверху.

Ваша цель — добиться того, чтобы все карты стали лежать рубашкой вверх. Найдите такой такой порядок слияния карт на первом этапе и последовательность операций переворота на втором этапе, чтобы все карты лежали рубашкой вверх, а количество операций переворота было минимальным.

Входные данные

В первой строке входных данных находится единственное целое число n — количество карт в первой колоде (1 ≤ n ≤ 105).

Во второй строке входных данных находится n целых чисел, разделенных одиночными пробелами a1, a2, ..., an (0 ≤ ai ≤ 1). Значение ai равно 0, если i-я карта лежит рубашкой вверх, и 1, если карта лежит рубашкой вниз. Карты заданы в порядке от самой верхней к самой нижней.

В третьей строке входных данных находится целое число m — количество карт во второй колоде (1 ≤ m ≤ 105).

В четвертой строке входных данных находится m целых чисел, разделенных одиночными пробелами b1, b2, ..., bm (0 ≤ bi ≤ 1). Значение bi равно 0, если i-я карта лежит рубашкой вверх, и 1, если карта лежит рубашкой вниз. Карты заданы в порядке от самой верхней к самой нижней.

Выходные данные

В первую строку выведите n + m целых чисел, разделенных пробелом — номера карт в том порядке, в котором они будут находиться после первого этапа. Перечисляйте карты от самой верхней к самой нижней. Картам первой колоды должны соответствовать их номера от 1 до n в порядке от самой верхней карты к самой нижней, а картам второй колоды должны соответствовать их номера, увеличенные на n, то есть числа от n + 1 до n + m в порядке от самой верхней карты во второй колоде к самой нижней.

Во второй строке выведите одно целое число x — минимальное количество операций переворота, которое необходимо выполнить, чтобы все карты в колоде лежали рубашкой вверх. В третьей строке выведите x целых чисел: c1, c2, ..., cx (1 ≤ ci ≤ n + m), каждое из которых означает, сколько карт следует взять сверху колоды для выполнения очередной операции переворота. Операции выводите в том порядке, в котором их надо выполнять.

Если оптимальных решений несколько, выведите любой из них. Гарантируется, что минимальное количество операций не превышает 6·105.

D. Д-Декомпозиция

графы Деревья жадные алгоритмы поиск в глубину и подобное *2000

Вам задано неориентированное дерево s, состоящее из n вершин. Необходимо построить для него оптимальную Д-декомпозицию. Определим Д-декомпозицию следующим образом.

Обозначим за v множество всех вершин s. Рассмотрим неориентированное дерево t, вершинами которого являются некоторые непустые подмножества v, которые обозначим через xi . Дерево t является Д-декомпозицией s, если выполняются следующие условия:

  1. объединение всех xi равно v;
  2. для любого ребра (a, b) дерева s существует вершина дерева t, содержащая как a, так и b;
  3. если вершины дерева t xi и xj, содержат вершину a дерева s, то все вершины дерева t, лежащие на пути из xi в xj также содержат вершину a, то есть это условие эквивалентно тому, что все вершины дерева t, которые содержат вершину a дерева s, образуют связное поддерево дерева t.

Очевидно, что существует много различных деревьев t, являющихся Д-декомпозициями дерева s. Например, Д-декомпозицией является дерево, состоящее из одной вершины, представляющей собой все множество v.

Назовем мощностью вершины xi количество вершин дерева s, которые в ней содержатся. Выберем в дереве t вершину с максимальной мощностью. Пусть ее мощность равна w. Тогда весом Д-декомпозиции t назовем величину w. Оптимальной назовем Д-декомпозицию, у которой вес минимален.

Вам необходимо найти оптимальную Д-декомпозицию, заданного дерева s имеющую наименьшее количество вершин.

Входные данные

В первой строке задано единственное целое число n (2 ≤ n ≤ 105), обозначающее количество вершин в дереве s.

В каждой из следующих n - 1 строк через пробел заданы два целых числа ai, bi (1 ≤ ai, bi ≤ nai ≠ bi), обозначающие, что вершины дерева s с номерами ai и bi соединены ребром.

Считайте, что вершины дерева s пронумерованы от 1 до n. Гарантируется, что s является деревом.

Выходные данные

В первой строке выведите единственное целое число m, обозначающее количество вершин в искомой Д-декомпозиции.

Далее выведите m строк, содержащих описания вершин Д-декомпозиции. В i-той (1 ≤ i ≤ m) из них выведите описание вершины xi Д-декомпозиции. Описание каждой из вершин xi должно начинаться с целого числа ki, обозначающего количество вершин исходного дерева s, которые содержатся в вершине xi. Далее через пробел нужно вывести ki различных целых чисел — номера вершин из s, содержащихся в xi, в любом порядке.

Далее выведите m - 1 строк, содержащих по два целых числа pi, qi (1 ≤ pi, qi ≤ mpi ≠ qi). Пара чисел pi, qi обозначает наличие ребра между вершинами xpi и xqi Д-декомпозиции.

Выведенная Д-декомпозиция должна быть оптимальной Д-декомпозицией для заданного дерева s и содержать минимально возможное количество вершин среди оптимальных. Если существует несколько оптимальных Д-декомпозиций с минимальным количеством вершин, выведите любую из них.

C. Братья-Пожиратели Мира

Деревья дп жадные алгоритмы поиск в глубину и подобное *2100

Вы, наверное, слышали о двух братьях, мечтающих править миром. Коль скоро все их предыдущие планы провалились, на этот раз они решили сотрудничать друг с другом для того, чтобы править миром.

Как вы знаете, в мире существует n стран. Эти страны связаны n - 1 направленными дорогами. Если не учитывать направлений дорог, то между каждой парой стран в мире существует уникальный путь, проходящий по каждой дороге не более одного раза.

Каждый из братьев хочет установить свое правление в какой-то стране, сделав это, он сможет контролировать страны, до которых можно добраться из его страны по направленным дорогам.

Братья смогут править миром, если найдется не более двух стран, которые они могут выбрать (и установить свои правления в этих странах), таких, что любая другая страна находится под контролем по крайней мере одной из них. Для того, чтобы сделать это возможным, братья хотят, изменить направление минимального количества дорог. Ваша задача — вычислить это минимальное количество дорог.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 3000). Каждая из последующих n - 1 строк содержит два целых числа, разделенных пробелом, ai и bi (1 ≤ ai, bi ≤ nai ≠ bi), которые означают, что есть дорога из страны ai в страну bi.

Вы можете считать страны пронумерованными от 1 до n. Гарантируется, что если не учитывать направление дорог, то есть уникальный путь между каждой парой стран в мире, проходящий по каждой дороге не более одного раза.

Выходные данные

В единственной строке выходных данных выведите минимальное количество дорог, которым надо поменять направление для того, чтобы братья смогли управлять миром.

A. Два Мешка Картошки

жадные алгоритмы математика реализация *1200

У Валеры было два мешка картошки, в первом из них было x (x ≥ 1) картофелин, а во втором — y (y ≥ 1) картофелин. Валера — очень рассеянный мальчик, поэтому первый мешок картошки (в нем было x картофелин) Валера потерял. Валера хорошо помнит, что суммарное количество картофелин (x + y) в обоих мешках, во-первых, было не больше n, a, во-вторых, делилось на k.

Помогите Валере определить сколько картофелин могло быть в первом мешке. Выведите все такие возможные количества в возрастающем порядке.

Входные данные

В первой строке записаны три целых числа через пробел y, k, n (1 ≤ y, k, n ≤ 109;  ≤ 105).

Выходные данные

Выведите список целых чисел разделенных пробельными символами — все возможные значения x в возрастающем порядке. Каждое значение, должно быть выведено ровно один раз.

Если нет ни одного подходящего значения x, выведите единственное целое число -1.

E. Ремонт дорог

графы жадные алгоритмы поиск в глубину и подобное *2800

В стране Берляндии n городов. Они пронумерованы целыми числами от 1 до n. Город номер 1 является столицей государства. Между некоторыми парами городов проложены дороги с односторонним движением, однако не все из них находятся в хорошем состоянии. Про каждую дорогу известно, нуждается ли она в ремонте. Если дорога нуждается в ремонте, то проезд по ней запрещен. Однако правительство Берляндии может отремонтировать дорогу и возобновить проезд по ней.

Сейчас над Берляндией нависла угроза войны с соседним государством, поэтому в столице было принято решение отправить в каждый город по одному военному отряду. Отряды могут передвигаться только по существующим дорогам, потому что на создание новых нет ни времени, ни средств. Однако для того, чтобы добраться до некоторых городов, возможно, придется отремонтировать какие-то дороги.

Конечно же, чтобы победить противника нужно много сил, поэтому силы надо экономить. С этой целью правительство Берляндии хочет отремонтировать минимальное число дорог, чтобы после этого военные отряды смогли добраться из столицы в любой другой город по отремонтированным дорогам или дорогам, уже находящимся в хорошем состоянии. Вам необходимо помочь правительству Берляндии и найти, какие дороги следует отремонтировать.

Входные данные

В первой строке через пробел заданы два целых числа n и m (1 ≤ n, m ≤ 105) — количество городов и количество дорог в Берляндии.

В следующих m строках через пробел заданы три целых числа ai, bi, ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 0 ≤ ci ≤ 1), обозначающие дорогу из города ai в город bi. Если ci равно 0, то данная дорога находится в хорошем состоянии, если ci равно 1, то она нуждается в ремонте.

Гарантируется, что между городами существует не более одной дороги в каждом из направлений.

Выходные данные

Если даже после ремонта всех дорог из столицы нельзя добраться до какого-нибудь из городов, то выведите -1. В противном случае в первую строку выведите минимальное количество дорог, которые нужно отремонтировать, а во вторую строку выведите номера этих дорог через одиночные пробелы.

Дороги нумеруются, начиная с 1, в том порядке, в котором они заданы во входном файле.

Если существует несколько наборов, состоящих из минимального числа дорог, после ремонта которых все города станут достижимы из столицы, выведите любой из них.

Если в любой из городов можно добраться по дорогам, уже находящимся в хорошем состоянии, выведите 0 в единственную строку выходного файла.

A. Old Peykan

жадные алгоритмы *1300

There are n cities in the country where the Old Peykan lives. These cities are located on a straight line, we'll denote them from left to right as c1, c2, ..., cn. The Old Peykan wants to travel from city c1 to cn using roads. There are (n - 1) one way roads, the i-th road goes from city ci to city ci + 1 and is di kilometers long.

The Old Peykan travels 1 kilometer in 1 hour and consumes 1 liter of fuel during this time.

Each city ci (except for the last city cn) has a supply of si liters of fuel which immediately transfers to the Old Peykan if it passes the city or stays in it. This supply refreshes instantly k hours after it transfers. The Old Peykan can stay in a city for a while and fill its fuel tank many times.

Initially (at time zero) the Old Peykan is at city c1 and s1 liters of fuel is transferred to it's empty tank from c1's supply. The Old Peykan's fuel tank capacity is unlimited. Old Peykan can not continue its travel if its tank is emptied strictly between two cities.

Find the minimum time the Old Peykan needs to reach city cn.

Input

The first line of the input contains two space-separated integers m and k (1 ≤ m, k ≤ 1000). The value m specifies the number of roads between cities which is equal to n - 1.

The next line contains m space-separated integers d1, d2, ..., dm (1 ≤ di ≤ 1000) and the following line contains m space-separated integers s1, s2, ..., sm (1 ≤ si ≤ 1000).

Output

In the only line of the output print a single integer — the minimum time required for The Old Peykan to reach city cn from city c1.

Note

In the second sample above, the Old Peykan stays in c1 for 3 hours.

D. Спор

графы жадные алгоритмы поиск в глубину и подобное *2100

У Валеры имеется n счетчиков, пронумерованных от 1 до n. Некоторые из них соединены проводами, также на каждом из счетчиков имеется специальная кнопка.

Изначально, во всех счетчиках записано число 0. При нажатии кнопки, расположенной на некотором счетчике, записанное в нем значение увеличивается на единицу. Также значения, записанные во всех счетчиках, непосредственно соединенных с ним проводом, увеличиваются на единицу.

Валера и Игнат затеяли небольшой спор, заключающийся в следующем. Игнат загадал последовательность из n целых чисел a1, a2, ..., an. Валере нужно выбрать некоторый набор различных счетчиков и нажать кнопки на каждом из них ровно по одному разу (на остальных счетчиках кнопки останутся не нажатыми). Если после этого найдется счетчик с номером i, в котором записано значение равное ai, то Валера проигрывает спор, иначе он побеждает в споре.

Помогите Валере определить, на каких счетчиках нужно нажать кнопки, чтобы выиграть спор.

Входные данные

В первой строке через пробел записаны два целых числа n и m (1 ≤ n, m ≤ 105), обозначающие количество счетчиков у Валеры и количество пар счетчиков, соединенных проводами, соответственно.

В каждой из следующих m строк через пробел записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), которые обозначают, что счетчики с номерами ui и vi соединены проводом. Гарантируется, что каждая пара соединенных счетчиков встречается во входных данных ровно один раз.

В последней строке через пробел записаны n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 105), где ai — значение, которое загадал Игнат для i-го счетчика.

Выходные данные

Если Валера не сможет победить в споре, выведите в первой строке -1.

В противном случае в первой строке выведите целое число k (0 ≤ k ≤ n). Во второй строке выведите через пробел k различных целых чисел — номера счетчиков, на которых Валере нужно нажать кнопки, чтобы выиграть спор, в любом порядке.

Если существует несколько ответов, выведите любой.

C. Игра с монетами

жадные алгоритмы *1700

Два пирата Поликарп и Василий играют в очень интересную игру. У них есть n сундуков с монетами, сундуки пронумерованы целыми числами от 1 до n. В сундуке c номером i находится ai монеток.

Поликарп и Василий по очереди совершают ходы. Первым ходит Поликарп. За один ход игроку разрешается выбрать целое положительное число x (2·x + 1 ≤ n) и взять по монетке из трех сундуков с номерами x, x, x + 1. Может оказаться, что в каком-то из этих сундуков нет монеток, в таком случае игрок не берет монетку из этого сундука. Игра заканчивается, когда все сундуки становятся пустыми.

Поликарп — человек не алчный. Поликарп — человек ленивый. Поэтому ему очень интересно, за какое наименьшее количество ходов может закончиться игра. Помогите Поликарпу, определите за какое минимальное количество ходов может закончиться игра. Учтите, Поликарп считает не только свои ходы, ходы Василия он тоже считает.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100) — количество сундуков с монетами. Во второй строке записана последовательность целых чисел, разделенных пробелами: a1, a2, ..., an (1 ≤ ai ≤ 1000), где ai — количество монет в сундуке с номером i на начало игры.

Выходные данные

Выведите единственное целое число — за какое наименьшее количество ходов может закончиться игра. Если ни при какой последовательности ходов игра не заканчивается выведите -1.

Примечание

В первом тестовом примере не существует ни одного хода, который можно было бы сделать. Поэтому опустошить сундуки не получится.

Во втором тестовом примере существует только один возможный ход x = 1. Этот ход нужно повторить как минимум 3 раза, чтобы опустошить третий сундук.

D. Восстановление таблицы

жадные алгоритмы Конструктив *1500

Недавно Поликарп изучил операцию «побитового И» (она же — операция «AND») целых неотрицательных чисел. Теперь он хочет продемонстрировать учителю информатики в школе свое виртуозное владение изученной операцией.

Для этого Поликарп пришел в школу пораньше и записал на доске последовательность целых неотрицательных чисел a1, a2, ..., an. А также квадратную матрицу b размера n × n. Элемент матрицы b, стоящий в i-той строке в j-том столбце (обозначим его bij), равен:

  • «побитовому И» чисел ai и aj (то есть bij = ai & aj), если i ≠ j;
  • -1, если i = j.

Выписав матрицу b, Поликарп очень обрадовался и стер с доски последовательность a. Вот незадача — без этой последовательности учитель не сможет проверить правильно ли Поликарп произвел вычисления. Поликарпу срочно надо восстановить стертую последовательность чисел, иначе он не докажет, что умеет правильно считать.

Помогите Поликарпу, по матрице b восстановите последовательность чисел a1, a2, ..., an, которую он стер с доски. Поликарп не любит большие числа, поэтому каждое число в восстановленной последовательности не должно превышать 109.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100) — размер квадратной матрицы b. В следующих n строках записана матрица b. В i-той из этих строк записаны n целых чисел, разделенных пробелами: j-тое число обозначает элемент матрицы bij. Гарантируется, что для всех i (1 ≤ i ≤ n) выполняется bii = -1. Гарантируется, что для всех i, j (1 ≤ i, j ≤ ni ≠ j) выполняется 0 ≤ bij ≤ 109, bij = bji.

Выходные данные

Выведите n целых неотрицательных чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — последовательность, которую стер Поликарп. Выведенные числа разделяйте пробельными символами.

Гарантируется, что существует последовательность a, удовлетворяющая условиям задачи. Если существует несколько таких последовательностей, разрешается вывести любую.

Примечание

Если вы не знаете, что такое операция «побитовое И», можете прочитать: http://ru.wikipedia.org/wiki/Битовые_операции.

E. Происшествие в клубе

жадные алгоритмы реализация *1400

Не везет Поликарпу последнее время! Не успел Поликарп устроиться в клуб «Двоичный кот» охранником, как в клубе произошло ограбление. Украдены все запасы мороженого.

В ночь ограбления Поликарп аккуратно вел записи о посетителях клуба. Каждый раз, когда посетитель заходил в клуб, он ставил в своих записях символ «+». Аналогично, каждый раз, когда посетитель выходил из клуба, он ставил в своих записях символ «-». Известно, что все события входа и выхода происходили последовательно, то есть никакие два не происходили одновременно. Поликарп не помнит был ли кто-либо в клубе на момент начала его смены и на момент окончания.

В настоящий момент следствие интересует вопрос — какое наименьшее количество различных людей мог видеть Поликарп. Следует считать, что он видит любого входящего и выходящего человека. Каждый человек мог входить и выходить произвольное количество раз.

Входные данные

Единственная строка входных данных содержит последовательность символов «+» и «-», символы записаны подряд без каких-либо разделителей. Символы записаны в порядке возникновения соответствующих событий. Заданная последовательность имеет длину от 1 до 300 символов, включительно.

Выходные данные

Выведите искомое минимальное количество человек.

A. Неудачная сортировка

жадные алгоритмы Конструктив сортировки *900

Мальчик Валера изучает алгоритм сортировки массива целых чисел. После изучения теории он перешел к практике. В результате он написал программу, которая сортирует массив из n целых чисел a1, a2, ..., an по неубыванию. Ниже изображен псевдокод программы, которую написал Вася. На вход программе дается число n и массив a.


цикл по переменной i от 1 до n - 1
    цикл по переменной j от i до n - 1
        если (aj > aj + 1), то поменять местами значения элементов aj и aj + 1

Однако Валера мог допустить ошибку, поскольку еще не до конца выучил алгоритм сортировки. Если Валера все-таки ошибся в своей программе, Вам нужно привести контр-пример, для которого его программа будет работать неверно (то есть после выполнения программы, массив не будет отсортирован по неубыванию). Если такого примера для заданного значения n не существует, выведите -1.

Входные данные

Вам задано единственное целое число n (1 ≤ n ≤ 50) — размер сортируемого массива.

Выходные данные

Выведите через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100) — контр-пример, для которого алгоритм сортировки Валеры будет неправильно работать. Если невозможно привести контр-пример, удовлетворяющий описанным условиям, выведите -1.

Если существует несколько контр-примеров, состоящих из n чисел, разрешается вывести любой.

B. Прибавляй и умешьшай

жадные алгоритмы математика *1300

У Поликарпа есть массив, состоящий из n целых чисел a1, a2, ..., an. Поликарп любит, когда числа в массиве совпадают. Поэтому он хочет сделать так, чтобы в массиве было как можно больше одинаковых чисел. Для этого Поликарп несколько раз выполняет следующую операцию:

  • он выбирает два элемента массива ai, aj (i ≠ j);
  • затем, одновременно увеличивает число ai на 1 и уменьшает число aj на 1, то есть выполняет ai = ai + 1 и aj = aj - 1.

Указанная операция изменяет ровно два различных элемента массива. Поликарп может применять описанную операцию бесконечное количество раз.

Теперь он хочет узнать, какое максимальное количество равных элементов массива можно получить, выполнив произвольное количество таких операций. Помогите Поликарпу.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — размер массива. Во второй строке через пробел заданы целые числа a1, a2, ..., an (|ai| ≤ 104) — исходный массив.

Выходные данные

Выведите единственное целое число — какое максимальное количество равных элементов массива можно получить, выполнив произвольное количество указанных операций.

C. Конкурс красоты

жадные алгоритмы Конструктив Перебор *1600

У генерала Генералова в батальоне n солдат. Совсем скоро будет проходить солдатский конкурс красоты, который будет длиться k дней. Генералов принял решение, что его батальон будет участвовать в конкурсе. Теперь ему нужно определиться с составом участников.

Все солдаты батальона обладают различной красотой, которая выражается целым положительным числом. Величина ai обозначает красоту i-го солдата.

В каждый день из k дней Генералов должен отправлять на конкурс отряд солдатов. Красота отряда солдатов вычисляется как сумма красот солдатов, которые входят в этот отряд. Генералов хочет удивить жюри конкурса красоты, поэтому в каждый из k дней красота посланного отряда должна быть уникальной. Другими словами все k красот посланных отрядов должны быть различными числами.

Помогите Генералову выбрать k различных по красоте составов для конкурса. Обратите внимание, что Генералов не может не посылать солдат в какой-то из дней, то есть отряд посланных на конкурс солдат никогда не должен быть пустым.

Входные данные

В первой строке заданы два целых числа n, k (1 ≤ n ≤ 50; 1 ≤ k ≤  ) — количество солдат и количество дней в конкурсе соответственно. Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 107) — красоты солдат батальона.

Гарантируется, что в батальоне Генералова нет двух солдат с одинаковой красотой.

Выходные данные

Выведите k строк: в i строке выведите описание состава, который будет участвовать в конкурсе в i-ый день. Описание состоит из целого числа ci (1 ≤ ci ≤ n) — количество солдат в отряде в i-ый день конкурса и ci различных целых чисел p1, i, p2, i, ..., pci, i — красоты солдат в отряде в i-ый день конкурса. Красоты солдат разрешается выводить в любом порядке.

Числа в строках разделяйте пробелами. Гарантируется, что существует решение, удовлетворяющее условиям задачи. Если существует несколько ответов, выведите любой из них.

D. Конфеты - каждому!

Бинарный поиск жадные алгоритмы реализация *2300

Скоро Новый год. Мы все вместе в Простоквашино уедем. Будем там на лыжах кататься, печку топить, а в Новый год карнавал устроим. Ты нарядишься казаком или узбеком. Будешь вкусный плов готовить и казачью песню петь про ракитовый куст.
Эдуард Николаевич Успенский

В деревне Простоквашино празднуют Новый год. Дядя Федор вместе со своими друзьями — котом Матроскиным и псом Шариком решил угостить всех жителей на своей улице конфетами. Дядя Федор и его друзья решили, что жителям каждого дома на их улице они подарят по одному килограмму конфет. Таким образом им потребуется столько килограммов конфет, сколько домов есть на их улице.

Улицу, где живут трое из Простоквашино, можно мысленно разбить на n последовательных участков одинаковой длины. С любого участка можно перейти на один из соседних участков за одну единицу времени. Каждый из участков бывает одного из трех типов: пустой участок, участок с домом или участок с магазином. В магазине Дядя Федор и его друзья могут купить конфеты, но не более одного килограмма конфет в одном магазине (продавцы заботятся о том, чтобы жители деревни не злоупотребляли сладким).

После того, как трое из Простоквашино выйдут из своего дома, они окажутся на первом участке дороги. Для попадания на этот участок дороги тоже требуется одна единица времени. Можно считать, что Дядя Федор и его друзья могут нести неограниченное число килограммов конфет. Каждый раз, когда они оказываются на участке с домом, они могут отдать один килограмм конфет жителям дома, а могут просто перейти на другой участок. Если трое из Простоквашино уже отдавали конфеты жителям какого-то дома, то еще раз они этого сделать не могут. Аналогично, если Дядя Федор и его друзья находятся на участке с магазином, то они могут либо купить в нем килограмм конфет, либо пропустить этот магазин. Если в каком-то магазине они уже купили килограмм конфет, то продавец их запомнил и второй раз не продаст им больше ни грамма конфет. Временем на покупку и вручение конфет можно пренебречь. Дядя Федор с котом Матроскиным и псом Шариком не хотят, чтобы жители хотя бы одного дома остались без угощения.

Трое из Простоквашино хотят потратить не более t единиц времени на раздачу конфет, чтобы успеть подготовиться к празднованию Нового года. Для того, чтобы успеть раздать все конфеты, возможно, придется изначально взять с собой дополнительно k килограммов конфет.

Дядя Федор хочет знать минимальное число k килограммов конфет, которое необходимо взять с собой, чтобы успеть угостить жителей каждого дома на своей улице сладостями.

Ваша задача — написать программу, которая определит минимально возможное значение k.

Входные данные

Первая строка входных данных содержит два целых числа n и t, разделенных пробелами (2 ≤ n ≤ 5·105, 1 ≤ t ≤ 109). Вторая строка входных данных содержит n символов, i-ый из которых равен «H» (если i-ый участок содержит дом), «S» (если i-ый участок содержит магазин) или «.» (если i-ый участок не содержит ни дома, ни магазина).

Гарантируется, что имеется хотя бы один участок с домом.

Выходные данные

Если не существует ни одного значения k, при котором возможно не более, чем за t единиц времени угостить обитателей всех домов, то в единственной строке выведите «-1» (без кавычек). Иначе в единственной строке выведите минимально возможное значение k.

Примечание

В первом примере магазинов столько же, сколько и домов. Если не брать с собой ни одного килограмма конфет, то для того, чтобы угостить жителей самого первого дома потребуется сделать хотя бы один шаг назад, на что у друзей из Простоквашино абсолютно нет времени. Если же взять с собой один килограмм конфет, то возвращаться ни разу не потребуется.

Во втором примере число магазинов равняется числу домов и времени предостаточно. Можно купить во всех магазинах конфеты пройдя улицу в одном направлении и раздать их при проходе в обратном направлении.

В третьем примере на улице меньше магазинов, чем домов. Придется друзьями из Простоквашино взять недостающее число килограммов конфет с собой из дома.

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.

A. Мальчики и девочки

жадные алгоритмы *1100

В классе учатся n мальчиков и m девочек. Они должны встать в шеренгу так, чтобы мальчики и девочки в ней чередовались как можно больше. Пусть позиции в шеренге пронумерованы слева направо числами от 1 до n + m. Тогда количество целых чисел i (1 ≤ i < n + m) таких, что на позициях с номерами i и i + 1 стоят дети разного пола (на позиции номер i стоит девочка, а на позиции номер i + 1 стоит мальчик, или наоборот), должно быть как можно больше.

Помогите детям и укажите, как им следует встать.

Входные данные

В единственной строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100), разделенные пробелом.

Выходные данные

Выведите строку из n + m символов. Выводите в i-ой позиции в строке символ «B», если на i-ой позиции в предлагаемой Вами расстановке должен стоять мальчик, и «G», если должна стоять девочка.

Разумеется, количество символов «B» должно быть равно n, а количество символов «G» должно быть равно m. Если оптимальных решений несколько, выведите любое из них.

Примечание

В первом примере также возможен ответ BGBGBG.

Во втором примере ответ BBGBGB также является оптимальным.

C. Текстовый редактор

графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное Структуры данных *1600

Нехотя, тыкая пальцами в кнопки на клавиатуре, Вася выдавливает из себя скудные мысли по поводу того, о чем же думал Андрей Болконский, глядя на небо Аустерлица... Ну как объяснить учительнице по литературе, что Вася не собирается становиться писателем, а хочет стать программистом. Поэтому программу он напишет с удовольствием, а вот сочинение дается ему с трудом.

Пока Вася думал о том, как выудить из себя очередное предложение, ему в голову пришел неожиданный вопрос: а какое наименьшее количество нажатий на кнопки ему нужно сделать, чтобы переместить курсор из одной позиции в другую?

Опишем его вопрос более формально: для набора текста Вася использует текстовый редактор. Он уже написал n строчек, в i-й строке написано ai символов (включая пробелы). Если в некоторой строке записано k символов, то всего в этой строке существует (k + 1) позиция, в которой может находиться курсор: перед каким-то символом или после всех символов (в конце строки). Таким образом, положение курсора задается парой чисел (r, c), где r — номер строки, а c — позиция курсора в ней (позиции нумеруются с единицы от начала строки).

Для перемещения курсора Вася не использует мышь. Он использует клавиши «Вверх», «Вниз», «Вправо» и «Влево». При нажатии на каждую из этих клавиш курсор перемещается следующим образом. Пусть до нажатия соответствующей клавиши курсор находился в позиции (r, c), тогда после нажатия клавиши:

  • «Вверх»: если курсор находился в первой строке (r = 1), то он не перемещается. Иначе он перемещается на предыдущую строку (с номером r - 1) в ту же позицию. При этом, если предыдущая строка короткая, то есть курсор не может находиться в ней в позиции c, то курсор перемещается на последнюю позицию строки с номером r - 1;
  • «Вниз»: если курсор находился в последней строке (r = n), то он не перемещается. Иначе он перемещается на следующую строку (с номером r + 1) в ту же позицию. При этом, если следующая строка короткая, то есть курсор не может находиться в ней в позиции c, то курсор перемещается на последнюю позицию строки с номером r + 1;
  • «Вправо»: если курсор может переместиться вправо в текущей строке (c < ar + 1), то он перемещается вправо (в позицию c + 1). Иначе он находится в конце строки и, при нажатии клавиши «Вправо», никуда не перемещается;
  • «Влево»: если курсор может переместиться влево в текущей строке (c > 1), то он перемещается влево (в позицию c - 1). Иначе он находится в начале строки и, при нажатии клавиши «Влево», никуда не перемещается.

Вам задано количество строк в текстовом файле и количество символов, записанное в каждой строке этого файла. Найдите наименьшее количество нажатий описанных выше клавиш, требуемое для того, чтобы переместить курсор из положения (r1, c1) в положение (r2, c2).

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100) — количество строк в файле. Во второй строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 105), разделенных одиночными пробелами. В третьей строке записано четыре целых числа r1, c1, r2, c2 (1 ≤ r1, r2 ≤ n, 1 ≤ c1 ≤ ar1 + 1, 1 ≤ c2 ≤ ar2 + 1).

Выходные данные

Выведите единственное число — наименьшее количество нажатий, требуемое для того, чтобы переместить курсор из положения (r1, c1) в положение (r2, c2).

Примечание

В первом примере в редакторе записаны четыре строки. Обозначим цифрами возможные позиции курсора в строке. Буквой s обозначим начальную позицию курсора, буквой t — конечную. Тогда все возможные положения курсора в текстовом редакторе описываются следующей таблицей.

123

12

123s567

1t345

Один из возможных ответов в данном примере: «Влево», «Вниз», «Влево».

C. Анаграмма

жадные алгоритмы Строки *1800

Строка x называется анаграммой строки y, если можно переставить буквы в строке x, чтобы получилась в точности строка y. Например, строки «DOG» и «GOD» являются анаграммами, строки «BABA» и «AABB» — тоже, а вот строки «ABBAC» и «CAABA» — нет.

Вам задано две строки s и t одинаковой длины, состоящие из заглавных букв латинского алфавита. Вам необходимо получить из строки s анаграмму строки t. Вам разрешается выполнять операции замены: каждая операция состоит в замене какого-то символа строки s на любой другой. Получите анаграмму строки t за наименьшее количество операций замены. Если можно получить несколько анаграмм строки t за наименьшее количество операций, получите лексикографически наименьшую строку.

Лексикографический порядок строк — это привычный нам порядок «как в словаре». Формально, строка p длины n лексикографически меньше строки q такой же длины, если p1 = q1, p2 = q2, ..., pk - 1 = qk - 1, pk < qk для некоторого k (1 ≤ k ≤ n). Здесь символы в строках нумеруются от 1. Символы строк сравниваются по алфавитному порядку.

Входные данные

Входные данные состоят из двух строк. В первой дана строка s, во второй – строка t. Строки имеют одинаковую длину (от 1 до 105 символов) и состоят из прописных букв латинского алфавита.

Выходные данные

В первой строке выведите z — наименьшее количество операций замены, требуемых для того, чтобы получить анаграмму строки t из строки s. Во второй строке выведите лексикографически минимальную анаграмму, которую можно получить за z операций.

Примечание

Во втором примере существует восемь анаграмм строки t, которые можно получить из строки s заменой ровно двух букв: «ADBADC», «ADDABC», «CDAABD», «CDBAAD», «CDBADA», «CDDABA», «DDAABC», «DDBAAC». Эти анаграммы перечислены в лексикографическом порядке. Лексикографически минимальная анаграмма — это «ADBADC».

A. Розетки

жадные алгоритмы реализация сортировки *1100

У Васи дома много устройств, которые работают от электричества. У него есть n сетевых фильтров, чтобы через них подключать устройства к электросети, i-ый сетевой фильтр имеет ai розеток.

Всего у Васи в квартире m устройств, а также k электрических розеток, к которым можно подключать сетевые фильтры или устройства напрямую. Конечно, сетевые фильтры можно подключать к другим сетевым фильтрам. Устройство (или сетевой фильтр) считается подключенным к электричеству, либо если оно подключено к одной из k электрических розеток, либо если оно подключено к какому-то подключенному к электричеству сетевому фильтру.

Какое минимальное количество сетевых фильтров из заданного набора понадобится Васе, чтобы подключить все имеющиеся устройства к электросети? Обратите внимание, что все устройства и сетевые фильтры при подключении занимают одну розетку и что к одной розетке можно подключить либо одно устройство, либо один сетевой фильтр.

Входные данные

В первой строке заданы три целых числа n, m, k (1 ≤ n, m, k ≤ 50) — количество сетевых фильтров, количество устройств и количество розеток, к которым можно подключаться напрямую, соответственно. Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 50) — число ai означает количество розеток на i-ом сетевом фильтре.

Выходные данные

Выведите единственное целое число — минимальное количество сетевых фильтров, которое потребуется для подключения всех устройств. Если все устройства подключить невозможно, используя даже все сетевые фильтры, выведите -1.

Примечание

В первом тестовом примере можно подключить первый сетевой фильтр напрямую к электросети. После такого подключения получится 5 (3 на фильтре и 2 оставшиеся для подключения напрямую) свободных розеток для дальнейшего подключения к электросети. Таким образом, одного фильтра достаточно для подключения 5 устройств.

Один из оптимальных способов подключения во втором тестовом примере — подключить второй сетевой фильтр напрямую, а четвертый сетевой фильтр подключить в одну из розеток на втором сетевом фильтре. В таком случае получится ровно 7 (1 для подключения напрямую, 2 на втором фильтре, 4 на четвертом фильтре) свободных розеток для дальнейшего подключения к электросети. Используя один фильтр, подключить 7 устройств никак не получится.

B. Игра в кубики

жадные алгоритмы игры реализация *1300

Петя и Вася захотели немного поиграть. Они нашли n кубиков красного цвета и m кубиков синего цвета. Игра заключается в следующем: игроки по очереди берут по одному кубику одного из двух цветов и выставляют их в ряд слева направо (всего будет выставлено n + m кубиков в ряд). Первым ходит Петя. Задача Пети — получить как можно больше пар соседних кубиков одного цвета. Задача Васи — получить как можно больше пар соседних кубиков разных цветов.

Количество очков Пети в игре — это количество пар соседних в ряду кубиков одного цвета, количество очков Васи в игре — это количество пар соседних в ряду кубиков разного цвета. От Вас требуется узнать счет в конце игры (количество очков Пети и Васи соответственно), если оба мальчика играют оптимально. «Играть оптимально» означает в первую очередь максимизировать количество своих очков, а во вторую — минимизировать количество очков соперника.

Входные данные

В единственной строке через пробел записаны два целых числа n и m (1 ≤ n, m ≤ 105) — количество красных и синих кубиков соответственно.

Выходные данные

В единственную строку через пробел выведите два числа — количество очков Пети и Васи соответственно при оптимальной игре обоих.

Примечание

В первом тестовом примере для Пети оптимально самым первым ходом выставить в ряд синий кубик. После этого хода останутся только красные кубики, поэтому на конец игры ряд кубиков (слева направо) будет иметь следующий вид: [синий, красный, красный, красный]. Значит, Петя получит 2 очка, а Вася — 1 очко.

Если бы первым ходом Петя выставил красный кубик, то, при дальнейшей оптимальной игре обоих мальчиков, Петя получил бы 1 очко, а Вася — 2 очка.

D. Сумма

жадные алгоритмы математика *1900

Вася нашел лист бумаги, на котором был написан массив, состоящий из n целых чисел a1, a2, ..., an. Вася заметил, что для массива выполняется условие ai ≤ ai + 1 ≤ 2·ai для всех целых положительных i (i < n).

Вася хочет поставить перед каждым числом массива либо знак «+», либо знак «-». Таким образом, Вася получит выражение, состоящее из n слагаемых. Значением полученного выражения назовем сумму всех его элементов. Требуется так расставить знаки «+» и «-» перед каждым числом, чтобы значение выражения s удовлетворяло ограничениям 0 ≤ s ≤ a1. Выведите любую последовательность знаков «+» и «-», удовлетворяющую заданным ограничениям. Гарантируется, что решение задачи существует.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — размер массива. Во второй строке через пробел заданы целые числа a1, a2, ..., an (0 ≤ ai ≤ 109) — исходный массив.

Гарантируется, что выполняется условие ai ≤ ai + 1 ≤ 2·ai для всех целых положительных i (i < n).

Выходные данные

В единственной строке выведите последовательность из n символов «+» и «-», в которой i-ый символ означает знак, поставленный перед числом ai. Значение получаемого выражения s должно удовлетворять ограничениям 0 ≤ s ≤ a1. Если решений несколько, разрешается вывести любое.

A. Маленький Слоник и биты

жадные алгоритмы математика *1100

У Маленького Слоника есть целое число a, записанное в двоичной системе счисления. Он хочет написать это число на листке бумаги.

Чтобы число a поместилось на листке бумаги, Маленький Слоник обязан удалить ровно одну любую цифру числа a в двоичной записи, при этом образуется новое число из остальных двоичных цифр, записанных в соответствующем порядке (возможно, с лидирующими нулями).

Маленький Слоник хочет, чтобы записанное на бумагу число было как можно больше. Помогите ему найти максимальное число, которое может получиться в результате удаления ровно одной двоичной цифры, и выведите его в двоичной системе счисления.

Входные данные

В единственной строке задано целое число a, записанное в двоичной системе счисления без лидирующих нулей. Количество цифр этого числа больше 1 и не превышает 105.

Выходные данные

В единственной строке выведите число, записанное без лидирующих нулей в двоичной системе счисления — ответ на задачу.

Примечание

В первом примере лучше всего удалить вторую цифру, при этом образуется число 112 = 310.

Во втором примере, лучше всего удалить третью или четвертую цифры — после этого получится число 110102 = 2610.

B. Правильная скобочная подпоследовательность

жадные алгоритмы *1400

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Однажды Васе попалась скобочная последовательность. Он решил удалить из нее некоторые скобки так, чтобы последовательность стала правильной. Какую наибольшую длину может иметь получившаяся правильная скобочная последовательность?

Входные данные

В первой строке входного файла записана непустая строка, состоящая из символов «(» и «)». Её длина не превосходит 106.

Выходные данные

Выведите длину наибольшей правильной скобочной подпоследовательности.

C. Паркет

жадные алгоритмы Комбинаторика Конструктив реализация *2000

Однажды Вася решил положить паркет у себя в гостиной, которая имела размеры n × m метров. У Васи были плитки трех типов: a плиток 1 × 2 метра, b плиток 2 × 1 метра и c плиток 2 × 2 метра. Помогите Васе выяснить, получится ли у него положить паркет в гостиной, и если получится, найдите один из возможных способов это сделать. Васе не обязательно использовать все имеющиеся плитки.

Входные данные

В первой строке входных данных через пробел записаны 5 целых чисел n, m, a, b, c (1 ≤ n, m ≤ 100, 0 ≤ a, b, c ≤ 104), n и m — размеры гостиной, a, b и c — соответственно число плиток 1 × 2, 2 × 1 и 2 × 2. Поворачивать плитки не разрешается.

Выходные данные

Если положить паркет, используя имеющиеся плитки, невозможно, выведите IMPOSSIBLE. Иначе выведите один из возможных вариантов паркета в гостиной — выведите n строк по m строчных латинских букв в каждой. Две соседние по стороне клетки должны содержать одинаковые буквы, если эти клетки относятся к одной и той же плитке, и различные буквы в противном случае. Разные плитки могут обозначаться одной и той же буквой (см. примеры). Если решений несколько, выведите любое.

C. Коробки и шарики

жадные алгоритмы Конструктив реализация *1700

У маленького мальчика Васи в комнате стояло n коробок с шариками. Коробки стояли в ряд и были пронумерованы числами от 1 до n слева направо.

Однажды Вася выбрал одну из коробок, пусть она имеет номер i, вынул из нее все шарики (гарантируется, что в этой коробке изначально был хотя бы один шарик) и начал класть по одному шарику в коробки с номерами i + 1, i + 2, i + 3 и так далее. Если Вася кладет шарик в коробку номер n, то следующий шарик он положит в коробку 1, затем в коробку 2 и так далее. Так он действовал пока в его руках не осталось ни одного шарика. Возможно, что Вася положит несколько шариков в одну и ту же коробку, а также возможно, что один или несколько шариков попадут в коробку номер i. В случае i = n первый шарик Вася положит в коробку 1, затем в коробку 2 и так далее.

Например, пусть изначально у Васи было четыре коробки, и в первой коробке лежало 3 шарика, во второй — 2, в третьей — 5, в четвертой — 4 шарика. Тогда если i = 3, то Вася вынет все пять шариков из третьей коробки и разложит их в коробки с номерами: 4, 1, 2, 3, 4. После всех действий Васи шарики будут лежать в коробках таким образом: в первой коробке — 4, во второй — 3, в третьей — 1, в четвертой — 6.

На данный момент Вася совсем забыл, как изначально располагались шарики в коробках, но он знает, как они лежат сейчас, и число x — номер коробки, куда он положил последний из вынутых шариков.

Он просит Вас помочь найти начальное расположение шариков в коробках.

Входные данные

В первой строке входных данных находятся два целых числа — n и x (2 ≤ n ≤ 105, 1 ≤ x ≤ n), означающие количество коробок и номер коробки, куда Вася положил последний шарик, соответственно. Во второй строке через пробел записаны n целых чисел a1, a2, ..., an, где число ai (0 ≤ ai ≤ 109, ax ≠ 0) означает количество шариков в коробке номер i после того, как Вася выполнил все действия.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите n целых чисел, где i-ое означает количество шариков в коробке номер i до начала действий Васи. Числа при выводе разделяйте пробелами. Если существует несколько правильных решений, то разрешается вывести любое.

D. Черно-белое дерево

графы Деревья жадные алгоритмы Конструктив снм *2100

На доске нарисован граф-дерево из n вершин. Напомним, что неориентированный граф называется деревом, если он связен и не содержит циклов.

Каждая вершина графа покрашена в черный или белый цвет таким образом, что не существует двух вершин одного цвета, соединенных ребром. На каждом ребре записана его стоимость — неотрицательное целое число.

Плохой мальчик Вася подошел к доске и написал около каждой вершины v число sv — сумму стоимостей всех инцидентных этой вершине ребер, после чего он стер ребра и их стоимости с доски.

Ваша задача — восстановить исходное дерево по цветам вершин и числам sv.

Входные данные

В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 105) — количество вершин в дереве. Далее в n строках записаны пары разделенных пробелом целых чисел ci, si (0 ≤ ci ≤ 1, 0 ≤ si ≤ 109), где ci означает цвет i-ой вершины (0 — белый, 1 — черный), а si означает сумму стоимостей инцидентных i-ой вершине ребер в нарисованном на доске дереве.

Выходные данные

Выведите описание n - 1 ребер графа-дерева. Каждое описание — это тройка чисел vi, ui, wi (1 ≤ vi, ui ≤ n, vi ≠ ui, 0 ≤ wi ≤ 109), где vi и ui — номера вершин, которые соединяет i-ое ребро, а wi — его стоимость. Обратите внимание, что должно выполняться условие cvi ≠ cui.

Гарантируется, что для любых входных данных существует по крайней мере один соответствующий этим данным граф. Если существует несколько решений, то выведите любое. Ребра разрешается выводить в любом порядке. Числа при выводе разделяйте пробелами.

A. Максим и скидки

жадные алгоритмы сортировки *1400

Максим всегда ходит в супермаркет по воскресеньям. Сегодня в супермаркете действует система скидок.

Существует m видов скидок. Будем считать, что скидки пронумерованы от 1 до m. Чтобы воспользоваться скидкой номер i, покупатель берет специальную корзину, в которую кладет ровно qi товаров, которые он покупает. По условиям акции, в дополнение к положенным в корзину товарам покупатель может получить не более двух товаров из супермаркета бесплатно. Выбор количества «бесплатных товаров» (0, 1 или 2) и самих товаров предоставляется покупателю. Единственное условие, которое накладывается на выбранные «бесплатные товары»: каждый из них должен быть не дороже самого дешевого товара из qi товаров корзины.

Сейчас Максиму нужно купить n товаров в магазине. Посчитайте, за какую минимальную сумму денег Максим сможет их купить, если он будет пользоваться системой скидок максимально оптимально.

Считайте, что в супермаркете имеется достаточное количество корзин для любых действий. Одну и туже скидку разрешается использовать несколько раз. Конечно, Максим может покупать товары без использования каких-либо скидок.

Входные данные

В первой строке задано целое число m (1 ≤ m ≤ 105) — количество видов скидок. Во второй строке заданы m целых чисел: q1, q2, ..., qm (1 ≤ qi ≤ 105).

В третьей строке задано целое число n (1 ≤ n ≤ 105) — количество товаров, нужных Максиму. В четвертой строке заданы n целых чисел: a1, a2, ..., an (1 ≤ ai ≤ 104) — стоимости товаров.

Числа в строках разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

Примечание

В первом примере Максиму нужно купить два товара стоимостью 100 и получить по скидке два товара стоимостью 50 бесплатно. В таком случае Максим заплатит 200.

Во втором примере Максиму выгодно купить 3 товара, а 2 получить бесплатно по скидке. В таком случае Максим заплатит 150.

B. Рома и замена знаков

жадные алгоритмы *1200

Рома работает в компании по продаже телевизоров. Сейчас ему нужно сдать отчет за прошедший год.

У Ромы есть список доходов компании, который представляет собой последовательность, состоящую из n целых чисел. Суммарный доход компании, это сумма всех чисел в последовательности. Рома решил провести ровно k замен знаков у некоторых чисел в последовательности. Причем у одного числа можно менять знак два и более раз.

Операцией замены знака у числа, называется операция умножения этого числа на -1.

Помогите Роме сделать замены так, что бы суммарный доход компании (сумма чисел в результирующей последовательности) был максимален. Обратите внимание, Рома должен провести ровно k замен.

Входные данные

В первой строке заданы два целых числа n и k (1 ≤ n, k ≤ 105) — количество чисел в последовательности и количество замен, которые нужно совершить.

Во второй строке задана неубывающая последовательность, состоящая из n целых чисел ai (|ai| ≤ 104).

Числа в строках разделяются одиночными пробелами. Обратите внимание, заданная последовательность отсортирована по неубыванию.

Выходные данные

В единственную строку выведите ответ на задачу — максимальный суммарный доход, который можно получить после ровно k замен.

Примечание

В первом тесте можно получить последовательность [1, 1, 1], таким образом суммарный доход равен 3.

Во втором тесте оптимальнее всего получить последовательность [-1, 1, 1], таким образом суммарный доход равен 1.

B. Квадраты

жадные алгоритмы реализация сортировки *900

Вася нашел лист бумаги, на котором была нарисована система координат. В этой системе координат были построены n различных квадратов. Пронумеруем квадраты целыми числами от 1 до n. Оказалось, что точки с координатами (0, 0) и (ai, ai) являются противоположными углами i-ого квадрата.

Вася хочет найти такую целочисленную точку (координаты которой — целые числа) на плоскости, которая принадлежит ровно k нарисованным квадратам. Будем говорить, что точка принадлежит квадрату, если либо она находится внутри него, либо на его границе.

Помогите Васе найти точку, удовлетворяющую описанным ограничениям.

Входные данные

В первой строке через пробел заданы два целых числа n, k (1 ≤ n, k ≤ 50). Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 109).

Гарантируется, что все заданные квадраты различны.

Выходные данные

В единственной строке через пробел выведите два целых числа x и y (0 ≤ x, y ≤ 109) — координаты точки, которая принадлежит ровно k квадратам. Если ответов несколько, разрешается вывести любой из них.

Если ответа не существует, выведите «-1» (без кавычек).

B. Деревья у дороги (упрощ. редакция)

жадные алгоритмы реализация *1000

Белка Лисска любит орехи. Дано n деревьев (пронумерованных от 1 до n с запада на восток), посаженных вдоль улицы. На вершине каждого дерева растет по вкуснейшему ореху. Высота древа i равна hi. Лисска хочет съесть все орехи.

Сейчас Лисска сидит у корня дерева с номером 1. За одну секунду Лисска может выполнить одно из следующих действий:

  • Забраться по дереву на единицу высоты вверх или вниз.
  • Съесть орех на вершине текущего дерева.
  • Перепрыгнуть на следующее дерево. В этом действии высота расположения Лисс не меняется. Более формально, когда Лисска находится на высоте h дерева i (1 ≤ i ≤ n - 1), она прыгает на высоту h дерева i + 1. Это действие нельзя выполнить, если h > hi + 1.

Посчитайте минимальное время (в секундах), необходимое для того, чтобы съесть все орехи.

Входные данные

В первой строке содержится целое число n (1  ≤  n ≤ 105) — количество деревьев.

В следующих n строках содержатся высоты деревьев: i-ая строка содержит целое число hi (1 ≤ hi ≤ 104) — высота дерева с номером i.

Выходные данные

Выведите единственное целое число — минимальное время, необходимое для того, чтобы съесть все орехи, в секундах.

C. Ниже диагонали

жадные алгоритмы Конструктив математика *2100

Вам задана квадратная матрица, состоящая из n строк и n столбцов. Будем считать, что строки пронумерованы целыми числами от 1 до n сверху вниз, а столбцы пронумерованы целыми числами от 1 до n слева направо. Некоторые клетки матрицы (всего n - 1 клеток) содержат единицы, остальные клетки — нули. Разрешается производить над матрицей следующие операции:

  1. Обменять местами i-ую и j-ую строки матрицы;
  2. Обменять местами i-ый и j-ый столбцы матрицы.

Требуется при помощи данных операций привести матрицу к такому виду, чтобы все единицы стояли в клетках, лежащих ниже главной диагонали. Клетка матрицы, находящаяся на пересечении i-ой строки и j-ого столбца, лежит ниже главной диагонали, если i > j.

Входные данные

В первой строке задано число n (2 ≤ n ≤ 1000) — количество строк и столбцов матрицы. Далее в n - 1 строках заданы позиции единиц, по одной в каждой строке. Каждая позиция описывается двумя целыми числами xk, yk (1 ≤ xk, yk ≤ n), разделенными пробелом. Пара (xk, yk) обозначает, что в клетке матрицы, находящейся на пересечении xk-ой строки и yk-ого столбца, стоит единица.

Гарантируется, что все заданные положения единиц различны.

Выходные данные

Выведите описание действий, которые нужно произвести, чтобы получить матрицу с единицами ниже главной диагонали, в следующем формате.

В первой строке нужно вывести целое неотрицательное число m (m ≤ 105) — количество необходимых действий. Далее в каждой из следующих m строк выведите через пробел три целых числа t, i, j (1 ≤ t ≤ 2, 1 ≤ i, j ≤ n, i ≠ j), где t = 1, если нужно произвести обмен строк, t = 2, если нужно произвести обмен столбцов, а i и j обозначают, соответственно, номера строк или столбцов.

Обратите внимание, что минимизировать количество операций не требуется, однако их число не должно превышать 105. Если существует несколько решений, выведите любое.

A. Волшебные ларцы

жадные алгоритмы математика *1600

Эмускальд — известный иллюзионист. Для своего коронного номера он использует набор волшебных ларцов. Суть фокуса — в том, чтобы поместить ларцы внутрь других ларцов.

Сверху каждый волшебный ларец выглядит как квадрат со стороной равной 2k (k — целое, k ≥ 0) единиц. Ларец v можно положить в ларец u, если длина стороны ларца v строго меньше, чем длина стороны ларца u. В частности, Эмускальд может положить 4 ларца со сторонами 2k - 1 в один ларец со стороной 2k. Вид вложенных друг в друга ларцов показан на следующем рисунке:

Эмускальд собирается в мировое турне. Ему надо упаковать свои волшебные ларцы для путешествия. Он решил, что лучше всего будет уложить их все в другой ларец, но мастерить волшебные ларцы достаточно дорого. Помогите ему найти наименьший волшебный ларец, в который можно поместить все его ларцы.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 105), количество различных размеров ларцов в распоряжении Эмускальда. В следующих n строках записано по два целых числа ki и ai (0 ≤ ki ≤ 109, 1 ≤ ai ≤ 109), что означает, что у Эмускальда есть ai ларцов со стороной 2ki. Гарантируется, что все ki различны.

Выходные данные

Выведите единственное целое число p, такое что длина стороны наименьшего ларца, который может вместить в себя все ларцы Эмускальда, равна 2p.

Примечание

Пояснение рисунка. Если у нас есть 3 ларца со стороной 2 и 5 ларцов со стороной 1, то мы можем уместить их все в ларце со стороной 4, например, так, как показано на рисунке.

Во втором примере мы можем уложить все четыре маленьких ларца в ларец со стороной 2.

C. Неисправный Поток

графы жадные алгоритмы Конструктив Потоки *2100

Эмускальд считает себя мастером алгоритмов по нахождению потока. Он только что завершил самую искусную из всех своих программ: она вычисляет максимальный поток в неориентированном графе. Граф состоит из n вершин и m ребер. Вершины пронумерованы от 1 до n. Вершины 1 и n — исток и сток, соответственно.

Однако, его алгоритм максимального потока, похоже, немного неисправен: для каждого ребра он находит только величину потока, протекающего по этому ребру, но не направление, в котором течет поток. Помогите ему для каждого ребра найти направление, в котором должен протекать поток по этому ребру, чтобы в итоге получился корректный максимальный поток.

Более формально: дан неориентированный граф, в котором для каждого неориентированного ребра (ai, bi) задана величина ci. Вы должны ориентировать все ребра так, чтобы выполнялись следующие условия:

  1. для каждой вершины v (1 < v < n), сумма ci входящих ребер равняется сумме ci исходящих ребер;
  2. вершина номер 1 не имеет входящих ребер;
  3. полученный ориентированный граф не имеет циклов.
Входные данные

Первая строка входных данных содержит два целых числа через пробел n и m (2 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105), количество вершин и ребер в графе. Каждая из следующих m строк содержит три целых числа ai, bi и ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 104) через пробел, которые обозначают неориентированное ребро от ai до bi, по которому протекает в некотором направлении ci единиц потока.

Гарантируется, что не существует двух ребер, соединяющих одни и те же вершины; данный граф связный; решение всегда существует.

Выходные данные

Выведите m строк, в каждой строке должно быть по целому числу di, равному 0, если направление i-го ребра равняется ai → bi (поток протекает от вершины ai к вершине bi), и равному 1 в противном случае. Считайте, что ребра пронумерованы от 1 до m в том порядке, в котором они заданы во входных данных.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом примере 10 единиц потока проходят по пути , а 5 единиц потока проходят прямо от истока к стоку: .

B. Турнир

битмаски жадные алгоритмы Перебор поиск в глубину и подобное *1300

Совсем недавно в Берляндии завершился турнир по скоростному засыпанию «Соня-2010». В турнире приняло участие n сильнейших участников со всей страны. Турнир состоит из игр, каждая из которых является противостоянием двух участников. Таким образом, в процессе турнира было проведено n·(n - 1) / 2 игр, то есть каждый из участников встретился с каждым.

Правила игры очень просты — кто первый засыпает, тот и победил. Ответственный секретарь должен был записать каждую игру в виде пары чисел «xi yi», где xi и yi — это порядковые номера участников игры, причем тот, кто записан первым является победителем игры (т.е. xi — победитель, а yi — проигравший). Ничьих в этой игре не бывает.

Совсем недавно «Институт Изучения Сна» выяснил, что на самом деле каждый человек характеризуется величиной pj — скоростью засыпания в экстремальных условиях. Таким образом, при игре двух игроков побеждает тот, у кого эта величина меньше. Величина pj у каждого человека своя и не изменяется в течении жизни.

Известно, что у всех участников турнира их pj различны. Также известно, что секретарь сделал записи результатов всех игр, кроме одной.

Ваша задача написать программу, которая по заданным записям результатов игр определяет недостающую.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 50) — количество участников. Следующие n·(n - 1) / 2 - 1 строк содержат результаты всех игр. Каждая игра записана в отдельной строке в виде пары чисел xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), где xi и yi — номера участников встречи. Известно, что в процессе турнира каждый из n участников принял участие в n - 1 игре, встретившись со всеми соперниками.

Выходные данные

Выведите пару чисел x y — недостающую запись. Если решений несколько, то выведите любое.

C. Неотсортированная подпоследовательность

жадные алгоритмы Конструктив *1900

Последовательность называется отсортированной, если она является неубывающей или невозрастающей. Например, последовательности [3, 1, 1, 0] и [1, 2, 3, 100] — отсортированы, но последовательность [1, 3, 3, 1] — нет. Вам дана последовательность чисел. Ваша задача — найти ее кратчайшую подпоследовательность, не являющуюся отсортированной.

Подпоследовательность — это последовательность, которая получается из данной путем удаления нуля или более ее элементов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Далее через пробел записано n целых чисел, по модулю не превосходящих 106 — заданная последовательность чисел.

Выходные данные

Если кратчайшей неотсортированной подпоследовательности не существует, выведите 0. Иначе выведите ее длину k, а затем k целых чисел от 1 до n включительно — индексы элементов последовательности, образующих кратчайшую неотсортированную подпоследовательность. Если решений несколько, выведите любое.

B. Обсуждения

жадные алгоритмы реализация Структуры данных *1400

Эмускальд подсел на Codeforces — теперь он постоянно обновляет главную страницу, чтобы не пропустить никаких изменений в списке прямого эфира. Ему нравится читать обсуждения (треды), каждое обсуждение состоит из нескольких сообщений.

Прямой эфир отображает список n различных обсуждений, упорядоченных по времени последнего сообщения в обсуждении. Когда в обсуждении публикуется очередное сообщение, оно перемещается на вершину списка. Никакие два сообщения в различных обсуждениях никогда не публикуются одновременно.

Эмускальд дочитал все свои открытые обсуждения. Теперь он обновляет главную страницу, надеясь найти еще немного новых сообщений. Обновив станицу, Эмускальд заметил, что новые обсуждения не появились в списке, а на i-м месте в списке стоит обсуждение, которое занимало ai-ое место до обновления. Эмускальд не хочет терять времени на перечитывание старых сообщений, поэтому он хочет открыть только обсуждения с новыми сообщениями.

Помогите Эмускальду узнать количество обсуждений, которые наверняка содержат новые сообщения. Обсуждение x наверняка содержит новое сообщение, если не существует такой последовательности публикаций новых сообщений, для которой выполняются оба следующих условия:

  1. обсуждение x не обновлено (в нем не опубликовано новое сообщение);
  2. порядок 1, 2, ..., n обсуждений в списке меняется на a1, a2, ..., an.
Входные данные

Первая строка входных данных содержит целое число n, количество обсуждений (1 ≤ n ≤ 105). В следующей строке записан список из n целых чисел a1, a2, ..., an через пробел, где ai (1 ≤ ai ≤ n) — это старое положение i-ого обсуждения в новом списке. Гарантируется, что все ai различны.

Выходные данные

Выведите единственное целое число — количество обсуждений, которые наверняка содержат новое сообщение.

Примечание

В первом тесте обсуждения 2 и 5 поставлены перед обсуждением 1, значит, в этих обсуждениях должны быть новые сообщения. Обсуждения 1, 3 и 4 могут не содержать новых сообщений, если новые сообщения есть только в обсуждениях 2 и 5.

Во втором тесте может вообще не быть новых сообщений, потому что порядок обсуждений не изменился.

В третьем тесте только в обсуждении a4 может не быть новых сообщений.

A. Множество свободное от k-делимости

Бинарный поиск жадные алгоритмы сортировки *1500

Множество свободное от k-делимости — это множество целых чисел, в котором не существует двух целых чисел, таких, что первое число равно другому, умноженному на k. То есть, во множестве не существует двух целых чисел x и y (x < y), таких, что y = x·k.

Вам дан набор, состоящий из n различных положительных целых чисел. Ваша задача — найти размер наибольшего его подмножества свободного от k-делимости.

Входные данные

Первая строка входных данных содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109). Следующая строка содержит список из n различных положительных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Все числа в строках разделяются единичными пробелами.

Выходные данные

В единственной строке выходных данных выведите размер наибольшего подмножества свободного от k-делимости для {a1, a2, ..., an}.

Примечание

В первом тестовом примере одно из возможных наибольших подмножеств свободных от 2-делимости: {4, 5, 6}.

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. Прекрасная матрица

графы жадные алгоритмы поиск в глубину и подобное сортировки *2200

У Ленни была матрица размера n × m, состоящая из целых чисел. Он обожал эту матрицу, поскольку числа в каждой строке матрицы были отсортированы в порядке неубывания. Матрицы, которые обладают таким свойством, Ленни называет прекрасными.

Однажды, когда Ленни был в школе, его младший брат играл с матрицей Ленни в своей комнате. Он стер некоторые записи в матрице и изменил порядок некоторых ее столбцов. Придя домой, Ленни очень опечалился и теперь хочет восстановить свою матрицу.

Помогите ему найти порядок столбцов матрицы так, чтобы было возможно заполнить стертые записи и снова получить прекрасную матрицу. Обратите внимание, что стертые записи можно заполнять любыми целыми числами.

Входные данные

Первая строка входных данных содержит два положительных целых числа n и m (1 ≤ n·m ≤ 105). Каждая из следующих n строк содержит m целых чисел через пробел — матрица Ленни. Число -1 обозначает стертую запись в матрице. Все остальные целые числа (каждое из которых между 0 и 109, включительно) представляют заполненные записи.

Выходные данные

Если не существует возможных способов переупорядочить столбцы, выведите -1. В противном случае, выходные данные должны содержать m целых чисел p1, p2, ..., pm, обозначающих искомую перестановку столбцов. Таким образом, первый столбец прекрасной матрицы будет p1-ым столбцом изначальной матрицы. Второй столбец прекрасной матрицы будет p2-ым столбцом изначальной матрицы и так далее.

B. Девочка и игра

жадные алгоритмы игры *1300

Девочка очень любит задачи про игры. Вот одна из них.

У двух игроков есть строка s, состоящая из строчных букв латинского алфавита. Они играют в игру, которая описывается следующими правилами:

  • Игроки ходят по очереди; За один ход игрок может удалить из строки s произвольную букву.
  • Если игрок перед своим ходом может перемешать буквы в строке s таким образом, чтобы получился палиндром, этот игрок побеждает. Палиндром — строка, которая одинаково читается в обоих направлениях. Например, строка «abba» — палиндром, а строка «abc» — нет.

Определите, кто из игроков победит при оптимальной игре обеих сторон — тот, кто ходит первым, или тот, кто ходит вторым.

Входные данные

Во входных данных содержится единственная строка. Единственная строка содержит строку s (1 ≤ |s| ≤  103). Строка s состоит из строчных букв латинского алфавита.

Выходные данные

В единственной строке выведите слово «First» в случае, если при оптимальной игре обоих игроков победит первый игрок. Иначе, выведите слово «Second». Слова выводите без кавычек.

C. Девочка и максимальная сумма

жадные алгоритмы реализация сортировки Структуры данных *1500

Девочка очень любит задачи про запросы на массиве.

Однажды ей попалась довольно известная задача: дан массив из \(n\) элементов (элементы массива проиндексированы от 1); также есть \(q\) запросов, каждый из которых задается парой целых чисел \(l_i\), \(r_i\) \((1 \le l_i \le r_i \le n)\). Для каждого запроса необходимо найти сумму всех элементов массива с индексами от \(l_i\) до \(r_i\) включительно.

Такая задача показалась Девочке довольно скучной. Она решила, что перед тем, как отвечать на запросы, она перемешает элементы массива, причем так, чтобы сумма ответов на все запросы была максимально возможной. Ваша задача — найти значение этой максимальной суммы.

Входные данные

Первая строка содержит два целых числа \(n\) (\(1 \le n \le 2\cdot10^5\)) и \(q\) (\(1 \le q \le 2\cdot10^5\)), разделенных пробелом — количество элементов в массиве и количество запросов, соответственно.

Следующая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 2\cdot10^5\)), разделенных пробелами — элементы массива.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)), разделенных пробелом — \(i\)-й запрос.

Выходные данные

В единственной строке выведите целое число — максимальную сумму ответов на запросы после перемешивания элементов массива.

Пожалуйста, не используйте спецификатор %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).

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.

B. Раскрашивание яиц

жадные алгоритмы математика *1500

Необъяснимый народ эти битландцы. Какие же у них странные обычаи!

Как обычно, дядя J. хочет раскрасить n яиц для известного Битландского фестиваля, который называется Битруз. Дядя J. попросил выполнить эту работу G. и A. Дети очень обрадовались. Ведь они знают, что им заплатят за работу.

Всего у дяди J. есть n яиц. Для каждого яйца G. назвал количество денег, которое он требует за покраску этого яйца. Аналогично, для каждого яйца A. назвал количество денег, которое он требует за покраску этого яйца. Оказалось, что для каждого яйца сумма количеств денег, которые требует за покраску A. и G., равна 1000.

Дядя J. хочет поделить яйца между детьми так, чтобы каждое яйцо было отдано на покраску ровно одному ребенку. Также дядя хочет, чтобы сумма денег которая достанется A. отличалась от суммы денег, которая достанется G. не более чем на 500.

Помогите дяде J. Найдите требуемое распределение яиц или скажите, что разделить яйца требуемым образом не получится.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество яиц. В каждой из следующих n строк записано два целых числа: ai, gi (0 ≤ ai, gi ≤ 1000; ai + gi = 1000) — количество денег, которое требует A. за покраску i-того яйца, и количество денег, которое требует G. за покраску i-того яйца.

Выходные данные

Если разделить яйца между детьми требуемым образом нельзя, выведите «-1» (без кавычек).

Иначе выведите строку, состоящую из n символов «G» и «A»: i-тый символ должен обозначать того, кому достанется i-тое яйцо в требуемом распределении (символ «A» обозначает A., символ «G» обозначает G.). Если обозначить сумму денег, которую дядя должен будет отдать A. за покраску, через Sa, а сумму денег, которую дядя должен будет отдать G. за покраску, через Sg, должно выполняться неравенство |Sa - Sg| ≤ 500.

Если существует несколько решений, разрешается вывести любое.

A. Немного убывающие перестановки

жадные алгоритмы реализация *1100

Перестановкой p называется упорядоченный набор чисел p1,  p2,  ...,  pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-ый элемент перестановки p через pi. Число n будем называть размером или длиной перестановки p1,  p2,  ...,  pn.

Коэффициентом убывания перестановки p1, p2, ..., pn назовем количество таких i (1 ≤ i < n), что pi > pi + 1.

Ваша задача состоит в том, чтобы по заданным числам n и k вывести перестановку длины n с коэффициентом убывания, равным k.

Входные данные

В единственной строке находятся два целых числа, разделенные пробелом: n, k (1 ≤ n ≤ 105, 0 ≤ k < n) — длина перестановки и коэффициент убывания.

Выходные данные

В единственной строке выведите n целых чисел, разделяя их пробелами: p1, p2, ..., pn — перестановку длины n с коэффициентом убывания k.

Если существует несколько перестановок, удовлетворяющих условию, то можно вывести любую из них. Гарантируется, что перестановка с искомыми параметрами существует.

C. Получаем перестановку

жадные алгоритмы реализация сортировки *1200

Перестановкой p называется упорядоченный набор чисел p1,  p2,  ...,  pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-й элемент перестановки p через pi. Число n будем называть размером или длиной перестановки p1,  p2,  ...,  pn.

Вам дана последовательность целых чисел a1, a2, ..., an. За один ход разрешается уменьшить или увеличить любое число на единицу. Посчитайте, какое наименьшее число ходов необходимо, чтобы получить из данной последовательности перестановку.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105) — размер искомой перестановки. Во второй строке записаны n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведите единственное целое число — минимальное количество ходов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере нужно уменьшить первое число на единицу, и затем увеличить второе число на единицу. В результате получится перестановка (2, 1).

Во втором примере за 6 ходов можно получить перестановку (1, 3, 2).

C. Самая главная последовательность

жадные алгоритмы реализация *2100

Как вы знаете, недавно Вова стал новым шаманом города Крайняя Туле. И теперь знание о правильных скобочных последовательностях перешло к нему. Шаманы города Крайняя Туле издавна используют много разных типов скобок. Тип скобки — это целое положительное число. Шаманы определяют правильную скобочную последовательность следующим образом:

  • Пустая последовательность является правильной скобочной последовательностью.
  • Если {a1, a2, ..., al} и {b1, b2, ..., bk} — правильные скобочные последовательности, то последовательность {a1, a2, ..., al, b1, b2, ..., bk} (их конкатенация) тоже является правильной скобочной последовательностью.
  • Если {a1, a2, ..., al} — правильная скобочная последовательность, то последовательность тоже является правильной скобочной последовательностью, где v (v > 0) — целое число.

Например, последовательности {1, 1,  - 1, 2,  - 2,  - 1} и {3,  - 3} являются правильными скобочными последовательностями, а {2,  - 3} — нет.

Более того, став шаманом, Вова узнает самую главную правильную скобочную последовательность {x1, x2, ..., xn}, состоящую из n целых чисел. Так как последовательность x — самая главная, Вова решил на всякий случай ее зашифровать.

Шифровка состоит из двух последовательностей. В первой последовательности {p1, p2, ..., pn} записаны типы скобок, то есть pi = |xi| (1 ≤ i ≤ n). Во второй последовательности {q1, q2, ..., qt} записаны t целых чисел — некоторые позиции (возможно не все), на которых в последовательности {x1, x2, ..., xn} стояли отрицательные числа.

К несчастью, Вова забыл самую главную последовательность, но у него сохранилась шифровка: последовательности {p1, p2, ..., pn} и {q1, q2, ..., qt}. Помогите Вове восстановить последовательность x по шифровке. Если существует несколько последовательностей, соответствующих шифровке, нужно восстановить любую, если не существует ни одной требуемой последовательности, нужно об этом сообщить.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 106). Во второй строке записаны n целых чисел: p1, p2, ..., pn (1 ≤ pi ≤ 109).

В третьей строке записано целое число t (0 ≤ t ≤ n) и после него t различных целых чисел q1, q2, ..., qt (1 ≤ qi ≤ n).

Числа в каждой строке отделены друг от друга пробелами.

Выходные данные

Выведите единственную строку «NO» (без кавычек), если Вова ошибся, и подходящей последовательности {x1, x2, ..., xn} не существует.

Иначе выведите в первую строку «YES» (без кавычек), а во вторую — n целых чисел x1, x2, ..., xn (|xi| = pixqj < 0). Если существует несколько последовательностей, соответствующих шифровке, разрешается вывести любую.

A. Пингвин Поло и строки

жадные алгоритмы *1300

Маленький пингвин Поло очень любит строки. Но больше всего он любит строки длины n.

Однажды он захотел найти строку, которая удовлетворяет следующим условиям:

  1. Строка состоит из n строчных латинских букв (то есть длина строки равна n), среди этих букв ровно k различных.
  2. Никакие две соседние буквы строки не совпадают; то есть, если обозначить строку как s = s1s2... sn, то выполняется неравенство, si ≠ si + 1(1 ≤ i < n).
  3. Среди всех строк, удовлетворяющих пунктам 1 и 2, искомая строка лексикографически минимальная.

Помогите ему найти такую строку или сообщите, что такой строки нет.

Строка x = x1x2... xp лексикографически меньше строки y = y1y2... yq, если либо p < q и x1 = y1, x2 = y2, ... , xp = yp, либо существует такое число r (r < p, r < q), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 < yr + 1. Символы строк сравниваются как их ASCII коды.

Входные данные

В единственной строке записаны два целых положительных числа n и k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) — длина строки и количество различных букв.

Выходные данные

В единственной строке выведите искомую строку. Если такой строки нет, выведите «-1» (без кавычек).

F. Жадный Петя

*особая задача графы жадные алгоритмы поиск в глубину и подобное *2800

Петя — неопытный спортивный программист. Недавно ему попалась следующая задача:

Дан неориентированный граф, состоящий из n вершин и m ребер. Определите, есть ли в этом графе Гамильтонов путь.

Петя быстренько и без багов написал программу, которая (по его мнению) решает эту задачу. После чего Петя решил дать эту задачу на первоапрельский контест. К сожалению, Петя мог ошибиться и придумать неправильный алгоритм решения задачи. Но это же не повод уйти с контеста с несданной задачей, правда?

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n ≤ 20; 0 ≤ m ≤ 400). В следующих m строках записаны пары целых чисел vi, ui (1 ≤ vi, ui ≤ n).

Выходные данные

Следуйте формату вывода программы Пети.

D. Параллельное программирование

*особая задача жадные алгоритмы *1600

У Поликарпа есть компьютер с n процессорами. Также в его компьютере есть n ячеек памяти. Будем считать, что процессоры пронумерованы целыми числами от 1 до n и что ячейки памяти последовательно пронумерованы целыми числами от 1 до n.

Поликарпу нужно разработать модель параллельной программы, которая для каждой ячейки памяти с номером i записывает в эту ячейку значение n - i. Другими словами, для каждой ячейки требуется найти расстояние до ячейки n.

Обозначим, записанное в i-той ячейке значение как ai. Изначально, ai = 1 (1 ≤ i < n) и an = 0. Будем считать, что в ячейку памяти номер i может записывать значения только лишь процессор i. Читать значение ячейки может любой процессор (несколько разных процессоров могут читать значение из ячейки одновременно).

Исполнение параллельной программы происходит в несколько шагов. На каждом шаге происходит выполнение параллельной версии операции инкремента. Выполнение параллельной операции инкремента происходит следующим образом:

  1. Каждый процессор независимо от других выбирает некоторую ячейку памяти. Пусть процессор i выбрал ячейку с номером ci (1 ≤ ci ≤ n).
  2. Все процессоры одновременно выполняют операцию, ai = ai + aci.

Помогите Поликарпу разработать модель параллельной программы, которая выполняется ровно в k шагов. Вычислите, какие операции нужно выполнить, чтобы после ровно k шагов для всех i значение ai было равно n - i.

Входные данные

В первой строке записаны через пробел два целых числа n и k (1 ≤ n ≤ 104, 1 ≤ k ≤ 20).

Гарантируется, что при заданных n и k требуемая последовательность операций существует.

Выходные данные

Выведите ровно n·k целых чисел в k строках. В первой строке выведите номера c1, c2, ..., cn (1 ≤ ci ≤ n) для первой операции инкремента. Во второй — выведите номера для второй операции инкремента. В k-ой — выведите номера для k-ой операции инкремента.

В результате выведенных операций для любого i значение ai должно быть равно n - i.

A. Странная игра

жадные алгоритмы игры *1500

Ярослав, Андрей и Роман могут часами напролет играть в кубики. Но это игра для трех человек, поэтому, когда Роман отсутствует, Ярослав и Андрей играют в другую игру.

Роман оставляет каждому из них по слову, состоящему из n символов «0» или «1». После этого игроки начинают ходить по очереди. Ярослав ходит первым. На своем ходе игрок должен выбрать целое число от 1 до n, которое не выбиралось никем из игроков ранее, и выписать себе на листочек соответствующий символ из своей строки.

Обозначим слово, которое оставили Ярославу, как s = s1s2... s2n. Аналогично, обозначим слово, которое оставили Андрею, как t = t1t2... t2n. Тогда, если Ярослав выбрал на своем ходе число k, то он выпишет на свой листочек символ sk. Аналогично, если Андрей выбрал на своем ходе число r, то он выпишет на свой листочек символ tr.

Игра заканчивается, когда ни один из игроков не может сделать ход. После окончания игры, Ярослав составляет из символов, записанных на своем листочке, некоторое целое число (символы можно переставлять в любом порядке), тоже самое делает Андрей (полученные числа могут содержать лидирующие нули). Побеждает тот, у кого получилось большее число. Если получившиеся числа равны, то объявляется ничья.

Вам заданы две строки s и t. Определите исход игры при оптимальной игре Ярослава и Андрея.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записана строка s — слово Ярослава. В третьей строке записана строка t — слово Андрея.

Гарантируется, что оба слова состоят из n символов «0» и «1».

Выходные данные

Выведите «First», если при оптимальной игре побеждает Ярослав, «Second» — в случае победы Андрея и «Draw», если при оптимальной игре будет ничья. Слова выводите без кавычек.

B. Шаасс и книжная полка

дп жадные алгоритмы *1700

У Шаасса есть n книг. Он хочет смастерить полку подо все свои книги. Также он хочет, чтобы размеры полки были как можно меньше. Толщина i-ой книги равна ti, а ширина ее страниц равна wi. Толщина каждой книги — либо 1, либо 2. Высота страниц всех книг одинаковая.

Шаасс кладет книги на полку следующим образом. Сперва он выбирает несколько книг и кладет их вертикально. Затем он кладет оставшиеся книги горизонтально над вертикальными книгами. Сумма ширин горизонтальных книг не должна превышать суммарную толщину вертикальных книг. На рисунке ниже приведен пример, как можно уложить книги.

Помогите Шаассу вычислить минимальную достижимую общую толщину вертикальных книг, если он хочет уложить все книги на полку описанным способом.

Входные данные

В первой строке входных данных записано целое число n, (1 ≤ n ≤ 100). В каждой из следующих n строк записано два целых числа ti и wi, обозначающие толщину и ширину i-ой книги соответственно (1 ≤ ti ≤ 2, 1 ≤ wi ≤ 100).

Выходные данные

В единственной строке выведите минимальную достижимую общую толщину вертикальных книг.

A. Ярослав и перестановки

жадные алгоритмы математика *1100

У Ярослава есть массив, состоящий из n целых чисел. За одну секунду Ярослав может поменять местами два рядом стоящих элемента массива. Сейчас Ярослава интересует вопрос: может ли он за конечное время получить массив, в котором любые два соседних элемента различны?

Помогите Ярославу.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000) — элементы массива.

Выходные данные

В единственную строку выведите «YES» (без кавычек), если Ярослав может получить нужный ему массив, и «NO» (без кавычек) в противном случае.

Примечание

В первом примере изначальный массив подходит.

Во втором примере Ярослав может получить массив: 1, 2, 1. Для этого он может поменять два последних элемента массива местами.

В третьем примере Ярослав не может получить нужный массив.

B. Вес рыб

жадные алгоритмы Конструктив *1600

Известно, что в Северном Ледовитом океане обитает k видов рыб, пронумерованных от 1 до k. Виды отсортированы по неубыванию веса, который является положительным числом. Пусть вес i-го вида равняется wi, тогда выполняется условие 0 < w1 ≤ w2 ≤ ... ≤ wk.

Медведи Алиса и Роберт поймали несколько рыбок и теперь угадывают, у кого суммарный вес наловленной рыбы больше. Зная пойманные ими виды рыб, определите, может ли общий вес пойманной Алисой рыбы быть строго больше общего веса рыбы Роберта. Иными словами, существует ли последовательность значений весов — чисел wi (не обязательно целых), такая, что пойманная Алисой рыба имеет строго больший общий вес?

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ n, m ≤ 105, 1 ≤ k ≤ 109) — количество пойманной Алисой и Робертом рыбы, соответственно, и количество видов рыбы.

Во второй строке записано n целых чисел, каждое от 1 до k — список пойманных Алисой видов рыбы. В третьей строке записано m целых чисел, каждое от 1 до k — список пойманной Робертом рыбы.

Обратите внимание, что можно поймать несколько рыб одного вида.

Выходные данные

Выведите «YES» (без кавычек), если это возможно, в противном случае выведите «NO» (без кавычек).

Примечание

В первом примере, если w1 = 1, w2 = 2, w3 = 2.5, тогда у Алисы всего есть 2 + 2 + 2 = 6 единиц веса, в то время, как у Роберта есть только 1 + 1 + 2.5 = 4.5.

Во втором примере пойманная Алисой рыба является подмножеством пойманной Робертом рыбы. Следовательно, общий вес рыбы Роберта всегда будет не меньше веса рыбы Алисы.

A. Следы на снегу

жадные алгоритмы реализация *1300

Представьте себе прямую заснеженную дорогу, разделенную на n блоков. Блоки пронумерованы от 1 до n слева направо. Если шагнуть с i-го блока на (i + 1)-ый блок, то останется след правой ноги на i-ом блоке. Аналогично, если шагнуть с i-го на (i - 1)-ый блок, то на i-ом блоке останется след левой ноги. Если на i-ом блоке уже есть след, то новый след покроет старый.

Вначале на дороге следов не было. Затем белая медведица Алиса начинает свое путешествие с s-го блока, совершает некоторую последовательность шагов и останавливается на t-ом блоке. Известно, что Алиса никогда не уходит с дороги.

Дано описание Алисиных следов. Ваша задача — найти пару возможных значений s, t, глядя на следы.

Входные данные

В первой строке входных данных содержится целое число n (3 ≤ n ≤ 1000).

Во второй строке содержится описание дороги — строка, состоящая из n символов. Каждый символ — это или «.» (блок без следа), или «L» (блок с левым следом), или «R» (блок с правым следов).

Гарантируется, что данная строка содержит, по крайней мере, один символ, не равный «.». Также, первый и последний символы всегда будут «.». Гарантируется, что решение существует.

Выходные данные

Выведите два целых числа через пробел — значения s и t. Если есть несколько возможных решений, можете вывести любое из них.

Примечание

Первый тестовый пример показан на картинке.

B. На рыбалку

жадные алгоритмы Перебор реализация *1200

Белые мишки отправились на рыбалку. Они собираются сесть в лодку и доплыть от (sx, sy) до (ex, ey). Однако лодка поддается управлению только силы ветра. Каждую секунду ветер дует в одном из следующих направлений: на восток, на юг, на запад или на север. Предположим, что на данный момент лодка находится в (x, y).

  • Если ветер дует на восток, то лодка поплывет на (x + 1, y).
  • Если ветер дует на юг, то лодка поплывет на (x, y - 1).
  • Если ветер дует на запад, то лодка поплывет на (x - 1, y).
  • Если ветер дует на север, то лодка поплывет на (x, y + 1).

Мишки могут остановить лодку, бросив якорь. Тогда лодка остается на (x, y), независимо от того куда дует ветер. Зная направление ветра в следующие t секунд, определите самый ранний момент, когда они смогут приплыть к (ex, ey).

Входные данные

В первой строке записаны пять целых чисел t, sx, sy, ex, ey (1 ≤ t ≤ 105,  - 109 ≤ sx, sy, ex, ey ≤ 109). Начальная и конечная позиции будут различаться.

Во второй строке записано t символов, i-ый символ описывает направление ветра в секунду номер i. В соответствии с ветром символ может быть равен: «E» (восток), «S» (юг), «W» (запад) или «N» (север).

Выходные данные

Если можно доплыть до (ex, ey) в течение t секунд, выведите самое раннее время, когда мишкам это удастся. В противном случае выведите «-1» (без кавычек).

Примечание

В первом примере можно бросить якорь в секунды 1, 3 и двигаться в секунды 2, 4.

Во втором примере мишкам не удастся доплыть до пункта назначения.

A. Кратчайший путь короля

жадные алгоритмы кратчайшие пути *1000

Одинокий король остался совсем один на шахматной доске. Несмотря на одиночество, он вовсе не унывает — ведь ему еще надо сделать так много дел государственной важности. Например, ему надо совершить официальный визит в клетку t. Так как король не привык терять попусту время, он хочет добраться от своего местоположения s до клетки t за наименьшее число ходов. Помогите ему это сделать.

Король за один ход может переместиться на любую клетку, которая по стороне или углу граничит с текущей (их в общем случае 8).

Входные данные

В первой строке входных данных заданы шахматные координаты клетки s, а во второй — клетки t.

Шахматные координаты состоят из двух символов, один из которых это строчная буква латинского алфавита (от a до h), а второй — цифра от 1 до 8.

Выходные данные

В первую строку выведите n — минимальное число ходов короля. Далее в n строк выведите сами ходы. Каждый ход описывается одной из восьми строк: L, R, U, D, LU, LD, RU или RD.

L, R, U, D, соответственно, означают ходы влево, вправо, вверх и вниз (согласно рисунку), двухбуквенные обозначения соответствуют диагональным ходам. Если решений несколько, выведите любое.

B. Грузовик

жадные алгоритмы сортировки *1900

Группа туристов собирается в водный поход. На лодочную базу прибыл арендованный грузовик, в который будут погружены байдарки и катамараны, а затем доставлены на место отправления. Известно, что все байдарки равны по размерам между собой (и занимают 1 куб. метр пространства), а катамараны равны по размерам между собой и в два раза больше байдарки (и занимают 2 куб. метра пространства).

Каждое плавсредство обладает некоторой грузоподъемностью, причем даже неотличимые с виду плавсредства могут обладать разной грузоподъемностью.

По заданному объему кузова грузовика и списку плавсредств (для каждого известен его тип и грузоподъемность) определите набор, который можно перевести и который обладает максимальной возможной грузоподъемностью. Объем кузова грузовика можно использовать максимально эффективно, то есть в кузов всегда можно погрузить плавсредство объемом не превышающее свободный объем кузова.

Входные данные

В первой строке записана пара целых чисел n и v (1 ≤ n ≤ 105; 1 ≤ v ≤ 109), где n это количество плавсредств на лодочной базе, а v — объем кузова грузовика в кубических метрах. Следующие n строк содержат описания плавсредств. Каждое описание это пара чисел ti, pi (1 ≤ ti ≤ 2; 1 ≤ pi ≤ 104), где ti это тип плавсредства (1 — байдарка, 2 — катамаран), а pi его грузоподъемность. Плавсредства нумеруются с единицы в порядке их появления во входном файле.

Выходные данные

В первую строку выведите искомую максимальную грузоподъемность набора. Во вторую строку выведите номера плавсредств, которые составляют оптимальный набор. Если решений несколько, выведите любое.

D. Скобочная последовательность

жадные алгоритмы *2600

Перед вами еще одна задача на правильные скобочные последовательности.

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Вам задан шаблон скобочной последовательности, в котором присутствуют символы «(», «)» и «?». Вам надо заменить каждый символ «?» на скобку таким образом, чтобы получилась правильная скобочная последовательность.

Для каждого символа «?» в шаблоне известна стоимость замены его на «(» и «)». Ваша задача из всех возможных вариантов выбрать самый дешевый вариант.

Входные данные

В первой строке входного файла записан непустой шаблон четной длины, состоящий из символов «(», «)» и «?». Его длина не превосходит 5·104. Далее содержится m строк, где m — количество символов «?» в шаблоне. Каждая строка состоит из двух целых чисел ai и bi (1 leai, bi ≤ 106), где ai стоимость замены i-го символа «?» на открывающуюся скобку, а bi — на закрывающуюся.

Выходные данные

В первую строку выведите стоимость искомой последовательности. Во вторую выведите искомую последовательность.

Если решения не существует, выведите -1. Если решений несколько, выведите любое.

D. Задача Царя?

геометрия жадные алгоритмы *2600

Каждый настоящий Царь в своей жизни должен поработить мир, провести финал чемпионата мира Codeforces, выиграть розовую панду в тире и объехать свое царство.

Первые три вещи Царь Цопа уже сделал в своей жизни. Осталось всего лишь объехать свое Царство. Оно, по неизвестным науке причинам, представляет собой бесконечную декартову систему координат, на которой отмечены города. Каждый город будем считать точкой на этой плоскости. Буквально перед самым отъездом, к Царю пришел гонец и сообщил пренеприятнейшее известие о том, что на самом деле города в Царстве расположены в точках с координатами (x1, 0), (x2, 0), ..., (xn, 0), а еще один город в точке (xn + 1, yn + 1) (то есть всего их в Царстве ровно n + 1).

Но выбора у Царя нет, и он пустился в дальнее путешествие. Начало его пути — это город номер k. Ваша задача — найти такой путь Царя через все города в произвольном порядке (можно даже посещать один город дважды), который имеет наименьшую длину. Закончить путешествие разрешается в любом городе. Можно считать, что между любыми двумя различными городами существует дорога длиной, равной расстоянию между соответствующими точками на плоскости.

Никакие два города не могут находиться в одной точке.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ n + 1) — число городов и номер стартового города соответственно. Во второй строке через пробел записано n + 1 целых чисел xi. В третьей строке записано yn + 1. Все координаты — целые числа, не превосходящие по модулю 106. Никакие два города не могут находиться в одной точке.

Выходные данные

Выведите одно число — наименьшую длину путешествия. Ваш ответ должен иметь относительную или абсолютную погрешность меньше, чем 10 - 6.

E. Хитрый и умный пароль

Бинарный поиск жадные алгоритмы Конструктив Строки Структуры данных хэши *2800

В эпоху своей молодости герой нашего рассказа Царь Цопа решил, что все его личные данные не очень хорошо скрыты от посторонних глаз, а для монарха это недопустимо. Поэтому он придумал хитрый и умный пароль (лишь спустя много лет Цопа узнал, что его пароль — это палиндром нечетной длины), а затем зашифровал все свои данные.

Как известно, монархи в душе такие же люди, как и все остальные смертные, и поэтому чтобы не забыть свой хитрый и умный пароль, Цопа решил записать его на бумажку. Зная, что опасно хранить пароль в таком виде, он решил его зашифровать следующим образом: с конца и с начала своего пароля-палиндрома он отрезал по x символов (x может быть равно 0, и 2x строго меньше, чем длина пароля). У него получились 3 части пароля. Назовем их prefix, middle и suffix соответственно, причем prefix и suffix имеют одинаковую, возможно нулевую, длину, а middle — всегда нечётной длины. Из этих трех частей он сделал строку A + prefix + B + middle + C + suffix, где A, B и C — некоторые придуманные Цопой строки (возможно нулевой длины), а « + » означает операцию конкатенации («склеивания» строк).

Прошло много лет, и буквально вчера Царь Цопа нашел бумажку, где был записан его пароль, зашифрованный описанным выше способом. Сам пароль, а также строки A, B и C давно уже забыты, и поэтому Цопа просит вас найти пароль максимальной длины, который мог бы быть придуман, зашифрован и записан Цопой.

Входные данные

Входные данные представляют собой единственную строку из прописных латинских букв длиной от 1 до 105 символов.

Выходные данные

В первую строку выведите одно целое число k — количество непустых частей пароля в получившемся у вас ответе (). Далее выведите k строк по два целых числа xi и li — позицию начала и длину соответствующей части пароля. Пары выводите в порядке возрастания xi. Числа в паре при выводе разделяйте одним пробелом.

Позиция начала xi — целое число от 1 до длины входной строки. Никакая длина li не может быть равна 0, так как части пароля нулевой длины выводить не нужно. Среднее из чисел li обязательно должно быть нечётным.

Если решений несколько, выведите любое. Учтите, что ваша задача — максимизировать не k, а сумму li.

C. Иван и степени двойки

жадные алгоритмы реализация *1600

У Ивана есть массив из n целых неотрицательных чисел a1, a2, ..., an. Иван знает, что этот массив отсортирован по неубыванию.

Иван выписал себе на листочек целые числа 2a1, 2a2, ..., 2an. И теперь ему интересно, какое минимальное количество целых чисел вида 2b (b ≥ 0) ему нужно дописать на листок так, чтобы сумма всех чисел, записанных на листочке, была равна 2v - 1 для некоторого целого v (v ≥ 0).

Помогите Ивану, найдите требуемое количество чисел.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке входных данных записаны n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 2·109). Гарантируется, что a1 ≤ a2 ≤ ... ≤ an.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере ничего не нужно дописывать, сумма чисел уже равна 23 - 1 = 7.

Во втором примере нужно дописать числа 20, 21, 22.

B. Оптимизатор

жадные алгоритмы сортировки Структуры данных *2100

Оперативная память процесса — это последовательность байт, которые пронумерованы по порядку от 1 до n. Программа Поликарпа состоит из инструкций типа «memset», то есть операций заполнения ячеек памяти (байтов) на отрезке некоторым значением. Подробнее, его программа исключительно состоит из m инструкций вида «set13 a_i l_i». Инструкция i заполняет непрерывный участок памяти длины li, начинающийся с ячейки номер ai, (то есть ячейки с номерами ai, ai + 1, ..., ai + li - 1) значениями 13.

Задача оптимизатора программы Поликарпа — выбросить максимальное количество инструкций из его программы так, чтобы оставшиеся инструкции установили значение 13 в тех и только тех байтах памяти, что и программа до оптимизации. Ваша задача — реализовать оптимизатор такой программы.

Входные данные

В первой строке записаны целые числа n и m (1 ≤ n ≤ 2·106, 1 ≤ m ≤ 2·105) — количество байт (ячеек памяти) и количество инструкций в программе Поликарпа. Далее следуют m строк, каждая из которых содержит пару целых чисел ai, li (1 ≤ ai ≤ n, 1 ≤ li ≤ n - ai + 1).

Выходные данные

В первую строку выведите искомое максимальное количество инструкций, которые можно удалить из программы. Во вторую строку выведите номера инструкций. Инструкции нумеруются от 1 до m в порядке их появления во входных данных. Если решений несколько, выведите любое.

B. Сисадмин Вася

жадные алгоритмы реализация Строки *1500

Адрес электронной почты в Берляндии — это строка вида A@B, где A и B — любые непустые строки из маленьких латинских букв.

Вася работает сисадмином в компании «Берсофт». Он хранит список адресов электронной почты всех сотрудников компании в виде одной большой строки, где все адреса записаны через запятую в произвольном порядке. Один и тот же адрес может быть записан более одного раза.

Однажды по непонятной причине все запятые в Васином списке исчезли, и все адреса «склеились». У Васи осталась одна большая строка, в которой адреса электронной почты записаны подряд без каких-либо разделителей, и невозможно определить, где заканчивается один адрес и начинается другой. К несчастью, именно в этот же день Васино начальство потребовало от Васи исходный список всех адресов. Теперь Вася хочет расцепить адреса произвольным образов (вряд ли начальство будет разбираться). Помогите ему это сделать.

Входные данные

В первой строке содержится список всех адресов электронной почты без разделителей. Длина строки не меньше 1 и не превосходит 200. Гарантируется, что строка состоит только из маленьких латинских букв и символов «@».

Выходные данные

Если не существует такого списка корректных (по берляндским правилам) адресов электронной почты, что после удаления запятых список совпадает с заданной строкой, выведите No solution. Иначе выведите сам список. Один и тот же адрес может быть записан в этом списке более одного раза. Если решений несколько, выведите любое.

C. Илья и матрица

жадные алгоритмы Конструктив реализация сортировки *1400

Илья — очень добрый лев, который любит математику. Из всех математических объектов Илья больше всего любит матрицы. Сейчас перед ним стоит непростая задача о матрицах, которую нужно решить.

Заданы квадратная матрица размера 2n × 2n и 4n целых чисел. Нужно разместить все эти числа в матрице (каждое число поместить в отдельную ячейку) так, чтобы красота полученной матрицы с числами была максимальна.

Красотой матрицы размера 2n × 2n называется целое число, получаемое по следующему алгоритму:

  1. Найти максимальный элемент в матрице. Обозначим его за m.
  2. Если n = 0, тогда красота матрицы равна m. Иначе, матрицу можно разбить на 4 непересекающиеся подматрицы размера 2n - 1 × 2n - 1, тогда красота матрицы равна сумме числа m и четырех красот описанных подматриц.

Как можно заметить, этот алгоритм — рекурсивный.

Помогите Илье, решите задачу и выведите результирующую максимальную красоту матрицы.

Входные данные

В первой строке записано целое число 4n (1 ≤ 4n ≤ 2·106). В следующей строке находится 4n целых чисел ai (1 ≤ ai ≤ 109) — числа, которые нужно разместить в матрице размера 2n × 2n.

Выходные данные

В единственную строку выведите максимальное значение красоты полученной матрицы.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Рассмотрим второй пример, числа в матрице надо расставить следующим способом:


1 2
3 4

Тогда красота матрицы будет равна: 4 + 1 + 2 + 3 + 4 = 14.

E. Илья и два числа

жадные алгоритмы Конструктив снм Структуры данных *2300

Илья в последнее время начал увлекаться археологией. Недавно он нашел два числа, записанных в системе счисления по основанию m. Каждое из найденных чисел состояло ровно из n цифр. Илья сразу начал искать информацию об этих числах, он узнал, что числа — это часть шифра, а тот, кто разгадает шифр, обретет невиданное сокровище.

После длительных исследований Илья понял: чтобы разгадать шифр, нужно сделать следующее:

  • Переставить цифры в первом числе некоторым образом, аналогично, переставить цифры во втором числе некоторым образом. В результате этой операции у чисел могут появиться лидирующие нули.
  • Поцифренно сложить числа по модулю m. Другими словами, нужно получить третье число, длины n, каждая цифра которого, есть сумма соответствующих цифр найденных чисел. Например, пусть есть два числа, записанных в троичной системе счисления, 001210 и 012111, тогда, если их сложить поцифренно по модулю 3, получится число 010021.
  • Ключ к шифру — это максимально возможное число, которое можно получить на предыдущем шаге.

Помогите Илье, найдите ключ к шифру.

Входные данные

В первой строке записано два целых числа n, m (1 ≤ n, m ≤ 105, m > 1). Во второй строке записано первое найденное число, в третьей строке записано второе найденное число.

Числа записываются как последовательность цифр в системе счисления по основанию m. Каждая цифра — это целое число от 0 до m - 1. Цифры в строке записаны в порядке от старших разрядов к младшим.

Заданные числа могут содержать лидирующие нули.

Выходные данные

Выведите n цифр в системе счисления по основанию m — полученное третье число. Цифры выводите в порядке от старших разрядов к младшим.

A1. Спецзадание

жадные алгоритмы *1100

Специальный агент Умный Бобер работает в отделе секретных исследований и разработок компании ABBYY. Трудится он там уже достаточно давно и доволен своей работой, так как она позволяет ему питаться в лучших лесных ресторанах и заказывать в них самые дорогие и экзотические породы древесины.

Довольный жизнью наш спецагент получает очередное важное задание: необходимо заполучить новейшие разработки британских ученых в области английского языка. Эти разработки засекречены и хранятся в большом сейфе. Зубы у бобра достаточно крепки, потому начальство уверено, что по прибытии на место вскрытие сейфа не вызовет сложностей.

И вот он уже доедает свою веточку осины и выходит на это важное задание. Естественно, прибыть на место у Умного Бобра труда не составило, а вот вскрыть сейф своими крепкими и большими зубами, увы, не получается. В этот момент с Умным Бобром связывается штаб и сообщает, что вскрывать зубами сейф нет необходимости, так как из достоверного источника была получена следующая информация: код от сейфа состоит из цифр и не имеет лидирующих нулей. Также была получена специальная подсказка, с помощью которой можно открыть сейф. Подсказка представляет собой строку s со следующей структурой:

  • если si = «?», то цифра, стоящая в коде от сейфа на позиции i может быть любой (от 0 до 9);
  • если si цифра от 0 до 9, то значит, в коде на позиции i строит цифра si;
  • если в строке s встречаются буквы от «A» до «J», то на всех позициях, где эти буквы одинаковы, стоит одинаковая цифра, а где буквы различаются — должны стоять обязательно разные цифры.
  • Длина кода сейфа совпадает с длиной подсказки.

Например, для подсказки «?JGJ9» подходят варианты кода от сейфа: «51919», «55959», «12329», «93539» и так далее, но не подходят такие варианты как: «56669», «00111», «03539» и «13666».

Получив такие данные, начальство меняет план действий и просит нашего спецагента работать тихо и аккуратно и не пытаться вскрыть сейф механическими способами, а попробовать перебрать пароль с помощью полученной подсказки.

В школе спецагентов Умный Бобер был первым во взводе по скорости перебора кодов от подобных сейфов, но сейчас он уже не в той форме: годы берут свое... Помогите ему определить количество возможных вариантов кода от сейфа, подходящих к заданной подсказке. Получив такую информацию и зная о своей скорости ввода кода, Умный Бобер сможет определить, успеет ли он на вечерний показ «Бобры идут по следу» на его любимом телеканале, или же его ждет бессонная ночь...

Входные данные

В первой строке содержится непустая строка s — подсказка к коду от сейфа. Строка s состоит из следующих символов: ?, 0-9, A-J. Гарантируется, что первый символ строки s не равен символу 0.

Ограничения на входные данные для получения 30 баллов (подзадача A1):

  • 1 ≤ |s| ≤ 5.

Ограничения на входные данные для получения 100 баллов (подзадачи A1+A2):

  • 1 ≤ |s| ≤ 105.

Здесь запись |s| обозначает длину строки s.

Выходные данные

Выведите количество кодов, которые подходят к заданной подсказке.

D. Вам знакомо это слово?

жадные алгоритмы Строки строковые суфф. структуры хэши *2800

Подстрока строки — это непрерывная подпоследовательность символов данной строки. Таким образом, строка bca является подстрокой строки abcabc, а строка cc — нет.

Повторяющийся блок — это строка, полученная конкатенацией некоторой строки с собой же. Таким образом, строка abcabc — это повторяющийся блок, а строки abcabd, ababab — нет.

Вам дана последовательность символов латинского алфавита (строка). За один ход Вы находите наикратчайшую подстроку, которая является повторяющимся блоком. Если таких подстрок несколько, выбираете ближайшую к левому краю строки. Пусть найденная подстрока имеет вид XX (X — некоторая строка), тогда Вы заменяете ее строкой X, иными словами, Вы удаляете одну из подстрок X в этой подстроке. Вы повторяете процесс до тех пор, пока в строке не остается повторяющихся блоков.

Как будет выглядеть результирующая строка? Посмотрите пояснения к тестовым примерам, чтобы лучше понять условие.

Входные данные

В первой строке дана строка, состоящая из строчных символов латинского алфавита, длины от 1 до 50000, включительно.

Выходные данные

Выведите итоговую строку после применения операций.

Примечание

В первом примере строка превращается так: abccabc  →  abcabc  →  abc.

Во втором примере строка превращается так: aaaabaaab  →  aaabaaab  →  aabaaab  →  abaaab  →  abaab  →  abab  →  ab.

A. Волшебные числа

жадные алгоритмы Перебор *900

Волшебное число — это такое число, которое получается конкатенацией (сцеплением) чисел 1, 14 и 144. Каждое число разрешается брать сколько угодно раз. Следовательно, 14144, 141414 и 1411 — волшебные числа, а 1444, 514 и 414 — нет.

Вам дано число. Определите, волшебное оно или нет.

Входные данные

Первая строка содержит целое число n, (1 ≤ n ≤ 109). Это число не содержит ведущих нулей.

Выходные данные

Выведите «YES», если n является волшебным числом, в противном случае выведите «NO».

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.

C. Командир Ciel

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное разделяй и властвуй *2100

Лиса Ciel становится командиром Древоземелья. В Древоземелье, как это следует из названия, есть n городов, соединенных n - 1 ненаправленными дорогами, а между любыми двумя городами существует путь по дорогам Древоземелья.

Лиса Ciel должна назначить каждому городу офицера. У каждого офицера есть ранг — буква от 'A' до 'Z'. Таким образом, имеется 26 различных рангов, самый высокий — 'A', самый низкий — 'Z'.

У Ciel имеется достаточно офицеров каждого ранга. Но не все так просто, должно быть выполнено особое условие: если x, y — два различных города и у их офицеров одинаковые ранги, то на простом пути между x и y должен быть город z, имеющий офицера более высокого ранга. Таким образом, общение между офицерами одного ранга будет гарантированно проходить под присмотром офицера более высокого ранга.

Помогите Ciel составить подходящий план назначения офицеров городам. Если это невозможно, выведите «Impossible!».

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество городов в Древоземелье.

В каждой из следующих n - 1 строк записано два целых числа a и b (1 ≤ a, b ≤ n, a ≠ b) — это значит, что существует дорога между городами a и b. Считайте, что города пронумерованы от 1 до n некоторым образом.

Гарантируется, что заданный граф будет деревом.

Выходные данные

Если подходящий план существует, выведите n символов, разделенных пробелами — i-ый символ обозначает ранг офицера в городе i.

В противном случае, выведите «Impossible!».

Примечание

В первом примере для любых двух офицеров ранга 'B', офицер с рангом 'А' будет на пути между ними. То есть, такое решение подходит.

D. Ciel и доска

дп жадные алгоритмы математика *2900

У лисы Ciel есть доска, на доске нарисована таблица из n строк и n столбцов, в каждой ячейке записано по целому числу.

Известно, что число n нечетное. Введем обозначение . Лиса Ciel может осуществить следующую операцию несколько раз: выбрать подтаблицу размера x строк на x столбцов, затем умножить все числа в ней на -1.

Найдите максимальную сумму чисел на доске, которую может получить Ciel.

Входные данные

В первой строке записано целое число n, (1 ≤ n ≤ 33, и n — нечетное число) — размер таблицы.

В каждой из следующих n строк записано n целых чисел — числа, записанные на доске. Каждое число не превышает по модулю 1000.

Выходные данные

Выведите единственное целое число: максимальную достижимую сумму чисел на доске.

Примечание

В первом тесте можно применить операцию дважды: сперва на подтаблице размера 2 × 2 в левом верхнем углу, затем — на подтаблице размера 2 × 2 в правом нижнем углу. Тогда все числа станут положительными.

A. Сiel и танцы

жадные алгоритмы *1000

Лиса Ciel и ее друзья стоят в танцевальной комнате. Там n мальчиков и m девочек, и они еще не танцевали. На танцах будут ставить песни и во время каждой песни должны танцевать ровно один мальчик и одна девочка. Также есть особое правило:

  • или мальчик в танцующей паре должен танцевать в первый раз (то есть он не танцевал ни с кем ранее);
  • или девочка в танцующей паре должна танцевать в первый раз.

Помогите лисе Ciel и составьте расписание, по которому танцы растянутся на как можно больше песен.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество мальчиков и девочек в танцевальной комнате.

Выходные данные

В первой строке выведите k — количество песен, которые можно будет протанцевать. Затем на следующих k строках выведите порядковые номера мальчиков и девочек, танцующих во время песен, в хронологическом порядке. Считайте, что мальчики пронумерованы от 1 до n, а девочки пронумерованы от 1 до m.

Примечание

В первом тесте есть 2 мальчика и 1 девочка. Можно провести 2 танца: 1-ый мальчик и 1-ая девочка (во время первой песни), 2-ой мальчик и 1-ая девочка (во время второй песни).

Во втором тесте есть 2 мальчика и 2 девочки, ответ — 3.

E. Тропинки и полянки

графы жадные алгоритмы Комбинаторика поиск в глубину и подобное снм *2800

Красная Шапочка и Иван Дурак гуляют по лесу. Гуляя по лесу, они обнаружили, что в лесу есть тропинки и полянки. Всего в лесу n полянок, которым Иван Дурак назначил номера от 0 до n - 1. Иван Дурак заметил, что для каждой полянки i, из нее есть ровно две тропинки: одна ведет в полянку номер (2·imod n, вторая — в полянку ((2·i) + 1) mod n.

Красная Шапочка, в свою очередь, заметила, что все тропинки однонаправленные (Красная Шапочка не может объяснить природу этого явления). Теперь, стоя в полянке с номером 0, Красная Шапочка задалась вопросом — если она начнет гулять по тропинкам, может ли она обойти все полянки ровно по одному разу и в конце вернуться на полянку с номером 0 опять (тем самым посетив ее дважды)?

Запись x mod y обозначает операцию взятия остатка от деления числа x на число y.

Входные данные

Единственная строка содержит целое число n (2 ≤ n ≤ 105) — количество полянок.

Выходные данные

Выведите порядок, в котором следует обойти полянки. Каждая полянка должна быть выведена ровно один раз, кроме полянки 0, которая должна быть выведена ровно дважды: первой и последней в списке. Если решения не существует, выведите -1. Если решений несколько, выведите любое из них.

B. Кубики

жадные алгоритмы *1500

Вы помните, как гордый Кай льдинками выкладывал слово «вечность»? Маленький Шелдон играет с кубиками, на каждом из которых изображена одна цифра от 0 до 9 (включительно). Шелдон выкладывает свое любимое число t. Он понял, что цифры 6 и 9 настолько похожи, что перевернув кубик с цифрой 6 получается кубик с цифрой 9 (и наоборот). Аналогичная ситуация имеет место и для кубиков с цифрами 2 и 5. Остальные цифры не подвержены подобному феномену, который маленький Шелдон называет «цифровой мимикрией».

Шелдон очень любит число t. Настолько, что хочет его видеть перед собой в наибольшем количестве экземпляров. Какое количество раз Шелдон сможет сложить свое любимое число t, используя заданный набор кубиков? Разумеется, каждый кубик может быть использован не более чем в одном экземпляре числа t. Сложив некоторый экземпляр числа t, Шелдон более не трогает его и кубики, использованные в этом экземпляре.

Входные данные

В первой строке входного файла записано целое положительное число t (1 ≤ t ≤ 10000), t — любимое число Шелдона. Вторая строка содержит последовательность цифр, изображенных на кубиках Шелдона. Длина последовательности от 1 до 200, она содержит только цифры от 0 до 9 и не содержит пробелов.

Выходные данные

Выведите максимально количество экземпляров числа t, которое может сложить Шелдон. Допускается использование кубика 6 в качестве кубика 9 (и наоборот), аналогично с кубиками 2 и 5. Каждый кубик может быть использован не более чем в одном экземпляре числа t.

Примечание

Задача содержит очень слабые претесты.

A. Очищение

жадные алгоритмы Конструктив *1500

Вы — искатель приключений. Сейчас Вы путешествуете по злому храму. Одолев пару злых зомби, Вы прибыли в квадратную комнату, состоящую из плиток, выложенных в таблицу размера n × n. Строки пронумерованы от 1 до n сверху вниз, а столбцы пронумерованы с 1 до n слева направо. В дальнем углу комнаты находится дверь, закрытая злыми магическими силами. На двери написано следующее:

Очищение от всякого зла пробудит дверь!

Так как Вы довольно опытный искатель приключений, Вы мгновенно понимаете, в чем тут дело. Вы замечаете, что каждая ячейка в таблице изначально является злой. Надо очистить все эти ячейки.

Единственный известный Вам способ очищения плиток — заклинание «Очищение». Заклинание накладывается на одну плитку, а затем все ячейки в той же строке, а также все ячейки в том же столбце (включая выбранную плитку) очищаются! Разрешается очищать клетку несколько раз.

Вы хотели бы очистить все n × n ячеек, накладывая заклинание очищения как можно меньше раз. В теории все просто, но вы только что заметили, что есть еще особо злые плитки. На них заклинание очищения нельзя накладывать, даже после того, как они были очищены. Но эти плитки все же можно очистить, если наложить заклинание очищения на ячейку в той же строке или столбце.

Пожалуйста, найдите способ очистить все ячейки минимальным количеством накладываемых заклинаний. Если такого способа нет, выведите -1.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100). В следующих n строках записано по n символов: j-ый символ i-ой строки обозначает ячейку, расположенную в строке i и столбце j. Особо злые плитки заданы символом «E», остальные — символом «.».

Выходные данные

Если очистить все клетки не удастся, то выведите -1. В противном случае, если Ваше решение накладывает x заклинаний очищения, выведите x строк. Каждая строка должна состоять из двух целых чисел, обозначающих номер строки и столбца ячейки, на которую следует наложить заклинание очищения.

Примечание

Первый пример иллюстрируется следующим образом. Фиолетовым выделены неочищенные злые плитки. Красным выделена плитка, на которую наложено заклинание очищения. Желтым выделены плитки, на которые распространяется текущее заклинание (возможно, ранее они уже были очищены). Зеленым выделены ранее очищенные плитки.

Во втором примере очистить ячейку, расположенную в строке 1 и столбце 1, невозможно.

К третьему примеру:

A. Что у нас на ужин?

жадные алгоритмы реализация *1200

В одной малоизвестной, но очень красивой стране Ватерляндии обитает милая акула Валерия. Как и у всех акул, зубы у нее расположены в несколько рядов, а питается она преимущественно карасиками. Одной из отличительных особенностей Валерии является то, что поедая одного карасика, она использует только один ряд зубов, остальные зубы в это время «отдыхают».

Долго наша героиня бороздила морские просторы в поисках своих любимых карасиков, пока не произошло с ней большое несчастье. Однажды у Валерии разболелись зубы, и ей пришлось обратиться к местному стоматологу, омару Ашоту. Будучи профессионалом, Ашот очень быстро избавил Валерию от зубной боли. Кроме того, он сумел определить причину развившегося кариеса (за что впоследствии получил прозвище Кэп).

Оказалось, что Валерия кушает слишком много карасиков. Чтобы предостеречь акулу от повторного возникновения зубной боли, Ашот определил для каждого зуба Валерии его остаточную жизнеспособность. Остаточной жизнеспособностью зуба стоматолог назвал величину, равную числу карасиков, которых можно съесть, используя этот зуб. Каждый раз, когда Валерия будет съедать карасика, жизнеспособность всех зубов, задействованных при этом, будет уменьшаться на единицу, и как только жизнеспособность хотя бы одного зуба станет отрицательной, акуле вновь придется обратиться за помощью стоматолога.

Опечаленная этими известиями, Валерия вернулась домой, где ее уже поджидала порция заранее заготовленных карасиков. Конечно же, акула не могла отказаться от своей горячо любимой пищи, но желания вновь оказаться в стоматологическом кресле у Валерии также не было. Поэтому она решила, что съест максимальное число имеющихся у нее карасиков, но при этом такое, чтобы жизнеспособность никакого зуба не становилась отрицательной.

Поскольку Валерия не сильна в математике, она попросила вас помочь ей определить суммарное число карасиков, которыми она сможет отужинать.

Напомним, что при поедании одного карасика Валерия использует ровно один ряд зубов, причем жизнеспособность каждого зуба, принадлежащего этому ряду, уменьшается на единицу.

Входные данные

В первой строке задано три целых числа n, m, k (1 ≤ m ≤ n ≤ 1000, 0 ≤ k ≤ 106) — общее число зубов у Валерии, количество зубных рядов и количество карасиков, имеющихся у Валерии на ужин, соответственно. В следующих n строках содержится по два целых числа: r (1 ≤ r ≤ m) — номер ряда, которому принадлежит соответствующий зуб, и c (0 ≤ c ≤ 106) — его остаточная жизнеспособность.

Гарантируется, что в каждом ряду находится положительное число зубов.

Выходные данные

В первую строку выведите наибольшее число карасиков, которыми Валерия сможет поужинать.

C. Прекрасная рандомизированная сумма

жадные алгоритмы *1800

Учиться, учиться и еще раз учиться — вот чем приходится заниматься Валере каждый будний день. Он учится в математической школе, где конечно же профильным предметом является математика. Учительница математики Валерия Валерьевна очень любит свой предмет и всячески пытается привить эту любовь ученикам. Однако её методы весьма сомнительны, так как ради достижения своей цели она постоянно дает детям очень объемные и сложные домашние задания. Несмотря на то что Валера вовсе не худший ученик в классе, с очередным домашним заданием, которое как всегда оказалось непростым, он не справился. Вот поэтому он и обратился к Вам за помощью. А задание у Валеры такое: пусть задана последовательность из n чисел. Назовем префиксом последовательности некоторое количество первых ее элементов (возможно нулевое), а суффиксом — некоторое количество последних ее элементов (возможно нулевое). Разрешается последовательно выполнить две операции - взять произвольный префикс последовательности и умножить все числа в нем на  - 1, а затем проделать такую же операцию с суффиксом (префикс и суффикс могут пересекаться). Какую наибольшую сумму элементов последовательности можно получить в результате этих двух действий?

Входные данные

В первой строке входного файла задано число n (1 ≤ n ≤ 105) — количество элементов в последовательности. Во второй строке n целых чисел ai ( - 104 ≤ ai ≤ 104) — сама последовательность.

Выходные данные

В первой и единственной строке выходного файла выведете ответ на поставленную задачу.

C. Месть студентов

жадные алгоритмы сортировки Структуры данных *2200

Нелегка студенческая жизнь. На собственном опыте пришлось прочувствовать это некоторым студентам Берляндского университета. За два года обучения возникла у них стойкая неприязнь к заведующей одной из кафедр. В самом деле, то группы переформирует, то запретит ставить студентам автоматы, то совершит еще какой-нибудь отвратительный поступок. Решили студенты, что все это не должно сойти заведующей с рук...

Благодаря связям в ректорате студентам стало известно, что на следующем заседании ректората будет рассмотрено n приказов, касающихся заведующей, при этом принято из них будет ровно p. Для каждого приказа определено две величины: ai — количество седых волос, которое прибавится на голове у заведующей, если она выполнит этот приказ, и bi — недовольство ректората тем, что данный приказ не будет выполнен. Студенты могут добиться того, чтобы в ректорате были приняты любые выбранные ими p приказов. Студенты знают, что из числа этих p приказов заведующая выполнит ровно k, причем она будет выбирать их таким образом, чтобы минимизировать в первую очередь суммарное недовольство ректората ее действиями, а во вторую — количество седых волос, которое прибавится у нее на голове.

Студенты хотят выбрать p приказов так, чтобы на голове у заведующей прибавилось как можно больше седых волос. Если при этом есть несколько вариантов принятия приказов, то в интересах студентов максимизировать недовольство ректората действиями заведующей. Помогите им.

Входные данные

В первой строке записаны три целых числа n (1 ≤ n ≤ 105), p (1 ≤ p ≤ n), k (1 ≤ k ≤ p) — количество приказов, которые будут рассмотрены ректоратом, количество приказов, которые будут приняты ректоратом, и количество приказов, которые будут выполнены заведующей, соответственно. Каждая из следующих n строк содержит два целых числа ai и bi (1 ≤ ai, bi ≤ 109), описывающих соответствующий приказ.

Выходные данные

Выведите в произвольном порядке p различных целых чисел — номера приказов, которые необходимо принять, чтобы осуществить замысел студентов. Приказы нумеруются от 1 до n согласно порядку их следования во входных данных. Если оптимальных решений несколько, можно вывести любое.

Примечание

В первом примере одно из оптимальных решений — это принятие приказов 1, 2, 3. В этом случае заведующая выполнит приказы с номерами 1 и 2. У нее на голове прибавится 10 седых волос, а недовольство ректората ее действиями будет равно 3. Отметим, что такого же результата можно достичь, приняв вместо приказа 3 приказ 4.

Во втором примере заведующая сможет выполнить все приказы, поэтому студентам лучше всего принимать приказы с максимальной суммой ai. На голове у заведующей прибавится 58 седых волос, а недовольство ректората будет равно 0.

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-кодам.

A. Секреты

жадные алгоритмы *1600

Геральд на досуге занимается продажей государственных секретов. Все секреты стоят одинаково: n марок. В государстве, продажей секретов которого занимается Геральд, нет купюр, есть только монеты. Зато есть монеты всех положительных целых номиналов, являющихся степенями тройки: 1 марка, 3 марки, 9 марок, 27 марок и так далее. Монет других номиналов в обращении нет. Конечно, Геральд любит, когда ему дают без сдачи. И все покупатели уважают его и стараются давать нужную сумму без сдачи, если это возможно. Но такое бывает не всегда.

Однажды к нему пришел незадачливый покупатель, у которого не нашлось нужной суммы без сдачи. Тогда он постарался из имеющихся у него монет выдать Геральду большую, чем надо сумму как можно меньшим количеством монет. Какое максимальное количество монет у него могло получиться?

Формальное объяснение предыдущего абзаца: рассмотрим все возможные комбинации монет, при которых покупатель не может дать Геральду сумму в n марок без сдачи. Для каждой такой комбинации посчитаем, каким минимальным количеством монет покупатель может набрать хотя бы n марок. Среди всех комбинаций выберем максимум по минимальному количеству монет. Это число нас и интересует.

Входные данные

В единственной строке содержится целое число n (1 ≤ n ≤ 1017).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственной строке выведите целое число: максимальное число монет, которым мог расплатиться незадачливый покупатель.

Примечание

В первом тестовом примере, у покупателя не может быть монеты в 1 марку, так как тогда бы он мог выдать точную сумму. Он выдаст ровно одну монету, так как он стремится дать как можно меньше монет, а любая другая монета уже дает большую сумму.

Во втором тестовом примере, если бы у покупателя были в наличии ровно три монеты по 3 марки, тогда, чтобы отдать Геральду 4 марки, придется отдать две из этих монет. Три монеты отдать нельзя, потому что покупатель стремится минимизировать количество монет, которые он отдаст из имеющихся у него.

B. Фишки

жадные алгоритмы *1800

Геральд играет в следующую игру. У него есть клетчатое поле размера n × n клеток, причем m различных его клеток запрещены. Перед началом игры он должен поставить несколько фишек на некоторые крайние (но не угловые) клетки доски. Затем в течение n - 1 минуты раз в минуту Геральд двигает каждую фишку в соседнюю клетку, продвигая ее от ее исходного края к противоположному краю. Геральд двигает все фишки одновременно. Геральд проигрывает в этой игре в каждом из трех случаев:

  • Хотя бы одна из фишек хотя бы раз попала на запрещенную клетку.
  • Хотя бы раз две фишки оказались на одной клетке.
  • Хотя бы раз две фишки за минуту поменялись местами (например, если две фишки поставить в два конца строки четной длины, такая ситуация произойдет посередине строки).

В таком случае он проигрывает и зарабатывает 0 очков. Если ничего такого не случилось, то он выигрывает и зарабатывает столько очков, сколько фишек ему удалось поставить на доску. Помогите Геральду заработать как можно больше очков.

Входные данные

В первой строке записаны через пробел два целых числа n и m (2 ≤ n ≤ 1000, 0 ≤ m ≤ 105) — размер поля и количество запрещенных клеток. В следующих m строках записаны по два целых числа в строке, разделенных пробелом. А именно, в i-той из этих строк записаны числа xi и yi (1 ≤ xi, yi ≤ n) — координаты i-той запрещенной клетки. Ни одна из запрещенных клеток не упомянута больше одного раза.

Считайте, что строки поля пронумерованы сверху вниз от 1 до n, а столбцы — слева направо от 1 до n.

Выходные данные

Выведите единственное целое число — максимальное количество очков, которое может заработать Геральд в этой игре.

Примечание

В первом тесте ответ равен нулю, так как нельзя ставить фишки в угловые клетки.

Во втором тесте, можно поставить одну фишку в клетку (1, 2), либо в клетку (3, 2), либо в клетку (2, 1), либо в клетку (2, 3). Две фишки поставить нельзя никак.

В третьем примере, можно поставить только одну фишку в клетку (2, 1), либо в клетку (2, 4).

C. Медведь Василий и последовательность

жадные алгоритмы Перебор реализация теория чисел *1800

У медведя Василия есть последовательность целых положительных чисел a1, a2, ..., an. Медведь Василий хочет выписать из них несколько чисел себе на листок так, чтобы красота выписанных чисел была максимальна.

Красотой выписанных чисел b1, b2, ..., bk медведь называет такое максимальное целое неотрицательное число v, что число b1 and b2 and ... and bk делится без остатка на число 2v. Если же такого числа v не существует (то есть для любого целого неотрицательного v число b1 and b2 and ... and bk делится без остатка на 2v), красота выписанных чисел равна -1.

Подскажите медведю, какие числа ему нужно выписать, чтобы красота выписанных чисел была максимальна. Если же существует несколько способов выписать числа, следует выбрать тот, при котором медведь выпишет наибольшее количество чисел.

Здесь выражение x and y означает применение к числам x и y операции побитового И. В языках программирования C++ и Java эта операция обозначается как «&», на Pascal она обозначается как «and».

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ 109).

Выходные данные

В первой строке выведите единственное число k (k > 0) — количество чисел, которые надо выписать. Во второй строке выведите k целых чисел b1, b2, ..., bk — числа, которые нужно выписать. Числа b1, b2, ..., bk разрешается выводить в любом порядке, однако все они должны быть различными. Если существует несколько способов выписать числа, следует выбрать тот, при котором количество выписанных чисел максимально. Если все равно существует несколько способов, разрешается вывести любой.

A. Пазлы

жадные алгоритмы *900

Учебный год подходит к концу, и классной руководительнице Манане Тариеловне скоро придется прощаться с очередным классом. На прощанье учительница решила подарить каждому из своих n учеников «пазл» (согласно wikipedia, пазл — игра-головоломка, в которой требуется составить мозаику из множества фрагментов рисунка различной формы).

В магазине учительнице сказали, что у них есть m пазлов, но они возможно не все одинаковой сложности и размера. Конкретно, первый пазл состоял из f1 фрагментов, второй — из f2, и так далее.

Манана Тариеловна решила, что разница между количествами фрагментов в подаренных ею пазлах должна быть как можно меньше, иначе дети могут обидеться. Поэтому она хочет выбрать такие n пазлов, что если A — это количество фрагментов в самом большом, а B — количество фрагментов в самом маленьком из них, то A - B должно быть минимальным возможным. Помогите учительнице и найдите наименьшую возможную разницу A - B.

Входные данные

В первой строке через пробел записаны целые числа n и m (2 ≤ n ≤ m ≤ 50). Во второй строке через пробел записано m целых чисел f1, f2, ..., fm (4 ≤ fi ≤ 1000) — количества фрагментов в пазлах, продающихся в магазине.

Выходные данные

Выведите единственное целое число — минимальную возможную разницу между максимальным и минимальным количеством фрагментов среди пазлов, которые должна приобрести учительница.

Примечание

Пример 1. В классе всего 4 ученика. В магазине продается 6 пазлов. Если Манана Тариеловна купит первые четыре пазла, которые состоят из 10, 12, 10 и 7 фрагментов соответственно, тогда разница между самым большим и самым маленьким будет равна 5-ти. Меньшую разницу получить невозможно. Заметим, что учительница может купить пазлы 1, 3, 4 и 5 и также получить разницу 5.

B. Бытовая задача

жадные алгоритмы математика теория чисел *1400

У Манао есть монитор, у которого отношение длины горизонтали к длине вертикали a:b. Сейчас он собирается смотреть фильм, картинка которого имеет соотношение длин по горизонтали и по вертикали c:d. Манао настроит просмотр так, чтобы картинка фильма сохранила оригинальное соотношение, но при этом занимала максимально много места на экране и умещалась на нем полностью. Соответственно, ему возможно придется увеличить или уменьшить картинку фильма, но Манао обязательно изменит картинку пропорционально по обоим измерениям.

Вычислите, какая часть экрана останется незанятой во премя просмотра. Выведите ответ в виде несократимой дроби p / q.

Входные данные

Единственная строка содержит четыре целых числа a, b, c, d (1 ≤ a, b, c, d ≤ 1000), записанных через пробел.

Выходные данные

Выведите ответ задачи в виде "p/q", где p — целое неотрицательное число, q — целое положительное число и числа p и q не имеют общего делителя больше 1.

Примечание

Пример 1. У Манао монитор с квадратным экраном, на котором он хочет посмотреть фильм с соотношением длин горизонтали и вертикали 3:2. Очевидно, что максимум места на экране фильм займет, если ширина картинки будет совпадать с шириной экрана. В таком случае по вертикали будет занято только 2/3 монитора:

Пример 2. На этот раз ширина монитора в 4/3 раз больше его высоты, а картинка фильма квадратная. В таком случае картинка по вертикали должна занимать весь монитор, а по горизонтали лишь 3/4:

C. Викторина

Бинарный поиск жадные алгоритмы математика матрицы теория чисел *1600

Манао принимает участие в викторине. Викторина состоит из n последовательных вопросов. За правильный ответ на вопрос игрок набирает 1 очко. Также в игре есть счетчик последовательных правильных ответов. Когда игрок правильно отвечает на вопрос, к числу на счетчике прибавляется 1. Если игрок неправильно отвечает на вопрос, то счетчик сбрасывается, то есть число на нем превращается в 0. Если после ответа на вопрос счетчик достигает числа k, то он сбрасывается, а счет игрока увеличивается вдвое. Заметим, что в таком случае сначала 1 очко прибавляется к счету игрока, а после происходит его удвоение. В начале игры и счет игрока, и число на счетчике последовательных ответов равны нулю.

Манао помнит, что правильно ответил ровно на m вопросов, но не помнит в каком порядке были расположены вопросы. Он пытается вычислить, каков может быть его минимальный счет. Помогите ему и выведите остаток соответствующего числа при делении на 1000000009 (109 + 9).

Входные данные

В единственной строке записаны через пробел три целых числа n, m и k (2 ≤ k ≤ n ≤ 109; 0 ≤ m ≤ n).

Выходные данные

Выведите единственное число — остаток от деления минимального возможного счета Манао в викторине на 1000000009 (109 + 9).

Примечание

Пример 1. Манао ответил на 3 вопроса из 5, и за каждые два последовательных правильных ответа его счет удваивался. Если бы Манао ответил на первый, третий и пятый вопросы, то он в сумме набрал бы 3 очка.

Пример 2. Теперь Манао ответил уже на 4 вопроса. Минимальный счет достигается в случае, если его единственный неправильный ответ был на четвертый вопрос.

Заметим, что вас просят минимизировать счет, а не остаток от деления счета на 1000000009. Например, если во время игры Манао мог набрать или 2000000000, или 2000000020 очков, ответом задачи будет 2000000000 mod 1000000009, даже хотя 2000000020 mod 1000000009 представляет собой меньшее число.

A. Математика спешит на помощь

жадные алгоритмы реализация сортировки Строки *800

Начинающий математик Ксения учится в третьем классе. Сейчас в школе она проходит операцию сложения.

Учитель записал на доске сумму нескольких чисел, которую требуется посчитать. Чтобы было проще считать, в сумме используются только числа 1, 2 и 3. Но и этого Ксении мало. Ксения только учится считать, и поэтому она может посчитать сумму, только если слагаемые в сумме идут в порядке неубывания. Например, сумму 1+3+2+1 она посчитать не может, а суммы 1+1+2 и 3+3 может.

Вам задана сумма, которая записана на доске. Переставьте слагаемые и выведите ее в виде, в котором Ксения сможет посчитать сумму.

Входные данные

В первой строке записана непустая строка s — сумма, которую нужно посчитать Ксении. Строка s не содержит пробелов, состоит только из цифр и знаков «+» и является корректной суммой чисел 1, 2 и 3. Длина строки s не более 100 символов.

Выходные данные

Выведите новую сумму, которую сможет посчитать Ксения.

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 целых чисел — веса гирек в порядке их выкладывания на весы.

Если существует несколько решений, разрешается вывести любое.

E. Три переворота

жадные алгоритмы Конструктив поиск в глубину и подобное *2700

У коневода Ксении есть n (n > 1) коней, которые стоят в ряд. У каждого коня есть свой уникальный номер. Изначально, i-ый слева конь имеет номер i. То есть последовательность номеров коней в ряду выглядит следующим образом (слева направо): 1, 2, 3, ..., n.

Ксения тренирует коней перед выступлением. Она последовательно дает им команды. Каждая команда имеет вид пары чисел l, r (1 ≤ l < r ≤ n). Команда l, r означает, что кони, которые стоят на l-ом, (l + 1)-ом, (l + 2)-ом, ..., r-ом местах должны поменяться местами. Кони, которые стоят до выполнения команды на l-ом и r-ом местах, должны поменяться местами. Аналогично, кони на (l + 1)-ом и (r - 1)-ом местах должны поменяться местами. Кони на (l + 2)-ом на (r - 2)-ом местах должны поменяться местами. И так далее. Другими словами, кони на отрезке [l, r] в ряду поменяют свой порядок на обратный.

Например, если Ксения скомандовала l = 2, r = 5, а последовательность номеров коней до переворота имела вид (2, 1, 3, 4, 5, 6), то после переворота последовательность будет иметь вид (2, 5, 4, 3, 1, 6).

Известно, что на тренировке Ксения выдала не более трех команд описанного вида. Вам дана последовательность номеров коней, которая получилась в результате тренировки. Найдите, какие команды отдала Ксения. Обратите внимание, что Вам не требуется минимизировать количество команд в ответе, требуется найти любой корректный набор из не более чем трех команд.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 1000) — количество коней в ряду. Во второй строке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), где ai — это номер i-го слева коня в ряду после тренировки.

Выходные данные

В первой строке выведите целое число k (0 ≤ k ≤ 3) — количество команд, которые Ксения отдала на тренировке. В каждой из следующих k строк выведите два целых числа. В i-той из них выведите числа li, ri (1 ≤ li < ri ≤ n) — команда, которую Ксения отдала i-ой на тренировке.

Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

B. Распродажа

жадные алгоритмы сортировки *900

Однажды Вася попал на распродажу старых телевизоров. Всего на распродаже n телевизоров. Цена телевизора номер iai бурлей. Причем часть телевизоров имеет отрицательную цену — их хозяева готовы сами заплатить Васе за то, что он избавит их от ненужной техники. Вася может «купить» любые телевизоры, какие захочет. Но хоть он и очень сильный, Вася может унести не больше m телевизоров, а возвращаться на распродажу второй раз у него нет желания. Помогите Васе: найдите наибольшую сумму денег, которую он сможет заработать.

Входные данные

В первой строке через пробел записано два целых числа n и m (1 ≤ m ≤ n ≤ 100) — количество телевизоров на распродаже и количество телевизоров, которое может унести Вася. На следующей строке через пробел записано n целых чисел ai ( - 1000 ≤ ai ≤ 1000) — цены телевизоров.

Выходные данные

Выведите одно число — максимальную сумму денег, которую заработает Вася, если он может унести не больше m телевизоров.

E. Игра с конфетами

жадные алгоритмы Конструктив *3000

Яхуб играет в необычную игру. Изначально у него есть n коробок, пронумерованных 1, 2, 3, ..., n. В каждой коробке лежит некоторое количество конфет. В коробке с номером k лежит ak конфет.

Цель игры — переместить все конфеты ровно в 2 коробки. В оставшихся n - 2 коробках должно остаться ноль конфет. Для этого Яхуб должен сделать несколько (возможно, ноль) ходов. За один ход он выбирает две различные коробки i и j, такие, что ai ≤ aj. Затем, Яхуб перекладывает из коробки j в коробку i ровно ai конфет. Например, когда в двух коробках лежит одинаковое количество конфет, коробка номер j становится пустой.

Ваша задача — сказать Яхубу, какие ходы он должен сделать, чтобы достигнуть цели игры. Если Яхуб не может достигнуть цели для данной конфигурации коробок, выведите значение -1. Пожалуйста, обратите внимание, что если решение существует, вам не требуется искать решение с минимальным количеством ходов.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 1000). В следующей строке записано n целых неотрицательных чисел a1, a2, ..., an — элементы последовательности a. Гарантируется, что сумма всех элементов последовательности a не превышает 106.

Выходные данные

Если решения не существует, выведите -1. В противном случае, в первой строке выведите целое число c (0 ≤ c ≤ 106) — количество ходов. В каждой из следующих c строк выведите два целых числа i и j (1 ≤ i, j ≤ n, i ≠ j): числа i и j в k-ой строке обозначают, что на k-ом ходу Вы перекладываете конфеты из коробки с номером j в коробку с номером i.

Примечание

В первом тестовом примере после первого хода коробки будут содержать 3, 12 и 3 конфет. После второго хода, коробки будут содержать 6, 12 и 0 конфет. Итак, все конфеты ровно в двух коробках, что и требуется.

Во втором тестовом примере, вы можете увидеть, что данная конфигурация изначально не подходит, так как все конфеты в одной коробке. Никакая операция не сможет этого изменить, поэтому решения не существует.

В третьем тестовом примере, все конфеты изначально в двух коробках. Таким образом, не требуется выполнять никаких ходов.

A. Ксюша и делители

жадные алгоритмы реализация *1200

У математика Ксюши есть последовательность, состоящая из n (n делится на 3) целых положительных чисел, каждое из которых не больше 7. Она хочет разбить эту последовательность на тройки, так, чтобы для каждой тройки a, b, c выполнялись условия:

  • a < b < c;
  • a делит b, b делит c.

Конечно, Ксюша хочет, чтобы каждый элемент последовательности принадлежал ровно одной тройке. Отсюда следует, что, если требуемое разбиение существует, то в нем троек.

Помогите Ксюше, найдите требуемое разбиение или сообщите, что такого не существует.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 99999) — количество элементов в последовательности. В следующей строке записаны n целых положительных чисел, каждое из которых не больше 7.

Гарантируется, что n делится на 3.

Выходные данные

Если требуемое разбиение существует, выведите троек. Каждую тройку выводите как значения элементов, которые в нее входят. Значения выводите в порядке возрастания. Тройки и числа в тройках разделяйте пробельными символами. Если существует несколько решений, разрешается вывести любое.

Если решения не существует, выведите -1.

B. Ксюша и шпионы

жадные алгоритмы Перебор реализация *1500

Перед грозным детективом Ксюшей выстроились в ряд n (n ≥ 2) иностранных шпионов. Будем считать, что шпионы пронумерованы от 1 до n слева направо.

У шпиона номер s хранится важная записка. Он должен передать ее шпиону номер f. Допрос шпионов проходит в несколько этапов. В течение одного этапа шпион, у которого сейчас хранится важная записка, может передать записку одному из своих соседей в ряду. Другими словами, если этот шпион имеет номер x, он может передать записку одному из шпионов x - 1 или x + 1 (если x = 1 или x = n, то у шпиона только один сосед). Также в течение этапа шпион может сохранить записку у себя и никому ее не передавать.

Но не все так просто, в течение m этапов Ксюша пристально наблюдает за некоторыми шпионами. А именно, в течение этапа номер ti (этапы нумеруются, начиная с 1) Ксюша наблюдает за шпионами с номерами li, li + 1, li + 2, ..., ri (1 ≤ li ≤ ri ≤ n). Конечно, если в течение какого-то этапа за шпионом наблюдают, он не может ни передавать записку, ни принимать ее от другого шпиона. Иначе Ксюша сразу раскроет хитрый заговор шпионов. Тем не менее, если шпион на текущем этапе сохраняет записку у себя, даже если Ксюша наблюдает за ним, она ничего не обнаружит.

Вам заданы s и f, а также в какие моменты и за кем следит Ксюша. Определите, как нужно действовать шпионам, чтобы передать записку от шпиона s до шпиона f как можно быстрее (за минимальное количество этапов).

Входные данные

В первой строке записаны четыре целых числа n, m, s и f (1 ≤ n, m ≤ 105; 1 ≤ s, f ≤ ns ≠ fn ≥ 2). В каждой из следующих m строк записаны три целых числа ti, li, ri (1 ≤ ti ≤ 109, 1 ≤ li ≤ ri ≤ n). Гарантируется, что t1 < t2 < t3 < ... < tm.

Выходные данные

Выведите k символов в одну строку: i-ый символ в строке должен обозначать действие шпионов на этапе номер i. Если на этапе номер i шпион, у которого находится записка, должен передать ее шпиону с меньшим номером, i-ый символ должен быть равен «L». Если на этапе номер i шпион, у которого находится записка, должен передать ее шпиону с большим номером, i-ый символ должен быть равен «R». Если шпион должен оставить записку у себя на i-ом этапе, i-ый символ должен быть равен «X».

В результате применения выведенной последовательности действий шпион s должен передать записку шпиону f. Количество выведенных символов k должно быть как можно меньше. Ксюша не должна обнаружить, что шпионы передают записку.

Если существует несколько оптимальных ответов, разрешается вывести любой. Гарантируется, что ответ существует.

B. Переменный ток

жадные алгоритмы реализация Структуры данных *1600

Безумный ученый Майк только что завершил сборку новой установки для поиска внеземного разума! Он так торопился запустить ее в первый раз, что подключил провода питания не глядя и принялся за опыты. Впоследствии Майк заметил, что эти провода переплелись между собой и что их теперь придется распутывать.

Установку питают два провода: «плюс» и «минус», которые идут по полу от стены (слева) до самой установки (справа). Как в стене, так и в установке на одинаковой высоте имеется по два контакта, к которым в каком-то порядке подключены провода. Провода считаются запутанными, если есть места, где один провод проходит над другим. Например, на картинке ниже таких мест четыре (вид сверху):

Майк знает, в какой последовательности провода проходят друг над другом. Он также заметил, что слева провод «плюс» всегда подключен к верхнему контакту (так, как на картинке). Майк хотел бы распутать провода, не отсоединяя их от контактов и не трогая саму установку. Определите, удастся ли ему это сделать. Считайте, что провода можно передвигать как угодно, что провода могут произвольно растягиваться, но не могут рваться.

Для лучшего понимания задачи рекомендуется прочитать пояснения ко всем тестовым примерам.

Входные данные

В единственной строке ввода дана последовательность символов «+» и «-» длиной n (1 ≤ n ≤ 100000). На i-той (1 ≤ i ≤ n) позиции последовательности находится символ «+», если на i-том шаге от стены провод «плюс» проходит над проводом «минус», и символ «-» иначе.

Выходные данные

Выведите «Yes» (без кавычек), если провода можно распутать, или же «No» (без кавычек), если провода распутать нельзя.

Примечание

Первый пример соответствует картинке, приведенной в условии. Чтобы распутать провода, можно сначала «плюс» отвести вниз, избавившись от двух пересечений в середине, а потом провести его под «минусом», убрав и пересечения по краям.

Во втором примере провод «плюс» делает один полный оборот вокруг «минуса». Следовательно, распутать провода нельзя:

В третьем примере провод «плюс» просто два раза подряд проходит сверху над «минусом». Приподняв и переместив «плюс» выше, провода можно распутать:

В четвертом примере «минус» один раз проходит над «плюсом». Не трогая саму установку, нельзя сделать так, чтобы провода не проходили один на другим:

C. Время чтения

Бинарный поиск жадные алгоритмы *1900

Безумный ученый Майк не использует медленные жесткие диски. В его модификации жесткого диска есть не одна, а n разных головок, которые могут читать данные параллельно.

Разрез жесткого диска Майка представляет собой бесконечный массив из дорожек. Дорожки массива пронумерованы слева направо целыми числами, начиная с 1. В начальном состоянии i-тая считывающая головка находится над дорожкой с номером hi. Программное обеспечение жесткого диска за 1 секунду может переместить каждую из головок ровно на одну дорожку направо или налево, либо оставить на текущей дорожке. В течение времени работы жесткого диска движение каждой головки не влияет на движение остальных головок: головки могут меняться местами; на каждой дорожке может находиться несколько головок. Дорожка считается считанной, если хотя бы одна головка побывала на этой дорожке. В частности, все дорожки под номерами h1, h2, ..., hn уже считаны в начале работы жесткого диска.

Майку нужно считать данные на m разных дорожках под номерами p1, p2, ..., pm. Определите наименьшее время, за которое жесткий диск сможет считать данные с заданных дорожек. Обратите внимание на то, что при этом дополнительно может быть считано произвольное количество других дорожек.

Входные данные

В первой строке входных данных через пробел даны два целых числа n, m (1 ≤ n, m ≤ 105) — количество головок диска и количество дорожек, данные которых нужно считать, соответственно. Во второй строке через пробел в порядке возрастания даны n различных целых чисел hi (1 ≤ hi ≤ 1010, hi < hi + 1) — начальные позиции головок. В третьей строке через пробел в порядке возрастания даны m различных целых чисел pi (1 ≤ pi ≤ 1010, pi < pi + 1) — номера дорожек, с которых нужно считать данные.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — наименьшее время в секундах, за которое можно считать все нужные дорожки.

Примечание

Первый тест совпадает с рисунком. В данном случае данные дорожки можно считать за 2 секунды следующим образом:

  1. за первую секунду переместить 1-ую головку налево и на следующей секунде оставить ее на месте;
  2. вторую головку два раза переместить налево;
  3. третью головку два раза переместить направо (причем 6-ая дорожка считана уже в самом начале работы диска).

За 1 секунду дорожки считать невозможно, так как 3-я головка находится на расстоянии 2 от 8-ой дорожки.

E. Насосные станции

графы Деревья жадные алгоритмы Перебор поиск в глубину и подобное Потоки разделяй и властвуй *2900

Безумный ученый Майк устроился на работу. Его задача — управлять системой насосных станций для перекачки воды.

Система состоит из n насосных станций, которые пронумерованы целыми числами от 1 до n. Некоторые пары станций соединены двунаправленными трубами, по которым может течь вода в том или другом направлении (но одновременно только в одном). Для каждой трубы задана пропускная способность — наибольшее количество литров воды, которое может через нее протекать в течение одного часа. Каждая насосная станция может перекачивать входящую воду из одних станций в другие станции по трубам при условии, что за один час общее входящее в эту станцию количество литров воды равняется общему исходящему из этой станции количеству литров воды.

В обязанности Майка входит перекачивание воды между станциями. Из станции a в станцию b по трубам (возможно, через другие станции) в течение одного часа можно пустить какое-то количество литров воды согласно правилам, описанным выше. В течение этого времени вода из других станций не может втекать в станцию a, и не может вытекать из станции b, при том из станции a может вытекать любое количество воды, и в станцию b может втекать любое количество воды. Если из станции a за час в общем было выкачано x литров воды, то Майк получает к зарплате x бублей.

Чтобы получить зарплату, Майк по контракту должен работать n - 1 дней. В первый день он выбирает две станции v1 и v2, и в течение одного часа перекачивает определённое количество воды из v1 в v2. Далее в i-тый день Майк выбирает до этого ни разу не выбранную станцию vi + 1, и в течение одного часа перекачивает определенное количество воды из станции vi в станцию vi + 1. При этом количество перекачиваемой воды в i-тый день не зависит от количества перекачиваемой воды в (i - 1)-ый день.

Для своих проектов Майку нужно заработать как можно больше бублей. Помогите Майку найти такую перестановку номеров станций v1, v2, ..., vn, при которой Майк может заработать наибольшую возможную зарплату.

Входные данные

В первой строке входных данных через пробел записаны два целых числа n и m (2 ≤ n ≤ 200, 1 ≤ m ≤ 1000) — количество станций и количество труб в системе, соответственно. В i-той из следующих m строк через пробелы записаны три числа ai, bi и ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 100) — номера станций, которое соединяет i-тая труба и пропускная способность трубы, соответственно. Гарантируется, что любые две станции соединяет не более чем одна труба и между любыми двумя станциями существует путь по трубам.

Выходные данные

В первой строке выведите одно целое число — наибольшее значение зарплаты, которую может получить Майк. В второй строке через пробелы выведите перестановку из n чисел от 1 до n — номера станций последовательности v1, v2, ..., vn. Если существует несколько ответов, выведите любой.

C. Преобразование числа

жадные алгоритмы математика *2200

Дана последовательность положительных целых чисел x1, x2, ..., xn и два неотрицательных целых числа a и b. Вам необходимо преобразовать a в b. Для этого можно выполнять следующие ходы:

  • вычесть 1 из текущего значения a;
  • вычесть a mod xi (1 ≤ i ≤ n) из текущего значения a.

Операция a mod xi заключается во взятии остатка после деления числа a на число xi.

Найдите минимальное количество ходов, необходимое для преобразования a в b.

Входные данные

В первой строке записано единственное целое число n (1 ≤  n ≤ 105). Во второй строке через пробел записано n целых чисел x1, x2, ..., xn (2 ≤  xi ≤ 109). В третьей строке записано два целых числа a и b (0  ≤ b ≤  a ≤ 109, a - b ≤ 106).

Выходные данные

Выведите единственное целое число — требуемое минимальное количество ходов, необходимое для преобразования числа a в число b.

A. Очередь в кино

жадные алгоритмы реализация *1100

Только-только вышел новый фильм про «Крепкого орешка», а у кассы за билетами в кино n человек уже выстроились в огромную очередь. Каждый из них имеет только одну купюру номиналом 100, 50 или 25 рублей. Билет на «Крепкого орешка» стоит 25 рублей. Сможет ли кассир, обслуживающий очередь, продать каждому билет и выдать сдачу, если изначально в кассе нет денег и кассир продает билеты строго в порядке очереди?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество людей в очереди. В следующей строке записаны n целых чисел, каждое из которых равно 25, 50 или 100 — номиналы купюр у людей. Числа заданы в порядке от начала очереди (от кассы) к концу очереди.

Выходные данные

Выведите «YES» (без кавычек) если кассир сможет продать билет каждому и выдать сдачу, или «NO» (без кавычек) иначе.

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. TL

жадные алгоритмы Перебор реализация *1200

Валера решил подготовить раунд для Codesecrof. У него уже есть одна задача, в которой он хочет выставить ограничение по времени (TL).

Валера уже написал n верных решений. Для каждого верного решения он знает время его работы (в секундах). Также Валера написал m неправильных решений, и для каждого неправильного решения он знает время его работы (в секундах).

Предположим, Валера установит в задаче TL v секунд. Тогда будем говорить, что решение пройдет системное тестирование, если время его работы не больше v секунд. Также будем говорить, что решение пройдет системное тестирование с «запасом», если время его работы a секунд удовлетворяет неравенству 2a ≤ v.

В результате, Валера решил выставить такой TL v секунд, что выполнятся все условия:

  1. v — целое положительное число;
  2. все верные решения пройдут системное тестирование;
  3. хотя бы одно верное решение пройдет системное тестирование с «запасом»;
  4. все неверные решения не пройдут системное тестирование;
  5. значение v минимально среди всех TL, для которых верны условия 1, 2, 3, 4.

Помогите Валере, найдите наиболее подходящий TL или определите, что такого TL не существует.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n, m ≤ 100). Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 100) — время работы каждого из n верных решений в секундах. В третьей строке записаны m целых чисел через пробел b1, b2, ..., bm (1 ≤ bi ≤ 100) — время работы каждого из m неверных решений в секундах.

Выходные данные

Если подходящее значение TL существует, выведите его. Иначе, выведите -1.

C. Бомбы

жадные алгоритмы реализация сортировки *1600

У Вас есть робот, задачей которого является уничтожение бомб, расположенных на координатной плоскости. А именно, на координатной плоскости расположены n бомб, причем i-ая бомба расположена в точке с координатами (xi, yi). Известно, что никакие две бомбы не расположены в одной точке и что никакая бомба не расположена в точке с координатами (0, 0).

Изначально робот расположен в точке с координатами (0, 0). Для удобства будем обозначать парой (x, y) — текущее положение робота. Для того, чтобы уничтожить все бомбы, робот должен выполнить несколько операций, каждая операция одного из следующих трех типов:

  1. Формат операции — «1 k dir». Во время выполнения операции робот k (k ≥ 1) раз перемещается в направлении dir. Всего робот может двигаться только в 4 направления: «R», «L», «U», «D». За одно перемещение в зависимости от направления dir робот переходит в одну из следующих точек: (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1) (точки заданы соответственно направлениям). Запрещено выполнять перемещение из точки (x, y), если хотя бы одна из точек пути (кроме точки, в которую мы в конечном итоге придем k-ым перемещением) содержит бомбу.
  2. Формат операции — «2». Во время выполнения операции робот поднимает бомбу в точке (x, y) и кладет ее в специальный контейнер, расположенный в роботе. Таким образом робот может переносить бомбу из любой точки в любую другую точку. Операцию запрещено выполнять, если в точке (x, y) нет бомбы. Запрещено поднимать бомбу, если в контейнере у робота уже есть бомба.
  3. Формат операции — «3». Во время выполнения операции робот достает бомбу из контейнера и уничтожает ее. Разрешается выполнять эту операцию, только если робот находится в точке (0, 0). Запрещено выполнять операцию, если в контейнере нет бомбы.

Помогите роботу, найдите последовательность операций минимальной длины, с помощью которой робот уничтожит все бомбы на координатной плоскости.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105) — количество бомб на координатной плоскости. В следующих n строках содержится по два целых числа. В i-ой строке содержатся числа xi, yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-ой бомбы. Гарантируется, что никакие две бомбы не содержатся в одной точке и что никакая бомба не расположена в точке (0, 0).

Выходные данные

В первой строке выведите единственное число k — минимальное количество операций, необходимых для уничтожения всех бомб. В следующих строках выведите описания этих k операций в формате, указанном в условии. Если существует несколько последовательностей, разрешается вывести любую. Гарантируется, что существует решение, где k ≤ 106.

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.

E. Джефф и перестановка

жадные алгоритмы *2200

Для друзей Джеффа уже не секрет, что на день рождения мальчику нужно дарить последовательности и массивы. Так на очередной свой день рождения Джефф получил в подарок последовательность p1, p2, ..., pn.

Джефф не любит инверсии в последовательностях. Инверсией в последовательности a1, a2, ..., an он называет пару индексов i, j (1 ≤ i < j ≤ n) такую, что имеет место неравенство ai > aj.

Джефф может умножить некоторые из чисел последовательности p на -1. При этом он хочет, чтобы количество инверсий в последовательности стало как можно меньше. Помогите Джеффу, найдите минимальное количество инверсий, которое ему удастся получить.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 2000). Следующая строка содержит n целых чисел — последовательность p1, p2, ..., pn (|pi| ≤ 105). Числа разделены пробелами.

Выходные данные

В единственную строку выведите ответ на задачу — минимальное количество инверсий, которое удастся получить.

B. Две кучки

жадные алгоритмы Комбинаторика Конструктив математика реализация сортировки *1900

У Валеры имеется n кубиков, на каждом из которых записано целое число от 10 до 99. Он произвольным образом выбирает n кубиков и откладывает в первую кучку. Оставшиеся кубики образуют вторую кучку.

Валера решил поиграть с кубиками. Для этого он достает кубик из первой кучки и записывает число, изображенное на нем. Затем он достает кубик из второй кучки и дописывает к имеющимся двум цифрам справа двузначное число, изображенное на этом кубике. В итоге у Валеры получается четырехзначное число, первые две цифры которого записаны на кубике из первой кучки, а вторые две — на кубике из второй кучки.

Валера увлекается арифметикой, поэтому он с легкостью посчитал количество различных четырехзначных чисел, которые можно получить в его забавной игре. Другой вопрос, а как разделить кубики на кучки так, чтобы можно было получить как можно больше различных четырехзначных чисел. Этого Валера не знает, поэтому хочет спросить у вас.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100). Во второй строке через пробел заданы n целых чисел ai (10 ≤ ai ≤ 99), обозначающих числа, изображенные на кубиках.

Выходные данные

В первой строке выведите целое число — максимально возможное количество различных четырехзначных чисел, которое может получить Валера. Во второй строке выведите n целых чисел bi (1 ≤ bi ≤ 2), число bi обозначает номер кучки в которую Валера должен отнести i-ый кубик.

Если существует несколько вариантов разбиения кубиков на кучки, дающих максимально возможное количество различных четырехзначных чисел, которое может получить Валера, выведите любой из них.

Примечание

В первом примере Валера может отложить первый кубик в первую кучку, а второй — во вторую. В этом случае он сможет получить число 1099. Если же он поместит в первую кучку второй кубик, а во вторую — первый, то он сможет получить число 9910. В обоих случаях максимальное количество различных чисел равно единице.

Во втором тестовом примере Валера сможет получить числа 1313, 1345, 2413, 2445. Обратите внимание, что если бы Валера отложил в первую кучку первый и третий кубики, то он смог бы получить лишь два числа 1324 и 1345.

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]. Большую по размеру антицепь выбрать не получится.

A. Вася и робот

жадные алгоритмы математика Перебор *1500

У Васи есть n предметов, которые лежат в ряд. Предметы последовательно пронумерованы числами от 1 до n таким образом, что самый левый предмет имеет номер 1, самый правый — номер n. Каждый предмет имеет свой вес, i-тый из них весит wi килограмм.

Васе нужно собрать все эти предметы, однако он не будет делать этого сам, а использует своего нового робота. У робота есть две разные руки — левая и правая. Робот может последовательно выполнять действия:

  1. Взять левой рукой самый левый из предметов, затратив на это wi · l единиц энергии (где wi — вес самого левого предмета, l — заданный параметр), если предыдущее действие было таким же (левой рукой), то робот тратит дополнительные Ql единиц энергии.
  2. Взять правой рукой самый правый из предметов, затратив на это wj · r единиц энергии (где wj — вес самого правого предмета, r — заданный параметр), если предыдущее действие было таким же (правой рукой), то робот тратит дополнительные Qr единиц энергии.

Разумеется, Вася хочет запрограммировать робота так, чтобы тот потратил как можно меньше энергии. С этой задачей он и обратился за помощью к вам. Ваша задача — найти минимальное количество энергии, которое потратит робот, чтобы собрать все предметы.

Входные данные

В первой строке содержится пять целых чисел n, l, r, Ql, Qr (1 ≤ n ≤ 105; 1 ≤ l, r ≤ 100; 1 ≤ Ql, Qr ≤ 104).

Во второй строке содержится n целых чисел w1, w2, ..., wn (1 ≤ wi ≤ 100).

Выходные данные

В единственной строке выведите целое число — ответ на задачу.

Примечание

Рассмотрим первый пример. Так как l = r, мы можем просто по очереди брать по одному предмету с левой, с правой и потом опять с левой стороны. В итоге будет затрачено 4·42 + 4·99 + 4·3 = 576 единиц энергии.

Второй пример. Оптимальное решение — взять один предмет справа, затем один предмет слева и затем два предмета справа. В итоге будет затрачено (2·4) + (7·1) + (2·3) + (2·2 + 9) = 34 единицы энергии.

B. Вася и общественный транспорт

жадные алгоритмы реализация *1100

Вася часто пользуется общественным транспортом. В городе он делится на два типа: троллейбусы и автобусы. В городе есть n автобусов и m троллейбусов, автобусы пронумерованы числами от 1 до n, троллейбусы — числами от 1 до m.

Общественный транспорт не является бесплатным. Есть 4 типа билетов:

  1. Билет на один проезд на некотором автобусе или троллейбусе. Стоит c1 бурлей;
  2. Билет на неограниченное количество проездов на некотором автобусе или троллейбусе. Стоит c2 бурлей;
  3. Билет на неограниченное количество проездов на всех автобусах или на всех троллейбусах. Стоит c3 бурлей;
  4. Билет на неограниченное количество проездов на всех автобусах и троллейбусах. Стоит c4 бурлей.

Вася точно знает, сколько раз он будет пользоваться каждым автобусом и троллейбусом. Он обратился к Вам за помощью, чтобы найти минимальную сумму бурлей, которую ему придется потратить на билеты.

Входные данные

В первой строке содержится четыре целых числа c1, c2, c3, c4 (1 ≤ c1, c2, c3, c4 ≤ 1000) — цены билетов.

Во второй строке содержится два целых числа n и m (1 ≤ n, m ≤ 1000) — количество автобусов и троллейбусов, которые использует Вася.

Третья строка содержит n целых чисел ai (0 ≤ ai ≤ 1000)ai обозначает, сколько раз Вася использует автобус номер i.

Четвертая строка содержит m целых чисел bi (0 ≤ bi ≤ 1000)bi обозначает, сколько раз Вася использует троллейбус номер i.

Выходные данные

Выведите единственное целое число — минимальную сумму бурлей, которую Васе придется потратить на билеты.

Примечание

В первом примере выгодно купить два билета первого типа (на первый автобус), один билет второго типа (на второй автобус) и один билет третьего типа (на все троллейбусы). В сумме — (2·1) + 3 + 7 = 12 бурлей.

Во втором примере выгодно купить один билет четвертого типа.

В третьем примере выгодно купить два билета третьего типа: на все автобусы и на все троллейбусы.

C. Купе

жадные алгоритмы Комбинаторика Конструктив реализация *2100

Команда школьников из города S направляется на Всеберляндскую олимпиаду по информатике. Традиционно, ребята едут на поезде. Всем школьникам купили билеты в один вагон, состоящий из n купе (в каждом купе едут ровно четыре человека). Известно, что если в купе едут один или два школьника-олимпиадника, то им становится скучно, а если едут три или четыре школьника-олимпиадника, то в этом купе весело на протяжении всей поездки.

Школьники хотят поменяться с другими людьми так, чтобы ни в каком купе, где едут школьники, им не было скучно. Чтобы поменяться с другим человеком местами, нужно убедить его, что это действительно необходимо. Школьники не могут самостоятельно найти нужные аргументы, поэтому они обратились за помощью к сочувствующей им проводнице. Проводница, пользуясь своим жизненным опытом, может уговорить любого пассажира поменяться местами с кем-то из школьников.

Однако, проводница не хочет терять время на уговоры зря, поэтому хочет узнать, какое минимальное количество людей ей надо уговорить поменяться местами со школьниками. Ваша задача — найти это количество.

После всех обменов в каждом купе должно остаться либо ни одного школьника, либо три или четыре школьника.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество купе в вагоне. Во второй строке записано n целых чисел a1, a2, ..., an — количества школьников, едущих в каждом из купе (0 ≤ ai ≤ 4). Гарантируется, что в поезде едет хотя бы один школьник.

Выходные данные

В случае, если никакая последовательность обменов местами остальных людей со школьниками не приведет к желаемому результату, выведите число «-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.

Никакой мешочек не должен лежать в более чем одном мешочке непосредственно. Допускается более одного уровня вложенности мешочков (смотрите второй тестовый пример). Если существует несколько правильных ответов, разрешается вывести любой.

Примечание

На рисунках снизу показаны два возможных решения одного и того же тестового примера из условия. Левый рисунок соответствует первому тестовому примеру, правый — второму тестовому примеру.

A. Кружок школьников

жадные алгоритмы Перебор реализация *1000

В начале учебного года в Берляндском государственном университете начинает работать городской кружок школьников по программированию. Кружок будет проходить в двух группах: начальной и продвинутой. Для того, чтобы распределить школьников на группы, было проведено тестирование. По его результатам каждый школьник получил оценку от 1 до m баллов. Известно, что c1 школьников получили 1 балл, c2 школьников получили 2 балла, ..., cm школьников получили максимальные m баллов. Теперь нужно объявить проходной балл k (целое число от 1 до m): все школьники, набравшие строго меньше k баллов, попадут в начальную группу, а те, кто набрал хотя бы k баллов, в продвинутую. Известно, что если размер группы школьников больше чем y, то в университете не найдется аудитории, чтобы их вместить. Также известно, что если в группе меньше x школьников, то она слишком маленькая и с ней нецелесообразно вести занятия. Таким образом, всех школьников нужно разбить на две группы так, чтобы размер каждой был от x до y включительно. Помогите подобрать проходной балл таким образом, чтобы эти ограничения выполнялись.

Входные данные

В первой строке записано целое число m (2 ≤ m ≤ 100). Во второй строке записаны m целых чисел c1, c2, ..., cm, разделенные одиночными пробелами (0 ≤ ci ≤ 100). В третьей строке записаны через пробел два целых числа x и y (1 ≤ x ≤ y ≤ 10000). Хотя бы одно ci отлично от 0.

Выходные данные

Если невозможно выбрать проходной балл таким образом, чтобы размер каждой из получившихся групп был не меньше чем x, и не больше чем y, выведите 0. Иначе выведите целое число от 1 до m — предлагаемый вами проходной балл. Если возможных ответов несколько, выведите любой из них.

Примечание

В первом примере в начальную группу попадают 7 школьников, в продвинутую — 6.

Во втором примере также правильным является ответ 3.

C. Дима и контейнеры

жадные алгоритмы Конструктив реализация *2000

Скоро у Димы день рождения! Большой праздник! Сережа подарит Диме свое отсутствие в комнате и не будет мешать Диме и Инне праздновать день рождения. Инна подарит Диме стек, очередь и дек.

Своим подарком Инна хочет проверить, насколько Дима хороший программист. Для этого она будет поочередно давать Диме команды. Команды бывают двух типов:

  1. Добавить заданное число в один из контейнеров. Причем в очередь и стек можно добавлять элементы только в конец, в дек можно добавлять элементы как в начало, так и в конец.
  2. Извлечь из не более чем трех различных контейнеров по числу. Все извлеченные числа сказать Инне, после чего опустошить все контейнеры. Причем в контейнере очередь можно извлекать числа только из начала, в стеке — только из конца, в деке — из начала и из конца. Нельзя извлекать числа из пустых контейнеров.

Каждый раз, когда Дима выполняет команду второго типа, Инна целует Диму некоторое число (возможно, ноль) раз. Дима знает Инну как облупленную, он уверен, что это число равно сумме извлеченных из контейнеров чисел на данной операции.

Как уже было сказано, Дима знает Инну как облупленную, ему известно, какие команды Инна будет давать Диме и в каком порядке. Помогите Диме найти стратегию, используя которую, он получит как можно больше поцелуев на свой день рождения!

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 105) — количество команд Инны. Далее следует n строк, описывающих команды Инны. Каждая строка содержит целое число:

  1. Целое число a (1 ≤ a ≤ 105) означает, что Инна дает Диме команду добавить число a в один из контейнеров.
  2. Целое число 0 означает, что Инна просит Диму сделать не более трех операций извлечения из различных контейнеров.
Выходные данные

Каждой команде из входных данных должна соответствовать одна строка выходных данных — действие Димы.

Для команды первого типа (добавление) выведите одну из строк в соответствии с выбором Димы:

  • pushStack — добавить в конец стека;
  • pushQueue — добавить в конец очереди;
  • pushFront — добавить в начало дека;
  • pushBack — добавить в конец дека.

Для команды второго типа выведите сначала целое число k (0 ≤ k ≤ 3), обозначающее количество операций извлечения, затем выведите k слов разделенных пробелом. Слова могут быть:

  • popStack — извлечь из конца стека;
  • popQueue — извлечь из начала очереди;
  • popFront — извлечь из начала дека;
  • popBack — извлечь из конца дека.

Выведенные операции не должны извлекать чисел из пустых контейнеров. А также должны извлекать числа из разных контейнеров.

Выведенная последовательность действий должна приводить к максимальному количеству поцелуев. Если существует несколько последовательностей действий, приводящих к максимальному количеству поцелуев, разрешается вывести любую из них.

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, если перед ним Инна кормила обоих его соседей.

Выходные данные

В единственной строке выведите максимально возможную суммарную радость зайцев, которую удастся достичь кормежкой Инне.

A. Таблица

жадные алгоритмы Конструктив реализация *1000

У Семена есть прямоугольная таблица, состоящая из n строк и m столбцов. Семен пронумеровал строки таблицы, начиная от единицы, сверху вниз, а столбцы — начиная от единицы, слева направо. Ячейку, расположенную на пересечении x-ой строки и y-ого столбца, будем обозначать парой чисел (x, y). Углами таблицы будем называть ячейки: (1, 1), (n, 1), (1, m), (n, m).

Семен считает, что в этой таблице некоторые ячейки являются хорошими. Причем известно, что ни одна хорошая ячейка не является углом таблицы.

Изначально все ячейки таблицы бесцветны. Семен хочет покрасить все ячейки своей таблицы. За один ход он может выбрать любую хорошую ячейку таблицы (x1, y1), произвольный угол таблицы (x2, y2) и закрасить все ячейки таблицы (p, q), для которых выполняются оба неравенства: min(x1, x2) ≤ p ≤ max(x1, x2), min(y1, y2) ≤ q ≤ max(y1, y2).

Помогите Семену! Определите минимальное количество операций, необходимых ему для покраски всех ячеек таблицы. Обратите внимание, что одну ячейку разрешается покрасить несколько раз.

Входные данные

В первой строке заданы ровно два целых числа n, m (3 ≤ n, m ≤ 50).

Далее в n строках задано описание ячеек таблицы. А именно, в i-ой строке задано m целых чисел через пробел ai1, ai2, ..., aim. Если aij равно нулю, то ячейка (i, j) не является хорошей, иначе — aij равно единице. Гарантируется, что хотя бы одна ячейка является хорошей. Гарантируется, что ни одна хорошая ячейка не является углом.

Выходные данные

Выведите единственное число — минимальное количество операций, необходимых Семену для осуществления его затей.

Примечание

В первом примере последовательность операций может быть такой:

  • В первый раз нужно выбрать ячейку (2, 2) и угол (1, 1).
  • Во второй раз нужно выбрать ячейку (2, 2) и угол (3, 3).
  • В третий раз нужно выбрать ячейку (2, 2) и угол (3, 1).
  • В четвертый раз нужно выбрать ячейку (2, 2) и угол (1, 3).

В втором примере последовательность операций может быть такой:

  • В первый раз нужно выбрать ячейку (3, 1) и угол (4, 3).
  • Во второй раз нужно выбрать ячейку (2, 3) и угол (1, 1).

A. Левко и восстановление массива

жадные алгоритмы реализация *1700

Левко сильно любит массив a1, a2, ... , an, состоящий из целых чисел. Именно поэтому Левко много играет с массивом a, выполняя различные операции с ним. Каждая операция, которую выполняет Левко, имеет один из двух следующих типов:

  1. Увеличить все элементы от li до ri на di. Другими словами выполнить присвоения aj = aj + di для всех j, удовлетворяющих неравенству: li ≤ j ≤ ri.
  2. Найти максимум элементов от li до ri. То есть посчитать значение .

К большому сожалению, недавно Левко потерял свой массив. К счастью, у Левко остались записи всех операций, которые он выполнял с массивом a. Помогите Левко — по записям операций найдите хотя бы один подходящий массив. Результаты всех операций для найденного массива должны совпадать с результатами из записей. Левко точно помнит, что в его массиве все числа не превосходили 109 по модулю, поэтому он просит вас найти именно такой массив.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 5000) — размер массива и количество операций в записях Левко соответственно.

Следующие m строк описывают операции, i-ая строка описывает i-ую операцию. Первое число в i-ой строке — целое число ti (1 ≤ ti ≤ 2), которое обозначает тип операции. Если ti = 1, то далее следуют три целых числа li, ri и di (1 ≤ li ≤ ri ≤ n,  - 104 ≤ di ≤ 104) — описание операции первого типа. Если ti = 2, то далее следуют три целых числа li, ri и mi (1 ≤ li ≤ ri ≤ n,  - 5·107 ≤ mi ≤ 5·107) — описание операции второго типа.

Операции заданы в том порядке, в котором Левко выполнял их со своим массивом.

Выходные данные

В первой строке выведите «YES» (без кавычек), если решение существует, и «NO» (без кавычек) в противном случае.

Если решение все-таки существует, то во второй строке выведите n целых чисел a1, a2, ... , an (|ai| ≤ 109) — найденный массив.

E. Левко и игра

графы жадные алгоритмы кратчайшие пути *2800

Левко очень любит соревнования по спортивному ориентированию в своем городе. Чтобы лучше выступать на соревнованиях Левко тренируется все свободное время. Тренировки проводятся в игровой форме.

Город состоит из n перекрестков, которые соединены m + k односторонними дорогами. Между двумя перекрестками может существовать больше одной дороги, а также могут быть дороги из одного перекрестка в него же.

Левко и Зенык играют в игру. В самом начале игры Левко стоит на перекрестке s1, а Зенык — на перекрестке s2. Они оба хотят добраться до перекрестка f. Кто сделает это быстрее, тот и победит. Если они доберутся туда одновременно, то объявляется ничья. По предварительной договоренности игроки стартуют одновременно, а также двигаются по дорогам с одинаковой скоростью.

Левко очень хочет победить в игре. Он знает длины всех дорог в городе и знает, что есть ровно k дорог, длины которых можно изменить, заплатив городскому правительству. По заказу Левко правительство может изменить длину i-ой из этих k дорог на любое целое значение из интервала [li, ri] (оба конца отрезка включаются). Левко стало интересно, может ли он перестроить дороги так, чтобы победить в игре, и если нет, то может ли он надеяться на ничью.

Считайте, что оба игрока действуют оптимально, играя в игру. Гарантируется, что из перекрестков s1 и s2 можно добраться до перекрестка f.

Входные данные

В первой строке записано три целых числа n, m и k (1 ≤ n, m ≤ 104, 1 ≤ k ≤ 100). Во второй строке записано три целых числа s1, s2 и f (1 ≤ s1, s2, f ≤ n).

В следующих m строках записаны дороги, длины которых нельзя менять. В каждой строке записано три целых числа ai, bi и ci (1 ≤ ai, bi ≤ n, 1 ≤ ci ≤ 109), обозначающих дорогу, ведущую из перекрестка ai в перекресток bi длины ci.

В следующих k строках записаны дороги, длины которых можно менять. В каждой строке записано по четыре целых числа ai, bi, li и ri (1 ≤ ai, bi ≤ n, 1 ≤ li ≤ ri ≤ 109), обозначающих, что есть дорога из перекрестка ai в перекресток bi, длину которой Левко может установить в пределах [li, ri].

Считайте, что перекрестки пронумерованы от 1 до n. Гарантируется, что из перекрестков s1 и s2 можно добраться до перекрестка f.

Выходные данные

В первой строке выведите строку «WIN» (без кавычек) — если Левко может победить в этой игре, «DRAW» (без кавычек) — если Левко может достичь ничьи и «LOSE» (без кавычек), если он точно проиграет.

Если ответ «WIN» или «DRAW» во второй строке выведите k целых чисел через пробел — длины дорог, которые устанавливает Левко. Длины для дорог выводите в порядке следования дорог во входных данных.

A. Встреча полуконей

жадные алгоритмы математика *1500

Мальчик Петя обожает шахматы. Он даже придумал свою собственную шахматную фигуру — полуконя. Полуконь может ходить в любом из следующих четырех направлений: на 2 клетки вперед и 2 вправо, на 2 клетки вперед и 2 влево, на 2 клетки назад и 2 вправо или на 2 клетки назад и 2 влево. Разумеется, полуконь не может выходить за пределы шахматной доски.

На стандартной шахматной доске Петя поставил двух полуконей. Петя одновременно делает ходы обоими полуконями. Клетки доски достаточно большие, поэтому полукони после некоторого хода могут встретиться, то есть оказаться в одной и той же клетке. После встречи полукони могут продолжить ходить, поэтому возможно, что в дальнейшем они вновь встретятся. Пете интересно, существует ли такая последовательность ходов, при которой полукони встретятся. Некоторые клетки Петя посчитал плохими, то есть не подходящими для встречи. Полукони могут ходить по этим клеткам, но встречи в этих клетках не засчитываются.

Петя подготовил несколько шахматных досок. Помогите Пете узнать для каждой доски, могут ли полукони встретиться на некоторой подходящей для этого клетке.

Пожалуйста, обратите внимание на разбор тестового примера.

Входные данные

В первой строке задано число t (1 ≤ t ≤ 50) — количество досок. Каждая доска описывается матрицей символов, состоящей из 8 строк и 8 столбцов. Матрица состоит из символов «.», «#», «K», обозначающих соответственно пустую клетку, плохую клетку и клетку, в которой стоит полуконь. Гарантируется, что на доске стоят ровно 2 полуконя. Клетки, занимаемые полуконями, считаются подходящими для встречи. Тесты разделены пустой строкой.

Выходные данные

Выведите для каждого теста в отдельной строке ответ на задачу: «YES», если полукони смогут встретиться, и «NO» в противном случае.

Примечание

Рассмотрим первую доску из примера. Будем считать, что строки и столбцы матрицы нумеруются от 1 до 8 сверху вниз и слева направо соответственно. Полукони могут встретиться, например, в клетке (2, 7). Полуконь из клетки (4, 1) переходит в клетку (2, 3), а полуконь из клетки (8, 1) — в клетку (6, 3). Далее оба полуконя переходят в (4, 5), но эта клетка — плохая, поэтому они вместе переходят в клетку (2, 7).

На второй доске полукони никогда не встретятся.

D. Дураки и дороги

графы жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2100

На уроках географии в школе Вам наверняка рассказывали о Стране Дураков. В частности, Вы должны знать, что внутреннее устройство Страны Дураков не менялось на протяжении многих столетий. Страна состоит из n городов, некоторые пары которых соединены двусторонними дорогами, причем каждая из дорог характеризуется величиной li — своей длиной.

Так и жили бы дураки, но недавно в результате государственного переворота в стране поменялся король — им стал медведь Василий. Василий разделил города страны на области таким образом, что между любыми двумя городами из одной области существует путь по дорогам страны, а между двумя городами из разных областей такого пути нет. После этого Василий решил провести дорожную реформу: построить в стране ровно p новых дорог. Строительство одной дороги происходит следующим образом:

  1. Выбирается пара различных городов u, v, которые будет соединять новая дорога (при этом возможно, что между этими городами уже существует дорога).
  2. Определяется длина новой дороги: если города u, v относятся к различным областям, то длина вычисляется как min(109, S + 1) (S — суммарная длина всех дорог, существующих в соединяемых областях), иначе длина полагается равной 1000.
  3. Между выбранными городами строится дорога указанной длины. Если новая дорога соединяла различные области, то после ее строительства эти две области будут объединены в одну.

Василий хочет, чтобы после проведения дорожной реформы страна состояла ровно из q областей. Ваша задача — разработать для медведя Василия такой план строительства дорог, удовлетворяющий этому требованию, чтобы суммарная длина построенных дорог была минимально возможной.

Входные данные

В первой строке записано четыре целых числа n (1 ≤ n ≤ 105), m (0 ≤ m ≤ 105), p (0 ≤ p ≤ 105), q (1 ≤ q ≤ n) — количество городов в Стране Дураков, количество существующих дорог, количество дорог, которые планируется построить, и требуемое количество областей.

В следующих m строках описываются дороги, существующие на момент начала реформы. Каждая из этих строк содержит три целых числа xi, yi, li: xi, yi — номера городов, которые соединяет дорога (1 ≤ xi, yi ≤ n, xi ≠ yi), li — ее длина (1 ≤ li ≤ 109). Обратите внимание, что одна и та же пара городов может быть соединена несколькими дорогами.

Выходные данные

Если невозможно требуемым образом построить дороги, выведите единственную строку «NO» (без кавычек). В противном случае выведите в первую строку слово «YES» (без кавычек), а в следующих p строках приведите план строительства дорог. Каждая строка плана должна состоять из двух различных целых чисел, задающих номера городов, которые соединяет очередная дорога. Дороги в плане должны следовать в том порядке, в котором их нужно строить. Если существует несколько оптимальных решений, можно вывести любое.

Примечание

Рассмотрим первый пример. До начала реформы Страна Дураков состоит из четырех областей. Первая область включает в себя города 1, 2, 3, вторая — города 4 и 6, третья — города 5, 7, 8, четвертая — город 9. Суммарная длина дорог, существующих в этих областях, составляет 11, 20, 5 и 0 соответственно. Согласно плану, первой строится дорога длины 6 между городами 5 и 9, а второй — дорога длины 23 между городами 1 и 9. Таким образом, суммарная длина построенных дорог составляет 29.

C. Исправление опечаток

жадные алгоритмы реализация *1400

Многие современные текстовые редакторы автоматически проверяют вводимый текст на наличие ошибок, а некоторые редакторы даже предлагают варианты исправления ошибок.

В этой задаче вам предлагается реализовать небольшую функциональность по исправлению двух типов опечаток в слове. Будем считать, что наличие трех или более одинаковых букв подряд является опечаткой (например, слово «helllo» записано с опечаткой). Кроме того, наличие пары одинаковых букв и непосредственно следом другой пары одинаковых букв тоже является опечаткой (например, слова «helloo» и «wwaatt» записаны с опечатками).

Напишите программу, которая удаляет из слова наименьшее количество букв так, чтобы слово не содержало описанных выше опечаток. Разрешается удалять буквы как с обоих концов слова, так и из его середины.

Входные данные

В единственной строке входных данных записано слово s длиной от 1 до 200000 символов. Заданное слово s состоит из строчных букв латинского алфавита.

Выходные данные

Выведите такое слово t, которое не содержит описанных в условии задачи опечаток и получено из s удалением наименьшего количества букв.

Если решений несколько, выведите любое из них.

Примечание

Вторым допустимым ответом на тест из условия является вывод «heloo».

D. Прокат велосипедов

Бинарный поиск жадные алгоритмы *1800

Группа из n школьников решила покататься на велосипедах. Так как ни у кого из них велосипеда нет, то велосипеды надо брать напрокат.

В пункте проката им предложили m велосипедов. Стоимости проката у разных велосипедов могут различаться, стоимость проката j-го велосипеда составляет pj рублей.

У школьников есть общий бюджет в a рублей. Кроме того, у каждого из друзей есть личные средства, у i-го школьника bi рублей личных денег. Общий бюджет может расходоваться на любых школьников произвольным образом, в то время как личные деньги школьник может тратить только на прокат велосипеда для себя.

Каждый школьник может взять напрокат не более одного велосипеда, передавать велосипеды друг другу нельзя.

Какое максимальное количество школьников сможет покататься на велосипедах? Какую минимальную сумму личных средств придется суммарно потратить школьникам, чтобы максимальное количество их покаталось на велосипедах?

Входные данные

В первой строке входных данных записаны три целых числа n, m и a (1 ≤ n, m ≤ 105; 0 ≤ a ≤ 109). Вторая строка содержит последовательность целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 104), где bi — количество личных денег у i-го школьника. Третья строка содержит последовательность целых чисел p1, p2, ..., pm (1 ≤ pj ≤ 109), где pj — стоимость проката j-го велосипеда.

Выходные данные

Выведите два целых числа r и s, где r — максимальное количество школьников, которые смогут взять напрокат велосипед, а s — минимальный суммарный расход личных денег для аренды r велосипедов. Если школьники не могут взять напрокат ни одного велосипеда, то r = s = 0.

Примечание

В первом примере оба школьника могут взять напрокат велосипед. Например, они могут поделить общий бюджет пополам (по 5 рублей каждому). В этом случае одному из них придется доплатить 1 рубль из личных средств, а другому — 2 рубля. В сумме из личных средств будет потрачено 3 рубля. Такой вариант траты денег минимизирует расход личных средств.

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. Сережа и расстановка чисел

графы жадные алгоритмы сортировки *2000

Назовем массив, состоящий из n целых чисел a1, a2, ..., an, красивым, если он обладает следующим свойством:

  • рассмотрим все пары чисел x, y (x ≠ y) такие, что число x встречается в массиве a, и число y встречается в массиве a;
  • для каждой пары x, y должна существовать некоторая позиция j (1 ≤ j < n) такая, что выполняется одно из двух: либо aj = x, aj + 1 = y, либо aj = y, aj + 1 = x.

Сережа хочет построить красивый массив a, состоящий из n целых чисел. Но не все так просто, у друга Сережи Димы есть m талонов, на каждом из которых написано два целых числа qi, wi. Талон i стоит wi рублей и позволяет использовать при построении массива a сколько угодно чисел qi. У Сережи никаких талонов нет, поэтому Дима с Сережей договорились следующим образом. Дима строит некоторый красивый массив a из n элементов. После чего он берет с Сережи wi рублей за каждое qi, которое встречается в массиве a. Сережа поверил другу и согласился на договор, теперь ему стало интересно, а какую максимальную сумму денег он может заплатить.

Помогите Сереже, найдите максимальную сумму денег, которую Сережа может заплатить Диме.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 2·106, 1 ≤ m ≤ 105). Следующие m строк содержат пары целых чисел. В i-ой строке содержатся числа qi, wi (1 ≤ qi, wi ≤ 105).

Гарантируется, что все qi различны.

Выходные данные

В единственную строку выведите максимальную сумму денег (в рублях), которую может потратить Сережа.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d

Примечание

В первом примере Сережа заплатит максимум 5 рублей, например, если Дима построит массив: [1, 2, 1, 2, 2]. Возможны и другие оптимальные массивы.

В третьем примере Сережа заплатит максимум 100 рублей, если Дима построит массив: [2].

A. Валера и тарелки

жадные алгоритмы реализация *900

Валера — ленивый студент. У него дома имеются m чистых глубоких тарелок и k чистых плоских тарелок.

Валера распланировал, что он будет кушать ближайшие n дней. Поскольку Валера ленив, каждый день он будет есть ровно одно блюдо. При этом, чтобы съесть блюдо, ему нужна ровно одна чистая тарелка. Известно, что Валера умеет готовить всего два типа блюд. Блюда первого типа можно есть только из глубоких тарелок, а блюда второго типа можно есть и из глубоких тарелок, и из плоских тарелок.

Когда Валера поест, тарелка, из которой он ел, становится грязной. Убеждения Валеры не позволяют ему есть из грязных тарелок, поэтому иногда перед едой ему нужно будет помыть тарелку. Определите, какое минимальное количество раз Валере потребуется помыть тарелку, если он будет действовать оптимально.

Входные данные

В первой строке входных данных задано три целых числа n, m, k (1 ≤ n, m, k ≤ 1000) — количество распланированных дней, количество чистых глубоких тарелок и количество чистых плоских тарелок.

Во второй строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2). Если ai равно единице, то в день i Валера будет есть блюдо первого типа. Если ai равно двум, то в день i Валера будет есть блюдо второго типа.

Выходные данные

Выведите единственное целое число — какое минимальное количество раз Валере потребуется помыть тарелку.

Примечание

В первом примере Валера будет мыть глубокую тарелку только в третий день, поэтому ответ равен единице.

Во втором примере все четыре дня Валера будет есть блюда первого типа, а поскольку глубоких тарелок всего три, то он будет мыть тарелку ровно один раз.

В третьем примере все три дня Валера будет есть блюда второго типа, а поскольку их можно есть из тарелок обоих типов, то мыть тарелку не потребуется ни разу.

B. Компьютерная игра

жадные алгоритмы реализация *1800

Петя, старший брат Васи, очень любит играть в компьютерные игры. В одной из своих любимых игр Петя дошел до последнего уровня, на котором происходит битва с боссом.

Во время прохождения игры Петя находил свитки с заклинаниями, и теперь ему предстоит их использовать. Опишем, как происходит бой на этом уровне:

1) У босса есть два параметра max — начальное количество здоровья, и reg — ежесекундная регенерация.

2) У каждого свитка также есть два параметра: powi — сила заклинания, измеряемая в процентах — максимальное количество здоровья босса, отсчитываемое от исходного, при котором можно использовать данный свиток (т. е. если у босса больше powi процентов здоровья, свиток применять нельзя); и dmgi — урон в секунду, который получает босс, если использовать этот свиток. Как только какой-то свиток использован, он пропадает, и на босса накладывается еще одно заклинание, которое будет наносить ему dmgi урона каждую секунду до конца игры.

Действия в бою в течение одной секунды, происходят в следующем порядке: сначала босс получает урон от всех заклинаний, наложенных на него, затем восстанавливает reg здоровья (при этом, больше чем max здоровья получиться не может), а затем игрок может использовать очередной свиток (не больше одного в секунду).

Босс считается поверженным, если в конце какой-то секунды количество здоровья стало неположительным ( ≤ 0).

Помогите Пете определить, может ли он выиграть с имеющимся набором свитков, и если может, то за какое минимальное количество секунд он сможет это сделать.

Входные данные

В первой строке записаны три целых числа N, max и reg (1 ≤ N, max, reg ≤ 1000) — количество свитков, и параметры босса. В следующих N строках записаны по два целых числа powi и dmgi — параметры i-го свитка (0 ≤ powi ≤ 100, 1 ≤ dmgi ≤ 2000).

Выходные данные

В случае если Петя не сможет пройти этот уровень, в единственной строке выведите NO.

Иначе в первой строке выведите YES. Во второй строке выведите минимальное время, через которое босс может быть повержен и количество использованных свитков. В следующих строках для каждого использованного свитка выведите через пробел количество секунд, прошедших с начала боя, до его использования и номер использованного свитка. Свитки нумеруются с 1 в том порядке, в котором они заданы во входных данных. Считается, что первый свиток можно использовать через 0 секунд.

Свитки выводите в том порядке, в котором их нужно использовать. Запрещается использовать свитки после того как босс повержен.

C. Древнеберляндский язык

Деревья жадные алгоритмы Структуры данных *1900

Берляндские ученые знают, что в древнеберляндском языке было ровно n слов. Эти слова имели длины l1, l2, ..., ln букв. В словах древнеберляндцы использовали две буквы, 0 и 1. Древние берляндцы говорили быстро и не делали пауз между словами, но при этом всегда могли однозначно понять друг друга. Это было возможно потому, что никакое слово не было префиксом никакого другого (префиксом строки называется некоторая её подстрока, начинающаяся с первого символа).

Помогите ученым определить, можно ли восстановить все слова из древнеберляндского языка, и если можно, выведите сами слова.

Входные данные

В первой строке записано одно целое число N (1 ≤ N ≤ 1000) — количеств слов в древнеберляндском языке. Во второй строке, через пробелы, записаны N целых чисел — длины этих слов. Все длины — натуральные числа, не превосходящие 1000.

Выходные данные

Если такого набора слов не существует, в единственной строке выведите NO. Иначе, в первой строке выведите YES, а в следующих N строках выведите сами слова в том порядке в каком даны их длины во входном файле. Если решений несколько, выведите любое.

E. Испытание для вождя

графы жадные алгоритмы кратчайшие пути *2600

Разгадав словарь древнеберляндского языка, ученые смогли прочитать записи летописцев того времени. В частности, они узнали, как происходил выбор вождя древнеберляндского племени.

Как только на место вождя набиралось достаточное количество претендентов, среди них проводилось следующее испытание: шаман племени брал плиту, разделенную вертикальными и горизонтальными полосам на одинаковые клетки (плита состояла из N строк и M столбцов), и красил каждую клетку в черный или белый цвет. Затем каждому испытуемому выдавалась плита такого же размера, но покрашенная полностью в белый цвет. За один день он мог перекрасить любое связное по стороне множество клеток этой плиты в некоторый цвет. Множество называется связным, если для любых двух клеток этого множества существует путь, все клетки которого принадлежат этому множеству, и любые две соседние клетки на этом пути имеют общую сторону. Цель каждого из претендентов — получить в точности такую же раскраску как у шамана. Тот, кто получал такую раскраску раньше всех, становился новым вождем племени.

Ученые обнаружили плиту, раскрашенную шаманом древнеберляндского племени. Помогите им определить, за какое минимальное количество дней мог определиться новый вождь, если ему нужно было получить заданную раскраску.

Входные данные

В первой строке записаны два целых числа N и M (1 ≤ N, M ≤ 50) — количество строк и столбцов у плиты. В следующих N строках записаны по M символов — итоговая раскраска плиты. Символ W означает, что клетка должна быть покрашена в белый цвет, а B — в черный.

Выходные данные

В единственной строке выведите минимальное количество перекрашиваний связных областей, необходимых для получения искомой раскраски плиты.

C. Варежки

жадные алгоритмы Конструктив сортировки *1800

На новогоднюю елку в городе S. пришли n детей. Все дети пришли в варежках. Варежки бывают разных цветов, но у каждого ребенка и левая, и правая варежки были одинакового цвета. Пусть цвета варежек нумеруются целыми числами от 1 до m, а дети пронумерованы от 1 до n. Тогда у i-го ребенка обе варежки имели цвет ci.

На празднике был Дед Мороз, была Снегурочка, дети водили хоровод вокруг нарядно украшенной елки. В общем и целом все было настолько ярко и разноцветно, что детям вдруг перестало нравиться ходить в варежках одного цвета. Дети решили поменяться варежками таким образом, чтобы у каждого в итоге оказалась одна левая варежка, одна правая варежка, причем разного цвета. Все варежки имеют одинаковый размер, поэтому одинаково подходят всем детям.

Дети принялись беспорядочно обмениваться варежками, но у них никак не получалось добиться того, чтобы у всех были разноцветные пары варежек. Василий Петрович, папа одного из ребятишек, заметил, что, в общем случае желание детей может оказаться невыполнимым. Более того, как преподаватель математики, он предложил схему распределения варежек, при которой у наибольшего количества детей будет пара разноцветных варежек. Вам предстоит повторить его достижение. Помните, что левые и правые варежки отличаются: у каждого ребенка должна оказаться одна левая и одна правая варежка.

Входные данные

В первой строке записано два целых числа n и m — количество детей и количество возможных цветов варежек (1 ≤ n ≤ 5000, 1 ≤ m ≤ 100). Во второй строке записаны n целых чисел c1, c2, ... cn, где ci — цвет варежек i-го ребенка (1 ≤ ci ≤ m).

Выходные данные

В первой строке выведите наибольшее количество детей, у которых может оказаться разноцветная пара варежек. В следующих n строках выведите то, как именно могут быть распределены варежки в этом случае. В i-й из этих строк выведите через пробел два числа: цвет левой варежки, которая окажется у i-го ребенка, и цвет правой варежки, которая у него окажется. Если оптимальных решений несколько, разрешается вывести любое из них.

D. Сломанный монитор

жадные алгоритмы Конструктив Перебор реализация *2100

У Иннокентия беда — cломался монитор компьютера. Теперь некоторые пиксели его монитора являются «битыми», то есть всегда имеют черный цвет. Как следствие, Иннокентий не может играть в обыкновенные компьютерные игры. В настоящий момент он играет в следующую игру со своим младшим братом Поликарпом.

Иннокентий вслепую пишет программу, которая на черном экране рисует квадратную белую рамку шириной в один пиксель. Так как монитор неисправен, то некоторые пиксели, которые должны быть белыми, остаются черными. Глядя на результат работы программы на экране, Поликарп должен угадать позицию и размер рамки Иннокентия. Поликарпу не очень нравится игра, но Иннокентий убедил брата играть, ведь «игра развивает фантазию и наблюдательность».

Помогите Поликарпу, автоматизировав его участие в игре. Напишите программу, которая находит такую возможную квадратную рамку, что:

  • ширина рамки составляет 1 пиксель,
  • рамка полностью помещается на экране,
  • все белые пиксели монитора расположены на рамке,
  • из всех рамок, которые удовлетворяют предыдущим трем условиям, искомая рамка должна иметь наименьший размер.

Формально, квадратная рамка представляет собой такие пиксели сплошного квадрата, которые находятся на краю квадрата, то есть не являются полностью окруженными другими пикселями квадрата. Например, если рамка имеет размер d = 3, то она состоит из 8 пикселей, если ее размер d = 2, то из 4, а если d = 1, то она вырождается в один пиксель.

Входные данные

В первой строке содержится разрешение монитора в виде пары целых чисел n, m (1 ≤ n, m ≤ 2000). Следующие n строк содержат ровно по m символов — состояние пикселей монитора на момент игры. Символ «.» (точка) соответствует черному пикселю, а символ «w» (строчная латинская буква w) — белому. Гарантируется, что хотя бы один пиксель монитора — белый.

Выходные данные

Выведите экран монитора, обозначив искомую рамку символами «+» (знак «плюс»). Те пиксели, которые во время игры были белыми, изменять не следует. Их следует выводить, используя «w». Если возможных вариантов размещения рамки минимального размера несколько, выведите любой из них.

Если искомой рамки не существует, то выведите вместо n строк единственную строку, содержащую число -1.

Примечание

В первом примере размер искомой рамки равен 4. Во втором примере размер искомой рамки равен 3. В третьем примере искомая рамка имеет размер 1. В четвертом примере искомой рамки не существует.

E. Летнее чтение

дп жадные алгоритмы *2500

В школе Васе на лето задали прочитать внушительный список книг. Вася, в отличие от многих современных школьников, любит читать, поэтому он каждый день лета читал какую-нибудь книгу.

Читая книги, Вася вел дневник летнего чтения, в котором он для каждого дня отмечал порядковый номер книги из списка, которую он читал в этот день. Книги в списке нумеруются с 1, и Вася читает их именно в том порядке, в котором они идут в списке. Вася никогда не переходит к следующей книге из списка, пока не дочитал текущую до конца. К сожалению, Вася вел дневник не очень ответственно, поэтому в некоторые дни он забывал отметить номер книги, и записи для этих дней остались пустыми.

Поскольку Вася знает, что учительница литературы обязательно потребует сдать ей дневник чтения, ему нужно восстановить отсутствующие записи в дневнике. Помогите ему это сделать и заполните все пропуски. Вася точно знает, что на каждую книгу он тратил не менее двух дней, но и не более пяти дней. Все книги, которые Вася начинал читать, он дочитал за лето до конца. При восстановлении пропусков можно считать, что в списке на лето было очень много книг (настолько много, что их все невозможно прочитать за лето). Если существует несколько способов корректным образом восстановить записи в дневнике, то Вася предпочтет такой способ, из которого бы следовало, что он прочитал за лето наибольшее количество книг.

Входные данные

В первой строке записано целое число n — количество дней лета (2 ≤ n ≤ 2·105). Во второй строке записано n целых чисел a1, a2, ... an — записи в дневнике в порядке их внесения (0 ≤ ai ≤ 105). В случае, если в i-й день Вася забыл записать номер книги, ai равно 0.

Выходные данные

Если невозможно корректно заполнить пропуски в дневнике (возможно, он изначально содержал ошибки), выведите «-1».

Иначе в первой строке выведите максимальное количество книг, которое Вася мог, согласно дневнику, прочитать за лето. Во второй строке выведите n чисел — дневник с корректно вставленными записями. Если оптимальных решений несколько, разрешается вывести любое из них.

A. K-периодичный массив

жадные алгоритмы математика реализация *1000

В данной задаче речь пойдет только о массивах, все элементы которых равны 1 и/или 2.

Массив a называется k-периодичным, если его длина делится нацело на k, и существует такой массив b длины k, что a представляет собой записанный ровно раз подряд массив b. Иными словами, массив a является k-периодичным, если он имеет период длины k.

Например, любой массив является n-периодичным, где n — длина массива. Массив [2, 1, 2, 1, 2, 1] является одновременно 2-периодичным и 6-периодичным, а массив [1, 2, 1, 1, 2, 1, 1, 2, 1] является одновременно 3-периодичным и 9-периодичным.

Для заданного массива a, состоящего только из единиц и двоек, найдите наименьшее количество элементов, которые необходимо изменить, чтобы он стал k-периодичным. Если массив уже является k-периодичным, то искомое значение равно 0.

Входные данные

В первой строке входных данных содержится пара целых положительных чисел n, k (1 ≤ k ≤ n ≤ 100), где n — длина массива, а значение k делит нацело n. Вторая строка содержит последовательность элементов заданного массива a1, a2, ..., an (1 ≤ ai ≤ 2), aii-й элемент массива.

Выходные данные

Выведите наименьшее количество элементов массива, которые надо изменить, чтобы он стал k-периодическим. Если массив уже является k-периодичным, то выведите 0.

Примечание

В первом примере достаточно заменить четвертый элемент с 2 на 1, тогда массив примет вид [2, 1, 2, 1, 2, 1].

Во втором примере заданный массив уже 4-периодичный.

В третьем примере достаточно каждое вхождение двойки заменить на единицу. В этом случае массив примет вид [1, 1, 1, 1, 1, 1, 1, 1, 1] — этот массив одновременно 1-, 3- и 9-периодичный.

E. Реформа метро

жадные алгоритмы математика *2000

В Берляндии неспокойно — упавшие цены на грязь подорвали бюджет этой страны. Ведь все знают, что Берляндия — крупнейший в мире экспортер грязи!

Президенту Берляндии нелегко далось решение, что из n станций метрополитена столицы необходимо оставить только k.

Станции метрополитена расположены на прямой одна за другой, поезда курсируют проезжая станции последовательно. Удобно считать, что станции расположены на оси Ox, i-ая станция расположена в точке с координатой xi. В таком случае расстояние между станциями i и j вычисляется по простой формуле |xi - xj|.

В настоящий момент министерство транспорта решает, какие из станций следует закрыть, а какие оставить. Очевидно, что жители столицы без восторга отнесутся к этой реформе, поэтому решено представить ее с выгодной стороны. Министерство транспорта хочет выбрать такие k станций, чтобы минимизировать среднее время проезда в метро!

Считая, что скорость движения поезда постоянна (константа), среднее время проезда в метро вычисляется как сумма попарных расстояний между станциями, деленная на количество пар (оно равно ) и деленная на скорость движения поезда.

Помогите министру транспорта решить эту непростую задачу. Напишите программу, которая по заданным положениям станций выбирает такие k станций, что среднее время проезда в метро минимизируется.

Входные данные

В первой строке входных данных записано целое число n (3 ≤ n ≤ 3·105) — количество станций до реформы. Вторая строка содержит координаты станций x1, x2, ..., xn ( - 108 ≤ xi ≤ 108). Третья строка содержит целое число k (2 ≤ k ≤ n - 1) — количество станций после реформы.

Координаты станций не обязательно отсортированы. Все координаты станций различны.

Выходные данные

Выведите последовательность из k различных целых чисел t1, t2, ..., tk (1 ≤ tj ≤ n) — номера станций, которые следует оставить после реформы, в произвольном порядке. Считайте, что станции пронумерованы от 1 до n в том порядке, как они заданы во входных данных. Выведенный набор станций должен иметь наименьшее возможное среднее время проезда среди всех возможных способов выбрать k станций. Если таких способов несколько, то разрешается вывести любой из них.

Примечание

В тестовом примере оптимальным решением является решение удалить станцию в координате x = 1. В таком случае полученное среднее время проезда будет равно 1.

A. Весело считать Кенгуру

Бинарный поиск жадные алгоритмы сортировки *1600

Даны n кенгуру с сумками. У каждого кенгуру есть размер (целое число). Кенгуру может поместиться в сумке другого кенгуру тогда и только тогда, когда размер кенгуру-носителя как минимум в два раза больше размера кенгуру-пассажира.

Каждый кенгуру может нести не более одного кенгуру, а кенгуру-пассажир не может носить никаких кенгуру.

Кенгуру-пассажира не видно, когда он в сумке кенгуру-носителя. Пожалуйста, разработайте такой план рассадки кенгуру, чтобы было видно как можно меньше кенгуру.

Входные данные

В первой строке записано единственное целое число — n (1 ≤ n ≤ 5·105). Каждая из следующих n строк содержит целое число si — размер i-го кенгуру (1 ≤ si ≤ 105).

Выходные данные

Выведите единственное целое число — оптимальное количество видимых кенгуру.

A. Инна и розовое пони

жадные алгоритмы реализация *2000

У Димы с Инной все хорошо! Прямо сейчас Инна сидит на волшебной поляне и играет с розовым пони. Дима тоже захотел поиграть. Он принес шахматную доску размером n × m, одну очень вкусную конфету и два числа a и b.

Дима положил шахматную доску перед Инной и разместил конфету в позиции (i, j) на доске. Мальчик сказал, что отдаст конфету, если она окажется в одной из угловых клеток доски. При этом он поставил условие, что разрешается совершать только действия следующего вида:

  • переместить конфету из позиции (x, y) на доске в позицию (x - a, y - b);
  • переместить конфету из позиции (x, y) на доске в позицию (x + a, y - b);
  • переместить конфету из позиции (x, y) на доске в позицию (x - a, y + b);
  • переместить конфету из позиции (x, y) на доске в позицию (x + a, y + b).

Разумеется, Дима запретил перемещать конфету за пределы шахматной доски.

Инна и пони стали двигать конфету по доске. Им интересно: какое минимальное количество разрешенных действий нужно совершить, чтобы конфета, изначально находившаяся в позиции (i, j), оказалась в одном из углов шахматной доски. Помогите им с этой задачей!

Входные данные

В первой строке входных данных находится шесть целых чисел n, m, i, j, a, b (1 ≤ n, m ≤ 106; 1 ≤ i ≤ n; 1 ≤ j ≤ m; 1 ≤ a, b ≤ 106).

Считайте, что строки шахматной доски пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Позицией (i, j) в условии обозначается клетка шахматной доски на пересечении строки с номером i и столбца с номером j. Углы доски — это позиции: (1, m), (n, 1), (n, m), (1, 1).

Выходные данные

В единственной строке выведите целое число — минимальное количество ходов, необходимое для получения конфеты.

Если Инна и пони не могут получить конфету, действуя по правилам Димы, в единственной строке выведите «Poor Inna and pony!» без кавычек.

Примечание

Пояснение к примеру 1:

Инна и пони могут перевести конфету в позицию (1 + 2, 3 + 2) = (3, 5), из нее они могут перевести конфету в позиции (3 - 2, 5 + 2) = (1, 7) и (3 + 2, 5 + 2) = (5, 7). Данные позиции соответствуют угловым клеткам шахматной доски. Таким образом ответ на этот тестовый пример равен двум.

B. Инна и девять

жадные алгоритмы Комбинаторика *1500

Инне очень нравится цифра 9. Поэтому она попросила Диму написать небольшое число, состоящее из девяток. Но Дима, видимо, что-то перепутал и написал очень большое число a, состоящее из цифр от 1 до 9.

Инна хочет немного поменять число, написанное Димой, чтобы в итоге число содержало как можно больше девяток. За один ход Инна может взять две соседние цифры в числе, сумма которых равна 9, и заменить их на одну цифру 9.

Например, Инна может изменить число 14545181 следующим образом: 14545181 → 1945181 → 194519 → 19919. Также из числа 14545181 описанным способом можно получить число 19991. Число 149591 Инна получать не станет, поскольку можно получить числа 19919 и 19991, а они содержат больше девяток.

Дима — программист, поэтому он хочет узнать сколько различных чисел с максимальным количеством девяток может получить Инна из записанного им числа. Помогите ему с этой нелегкой задачей.

Входные данные

Первая строка входных данных содержит целое число a (1 ≤ a ≤ 10100000). Число a не содержит в своей записи нулей.

Выходные данные

В единственной строке выведите целое число — ответ на задачу. Гарантируется, что ответ на задачу не превосходит 263 - 1.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Пояснения к примерам:

В первом примере Инна может получить следующие числа: 369727 → 99727 → 9997, 369727 → 99727 → 9979.

Во втором примере Инна может действовать следующим образом: 123456789987654321 → 12396789987654321 → 1239678998769321.

B. Подготовка к соревнованию

Бинарный поиск жадные алгоритмы сортировки Структуры данных *1900

Уже совсем скоро состоится крупнейшее в мире соревнование по программированию, а в тестирующей системе до сих пор имеется m багов. У организатора соревнования — одного известного университета — нет иного выбора, как привлечь студентов университета к исправлению всех багов. В университете учатся n студентов, способных выполнять такую работу. Студенты понимают, что являются единственной надеждой организаторов, поэтому не готовы работать бесплатно: i-ый студент за свою помощь хочет получить ci зачетов (независимо от объема проделанной им работы).

Как баги, так и студенты, не одинаковые: каждый баг характеризуется сложностью aj, а каждый студент — уровнем своих способностей bi. Студент i способен пофиксить баг j лишь в том случае, если уровень его способностей не меньше сложности бага: bi ≥ aj, причем он делает это за один день. В противном случае для исправления этого бага придется использовать какого-либо другого студента. Разумеется, никакой студент не может работать над несколькими багами в течение одного дня. Все баги не зависят друг от друга, поэтому их можно исправлять в любом порядке, а разные студенты могут работать параллельно.

Университет хочет исправить все баги как можно быстрее, при этом выставив студентам суммарно не более s зачетов. Определите, каких студентов нужно для этого привлечь, а также расписание работ: какой студент должен исправлять какой баг.

Входные данные

В первой строке содержатся три целых числа, записанные через пробел: n, m и s (1 ≤ n, m ≤ 105, 0 ≤ s ≤ 109) — количество студентов, количество багов в системе и максимальное количество зачетов, которое университет готов поставить студентам.

В следующей строке содержится m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 109), записанных через пробел — сложности багов.

В следующей строке содержится n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 109), записанных через пробел — уровни способностей студентов.

В следующей строке содержится n целых чисел c1, c2, ..., cn (0 ≤ ci ≤ 109), записанных через пробел — количества зачетов, которые студенты хотят получить за свою помощь.

Выходные данные

Если все баги исправить не удастся, выведите «NO».

Иначе в первой строке выведите «YES», а затем выведите m целых чисел через пробел: i-ое из этих чисел должно равняться номеру студента, который исправит i-ый баг в оптимальном ответе. Баги должны быть исправлены как можно быстрее (должно быть потрачено наименьшее количество дней), а суммарное количество выставленных зачетов не должно при этом превышать s. Если существует несколько оптимальных ответов, разрешается вывести любой.

Примечание

Рассмотрим первый пример.

Третий студент (с уровнем способностей 3) должен исправлять второй и четвертый баги (сложностей 3 и 2 соответственно), а второй студент (с уровнем способностей 1) — первый и третий баги (их сложность также равна 1). Исправление каждого бага займет у каждого студента один день, поэтому на исправление всех багов потребуется два дня (студенты могут работать параллельно).

Второй студент требует за свою помощь 3 зачета, а третий — 6. Это укладывается в возможности университета, который готов поставить не более 9 зачетов.

C. Новогоднее изменение рейтинга

жадные алгоритмы сортировки *1400

На одном очень известном интернет ресурсе (будем называть его X) задумали новогоднюю авантюру. А именно, решили подарить всем посетителям рейтинга.

Ресурс X посещают n пользователей, и для каждого пользователя известно, сколько рейтинга он хочет получить в подарок на новый год. Известно, что пользователь i хочет получить не менее ai рейтинга в подарок.

Администраторы ресурса X — люди очень креативные и экономные. Поэтому с одной стороны, они хотят, чтобы все полученные рейтинги были различны, а с другой — чтобы суммарное количество подаренного рейтинга было как можно меньше.

Помогите ресурсу X справиться со сложной задачей распределения рейтинга. Найдите оптимальное распределение.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105) — количество пользователей ресурса. В следующей строке записана последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите последовательность целых чисел b1, b2, ..., bn. Число bi обозначает, что пользователь i получит bi рейтинга в подарок. Выведенная последовательность должна удовлетворять условиям задачи.

Если существует несколько оптимальных решений, разрешается вывести любое.

A. Сережа и Дима

жадные алгоритмы реализация *800

Сережа и Дима играют в игру. Правила игры очень просты. Перед игроками лежат в ряд n карточек. На каждой карточке написано число, причем все числа на карточках различны. Игроки ходят по очереди, первый ходит Сережа. На свой ход можно забрать себе одну карточку: либо самую левую карточку из ряда, либо самую правую. Игра заканчивается, когда в ряду не осталось карточек. Выигрывает тот, у кого в конце игры сумма чисел на взятых карточках больше.

Сережа и Дима действуют жадно. На своем ходе, каждый из них из двух карточек выбирает ту, на которой написано большее число.

Инна — подруга Сережи и Димы. Она знает какую стратегию используют ребята, поэтому хочет по изначальному состоянию игры определить, какой в конце игры будет счет. Помогите ей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1000) — количество карточек на столе. Во второй строке через пробел перечислены числа, записанные на карточках, в порядке слева направо. Числа на карточках — различные целые числа от 1 до 1000.

Выходные данные

Выведите в единственной строке два целых числа. Первое число — это количество очков у Сережи в конце игры, второе — количество очков у Димы в конце игры.

Примечание

В первом тесте Сережа возьмет карточки с числами 10 и 2, таким образом сумма Сережи 12. Дима возьмет все остальные карточки с суммой 5.

B. Сережа и лесенка

жадные алгоритмы реализация сортировки *1100

Сережа очень любит последовательности целых чисел. В особенности он любит последовательности лесенки.

Последовательность a1, a2, ..., a|a| (|a| — длина последовательности) называется лесенкой, если существует такой индекс i (1 ≤ i ≤ |a|), что выполяется соотношение:

a1 < a2 < ... < ai - 1 < ai > ai + 1 > ... > a|a| - 1 > a|a|.

Например, последовательности [1, 2, 3, 2] и [4, 2] являются лесенками, а последовательность [3, 1, 2] — нет.

У Сережи есть m карточек с числами. Он хочет выложить некоторые карточки на стол в ряд, чтобы получилась последовательность лесенка. Какое максимальное количество карточек, ему удастся выложить на стол?

Входные данные

В первой строке записано целое m (1 ≤ m ≤ 105) — количество карточек у Сережи. Во второй строке записаны m целых чисел bi (1 ≤ bi ≤ 5000) — числа на карточках, которые есть у Сережи.

Выходные данные

В первой строке выведите количество карточек, которое удастся выложить на стол. Во второй строке выведите саму лесенку, которая получится.

A. Ксюша и чашечные весы

жадные алгоритмы реализация *1100

У Ксюши есть обыкновенные чашечные весы и несколько гирек одинаковой массы. Ксюша уже положила некоторые гирьки на весы, остальные гирьки пока лежат нетронутыми. Сейчас Ксюше интересно, можно ли положить все оставшиеся гирьки на весы так, чтобы весы были в состоянии равновесия.

Весы находятся в состоянии равновесия, если суммарная масса гирек на левой чаше равна суммарной массе гирек на правой чаше.

Входные данные

В первой строке задана непустая последовательность символов, описывающая весы. В этой последовательности заглавная латинская буква обозначает гирьку, а символ «|» обозначает разделитель (этот символ встречается в последовательности ровно один раз). Все гирьки, записанные в последовательности до символа разделителя, находятся изначально на левой чаше весов. Все гирьки, записанные в последовательности после символа разделителя, находятся изначально на правой чаше весов.

Во второй строке записана непустая последовательность заглавных латинских букв. Каждая заглавная буква обозначает гирьку, которая еще не используется.

Гарантируется, что все латинские буквы во входных данных различны. Гарантируется, что входные данные не содержат никаких лишних символов.

Выходные данные

Если нельзя выложить все гирьки на весы, чтобы весы были в равновесии — выведите строку «Impossible». Иначе выведите описание полученных весов в таком же формате, как и во входных данных.

Если существует несколько ответов, разрешается вывести любой.

A. Доим коров

жадные алгоритмы Структуры данных *1600

Яхуб помогает деду на ферме. Сегодня надо доить коров. Перед Яхубом выстроились в ряд n коров, пронумерованных от 1 до n слева направо. Каждая корова смотрит либо налево, либо направо. Когда Яхуб доит корову, все остальные коровы, которые это видят, пугаются и теряют одну единицу молока в вымени. Если корова смотрит налево, то она видит всех коров с номерами меньше ее номера. Если же корова смотрит направо, то она видит всех коров с номерами большее ее номера. Корова, которая напугалась однажды, может напугаться еще раз (и потерять еще одну единицу молока). Если корову уже подоили один раз, то она больше не пугается и не теряет молоко. Предполагается, что корова никогда не теряет все молоко, что у нее есть (у коровы в вымени бесконечное количество молока).

Яхуб может определить порядок, в котором он доит коров. Тем не менее он обязан подоить каждую корову ровно один раз. Яхуб хочет потерять как можно меньше молока. Выведите наименьшее количество молока, которое он может потерять.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 200000). Вторая строка содержит n целых чисел a1, a2, ..., an, где ai равняется 0, если корова номер i смотрит налево и 1, если корова смотрит направо.

Выходные данные

Выведите единственное целое число, минимальное количество потерянного молока.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64 битных целых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тестовом примере Яхуб доит коров в следующем порядке: корова 3, корова 4, корова 2, корова 1. Когда он доит корову 3, корова 4 теряет 1 единицу молока. Больше молоко не теряется.

B. Мультизадачность

жадные алгоритмы реализация сортировки *1500

Яхуб хочет потренироваться делать несколько дел одновременно. Для этого он хочет одновременно отсортировать n массивов по m целых чисел.

Яхуб может выбрать пару различных индексов, i и j (1 ≤ i, j ≤ m, i ≠ j). Затем в каждом из n массивов значения в позициях с номерами i и j меняются местами, только если значение в позиции i строго больше значения в позиции j.

Яхуб хочет найти такой массив пар различных индексов, что если выполнить описанную операцию с каждой парой из массива, просматривая пары в порядке их следования в массиве, то все n массивов в итоге будут отсортированы по невозрастанию, или по неубыванию (требуемый порядок дан во входных данных). Размер массива пар не может быть больше (не больше пар). Помогите Яхубу, найдите любой подходящий массив пар.

Входные данные

В первой строке содержатся три целых числа n (1 ≤ n ≤ 1000), m (1 ≤ m ≤ 100) и k. Число k равно 0, если массивы надо отсортировать по возрастанию, и 1, если их надо отсортировать по убыванию. Каждая строка i из следующих n строк содержит m целых чисел, разделенных пробелом, обозначающих i-ый массив. Для каждого элемента x массива i выполняется условие: 1 ≤ x ≤ 106.

Выходные данные

В первой строке выведите целое число p — размер массива (p не больше ). В каждой из следующих p строк запишите два различных целых числа, i и j (1 ≤ i, j ≤ m, i ≠ j), обозначающих выбранные индексы.

Если правильных ответов несколько, можно вывести любой из них.

Примечание

Рассмотрим первый тестовый пример. После первой операции массивы принимают вид [1, 3, 2, 5, 4] и [1, 2, 3, 4, 5]. После второй операции массивы принимают вид [1, 2, 3, 5, 4] и [1, 2, 3, 4, 5]. После третьей операции они принимают вид [1, 2, 3, 4, 5] и [1, 2, 3, 4, 5].

A. Медведь и малина

жадные алгоритмы Перебор реализация *1000

Медведь решил запастись малиной на зиму. Хитрым образом он узнал, сколько килограммов малины будет стоить бочонок меда в каждый из следующих n дней. По данным медведя, в i-ый (1 ≤ i ≤ n) день один бочонок меда будет стоить xi килограмм малины.

К сожалению, у медведя нет ни бочонка меда, ни малины. В это же время, у медведя есть друг, который готов за c килограмм малины одолжить ему бочонок меда ровно на один день. Поэтому медведь придумал хитрый план. Он хочет выбрать некоторый день d (1 ≤ d < n), занять у друга в этот день бочонок меда и сразу же (в день d) продать его по курсу дня d. На следующий день (d + 1), медведь хочет купить новый бочонок меда по курсу текущего дня (ведь у него осталась малина от продажи прошлого бочонка) и сразу же (в день d + 1) отдать другу одолженный бочонок меда, а также c килограмм малины за аренду бочонка.

Медведь хочет привести в действие свой план не более одного раза, после чего уйти в спячку. Какое максимальное количество малины (в килограммах) он может заработать? Учтите, что если на каком-то этапе своего плана у медведя не хватает малины, то такой план медведь осуществлять не будет.

Входные данные

В первой строке записаны два целых числа n и c (2 ≤ n ≤ 100, 0 ≤ c ≤ 100), разделенных пробелом — количество дней и количество килограмм малины, которое медведь должен отдать за взятие бочонка в долг.

Во второй строке записаны n целых чисел x1, x2, ..., xn (0 ≤ xi ≤ 100), разделенных пробелом — стоимость бочонка меда в день i.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере медведю выгодно взять в долг бочонок меда в 3 день и продать его за 7. На 4 день купить бочонок меда за 3 и отдать его другу. Полученная выгода равна (7 - 3 - 1) = 3.

В втором примере медведю выгодно взять в долг бочонок меда в 1 день и продать его за 100. На 2 день купить бочонок меда за 1. Полученная выгода равна (100 - 1 - 2) = 97.

B. Медведь и строки

жадные алгоритмы математика Перебор реализация Строки *1200

У медведя есть строка s = s1s2... s|s| (записью |s| обозначается длина строки), состоящая из строчных букв латинского алфавита. Медведь хочет посчитать количество таких пар индексов i, j (1 ≤ i ≤ j ≤ |s|), что строка x(i, j) = sisi + 1... sj содержит в себе хотя бы одну строку «bear» в качестве подстроки.

Строка x(i, j) содержит в себе строку «bear», если существует такой индекс k (i ≤ k ≤ j - 3), что sk = b, sk + 1 = e, sk + 2 = a, sk + 3 = r.

Помогите медведю справиться с поставленной задачей.

Входные данные

В первой строке записана непустая строка s (1 ≤ |s| ≤ 5000). Гарантируется, что строка состоит только из строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере подходят следующие пары (i, j): (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9).

Во втором примере подходят следующие пары (i, j): (1,  4), (1,  5), (1,  6), (1,  7), (1,  8), (1,  9), (1,  10), (1,  11), (2,  10), (2,  11), (3,  10), (3,  11), (4,  10), (4,  11), (5,  10), (5,  11), (6,  10), (6,  11), (7,  10), (7,  11).

B. Георгий и раунд

жадные алгоритмы Перебор *1200

Георгий решил подготовить раунд для Codesecrof, поэтому он подготовил m задач. Пронумеруем подготовленные задачи целыми числами от 1 до m. Сложность задачи с номером i Георгий оценивает целым числом bi.

Чтобы раунд получился хорошим, он должен состоять как минимум из n задач. Кроме этого он должен иметь хотя бы одну задачу со сложностью ровно a1, хотя бы одну со сложностью ровно a2, ..., и хотя бы одну задачу со сложностью ровно an. Конечно, в раунде дополнительно могут быть задачи и с другими сложностями.

Георгий обладает плохой фантазией, поэтому ему проще упростить некоторую уже подготовленную задачу, чем придумать новую и подготовить ее. В упрощении задач Георгий виртуоз. Он может упростить любую уже подготовленную задачу со сложностью c до любой целой положительной сложности d (c ≥ d), изменив ограничения на входные данные.

Однако не все так просто. Георгий понял, что даже в том случае, если он упростит некоторые задачи, ему может не хватить задач для хорошего раунда. Поэтому он решил узнать у вас, какое минимальное количество задач ему необходимо придумать дополнительно к уже подготовленным m задачам, чтобы из всех задач можно было собрать хороший раунд. Учтите, что Георгий может придумывать задачи любой сложности.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 3000) — минимальное количество задач в хорошем раунде и количество подготовленных Георгием задач. Во второй строке заданы целые числа через пробел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ 106) — требования на сложности задач в хорошем раунде. В третьей строке заданы целые числа через пробел b1, b2, ..., bm (1 ≤ b1 ≤ b2... ≤ bm ≤ 106) — сложности задач, подготовленных Георгием.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере набор подготовленных задач удовлетворяет требованиям хорошего раунда.

Во втором примере достаточно придумать и подготовить две задачи со сложностями 2 и 3, чтобы получить хороший раунд.

В третьем примере очень просто получить хороший раунд, если дополнительно придумать и подготовить три задачи со сложностями 2, 3, 4.

C. Георгий и число

жадные алгоритмы реализация *1700

Георгий — кот, поэтому он очень любит играть. Больше всего ему нравится играть с имеющимся у него массивом положительных целых чисел b. В процессе игры, Георгий изменяет массив специальными операциями. Обозначим текущий массив Георгия как b1, b2, ..., b|b| (запись |b| обозначает текущую длину массива). Тогда одна операция — это последовательность действий:

  • Выбрать два различных индекса i и j (1 ≤ i, j ≤ |b|; i ≠ j) таких, что bi ≥ bj.
  • Получить число v = concat(bi, bj), где concat(x, y) — число, полученное добавлением числа y в конец десятичной записи числа x. Например, concat(500, 10) = 50010, concat(2, 2) = 22.
  • Добавить в конец массива число v. Длина массива увеличится на один.
  • Удалить из массива элементы с индексами i и j. Длина массива уменьшается на два, а элементы перенумеровываются от 1 до текущей длины массива.

Георгий долго играл со своим массивом b и в итоге получил из него массив, состоящий из ровно одного числа p. Теперь Георгий хочет узнать: какое максимальное количество чисел мог содержать массив b первоначально? Помогите ему, найдите это число. Учтите, что первоначально массив мог содержать только положительные целые числа.

Входные данные

В первой строке входных данных задано ровно одно целое число p (1 ≤ p < 10100000). Гарантируется, что число p не содержит лидирующих нулей.

Выходные данные

Выведите целое число — какое максимальное количество элементов мог содержать массив b первоначально.

Примечание

Рассмотрим тестовые примеры:

  1. Изначально массив b мог быть равен {5, 9, 5, 5}. Последовательность операций, которую совершил Георгий, могла быть: {5, 9, 5, 5} → {5, 5, 95} → {95, 55} → {9555}.
  2. Изначально массив b мог быть равен {1000000000, 5}. Обратите внимание, в массиве b не может быть нулей.
  3. Изначально массив b мог быть равен {800, 10, 1}.
  4. Изначально массив b мог быть равен {45}. Он не мог быть равен {4, 5}, поскольку из этого массива за одну операцию можно получить только массив {54}.

Обратите внимание, что числа в результирующем массиве могут быть очень большими.

A. Лиса и коробки

жадные алгоритмы сортировки *1400

У лисы Сиель в комнате есть n коробок. Все коробки имеют одинаковый размер и вес, но могут иметь различную прочность. Формально, i-ая коробка может выдержать не больше xi коробок на себе (будем называть xi прочностью коробки).

Так как у всех коробок одинаковый размер, Сиель не может поставить больше одной коробки непосредственно на некоторую коробку. Предположим, что у Сиель есть три коробки: у первой прочность 2, у второй прочность — 1, и у третьей — прочность 1. Нельзя одновременно поставить вторую и третью коробку прямо на первую. Но можно поставить вторую коробку прямо на первую, а затем третью коробку прямо на вторую. Назовем такое сооружение из коробок стопкой.

Лиса Сиель хочет соорудить стопки изо всех коробок. В каждой стопке может быть несколько коробок, но нельзя ставить больше xi коробок на i-ую коробку. Какое минимальное количество стопок может построить Сиель, используя все коробки?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100). В следующей строке записано n целых чисел x1, x2, ..., xn (0 ≤ xi ≤ 100).

Выходные данные

Выведите целое число — минимальное возможное количество стопок.

Примечание

В первом примере оптимальный способ — соорудить 2 стопки: в первой стопке будут коробки номер 1 и 3 (сверху вниз), во второй стопке будет только коробка номер 2.

Во втором примере можно построить одну стопку, содержащую коробки номер 1, 2, 3, 4, 5 (сверху вниз).

C. Лиса и игра в карты

жадные алгоритмы игры сортировки *2000

Лиса Сиель играет в карты со своим другом, лисом Джиро. На столе лежат n стопок карт и на каждой карте записано по положительному целому числу.

Игроки ходят по очереди, Сиель начинает. В свой ход она берет одну карту сверху любой непустой стопки. Джиро на своем ходу берет одну карту снизу любой непустой стопки. Каждый игрок хочет максимизировать общую сумму чисел на взятых им картах. Игра заканчивается, когда все стопки пустые.

С каким счетом закончится игра при условии, что Сиель и Джиро играют оптимально?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100). В каждой из следующих n строк записано описание одной стопки: первым в строке идет целое число si (1 ≤ si ≤ 100); число si обозначает количество карт в i-ой стопке; затем следуют si положительных целых чисел c1, c2, ..., ck, ..., csi (1 ≤ ck ≤ 1000) — последовательность чисел на картах в текущей стопке, перечисленных сверху вниз.

Выходные данные

Выведите два целых числа: сумму карт Сиель и сумму карт Джиро, если они играют оптимально.

Примечание

В первом примере Сиель возьмет карты с числами 100 и 1, Джиро возьмет карту с числом 10.

Во втором примере Сиель возьмет карты с числами 2, 8, 6, 5, 9, а Джиро возьмет карты с числами 4, 7, 1, 3.

A. Лиса и игра с числами

жадные алгоритмы математика *1000

Лиса Сиель играет с числами.

У Сиель есть n положительных целых чисел: x1, x2, ..., xn. Она может выполнять следующие операции столько раз, сколько ей нужно: выбрать два различных индекса i и j, таких, что выполняется условие xi > xj, а затем выполнить присвоение xi = xi - xj. Цель игры в том, чтобы сделать сумму всех чисел как можно меньше.

Пожалуйста, помогите Сиель найти эту минимальную сумму.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 100). Затем во второй строке записано n целых чисел: x1, x2, ..., xn (1 ≤ xi ≤ 100).

Выходные данные

Выведите единственное целое число — требуемую минимальную сумму.

Примечание

В первом примере оптимальный способ — выполнить присвоение: x2 = x2 - x1.

Во втором примере оптимальная последовательность операций такая: x3 = x3 - x2, x2 = x2 - x1.

B. Лиса и крест

жадные алгоритмы реализация *1100

У лисы Сиель есть доска, расчерченная на n рядов и n колонок. Таким образом, доска состоит из n × n ячеек. Каждая ячейка содержит либо символ '.', либо символ '#'.

Крест на доске — это связное множество из ровно пяти клеток доски, которое выглядит как крест. Рисунок ниже показывает, как выглядит крест.

Сиель хочет нарисовать несколько (возможно, ноль) крестов на доске. Каждый крест должен состоять ровно из пяти клеток с символами '#', и каждая клетка с символом '#' должна принадлежать некоторому кресту. Ни одна клетка не может принадлежать двум крестам.

Пожалуйста, подскажите Сиель, может ли она нарисовать на доске кресты описанным способом.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 100) — размер доски.

В каждой из следующих n строк содержится описание одного ряда доски. В i-ой строке записано описание i-ого ряда доски, состоящее из n символов. Каждый из них — это либо символ '.', либо символ '#'.

Выходные данные

Выведите единственную строку, содержащую слово "YES", если Сиель может нарисовать кресты так, как описано выше. В противном случае, выведите единственную строку, содержащую слово "NO".

Примечание

В первом примере можно нарисовать два креста. Рисунок ниже показывает, как они выглядят.

Во втором примере доска содержит 16 клеток с '#', но каждому кресту требуется 5 клеток. Так как 16 не кратно 5, лиса не сможет покрыть крестами все помеченные символом '#' клетки.

A. Вычисления в C*++

жадные алгоритмы Разбор выражений *2000

Язык C*++ похож на C++. Это сходство проявляется в том, что программы на C*++ порой ведут себя непредсказуемо и приводят к совершенно неожиданным эффектам. Например, представим себе арифметическое выражение на C*++, имеющее следующий вид:

  • expression ::= summand | expression + summand | expression - summand
  • summand ::= increment | coefficient*increment
  • increment ::= a++ | ++a
  • coefficient ::= 0|1|2|...|1000

Например, 5*a++-3*++a+a++ — это корректное арифметическое выражение на C*++.

Итак, мы имеем сумму, состоящую из нескольких слагаемых, разделенных знаками «+» или «-». Каждое слагаемое представляет собой выражение «a++» или «++a», умноженное на некоторый целый коэффициент. Если коэффициент опущен, то предполагается, что он равен 1.

Вычисление такой суммы в C*++ происходит следующим образом. Сначала по очереди вычисляются все слагаемые, после этого происходит суммирование по обычным арифметическим правилам. Если слагаемое содержит «a++», то при его вычислении сначала происходит умножение значения переменной «a» на коэффициент, затем значение «a» увеличивается на 1. Если слагаемое содержит «++a», то действия над ним выполняются в обратном порядке: сначала — увеличение «a» на 1, затем — умножение на коэффициент.

Порядок вычисления слагаемых может быть любым, поэтому иногда результат вычисления выражения совершенно непредсказуем! Ваша задача — найти наибольшее возможное его значение.

Входные данные

В первой строке входного файла задано одно целое число a ( - 1000 ≤ a ≤ 1000) — начальное значение переменной «a». В следующей строке содержится выражение на языке C*++ описанного вида. Количество слагаемых в выражении не превосходит 1000. Гарантируется, что строка, описывающая выражение, не содержит пробелов и знаков табуляции.

Выходные данные

Выведите единственное число — наибольшее возможное значение выражения.

Примечание

Рассмотрим второй пример. Сначала a = 3. Пусть сначала вычисляется первое слагаемое, потом — второе. Первое слагаемое получается равным 3, и значение a увеличивается на 1. При вычислении второго слагаемого значение a сначала еще раз увеличивается (становится равным 5). Значение второго слагаемого — 5, и в сумме получаем 8. При вычислении сначала второго, а потом первого слагаемого получаем, что оба слагаемых равны 4 и ответ тоже 8.

B. Рост прибыли компании

жадные алгоритмы *1300

Петя работает PR-менеджером процветающей берляндской компании BerSoft. Ему нужно подготовить презентацию о росте прибыли своей компании с 2001 года (года ее основания) до настоящего времени. Пете известно, что в 2001 году прибыль компании составила a1 млрд. бурлей, в 2002 году — a2 млрд., ..., в нынешнем (2000 + n)-м году — an млрд. бурлей. На основании имеющейся информации Петя задумал отразить в своей презентации линейную динамику роста компании, являющуюся, по его мнению, идеальной. Согласно уже построенному Петей графику, в первый год прибыль компании BerSoft должна составлять 1 млрд. бурлей, во второй год — 2 млрд. бурлей и т.д., в каждый следующий год прибыль увеличивается на 1 млрд. бурлей. К сожалению, реальные цифры отличаются от идеальных. Среди чисел ai даже могут встречаться отрицательные, свидетельствующие об убытках компании в некоторые годы. Поэтому Петя хочет пренебречь некоторыми данными, иначе говоря, вычеркнуть некоторые числа ai из последовательности и оставить только некоторую подпоследовательность, имеющую идеальный рост.

Таким образом, Пете нужно выбрать такую последовательность годов y1, y2, ..., yk, чтобы в год y1 прибыль компании составляла 1 млрд. бурлей, в год y22 млрд. бурлей, и т.д., в соответствии с идеальной динамикой роста. Помогите ему выбрать наибольшую такую последовательность.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). В следующей строке заданы n целых чисел ai ( - 100 ≤ ai ≤ 100). Число ai определяет прибыль компании BerSoft в (2000 + i)-м году. Числа в строке разделены пробелами.

Выходные данные

Выведите k — наибольшую возможную длину идеальной последовательности. В следующей строке выведите саму последовательность годов y1, y2, ..., yk. Числа разделяйте пробелами. Если решений несколько, выведите любое. Если решения не существует, выведите одно число 0.

C. Доминошки

жадные алгоритмы Конструктив

На перемене мы решили отдохнуть и поиграть в домино. Наша коробочка с доминошками была пуста, поэтому мы решили одолжить доминошки у учителя.

На нашу просьбу учитель отреагировал моментально. Он выложил на стол nm доминошек в виде прямоугольника n × 2m так, что в каждой из n строк лежало m доминошек, расположенных горизонтально. На каждой половинке каждой доминошки было написано число (0 или 1).

Мы опешили, а учитель улыбнулся и произнес: «Рассмотрим некоторое расположение доминошек в матрице n × 2m. Давайте посчитаем для каждого столбца матрицы сумму чисел в этом столбце. Далее среди всех таких сумм найдем максимальную. Сможете ли вы так переставить доминошки в матрице, чтобы описанная максимальная сумма была минимальна? Учтите, запрещено менять ориентацию доминошек, все они должны остаться горизонтальными, тем не менее доминошки разрешено поворачивать на 180 градусов. В награду за сделанное я с легкостью отдам вам все мои доминошки.»

Мы еще больше опешили. А пока мы недоумеваем от происходящего, помогите нам составить оптимальную матрицу из доминошек.

Входные данные

В первой строке записаны целые числа n, m (1 ≤ n, m ≤ 103). Далее следует описание матрицы, которую составил учитель. В каждой из следующих n строк содержится m горизонтальных доминошек: каждая доминошка обозначается двумя символами (0 или 1), записанными без пробела — цифры на левой и правой половине соответствующей доминошки.

Выходные данные

Выведите полученную матрицу из доминошек в формате: n строк, в каждой из которых по m доминошек, записанных через пробел.

Если оптимальных ответов несколько, выведите любой.

Примечание

Рассмотрим ответ на первый пример. В нем максимальная сумма по столбцам равна 1 (количество столбцов — 6, а не 3). Очевидно, что меньше 1 эта сумма быть не может, значит такое расположение доминошек является оптимальным.

Обратите внимание, что доминошки можно поворачивать на 180 градусов.

B. Перед экзаменом

жадные алгоритмы Конструктив *1200

Завтра у Пети экзамен по биологии. Он очень не любит этот предмет, но d дней назад узнал, что все-таки придется его сдавать. Строгие родители сразу же наказали Пете заниматься подготовкой, и при этом не менее чем minTimei и не более чем maxTimei часов в i-ый день. К тому же они предупредили Петю, что за день до экзамена проверят, как он следовал их указанию.

И вот именно сегодня родители требуют от Пети расписание его занятий. Однако мальчик подсчитал лишь суммарное число часов sumTime, затраченное им на подготовку. Теперь он хочет узнать, удастся ли ему предоставить родителям список sсhedule из d целых чисел, в котором каждое число sсhedulei означает время в часах, проведенное Петей в i-ый день за изучением биологии. Числа должны удовлетворять ограничениям родителей, а сумма всех schedulei должна быть в точности равна sumTime.

Входные данные

В первой строке входных данных заданы два целых числа d, sumTime (1 ≤ d ≤ 30, 0 ≤ sumTime ≤ 240) — количество дней, в течение которых занимался Петя и общее количество часов, затраченных на подготовку. В следующих d строках содержится по два целых числа minTimei, maxTimei (0 ≤ minTimei ≤ maxTimei ≤ 8), записанных через пробел — минимальное и максимальное число часов, которое Петя мог потратить в i-ый день.

Выходные данные

Выведите в первую строку YES, а во вторую d целых чисел через пробелы, каждое из которых — число часов, потраченных Петей на подготовку в соответствующий день. Если искомый список составить невозможно, то выведите NO в единственную строку выходных данных. Если решений несколько, выведите любое.

B. Сережа и контесты

жадные алгоритмы математика реализация *1200

Сережа — программист, поэтому он очень любит участвовать в раундах Codesorfes. Но поскольку в Ужляндии интернет не очень хороший, иногда Сережа пропускает раунды.

На Codesorfes бывают раунды двух типов: Div1 (для более опытных участников) и Div2 (для новичков). Иногда два раунда Div1 и Div2 проводятся синхронно (при этом Div1 раунды не проводятся без Div2), в остальных случаях раунды не пересекаются по времени. Каждый раунд имеет свой уникальный идентификатор — целое положительное число. Раунды нумеруются идентификаторами последовательно (без пропусков) по времени проведения. Идентификаторы раундов, которые проводятся синхронно, отличаются на единицу, при этом идентификатор Div1 раунда всегда больше.

Сережа — новичок, он может участвовать только в раундах типа Div2. На данный момент он участвует в Div2 раунде, идентификатор которого равен x. Сережа точно помнит, что он участвовал в ровно k раундах до этого раунда. Также он помнит все идентификаторы раундов, в которых он участвовал, и раундов, которые шли синхронно с последними. Про пропущенные раунды Сережа не помнит ровным счетом ничего.

Сережа очень хочет знать, какое минимальное и какое максимальное количество Div2 раундов он мог пропустить? Помогите ему найти эти два числа.

Входные данные

В первой строке записано два целых числа: x (1 ≤ x ≤ 4000) — раунд, в котором сейчас участвует Сережа, и k (0 ≤ k < 4000) — количество раундов, в которых он участвовал ранее.

Ниже в k строках даны описания раундов, в которых Сережа участвовал ранее. Если Сережа участвовал в синхронном раунде, то соответствующая строка имеет вид: «1 num2 num1» (где num2 — идентификатор этого Div2 раунда, num1 — идентификатор синхронного Div1 раунда). Гарантируется, что num1 - num2 = 1. Если Сережа участвовал в обычном Div2 раунде, то соответствующая строка имеет вид: «2 num» (где num — идентификатор этого Div2 раунда). Гарантируется, что номера всех заданных раундов меньше x.

Выходные данные

Выведите в единственной строке два целых числа — минимальное и максимальное количество раундов, которые Сережа мог пропустить.

Примечание

Во втором примере Сережа ничего не знает про раунды с идентификаторами: 1, 6, 7. Минимальное количество раундов, которое мог пропустить Сережа, равно 2. В этом случае, раунд с идентификатором 1 будет обычным Div2 раундом, а раунд с идентификатором 6 будет синхронным с Div1 раундом.

Максимальное количество раундов равно 3. В этом случае все свободные идентификаторы принадлежат обычным Div2 раундам.

C. Команда

жадные алгоритмы Конструктив реализация *1400

Вот и подошел черед олимпиад. Ваня и Егор решили создать свою команду для участия в олимпиаде по программированию. Поскольку они с первого класса вместе, есть надежда, что это хоть как-то поможет ребятам в командной работе.

На каждую командную олимпиаду Ваня берет свои игровые карточки с числами. Он берет карточки исключительно с числами 1 и 0. Ребята — очень суеверны. Они считают, что олимпиада будет для них успешной, если перед ее началом можно разложить все карточки в ряд таким образом, чтобы:

  • не существовало пары соседних в ряду карточек с нулями;
  • не существовало тройки карточек, лежащих подряд, на которых записаны единицы.

Сегодня Ваня принес n карточек с нулями и m карточек с единицами. Карточек оказалось так много, что ребята не знают: можно ли разложить все эти карточки описанным способом или нет. Помогите им найти требуемое расположение карточек, или сообщите ребятам, что это невозможно.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n ≤ 106) — количество карточек с числом 0; m (1 ≤ m ≤ 106) — количество карточек с числом 1.

Выходные данные

В единственной строке выведите требуемую последовательность из единичек и нулей без пробелов. Если же такую последовательность получить невозможно, выведите -1.

A. Орехи

жадные алгоритмы математика *1100

У вас есть a орехов и очень много коробок. Коробки обладают удивительным свойством: если поместить в коробку x (x ≥ 0) разделителей (специальные планки, которыми можно разделять коробку), получится коробка, которая разделена на x + 1 отсеков.

Вы — минималист. Потому, с одной стороны, вы против того, чтобы какая-то коробка была разделена более чем на k отсеков. С другой стороны, вы против того, чтобы в каком-то отсеке коробки лежало более v орехов. Какое минимальное количество коробок вам придется использовать, если вы хотите разложить все орехи по коробкам, и у вас есть b разделителей?

Обратите внимание, что вам требуется минимизировать количество используемых коробок, а не отсеков. Вам не требуется минимизировать количество используемых разделителей.

Входные данные

В первой строке задано четыре целых числа через пробел k, a, b, v (2 ≤ k ≤ 1000; 1 ≤ a, b, v ≤ 1000) — максимальное количество отсеков в коробке, количество орехов, количество разделителей и вместительность каждого отсека коробки.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере можно поступить следующим образом:

  • В первую коробку поместить два разделителя. Теперь у нас в первой коробке три отсека, и мы можем поместить в каждый отсек по три ореха. Итого, в первой коробке будет девять орехов.
  • Не помещать разделителей во вторую коробку. Значит, во второй коробке у нас будет один отсек, в который поместим оставшийся орех.

Таким образом мы разместили все десять орехов.

Второй пример отличается тем, что у нас ровно один разделитель, который мы поместим в первую коробку. В остальных двух коробках у нас будет по одному отсеку.

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 без остатка.

E. Лабиринт 1D

Бинарный поиск жадные алгоритмы реализация *2200

У Валеры есть бесконечная в обе стороны полоска, состоящая из клеток. Клетки пронумерованы целыми числами. В клетке с номером 0 стоит робот.

У робота есть инструкция — последовательность ходов, которые он должен совершить. За один ход робот перемещается на одну клетку влево или вправо, согласно инструкции. До начала движения робота Валера размещает препятствия в каких-то клетках полоски, исключая клетку с номером 0. Если в какой-то из ходов робот по инструкции должен пойти в клетку с препятствием, то он пропускает этот ход.

Кроме того Валера указывает номер финишной клетки, в которой робот должен оказаться после выполнения всей инструкции. Финишная клетка должна быть отлична от стартовой. Считается, что робот успешно выполнил инструкцию, если в процессе ее выполнения он посетил финишную клетку ровно один раз — своим последним ходом. Причем, последний ход не должен быть пропущен.

Предположим, что минимальное количество препятствий, которое необходимо поставить Валере, чтобы робот смог выполнить всю последовательность ходов и оказаться в какой-то финишной клетке равно k. Вам требуется посчитать, сколькими способами Валера может выбрать k препятствий и финишную клетку так, чтобы робот смог успешно выполнить инструкцию.

Входные данные

В первой строке записана последовательность символов без пробелов s1s2... sn (1 ≤ n ≤ 106), состоящая только из букв «L» и «R». Если символ si равен «L», то робот на i-м ходу должен попробовать переместиться на одну клетку влево. Если символ si равен «R», то робот на i-м ходу должен попробовать переместиться на одну клетку вправо.

Выходные данные

Выведите целое число — требуемое количество способов. Гарантируется, что это число помещается в 64-битном знаковом целочисленном типе данных.

Примечание

В первом примере Валера не должен ставить никаких препятствий, а в качестве финишной клетки выбрать клетку с номером 2.

Во втором примере Валере необходимо поставить препятствие в клетку с номером 1, а финишной клеткой назначить клетку с номером  - 1. В этом случае он пропустит первые два хода, а на третьем сразу перейдет из своей стартовой клетки в финишную. Если же Валера не поставит никаких препятствий, или поставит препятствие в другую клетку, то он посетит финишную клетку более одного раза.

A. Переключение гравитации

жадные алгоритмы реализация сортировки *900

Маленький Крис скучает на занятиях по физике (слишком просто), поэтому он смастерил необычную коробку для игрушек, чтобы занять себя. Необычность коробки заключается в том, что она может изменять гравитацию!

В коробке находятся n столбиков игрушечных кубиков, расположенных в ряд: i-й столбик состоит из ai кубиков. Изначально гравитация в коробке тянет все кубики вниз. Когда Крис переключает гравитацию, она начинает тянуть все кубики к правой стенке коробки. Рисунок показывает начальное и конечное расположение кубиков в коробке: кубики, изменившие свои позиции, выделены оранжевым цветом.

Вам дано изначальное расположение игрушечных кубиков в коробке. Найдите количество кубиков в каждом из n столбиков после переключения гравитации!

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100), количество столбиков в коробке. В следующей строке записано n целых чисел через пробел: i-е число ai (1 ≤ ai ≤ 100) обозначает количество кубиков в i-м столбике.

Выходные данные

Выведите n целых чисел через пробел: i-е число должно обозначать количество кубиков в i-м столбике после переключения гравитации.

Примечание

Первый тестовый пример изображен на рисунке. Верхний кубик первого столбика падает на верх последнего столбика; верхний кубик второго столбика падает на верх третьего столбика; средний кубик первого столбика падает на верх второго столбика.

Во втором тестовом примере переключение гравитации не меняет высоты столбиков.

D. Игрушечная сумма

жадные алгоритмы математика реализация *1700

Маленькому Крису очень нравятся игрушечные блоки. Однако его учитель хочет, чтобы Крис решал больше задач. Сегодня учитель решил пошутить над Крисом.

У Криса в наборе есть ровно s блоков, каждый блок имеет уникальный номер от 1 до s. Учитель Криса выбирает подмножество блоков X и берет его себе. Он отдаст блоки Крису, только если Крис сможет выбрать такое непустое подмножество Y из оставшихся блоков, что будет выполнено равенство:

"Вы что, издеваетесь?", — спросил Крис.

Например, рассмотрим случай, где s = 8, а учитель Криса забрал блоки с номерами 1, 4 и 5. Крис может выбрать блоки с номерами 3 и 6 (см. рисунок). Тогда описанные суммы будут равны, как и требуется: (1 - 1) + (4 - 1) + (5 - 1) = (8 - 3) + (8 - 6) = 7.

Однако, у Криса есть ровно s = 106 блоков. Вам дано множество X из блоков, которые выбрал его учитель. Помогите Крису найти необходимое множество Y!

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 5·105), количество блоков в множестве X. В следующей строке записано n различных целых чисел через пробел x1, x2, ..., xn (1 ≤ xi ≤ 106), номера блоков в X.

Обратите внимание: входные и выходные данные имеют очень большой размер, не стоит использовать медленные методы ввода и вывода данных вашего языка программирования. Например, в языке C++ не стоит использовать потоки ввода и вывода (cin, cout).

Выходные данные

В первой строке выведите единственное число m (1 ≤ m ≤ 106 - n), количество блоков в множестве Y. В следующей строке выведите m различных целых чисел через пробел y1, y2, ..., ym (1 ≤ yi ≤ 106), таких, что необходимое равенство выполняется. Множества X и Y не должны пересекаться, то есть xi ≠ yj для всех i, j (1 ≤ i ≤ n; 1 ≤ j ≤ m). Гарантируется, что хотя бы одно решение всегда существует. Если существует несколько решений, выведите любое из них.

E. 3-циклы

графы жадные алгоритмы Конструктив *1900

В ходе своих недавних исследований берляндские ученые выяснили, что в Древней Берляндии было n городов, которые были соединены двусторонними дорогами. Любые два города соединены не более, чем одной дорогой. Никакая дорога не соединяет город сам с собой. Согласно известной традиции, сеть дорог строилась таким образом, что невозможно было выбрать такие три города, что из каждого можно проехать в каждый напрямую. То есть не существовало цикла длины ровно 3. К сожалению, карта дорог не дошла до наших времен. Сейчас ученым интересно, насколько развитым государством была Древняя Берляндия. Помогите им: найдите, какое наибольшее число дорог могло быть в государстве. Так же требуется восстановить любую из возможных карт дорог.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество городов в Берляндии.

Выходные данные

В первой строке должно быть записано число m — наибольшее возможное число дорог в Берляндии. Далее выведите m строк по два числа в каждой — номера городов, которые соединяет очередная дорога. Города нумеруются целыми числами от 1 до n. Если решений несколько, выведите любое.

A. Плакат

жадные алгоритмы реализация *900

Недавно компания R1 выкупила для своего главного офиса многоэтажное здание в центре Москвы. Пришло время обустраивать новый офис, и первым делом было решено написать лозунг компании над главным входом в здание.

Лозунг компании состоит из n символов, поэтому для его написания над входом повесили большой плакат шириной n метров и высотой 1 метр, разделенный на n одинаковых квадратов. Первый символ лозунга должен находиться в первом (самом левом) квадрате плаката, второй — во втором, и так далее.

Конечно, программисты R1 сами хотят написать лозунг на плакате. Для этого у них есть большая (и очень тяжелая) лестница, которую грузчики поставили ровно напротив k-го квадрата плаката. Чтобы нарисовать i-й символ лозунга на плакате, нужно забраться на лестницу, стоящую напротив i-го квадрата плаката. Это действие (вместе с подъемом и спуском с лестницы) занимает у рисующего один час. Рисовать символы в соседних квадратах, когда лестница стоит напротив i-го квадрата, запрещается, ведь из-за неудобного положения лестницы символы могут получиться неаккуратными. Кроме того, программисты могут перемещать лестницу. За один час они могут подвинуть лестницу либо на один метр вправо, либо на один метр влево.

Рисовать символы и перемещать лестницу очень утомительно, поэтому программисты хотят закончить работу, потратив как можно меньше времени. Разработайте для них оптимальный план написания плаката!

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ k ≤ n ≤ 100) — количество символов в лозунге и изначальное положение лестницы соответственно. В следующей строке записан сам лозунг — n символов, записанных без пробелов. Каждый символ лозунга — это либо большая буква английского алфавита, либо цифра, либо один из символов: «.», «!», «,», «?».

Выходные данные

В t строках выведите действия, которые нужно совершить программистам. В i-й строке выведите:

  • «LEFT» (без кавычек), если i-е действие «передвинуть лестницу влево»;
  • «RIGHT» (без кавычек), если i-е действие «передвинуть лестницу вправо»;
  • «PRINT x» (без кавычек), если i-е действие «подняться по лестнице, нарисовать символ x, спуститься с лестницы».

Время, потраченное на покраску, (переменная t) должно быть как можно меньше. Если существует несколько оптимальных планов покраски, разрешается вывести любой.

Примечание

Обратите внимание, что лестницу нельзя перемещать менее, чем на один метр. Нельзя чтобы лестница стояла не напротив какого-то квадрата плаката. Например, нельзя передвинуть лестницу на полметра, чтобы она стояла посередине двух квадратов, затем подняться и нарисовать сначала один символ, а затем другой.

B. Настройка сети

жадные алгоритмы сортировки *900

Компания R1 хочет провести чемпионат по веб-поиску. Для проведения соревнования было выделено n компьютеров, каждый из которых подключен к интернету. Организаторы считают, что скорость передачи данных в сети интернет напрямую влияет на результат. Чем выше скорость интернета, тем быстрее участник найдет нужную информацию. Поэтому перед соревнованием на каждом компьютере была замерена максимально возможная скорость передачи данных. На i-м компьютере она составила ai килобит в секунду.

В чемпионате будут соревноваться k участников, каждый за отдельным компьютером. Чтобы ни один участник не получил преимущества, организаторы хотят обеспечить одинаковую скорость передачи данных на каждом из компьютеров участников. Кроме того, организаторы хотят создать наиболее комфортные условия для участников, поэтому скорость передачи данных на компьютерах участников должна быть как можно больше.

В настройках сети компании R1 имеется специальная опция, позволяющая «обрезать» исходную максимальную скорость передачи данных любого компьютера до любой меньшей скорости. Каким образом компания R1 должна настроить сеть с помощью описанной опции, чтобы хотя бы k из n компьютеров имели одинаковую скорость передачи данных, и при этом скорость передачи данных этих компьютеров была максимально возможной?

Входные данные

В первой строке через пробел заданы два целых числа n и k (1 ≤ k ≤ n ≤ 100) — количество компьютеров и участников соответственно. Во второй строке через пробел задана последовательность, состоящая из n целых чисел: a1, a2, ..., an (16 ≤ ai ≤ 32768); число ai обозначает максимальную скорость передачи данных на i-м компьютере.

Выходные данные

Выведите единственное целое число — максимальную скорость интернета, которую удастся получить. Гарантируется, что ответ на задачу всегда является целым числом.

Примечание

В первом тестовом примере организаторы могут «обрезать» скорость первого компьютера до 30 килобит. Тогда два компьютера (первый и третий) будут иметь одинаковую скорость: 30 килобит. Их и нужно использовать в качестве компьютеров участников. Полученный ответ является оптимальным.

C. Своя игра

жадные алгоритмы математика *1400

«Своя игра» — интеллектуальная игра, в которой игроки отвечают на вопросы и зарабатывают очки. Компания Q проводит турнир по упрощенной версии «Своей игры» среди лучших IT компаний. По счастливой случайности в финал турнира пробились давние конкуренты: компания R1 и компания R2.

В финале будет разыграно n вопросов, из которых m вопросов-аукционов и n - m обычных вопросов. Каждый вопрос имеет цену. Цена i-го вопроса составляет ai очков. В процессе игры игроки выбирают вопросы, при этом, если вопрос является аукционом, то его цена может быть изменена выбравшим вопрос игроком, если его текущее количество очков строго больше цены вопроса. Новая цена вопроса не может быть меньше исходной цены вопроса и не может быть больше текущего количества очков игрока, который выбрал вопрос. Правильный ответ на вопрос приносит игроку количество очков, равное цене вопроса. Неправильный ответ на вопрос уменьшает количество очков игрока на значение цены вопроса.

Игра будет проходить следующим образом. Сначала компания R2 выбирает вопрос, далее выбирает вопрос тот, кто первым правильно ответил на последний вопрос. Если никто не ответил на вопрос, право выбора вопроса остается у последнего выбирающего.

Все сотрудники компании R2 болеют за свою команду. Они хотят посчитать, какое максимально возможное количество очков сможет получить команда R2, если удача будет на их стороне всю игру (будут всегда первыми правильно отвечать на вопросы). Наверное, вы не будете сильно удивлены, но эту задачу опять поручили решить вам.

Входные данные

В первой строке через пробел записаны два целых числа n и m (1 ≤ n, m ≤ 100; m ≤ min(n, 30)) — общее количество вопросов и количество вопросов аукционов соответственно. Во второй строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 107) — цены вопросов. В третьей строке записаны m различных целых чисел bi (1 ≤ bi ≤ n) — номера вопросов аукционов. Считайте, что вопросы нумеруются от 1 до n.

Выходные данные

В единственной строке выведите ответ на поставленную задачу — наибольшее количество очков, которое сможет набрать компания R2, играя оптимальным образом. Гарантируется, что ответ умещается в целочисленный 64-битный знаковый тип.

D. Машмох и резервуары с водой

Бинарный поиск Деревья жадные алгоритмы Структуры данных *2300

Машмох играет в новую игру. В начале у него есть k литров воды и p монеток. Также у него есть корневое дерево (неориентированный связный ациклический граф), состоящее из m вершин. Каждая вершина дерева содержит резервуар с водой, изначально пустой.

Игра начинается с того, что Машмох выбирает несколько (не более k) таких резервуаров (кроме того, что находится в корне) и льет в каждый ровно 1 литр воды. Затем следующий процесс продолжается, пока в резервуарах не остается воды.

  • Процесс состоит из нескольких итераций.
  • В начале каждой итерации Машмох открывает крышки всех резервуаров. Затем он закрывает крышки некоторых резервуаров (ему нельзя закрывать крышку корневого резервуара) на время этой итерации. Пусть некоторый резервуар содержал w литров воды и был закрыт на данной итерации, тогда Машмох платит w монеток за закрытие этого резервуара.
  • Обозначим через x1, x2, ..., xm список вершин дерева, отсортированный в порядке неубывания по глубине. Будем рассматривать вершины из этого списка одну за одной. Сперва опустошается резервуар в вершине x1 (то есть, корень). Затем для каждой вершины xi (i > 1), если ее резервуар закрыт, вершина пропускается, иначе вся вода переливается из резервуара вершины xi в резервуар ее родителя (несмотря на то, что резервуар родителя может быть закрытым).

Предположим, что до опустошения всех резервуаров дерева произошло l итераций. Обозначим количество воды в резервуаре корня после i-й итерации как wi. В результате описанного процесса Машмох выиграет max(w1, w2, ..., wl) долларов. Машмох хочет знать, какое максимальное количество долларов он может выиграть, сыграв приведенную выше игру. Он просит вас найти для него это значение.

Входные данные

В первой строке записано три целых числа через пробел m, k, p (2 ≤ m ≤ 105; 0 ≤ k, p ≤ 109).

Каждая из следующих m - 1 строк содержит два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ mai ≠ bi), ребро дерева.

Считайте, что вершины дерева пронумерованы от 1 до m. Корень дерева имеет номер 1.

Выходные данные

Выведите единственное целое число — число, которое Машмох попросил вас найти.

Примечание

Дерево в первом примере показано на рисунке внизу. Черный, красный и синий цвета соответствуют вершинам с 0, 1, 2 литрами воды.

Один из способов заработать максимальное количество денег — залить 1 литр воды в каждую из вершин, 3 и 4. Начальное состояние указано на рисунке ниже.

Затем первым ходом Машмох заплатит одну монетку за закрытие двери резервуара в третьей вершине. Дерево после первого хода показано на рисунке ниже.

После второго хода в корне будет 2 литра воды.

B. Машмох и жетоны

Бинарный поиск жадные алгоритмы математика реализация *1500

Бимох — начальник Машмоха. В каждый из следующих n дней он решил платить своим подчиненным по-новому. В начале каждого дня он дает каждому работнику некоторое количество жетонов. Затем, в конце дня, работник может обменять некоторые из своих жетонов на деньги. Работник может сохранить оставшиеся после обмена жетоны, но он не сможет обменять их на деньги в какой-либо другой день. Если работник возвращает w жетонов, то он получает долларов.

Машмоху нравятся жетоны. Но деньги ему нравятся больше. Поэтому он хочет оставлять себе как можно больше жетонов так, чтобы количество получаемых им денег было максимально возможным каждый день.

У Машмоха есть n чисел x1, x2, ..., xn. Число xi обозначает количество жетонов, выдаваемых каждому работнику в i-й день. Помогите ему посчитать, сколько жетонов он может оставить себе в каждый из n дней.

Входные данные

Первая строка содержит три целых числа через пробел n, a, b (1 ≤ n ≤ 105; 1 ≤ a, b ≤ 109). Вторая строка содержит n целых чисел через пробел x1, x2, ..., xn (1 ≤ xi ≤ 109).

Выходные данные

Выведите n целых чисел через пробел. При этом, i-е число должно обозначать, сколько жетонов Машмох может оставить себе в i-й день.

A. Угадай число!

жадные алгоритмы реализация *1400

Телешоу «Угадай число!» набирает популярность. Вся Берляндия от мала до велика смотрит это шоу.

Правила просты. Ведущий загадывает целое число y, а участники его отгадывают, задавая вопросы ведущему. Допустимы четыре вида вопросов:

  • Верно ли, что загаданное число строго больше числа x?
  • Верно ли, что загаданное число строго меньше числа x?
  • Верно ли, что загаданное число больше или равно числа x?
  • Верно ли, что загаданное число меньше или равно числа x?

На каждый из вопросов ведущий правдиво отвечает «да» или «нет».

По заданной последовательности вопросов и ответов на них найдите любое из целочисленных значений y, которое удовлетворяет всем ответам. Если такого значения не существует, то выведите слово «Impossible».

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 10000) — количество вопросов (и ответов). Далее n строк содержат по одному вопросу и ответу на него. Формат каждой из строк таков: «знак x ответ», где знак это:

  • '>' (для вопросов первого типа),
  • '<' (для вопросов второго типа),
  • '>=' (для вопросов третьего типа),
  • '<=' (для вопросов четвертого типа).

Все значения x целочислены и удовлетворяют неравенству  - 109 ≤ x ≤ 109. Ответ обозначается буквой латинского алфавита 'Y' (ответ «да») или 'N' (ответ «нет»).

Последовательные элементы в строках разделяются ровно одним пробелом.

Выходные данные

Выведите любое из таких целых y, что ответы на все вопросы верны. Выводимое число y должно удовлетворять неравенству  - 2·109 ≤ y ≤ 2·109. Если ответ определен неоднозначно, выведите любой из них. Если такого значения не существует, то выведите слово «Impossible» (без кавычек).

D. Численность населения

жадные алгоритмы математика реализация *2400

Поликарп разрабатывает интересную теорию о взаимосвязи арифметических прогрессий со всем-всем-всем в мире. Текущая идея икс состоит в том, что численность населения столицы Берляндии изменяется со временем как арифметическая прогрессия. Ну или несколько арифметических прогрессий.

Поликарп считает, что если выписать численность населения столицы для нескольких подряд идущих лет в последовательность a1, a2, ..., an, то удобно рассматривать этот массив как несколько арифметических прогрессий, записанных друг за другом. Например, последовательность (8, 6, 4, 2, 1, 4, 7, 10, 2) можно рассматривать как последовательность трёх арифметических прогрессий (8, 6, 4, 2), (1, 4, 7, 10) и (2), которые записаны подряд друг за другом.

К сожалению, Поликарп может и не располагать всеми данными за n последовательных лет (ведь не каждый год делается перепись населения). По этой причине некоторые значения ai могут быть неизвестны. Такие значения он обозначает числом -1.

По заданной последовательности a = (a1, a2, ..., an), которая состоит из положительных целых чисел и значений -1, найдите минимальное количество арифметических прогрессий, чтобы получить a. Для получения a прогрессии надо записать последовательно одну за другой. Значениям -1 может соответствовать произвольное положительное целое число, а значения ai > 0 должны быть точно равны соответствующим элементам искомой последовательной записи прогрессий.

Напомним, что конечная последовательность c называется арифметической прогрессией, если разность ci + 1 - ci любых двух последовательных элементов в ней является константой. По определению, любая последовательность длины 1 — это арифметическая прогрессия.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 2·105) — количество элементов в последовательности. Во второй строке записаны целочисленные значения a1, a2, ..., an через пробел (1 ≤ ai ≤ 109 или ai =  - 1).

Выходные данные

Выведите наименьшее количество арифметических прогрессий, которые надо записать одну за другой, чтобы получить последовательность a. На месте значений -1 в a могут быть любые положительные целые числа.

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, если этого нельзя добиться.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

A. Провинился — на кухню!

жадные алгоритмы реализация *1400

Сегодня у Володи неудачный день. Он получил кол по алгебре, и за это сослан на кухню варить суп. Заодно и в алгебре подтянется.

Борщ делается по рецепту и в его состав входит n ингредиентов, которые, как Володя прочитал, должны входить в борщ в пропорции литров (то есть в борщ войдет a1 ·x, ..., an ·x литров соответствующих ингредиентов для некоторого неотрицательного x). На кухне Володя обнаружил, что у него имеется b1, ..., bn литров этих ингредиентов соответственно. Чтобы искупить свои непростительные алгебраические ошибки, ему необходимо сварить как можно больше борща в кастрюле объема V литров (то есть в кастрюлю влезет от 0 до V литров). Какой объем борща приготовит Володя?

Входные данные

В первой строке входного файла через пробел записаны натуральные числа n и V (1 ≤ n ≤ 20, 1 ≤ V ≤ 10000). В следующей строке через пробел записаны n натуральных чисел ai (1 ≤ ai ≤ 100). Наконец, в последней строке через пробел записаны n натуральных чисел bi (0 ≤ bi ≤ 100).

Выходные данные

Выведите единственное вещественное число — объем борща, приготовленный Володей. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

B. Город-миллионер

Бинарный поиск жадные алгоритмы реализация сортировки *1200

Администрация Томской области твердо уверена, что пора и Томску стать городом-миллионером. Вместо улучшения демографической ситуации, они решили достигнуть своей цели путем расширения границы города.

Город Томск можно представить в виде точки на плоскости с координатами (0; 0). Вокруг города расположены n других населенных пунктов, i-й из которых имеет координаты (xi, yi) и население в ki человек. Можно расширить городские границы до круга радиуса r. В таком случае все населенные пункты, находящиеся внутри этого круга и на его границе, войдут в состав города.

Ваша цель — написать программу, которая определит минимальный радиус r, до которого необходимо расширить границы Томска, чтобы он стал городом-миллионером.

Входные данные

В первой строке входных данных заданы два целых числа n и s (1 ≤ n ≤ 103; 1 ≤ s < 106) — количество населенных пунктов вокруг города Томска и население города Томска. Далее следует n строк. В i-й из них задается три целых числа — значения координат xi и yi i-го населенного пункта и количество ki жителей в нем (1 ≤ ki < 106). Каждая из координат является целым числом и не превосходит по модулю 104.

Гарантируется, что никакие два населенных пункта не находятся в одной точке, и никакой населенный пункт не лежит в точке (0; 0).

Выходные данные

В выходные данные выведите «-1» (без кавычек), если Томску не удастся стать городом с миллионным населением. Иначе в первой строке выведите единственное вещественное число — минимальный радиус круга, до которого городу необходимо расшириться, чтобы стать городом-миллионером.

Ответ считается правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

B. Сережа и таблица

битмаски жадные алгоритмы *2200

У Сережи есть прямоугольная таблица a размера n × m, в каждой ячейке которой находится нуль или единица. Сережа хочет, чтобы его таблица обладала следующим свойством: каждая компонента связности из одинаковых значений образует прямоугольник, стороны которого параллельны сторонам таблицы. Прямоугольники должны быть заполненными, другими словами, если компонента образует прямоугольник h × w, то она должна состоять из ровно hw ячеек таблицы.

Компонентой связности из одинаковых значений называется множество ячеек таблицы, удовлетворяющих свойствам:

  • значения во всех ячейках одинаковые;
  • ячейки множества образуют связную область в таблице (две ячейки связны, если они являются соседними в какой-то строке или в каком-то столбце таблицы);
  • невозможно добавить ни одной ячейки в множество, не нарушив предыдущие два свойства.

Может ли Сережа поменять значения не более k ячеек таблицы на противоположное, чтобы таблица обладала описанным свойством? Какое минимальное количество ячеек таблицы при этом нужно изменить?

Входные данные

Первая строка содержит целые числа n, m и k (1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10). Следующие n строк описывают таблицу a: i-я из них содержит m целых чисел ai1, ai2, ..., aim (0 ≤ ai, j ≤ 1) — элементы i-й строки таблицы.

Выходные данные

Выведите -1, если сделать задуманное невозможно. В противном случае выведите минимальное количество ячеек, в которых нужно поменять значение на противоположное, чтобы таблица удовлетворяла описанному свойству.

E. Полицейский патруль

жадные алгоритмы математика реализация Тернарный поиск *2000

Представьте, что ваш город — бесконечная двухмерная плоскость, с введенной на ней Декартовой системой координат. Единственная дорога, подверженная преступлениям, это ось Ox. На данный момент вдоль этой дороги стоят n преступников. Ни один полицейский участок еще не построен на дороге, поэтому мэр как можно скорее хочет построить участок и избавиться от преступников.

Управлять новым участком доверили вам, поэтому вам и выбирать, где он будет находиться. Вы должны так выбрать целочисленную точку для полицейского участка, чтобы операция по поимке всех преступников на оси Ox заняла как можно меньше времени. Поимка преступников оси Ox будет осуществляться только из нового участка.

В новом участке будет только одна патрульная машина. На этой машине можно подъезжать к преступникам, арестовывать их, затем сажать их в машину, везти в участок и сажать в тюрьму. В патрульную машину одновременно помещается не больше m преступников. Обратите внимание, что преступники не знают о вашей операции. Поэтому они будут стоять на месте, а не будут убегать.

Ваша задача — найти такое место для полицейского участка, что минимальное расстояние, которое придется в сумме проехать, чтобы посадить в тюрьму всех преступников, будет как можно меньше. Обратите внимание, что вы можете построить полицейский участок в точке, где находится один или несколько преступников, в таком случае все эти преступники сразу же будут аррестованы.

Входные данные

В первой строке записано два целых числа — n (1 ≤ n ≤ 106) и m (1 ≤ m ≤ 106), разделенные пробелом. В следующей строке записано n целых чисел через пробел. При этом i-е число обозначает позицию i-го преступника на оси Ox. Абсолютное значение этого числа не превосходит 109 для каждого преступника. Если преступник находится в позиции x, это обозначает, что он стоит в точке плоскости (x, 0).

Позиции преступников даны в неубывающем порядке. Обратите внимание, что в некоторой точке плоскости может стоять больше одного преступника.

Обратите внимание: входные/выходные данные имеют очень большой размер, поэтому не стоит использовать медленные способы ввода/вывода данных вашего языка программирования. Например, в языке C++ не стоит использовать потоки ввода/вывода (cin, cout).

Выходные данные

Выведите единственное целое число, обозначающее минимальное расстояние, которое требуется проехать, чтобы посадить в тюрьму всех преступников, при оптимальном выборе точки для полицейского участка.

C. Угадай дерево

битмаски Деревья дп жадные алгоритмы Конструктив *2300

Яхуб и Яхубина пошли на пикник. Зашли они в густой лес. Не прошло и пяти минут, как Яхуб вспомнил про деревья в информатике. Более того, он придумал новую задачу, и Яхубине надо ее решить, а не то Яхуб ее не покормит.

Яхуб спрашивает у Яхубины: можешь ли ты построить такое корневое дерево, что

  • каждая внутренняя вершина дерева (вершина, имеющая хотя бы одного сына) имеет по меньшей мере двух сыновей;
  • у вершины i в поддереве содержится ci вершин?

Яхубина должна придумать описанное дерево. Она девушка умная и поняла, что, возможно, описанного дерева вовсе не существует. Тогда вся еда достанется Яхубу. Вы должны помочь Яхубине: определите, есть ли хотя бы одно дерево, удовлетворяющее ограничениям Яхуба. Требуемое дерево должно состоять из n вершин.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 24). В следующей строке записано n положительных целых чисел: i-е число обозначает ci (1 ≤ ci ≤ n).

Выходные данные

Выведите в первой строке «YES» (без кавычек), если хотя бы одно дерево удовлетворяет ограничениям Яхуба, в противном случае выведите «NO» (без кавычек).

C. Счастливые билеты

жадные алгоритмы *1300

Вася считает, что счастливые билеты — это билеты, номера которых делятся на 3 без остатка. Ему удалось собрать достаточно большую коллекцию таких билетов, но однажды его младший брат Леонид обиделся на него и решил уничтожить всю коллекцию. Сначала он разорвал каждый билет ровно на два кусочка, но этого ему показалось мало, поэтому Леонид еще и выкинул часть кусочков. Увидев это, Вася пришел в ужас, но все-таки попытался восстановить коллекцию. Он выбрал несколько пар кусочков, и попарно склеил их так, чтобы каждая пара образовывала счастливый билет. Оставшиеся кусочки Вася, скрепя сердце, выкинул. Таким образом, после склейки 2t кусочков у него получилось t билетов, каждый из которых — счастливый.

Когда Леонид разрывал билет на два кусочка, на одном оказывались первые несколько цифр его номера, а на втором — вся оставшаяся часть.

Каждую пару кусочков Вася может склеить так, как ему захочется, лишь бы получался счастливый билет. Например, кусочки 123 и 99 можно склеить ровно двумя способами: 12399 и 99123.

Какое наибольшее число билетов могло получиться у Вася после этого?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 104) — количество кусочков. Во второй строке через пробел записано n целых чисел ai (1 ≤ ai ≤ 108) — номера на кусочках. Вася может склеивать кусочки только по два. Даже если номер некоторого кусочка в отдельности является счастливым, Вася должен его склеить этот кусочек с каким-то другим, чтобы он засчитался за счастливый билет. Вася не обязан использовать все кусочки. Номера на кусочках и на получившихся билетах могут совпадать.

Выходные данные

Выведите одно число — какое максимальное количество счастливых билетов удастся восстановить. Не забудьте, что каждый счастливый билет представляет собой ровно два склеенных кусочка.

A. Выбор команд

жадные алгоритмы реализация сортировки *800

В центре олимпиадной подготовки программистов СГУ (ЦОПП СГУ) занимаются n ребят. Про каждого из них известно, сколько раз он/она уже участвовал/участвовала в чемпионате мира по программированию (ACM ICPC). По правилам ACM ICPC каждый человек может участвовать в чемпионате мира не более 5 раз.

Руководитель ЦОПП СГУ в данный момент формирует команды для участия в чемпионате мира. Каждая команда должна состоять ровно из 3 человек, причем один человек не может быть членом двух или более команд. Какое максимальное количество команд может составить руководитель, если он хочет чтобы каждая команда могла участвовать в чемпионате мира в этом же составе как минимум k раз?

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 2000; 1 ≤ k ≤ 5). В следующей строке записано n целых чисел: y1, y2, ..., yn (0 ≤ yi ≤ 5), где yi обозначает сколько раз i-й человек участвовал в чемпионате мира ACM ICPC.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом тестовом примере можно составить только одну команду: первый, четвертый и пятый человек.

Во втором тестовом примере нельзя составить ни одну команду.

В последнем примере можно составить две команды. Причем любое разбиение на две команды подходит.

B. Футбольная форма

жадные алгоритмы Перебор реализация *1200

Рассмотрим футбольный турнир, в котором участвует n команд. У каждой команды есть две формы: домашняя и гостевая. Домашняя форма i-й команды имеет цвет xi, а гостевая форма — цвет yi (xi ≠ yi).

В турнире каждая команда играет с каждой ровно один матч дома и ровно один матч на выезде (всего n(n - 1) матчей). Команда, играющая дома, традиционно играет матч в домашней форме. Команда, играющая в гостях, по возможности играет в гостевой форме. Однако, если цвет гостевой формы команды, играющей в гостях, совпадает с цветом домашней формы, команды играющей дома, то команды будет сложно отличить на поле друг от друга. В этом случае команда, играющая в гостях, в качестве исключения играет матч в домашней форме.

Посчитайте, сколько матчей в турнире каждая команда сыграет в домашней форме, а сколько в гостевой?

Входные данные

В первой строке задано единственное целое число n (2 ≤ n ≤ 105) — количество команд. Далее в n строках задано описание команд. В i-й строке через пробел заданы два целых числа xi, yi (1 ≤ xi, yi ≤ 105xi ≠ yi) — номера цветов домашней и гостевой форм i-й команды соответственно.

Выходные данные

Для каждой команды в отдельной строке выведите через пробел два целых числа — количество матчей, которое эта команда сыграет в домашней и в гостевой формах соответственно. Ответы для команд выводите в порядке следования команд во входных данных.

C. Простые обмены

жадные алгоритмы сортировки *1800

Задан массив a[1], a[2], ..., a[n], элементами которого являются различные целые числа от 1 до n. Требуется отсортировать по возрастанию этот массив используя следующую операцию (возможно, несколько раз):

  • выбрать два индекса i и j (1 ≤ i < j ≤ n; (j - i + 1) является простым числом);
  • выполнить обмен элементов на позициях i и j местами; другими словами, разрешается выполнить следующую последовательность присвоений tmp = a[i], a[i] = a[j], a[j] = tmp (tmp — временная переменная).

Вам не требуется минимизировать количество используемых операций, тем не менее требуется, чтобы их было не более 5n.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). В следующей строке записаны n различных целых чисел a[1], a[2], ..., a[n] (1 ≤ a[i] ≤ n).

Выходные данные

В первой строке выведите целое число k (0 ≤ k ≤ 5n) — количество использованных операций. Далее выведите сами операции. Каждая операция должна быть выведена в формате «i j» (1 ≤ i < j ≤ n; (j - i + 1) является простым числом).

Если существует несколько правильных ответов, разрешается вывести любой.

E. Замощение квадратами

жадные алгоритмы Конструктив *2300

Задана прямоугольная таблица n × m, клетки которой изначально не покрашены. Требуется так разукрасить все клетки таблицы, что полученная раскраска образует замощение таблицы квадратами. Более формально:

  • каждая клетка должна быть покрашена в некоторый цвет (цвета обозначаются большими буквами латинского алфавита);
  • будем считать, что две клетки таблицы связны, если они одного цвета и имеют общую сторону; каждая связная область раскраски таблицы должна являться квадратом.

По заданным n и m найдите лексикографически минимальную раскраску таблицы, удовлетворяющую описанным свойствам.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 100).

Выходные данные

Выведите лексикографически минимальную раскраску таблицы, удовлетворяющую описанным условиям.

Одна раскраска (обозначим ее X) считается лексикографически меньше другой (обозначим ее Y), если:

  • будем рассматривать клетки таблицы в порядке слева направо, сверху вниз (сначала самая первая клетка в первой строке, затем вторая клетка в первой строке и так далее);
  • найдем первую клетку в таком порядке, цвет которой в двух раскрасках отличается;
  • буква, обозначающая цвет этой клетки в X, идет раньше в алфавите, чем буква, обозначающая цвет этой клетки в Y.

B. Паша максимизирует

жадные алгоритмы *1400

У Паши есть целое положительное число a без лидирующих нулей. Сегодня он решил, что это число слишком маленькое и что надо сделать его больше. К сожалению, единственное, что умеет делать Паша — менять две соседних цифры в десятичной записи числа местами.

Помогите Паше посчитать, какое максимальное число он сможет получить, если у него есть время на выполнение не более k обменов.

Входные данные

В первой строке записаны два целых числа a и k (1 ≤ a ≤ 1018; 0 ≤ k ≤ 100).

Выходные данные

Выведите, какое максимальное число сможет получить Паша, выполнив не более k обменов.

D. Специальная сетка

дп жадные алгоритмы Перебор *2000

Задана сетка размера n × m, некоторые узлы которой черные, а остальные белые. Более того, сетка не совсем обычная — в каждом единичном квадрате сетки проведены диагонали.

На рисунке ниже изображен пример такой сетки размера 3 × 5. Четыре узла этой сетки черные, остальные 11 узлов белые.

Требуется посчитать количество таких треугольников на заданной сетке, что:

  • их углы совпадают с белыми узлами, а площадь ненулевая;
  • все стороны проходят по линиям сетки (горизонтальным, вертикальным или диагональным);
  • никакая сторона не содержит черных узлов.
Входные данные

В первой строке записаны два целых числа n и m (2 ≤ n, m ≤ 400). В каждой следующих n строк содержится по m символов (нулей и единиц) — описание сетки. Если j-й символ в i-й строке равен нулю, значит узел на i-й горизонтальной линии и на j-й вертикальной линии покрашен в белый цвет. Иначе этот символ покрашен в черный цвет.

Горизонтальные линии нумеруются от единицы сверху вниз, вертикальные линии нумеруются от единицы слева направо.

Выходные данные

Выведите единственное целое число — количество требуемых треугольников.

Примечание

На рисунке ниже красным и синим цветами выделены треугольники, которые считаются в ответе (это не все требуемые треугольники, а только два из них). Зеленым выделен один из неподходящих треугольников. Он не подходит, поскольку не все его стороны проходят по линиям сетки.

A. Feed with Candy

жадные алгоритмы *1500

Главный герой игры Cut the Rope — монстрик Ом Ном, который очень любит конфеты. По случайному совпадению, он же главный герой этой задачи.

Как-то раз Ом Ном зашел в гости к своему другу Эвану. В доме Эвана есть n конфет двух типов (леденцы и карамельки), i-я конфета висит на высоте hi сантиметров от пола дома и имеет массу mi. Ом Ном хочет съесть как можно больше конфет. В начале Ом Ном может прыгать не более, чем на x сантиметров в высоту. Когда Ом Ном съедает конфету массы y, он становится сильнее, и высота его прыжка увеличивается на y сантиметров.

Какое максимальное количество конфет сможет съесть Ом Ном, если он никогда не будет есть подряд две конфеты одного и того же типа (Ом Ном считает, что это слишком скучно)?

Входные данные

В первой строке записаны два целых числа n и x (1 ≤ n, x ≤ 2000) — количество конфет в доме Эвана и начальная высота прыжка Ом Нома.

В каждой из следующих n строк записаны три целых числа ti, hi, mi (0 ≤ ti ≤ 1; 1 ≤ hi, mi ≤ 2000) — тип, высота и масса i-й конфеты. Если число ti равно 0, то текущая конфета — это карамелька, иначе текущая конфета — это леденец.

Выходные данные

Выведите единственное целое число — максимальное количество конфет, которое сможет съесть Ом Ном.

Примечание

Один из возможных способов съесть 4 конфеты — есть конфеты в порядке: 1, 5, 3, 2. Рассмотрим подробнее такое развитие событий:

  1. Изначально высота прыжка Ом Нома равна 3. Он может допрыгнуть до конфет 1 и 2. Допустим, что он съест конфету 1. Так как масса этой конфеты равна 4, высота его прыжка станет равна 3 + 4 = 7.
  2. Теперь Ом Ном может допрыгнуть до конфет 2 и 5. Допустим, что он съест конфету 5. Тогда высота его прыжка станет равна 7 + 5 = 12.
  3. В данный момент Ом Ном может допрыгнуть до двух конфет: 2 и 3. Есть конфету 2 он не будет, так как ее тип совпадает с предыдущей съеденной конфетой. Ом Ном съедает конфету 3, высота его прыжка становится равна 12 + 3 = 15.
  4. Ом Ном съедает конфету 2, высота его прыжка становится равна 15 + 1 = 16. До конфеты 4 он допрыгнуть не может.

C. Dungeons and Candies

графы Деревья жадные алгоритмы снм *1800

Во время запуска игры «Dungeons and Candies» требуется получить по сети от сервера описания k уровней игры. Каждое описание — карта клетчатого прямоугольного поля n × m, в клетках которого расположены конфеты (в каждой клетке находится не более одной конфеты). Пустая клетка обозначается символом «.», если же в клетке находится конфета, то она кодируется буквой латинского алфавита. Уровень может содержать одинаковые конфеты, в таком случае буквы в соответствующих клетках карты будут одинаковы.

При передачи по сети требуется минимизировать трафик — суммарный размер переданных данных. Уровни можно передавать в любом порядке. Существует два способа передать очередной уровень A:

  1. Можно передать уровень A целиком. Этот способ требует передачи n·m байтов по сети.
  2. Можно передать разницу между уровнем A и каким-то ранее переданным уровнем B, если такой существует; эта операция требует передачи dA, B·w байтов, где dA, B обозначает количество клеток поля, которые отличаются в A и B, а w — константа. Обратите внимание, что при вычислении dA, B сравниваются соответствующие друг другу клетки уровней A и B. При этом карты уровней нельзя преобразовывать, например, поворачивать или смещать относительно друг друга.

Ваша задача — найти способ передать все k уровней, минимизировав трафик.

Входные данные

В первой строке записаны четыре целых числа n, m, k, w (1 ≤ n, m ≤ 10; 1 ≤ k, w ≤ 1000). Далее следует описание k уровней. Каждый уровень описывается n строками, в каждой из которых записано m символов. Каждый символ — это либо буква латинского алфавита, либо точка («.»). Обратите внимание, что регистр букв имеет значение.

Выходные данные

В первой строке выведите искомое минимальное количество переданных байтов.

Далее выведите k пар целых чисел x1, y1, x2, y2, ..., xk, yk, описывающих способ передачи уровней. Пара xi, yi обозначает, что уровень xi нужно передавать способом yi. Если yi равно 0, значит, уровень нужно передавать первым способом, иначе yi должно быть равно номеру ранее переданного уровня, разницу по сравнению с которым нужно передать, т. е. вы передадите уровень xi, передавая разницу между уровнями xi и yi. Пары выводите в порядке передачи уровней. Уровни пронумерованы от 1 до k в порядке их описания во входных данных.

Если существует несколько оптимальных решений, разрешается вывести любое.

E. Cardboard Box

жадные алгоритмы Структуры данных *2600

Все, кто играли в Cut the Rope, хорошо знают, как организовано прохождение игры. В игре все уровни разделены на коробки. Изначально доступна только одна коробка с несколькими уровнями. За прохождение уровней игрок зарабатывает звезды, по мере накопления звезд открываются новые уровни.

Представьте, что вы впервые играете в Cut the Rope. В данный момент вам доступны только уровни из первой коробки (кстати, она называется «Cardboard Box»). Каждый уровень характеризуется двумя целыми числами: ai — сколько требуется времени, чтобы пройти уровень на одну звезду, bi — сколько требуется времени, чтобы пройти уровень на две звезды (ai < bi).

Вы хотите как можно быстрее открыть следующую коробку с уровнями, для чего требуется заработать как минимум w звезд. Каким образом нужно действовать, чтобы это сделать? Обратите внимание, что проходить уровень можно только один раз: либо на одну звезду, либо на две. Необязательно проходить все уровни.

Входные данные

В первой строке записаны два целых числа n и w (1 ≤ n ≤ 3·105; 1 ≤ w ≤ 2n) — количество уровней в первой коробке и количество звезд, которое требуется, чтобы открыть следующую коробку. В каждой из следующих n строк записаны два целых числа ai и bi (1 ≤ ai < bi ≤ 109) — характеристики i-го уровня.

Выходные данные

В первой строке выведите целое число t — минимальное время, которое требуется, чтобы открыть следующую коробку.

В следующей строке выведите n цифр без пробелов — описание оптимального плана действий:

  • если i-й уровень нужно пройти на одну звезду, i-я цифра должна быть равна 1;
  • если i-й уровень нужно пройти на две звезды, i-я цифра должна быть равна 2;
  • если i-й уровень вовсе не нужно проходить, i-я цифра должна быть равна 0.
Примечание

В первом тестовом примере ответ 21 также считается правильным.

B. Ребенок и множество

битмаски жадные алгоритмы реализация сортировки *1500

В день детей ребенок пришел домой к Пиксу и все перевернул вверх дном. Пикс на него разозлился. В бардаке потерялось много всего, включая любимое множество Пикса.

К счастью, Пикс помнит кое-что о своем множестве S:

  • его элементами были различные целые числа от 1 до limit;
  • значение равнялось sum; функция lowbit(x) равна 2k, где k обозначает позицию первой единицы в двоичном представлении числа x. Например, lowbit(100102) = 102, lowbit(100012) = 12, lowbit(100002) = 100002 (числа записаны в двоичном представлении).

Помогите Пиксу. Найдите любое множество S, удовлетворяющее всем вышеперечисленным условиям?

Входные данные

В первой строке записано два целых числа: sum, limit (1 ≤ sum, limit ≤ 105).

Выходные данные

В первой строке выведите целое число n (1 ≤ n ≤ 105), обозначающее размер S. Затем выведите элементы множества S в любом порядке. Если есть несколько правильных ответов, выведите любой.

Если подходящего множества не существует, выведите -1.

Примечание

В примере 1: lowbit(4) = 4, lowbit(5) = 1, 4 + 1 = 5.

В примере 2: lowbit(1) = 1, lowbit(2) = 2, lowbit(3) = 1, 1 + 2 + 1 = 4.

C. Ребенок и игрушка

графы жадные алгоритмы сортировки *1400

В день детей ребенок получил в подарок от Delayyy игрушку. Но ребенок такой вредный, что он ждет — не дождется шанса сломать ее.

Игрушка состоит из n деталей, соединенных m веревочками. Каждая веревочка соединяет две детали, при этом каждая пара деталей соединена не более чем одной веревочкой. Чтобы разломать игрушку, ребенок должен оторвать все ее детали. Ребенок может отрывать по одной детали за раз, на каждое отрывание он тратит энергию. Обозначим значение энергии детали i как vi. Ребенок тратит vf1 + vf2 + ... + vfk энергии на отрывание детали i, где f1, f2, ..., fk — еще не оторванные детали, напрямую соединенные веревочками с i-й.

Помогите ребенку посчитать минимальную суммарную энергию, которую он должен потратить на отрывание всех n деталей.

Входные данные

В первой строке записано два целых числа, n и m (1 ≤ n ≤ 1000; 0 ≤ m ≤ 2000). Во второй строке записано n целых чисел: v1, v2, ..., vn (0 ≤ vi ≤ 105). Затем следует m строк, в каждой записано по два целых числа, xi и yi, обозначающих веревочку, соединяющую детали xi и yi (1 ≤ xi, yi ≤ nxi ≠ yi).

Считайте, что все детали пронумерованы от 1 до n.

Выходные данные

Выведите минимальную суммарную энергию, необходимую для отрывания всех n деталей игрушки.

Примечание

Одна из оптимальных последовательностей действий в первом примере такова:

  • Сначала оторвите деталь 3, затрата энергии равна 20.
  • Затем оторвите деталь 2, затрата энергии равна 10.
  • Потом оторвите деталь 4, затрата энергии равна 10.
  • Наконец, оторвите деталь 1, затрата энергии равна 0.

Таким образом, всего ребенок затрачивает 20 + 10 + 10 + 0 = 40 единиц энергии, это минимально возможный ответ.

Во втором примере ребенок потратит 400 единиц энергии вне зависимости от порядка отрывания деталей.

A. Деву-певец и Чуру-комик

жадные алгоритмы реализация *900

Деву — известный исполнитель классической музыки. Его приглашают на многие большие фестивали и мероприятия. Недавно его пригласили на «всемирный фестиваль классического пения». Кроме Деву пригласили и комика Чуру.

Деву предоставил организаторам список песен и список времен, необходимых для их исполнения. Всего он будет петь n песен, i-я песня займет ровно ti минут. Комик Чуру будет рассказывать шутки. Все его шутки длятся ровно по пять минут.

Большинство людей придут на фестиваль послушать Деву. К сожалению, Деву требуется 10-минутный перерыв для отдыха после каждой песни. К счастью, Чуру может рассказывать шутки, не отдыхая.

Вы, как один из организаторов, должны составить оптимальное расписание для меропрития. По некоторым причинам надо соблюдать следующие условия:

  • продолжительность мероприятия не должна превышать d минут;
  • Деву должен спеть полностью все свои песни, при этом количество рассказанных Чуру шуток должно быть как можно больше.

Если невозможно найти способ спланировать мероприятие, чтобы Деву спел все свои песни, выведите -1. В противном случае, выведите максимальное количество шуток, которые Чуру сможет рассказать на мероприятии.

Входные данные

В первой строке записано два целых числа через пробел — n, d (1 ≤ n ≤ 100; 1 ≤ d ≤ 10000). Во второй строке записано n целых чисел через пробел: t1, t2, ..., tn (1 ≤ ti ≤ 100).

Выходные данные

Если невозможно найти способ спланировать мероприятие, чтобы Деву спел все свои песни, выведите -1. В противном случае выведите максимальное количество шуток, которые Чуру сможет рассказать на мероприятии.

Примечание

Рассмотрим первый пример. Длительность мероприятия составляет 30 минут. Можно составить план мероприятия, в котором у Чуру будет 5 шуток, следующим образом:

  • Сначала Чуру рассказывает шутку 5 минут.
  • Затем Деву поет первую песню 2 минуты.
  • Затем Чуру рассказывает 2 шутки за 10 минут.
  • Затем Деву поет следующую песню за 2 минуты.
  • Затем Чуру рассказывает 2 шутки за 10 минут.
  • И наконец Деву поет свою последнюю песню за 1 минуту.

В целом ребята тратят 5 + 2 + 10 + 2 + 10 + 1 = 30 минут. Получить больше шуток никак не получится.

Рассмотрим второй пример. Здесь мы никак не можем организовать все песни Деву. Следовательно, ответ равен -1.

J. Триминошки

жадные алгоритмы Конструктив *2000

Бывает много интересных задач о замощении доминошками. Например, известен такой замечательный факт. Возьмем стандартную шахматную доску (8 × 8) и вырежем из нее ровно две клетки. Оказывается, что получившуюся доску всегда можно замостить доминошками 1 × 2, если две вырезанные клетки разного цвета, и нельзя в противном случае.

Пете наскучили доминошки, поэтому он взял шахматную доску (не обязательно 8 × 8), вырезал из нее некоторые клетки и пытается замостить ее триминошками. Триминошки — это прямоугольники 1 × 3 (или 3 × 1, потому что триминошки можно беспрепятственно поворачивать), причем две крайние клетки триминошки обязательно белые, а клетка в середине — черная. Триминошки разрешается класть на шахматную доску таким образом, чтобы их клетки совпадали с невырезанными клетками доски, причем должно выполняться соответствие цветов: черные клетки можно совмещать только с черными, а белые — с белыми. Триминошки не должны выступать за пределы доски или накладываться друг на друга. Все невырезанные клетки доски должны быть покрыты триминошками.

Помогите Пете определить, можно ли замостить его доску триминошками описанным способом и выведите один из вариантов замощения.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 1000) — размеры доски. Следующие n строк содержат по m символов каждая и представляют собой описание доски. Если в некоторой позиции содержится «.», то клетка в этой позиции вырезана. Белой клетке соответствует символ «w», черной — «b». Гарантируется, что путем добавления вырезанных клеток можно получить корректную шахматную доску (т.е. с чередованием черных и белых клеток), хотя, возможно, и нестандартного размера.

Выходные данные

Если хотя бы одно корректное замощение существует, выведите в первой строке «YES» (без кавычек), а затем — описание замощения. Описание должно содержать n строк, по m символов в каждой. Вырезанные клетки, как и во входных данных, обозначаются символом «.». Для обозначения триминошек можно использовать символы «a», «b», «c», «d», причем все три клетки каждой триминошки должны обозначаться одним символом. Если две триминошки граничат по стороне, то они должны обозначаться разными символами. Две триминошки, не граничащие по стороне, могут обозначаться одним и тем же символом (см. пример).

Если корректных замощений несколько, разрешается выводить любое. Если замостить доску триминошками невозможно или не существует корректного замощения, для описания которого было бы достаточно четырех символов «a», «b», «c», «d», выведите в первой строке «NO» (без кавычек).

B. Уравниватель

жадные алгоритмы реализация *1600

У Пети есть k спичек, разложенных по n выложенным в ряд слева направо коробкам. Известно, что k делится на n. Петя хочет, чтобы во всех коробках было одинаковое количество спичек. Для этого он может за один ход переложить одну спичку в соседний коробок. За сколько таких операций он может добиться желаемой конфигурации?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 50000). Во второй строке записаны n неотрицательных чисел, не превосходящих 109, i-е записанное число — это количество спичек в i-й коробке. Гарантируется, что суммарное количество спичек делится на n.

Выходные данные

Выведите искомое минимальное количество действий.

B. Валера и фрукты

жадные алгоритмы реализация *1400

Валера очень любит свой сад, в котором растут n фруктовых деревьев.

В этом году будет большой урожай! На i-м дереве растут bi фруктов, все они созреют в день с номером ai. К сожалению, фрукты на дереве быстро портятся, поэтому собирать их можно только в день с номером ai и в день с номером ai + 1 (все фрукты, которые не собрали в эти два дня, становятся непригодными).

Валера не очень быстрый, но есть и позитивные моменты. Валера готов работать ежедневно. За один день Валера может собрать не более v фруктов. Фрукты могут быть как с одного дерева, так и с разных. Какое максимальное количество фруктов может собрать Валера за все время, если будет действовать оптимально?

Входные данные

В первой строке записано два целых числа через пробел n и v (1 ≤ n, v ≤ 3000) — количество фруктовых деревьев в саду и количество фруктов, которое Валера может собрать за один день.

В следующих n строках записано описание деревьев в саду. В i-й строке записано два целых целых числа через пробел ai и bi (1 ≤ ai, bi ≤ 3000) — день созревания фруктов на i-м дереве и количество фруктов на i-м дереве.

Выходные данные

Выведите единственное целое число — максимальное количество фруктов, которое может собрать Валера.

Примечание

В первом примере, чтобы получить оптимальный ответ, нужно действовать следующим образом.

  • Собрать в первый день 3 фрукта с 1-го дерева.
  • Собрать во второй день 1 фрукт со 2-го дерева и 2 фрукта с 1-го дерева.
  • В третий день собрать оставшиеся фрукты со 2-го дерева.

Во втором примере можно собрать только 60 фруктов, остальные фрукты просто пропадут.

B. Андрей и задача

жадные алгоритмы математика Теория вероятностей *1800

Для проведения соревнования по программированию Андрею не хватает одной задачи. Но у него есть n друзей, которые всегда рады ему помочь. Он может попросить некоторых из них придумать задачу для соревнования. Про каждого своего друга Андрей знает одно число — вероятность того, что он придумает задачу, если его попросить.

Помогите Андрею выбрать людей, к которым следует обратится. Поскольку ему нужна только одна задача, то Андрей расстроится, если никто не придумает задачу или будет придумано больше одной задачи. Необходимо выбрать такой набор людей, что вероятность того, что Андрей не расстроится, будет максимальной.

Входные данные

В первой строке задано одно целое число n (1 ≤ n ≤ 100) — количество друзей Андрея. Во второй строке задано n вещественных чисел pi (0.0 ≤ pi ≤ 1.0) — вероятность того, что i-й друг сможет придумать задачу. Значения заданы не более чем с 6 знаками после десятичной точки.

Выходные данные

Выведите одно вещественное число — вероятность того, что Андрей не расстроится при оптимальном выборе друзей. Ответ будет засчитан, если он отличается от правильного не более чем на 10 - 9.

Примечание

В первом примере Андрею выгодно попросить только одного своего друга — наиболее надежного.

Во втором примере Андрею выгодно попросить придумать задачу всех своих друзей. Тогда вероятность того, что будет придумана ровно одна задача равна 0.1·0.8 + 0.9·0.2 = 0.26.

C. Артем и массив

жадные алгоритмы Структуры данных *2500

У Артема есть массив из n целых положительных чисел. Артем решил с ним поиграть. Игра состоит из n ходов. Каждый ход происходит следующим образом. Артем выбирает некоторый элемент массива и удаляет его. За это он получает min(a, b) очков, где a и b — числа, которые были соседями удаленного числа. Если у него нет левого или правого соседа, то Артем не получает никаких очков.

После удаления элемента две части массива склеиваются и получается новый массив, с которым и продолжает играть Артем. Боре стало интересно, какое максимальное суммарное количество очков может получить Артем, играя в эту игру.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 5·105) — количество элементов в массиве. В следующей строке записано n целых чисел ai (1 ≤ ai ≤ 106) — значения элементов массива.

Выходные данные

В единственной строке выведите одно число — максимальное количество очков, которые может получить Артем.

A. DZY любит физику

жадные алгоритмы математика *1600

DZY любит физику, больше всего ему нравится считать плотность.

Плотность есть почти у всего, даже у графа. Определим плотность неориентированного графа, вершины и ребра которого имеют некоторые значения, следующим образом:

, где v — сумма значений вершин графа, e — сумма значений ребер графа.

Как-то раз DZY раздобыл граф G. Теперь он хочет найти связный порожденный подграф G' данного графа с максимальной плотностью.

Порожденный подграф G'(V', E') графа G(V, E) — это граф, удовлетворяющий условиям:

  • ;
  • ребро тогда и только тогда, когда , а ребро ;
  • значение ребра в G' равняется значению соответствующего ребра в G, аналогичное утверждение верно и для вершин.

Помогите DZY найти порожденный подграф с максимальной плотностью. Обратите внимание на то, что выбранный вами порожденный подграф должен быть связанным.

Входные данные

В первой строке записано два целых числа через пробел, n (1 ≤ n ≤ 500), . Целое число n обозначает количество вершин графа G, m обозначает количество ребер.

Во второй строке записано n целых чисел через пробел xi (1 ≤ xi ≤ 106), где xi обозначает значение i-й вершины. Считайте, что вершины графа пронумерованы от 1 до n.

В каждой из следующих m строк записано по три целых числа через пробел ai, bi, ci (1 ≤ ai < bi ≤ n; 1 ≤ ci ≤ 103), обозначающих ребро между вершинами ai и bi со значением ci. Граф не имеет кратных ребер.

Выходные данные

Выведите действительное число, обозначающее ответ, с абсолютной или относительной погрешностью не более 10 - 9.

Примечание

В первом примере можно выбрать либо пустой подграф, либо подграф с единственной вершиной 1.

Во втором примере оптимальное решение — выбрать весь граф.

B. DZY любит химию

жадные алгоритмы поиск в глубину и подобное снм *1400

DZY любит химию, он обожает смешивать химикаты.

У DZY есть n химических веществ, m пар из них реагируют друг с другом. Он хочет вылить все эти вещества в пробирку одно за другим в некотором порядке.

Определим величину опасности вещества в пробирке. Опасность пустой пробирки равна 1. Каждый раз, когда DZY подливает в пробирку вещество, которое реагирует хотя бы с одним веществом, уже находящимся в данный момент в пробирке, опасность вещества пробирки умножается на 2. В противном случае опасность не изменяется.

Какую максимально возможную опасность вещества можно получить в итоге, после выливания в пробирку всех n веществ в оптимальном порядке?

Входные данные

В первой строке записано два целых числа через пробел, n и m .

В каждой из следующих m строк записано два целых числа через пробел, xi и yi (1 ≤ xi < yi ≤ n). Эти числа обозначают, что вещество xi вступит в реакцию с веществом yi. Любая пара реагирующих веществ встречается во входных данных не более одного раза.

Считайте, что все вещества пронумерованы от 1 до n в некотором порядке.

Выходные данные

Выведите единственное целое число — максимальную возможную опасность.

Примечание

В первом примере существует один способ смешать вещества, опасность при нем не возрастет.

Во втором примере порядок не имеет значения. В обоих случаях опасность будет равняться 2.

В третьем примере есть четыре способа достичь максимально возможной опасности: 2-1-3, 2-3-1, 1-2-3 и 3-2-1 (номера веществ в порядке наливания в пробирку).

B. DZY любит модификации

жадные алгоритмы Перебор Структуры данных *2000

Как мы знаем, DZY любит играть. Однажды он решил поиграть с матрицей размера n × m. Точнее, он решил модифицировать матрицу, используя ровно k операций.

Каждая операция может быть одной из двух следующих:

  1. Разрешается выбрать некоторую строку матрицы и уменьшить каждый элемент этой строки на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов строки до уменьшения.
  2. Разрешается выбрать некоторый столбец матрицы и уменьшить каждый элемент этого столбца на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов столбца до уменьшения.

DZY хочет знать, какое максимальное суммарное удовольствие он может получить, выполнив ровно k модификаций? Пожалуйста, помогите ему посчитать это значение.

Входные данные

В первой строке записано четыре целых числа через пробел: n, m, k и p (1 ≤ n, m ≤ 103; 1 ≤ k ≤ 106; 1 ≤ p ≤ 100).

Затем следует n строк. В каждой строке записано по m целых чисел aij (1 ≤ aij ≤ 103) — элементы текущей строки матрицы.

Выходные данные

Выведите единственное целое число — максимальное суммарное удовольствие, которое DZY может получить.

Примечание

В первом примере можно выполнить модификации: столбец 2, строка 2. После этого матрица будет выглядеть так:


1 1
0 0

Во втором примере можно выполнить модификации: столбец 2, строка 2, строка 1, столбец 1, столбец 2. После этого матрица будет выглядеть так:


-3 -3
-2 -2

B. DZY любит строки

жадные алгоритмы реализация *1000

DZY коллекционирует строки, состоящие только из строчных английских букв. Для каждой строчной буквы c DZY определил значение wc. Для каждой строки s = s1s2... s|s| (|s| — длина строки) ее значение определяется функцией f(s), где

У DZY есть строка s. Он хочет вставить k строчных букв в эту строку так, чтобы значение получившейся строки было как можно больше. Какое максимальное значение он сможет получить?

Входные данные

В первой строке записана единственная строка s (1 ≤ |s| ≤ 103).

Во второй строке записано единственное целое число k (0 ≤ k ≤ 103).

В третьей строке записано двадцать шесть целых чисел от wa до wz. Каждое из этих чисел неотрицательное и не превосходит 1000.

Выходные данные

Выведите единственное целое число — максимальное значение строки, которое DZY сможет получить.

Примечание

В тестовом примере можно получить строку «abcbbc», тогда значение равно 1·1 + 2·2 + 3·2 + 4·2 + 5·2 + 6·2 = 41.

C. Про покраску забора

дп жадные алгоритмы разделяй и властвуй *1900

Бизон-Чемпион не только внимательный, но и очень трудолюбивый.

Бизон-Чемпион решил покрасить свой старый забор в свой любимый оранжевый цвет. Забор представляет из себя n вертикальных досок, расположенных в ряд. Между соседними досками нет зазора. Доски нумеруются слева направо начиная с единицы, i-я доска имеет ширину 1 метр и высоту ai метров.

Бизон-Чемпион купил в магазине кисть шириной 1 метр. Он умеет делать вертикальные и горизонтальные мазки этой кистью. Причем во время мазка кисть должна непрерывно и полностью касаться забора (смотрите пояснения примеров для лучшего понимания). Какое минимальное количество мазков придется сделать Бизону-Чемпиону, чтобы полностью покрасить забор? Обратите внимание, что разрешается красить один и тот же участок забора несколько раз.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 5000) — количество досок забора. Во второй строке записаны через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите целое число — минимальное количество мазков, необходимых для покраски всего забора.

Примечание

В первом примере можно покрасить забор за три мазка кистью: первый проходит на высоте 1 горизонтально по всем доскам, второй — на высоте 2 горизонтально красит первую и вторую доски, а третий мазок (он может быть как горизонтальный, так и вертикальный) докрашивает четвертую доску.

Во втором примере можно покрасить забор как двумя горизонтальными, так и двумя вертикальными мазками.

В третьем примере всего одна доска, которую можно покрасить, используя один вертикальный мазок.

A. Jzzhu и шоколад

жадные алгоритмы математика *1700

У Jzzhu есть большая прямоугольная плитка шоколада, которая состоит из n × m единичных квадратов. Он хочет разрезать плитку k раз. Каждый разрез должен удовлетворять следующим требованиям:

  • каждый разрез должен быть прямолинейным (горизонтальным или вертикальным);
  • каждый разрез должен проходить по границам единичных квадратов (запрещено разрезать единичные квадраты);
  • каждый разрез должен проходить внутри всей шоколадной плитки, и все разрезы должны быть различными.

На рисунке снизу изображен один из способов разрезать шоколадку размера 5 × 6 пять раз.

Предположим, что Jzzhu уже сделал k разрезов, тогда большая шоколадка распалась на несколько кусков. Рассмотрим наименьший по площади кусок из получившихся. Jzzhu хочет, чтобы этот кусок был как можно больше. Какую максимальную возможную площадь наименьшего куска можно получить, сделав ровно k разрезов? Площадь куска шоколада считается равной количеству единичных квадратов внутри него.

Входные данные

В единственной строке записано три целых числа n, m, k (1 ≤ n, m ≤ 109; 1 ≤ k ≤ 2·109).

Выходные данные

Выведите единственное целое число — ответ на задачу. Если не существует способа разрезать плитку ровно k раз, выведите -1.

Примечание

В первом примере Jzzhu может разрезать плитку, как показано на картинке внизу:

Во втором примере ответ выглядит так:

В третьем примере не существует способа разрезать плитку размера 2 × 3 четыре раза.

B. Jzzhu и города

графы жадные алгоритмы кратчайшие пути *2000

Jzzhu — президент страны A. В его стране есть n городов, пронумерованных от 1 до n. Город 1 — столица A. Также есть m дорог, соединяющих города. По i-й дороге можно дойти из города ui в город vi (и наоборот), длина этой дороги равна xi. Более того, в стране есть k железнодорожных маршрутов. По i-му маршруту можно доехать от столицы страны до города si (и наоборот), длина этого маршрута равна yi.

Jzzhu не хочет зря растрачивать государственный бюджет, поэтому он хочет закрыть некоторые железнодорожные маршруты. Пожалуйста, посчитайте для Jzzhu, какое максимальное количество железнодорожных маршрутов можно закрыть, если требуется выполнить следующее условие: длина кратчайшего пути из каждого города в столицу не должна измениться.

Входные данные

В первой строке записано три целых числа, n, m, k (2 ≤ n ≤ 105; 1 ≤ m ≤ 3·105; 1 ≤ k ≤ 105).

В каждой из следующих m строк записано три целых числа, ui, vi, xi (1 ≤ ui, vi ≤ nui ≠ vi; 1 ≤ xi ≤ 109).

В каждой из следующих k строк записано два целых числа, si и yi (2 ≤ si ≤ n; 1 ≤ yi ≤ 109).

Гарантируется, что существует по крайней мере один путь из каждого города в столицу. Обратите внимание, что между двумя городами может быть несколько дорог. Также может быть несколько железнодорожных маршрутов, ведущих из одного и того же города в столицу.

Выходные данные

Выведите единственное целое число, обозначающее максимальное количество железнодорожных путей, которые можно закрыть.

D. Даты событий

meet-in-the-middle жадные алгоритмы сортировки *1900

На уроке истории учитель попросил Васю назвать даты, когда произошли n известных событий. Он не помнит точные даты, но для каждого события он помнит отрезок дней [li, ri] (включительно), в которые оно могло произойти. Однако еще Вася помнит, что в один день могло произойти только одно событие. Помогите ему выбрать такие n дат известных событий, чтобы оба условия выполнялись. Гарантируется, что решение существует.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество известных событий. Далее следует n строк по два целых числа li и ri в каждой (1 ≤ li ≤ ri ≤ 107) — самая ранняя допустимая дата и самая поздняя допустимая дата i-го события.

Выходные данные

Выведите n чисел — даты, в которые произошли события. Если решений несколько, выведите любое. Гарантируется, что решение существует.

E. Режиссер

жадные алгоритмы Конструктив *2000

Вася — известный берляндский кинорежиссер, сейчас он работает над новым блокбастером «Неожиданные». По собственному опыту Вася знает, как важно удачно подобрать имена и фамилии главных героев. Он составил список из n имен и n фамилий, которые хочет использовать. Вася еще не решил, как именно назовет героев, поэтому он может сопоставить любому имени любую фамилию. Теперь ему нужно составить список всех главных героев в формате: «Name1 Surname1, Name2 Surname2, ..., Namen Surnamen», то есть все пары имя-фамилия должны быть разделены ровно одной запятой и ровно одним пробелом, а имя и фамилия должны разделяться между собой ровно одним пробелом. В первую очередь Вася хочет максимизировать количество таких пар, в которых имя и фамилия начинаются с одной и той же буквы. Если таких списков несколько, Вася хочет получить лексикографически минимальный. Помогите ему.

Как ответ будет проверяться строка в формате, как указано выше, включая необходимые запятые и пробелы. Именно лексикографическую минимальность такой строки нужно обеспечить. Выводимая строка не должна заканчиваться пробелом или запятой.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 100) — количество имен и фамилий. Далее следует n строк — список имен. Далее следует n строк — список фамилий. Никакие две из этих 2n строк не совпадают. Каждое имя и фамилия — непустая строка не более чем из 10 латинских букв. Гарантируется, что первая буква — большая, а остальные — маленькие.

Выходные данные

Выходные данные состоят из единственной строки — искомого списка. Обратите внимание, что следует строго придерживаться формата выходных данных!

F. Козлы и волки

жадные алгоритмы *2500

Однажды Васе понадобилось как можно скорее перевезти m козлов и m волков с одного берега реки на другой. Лодка может выдержать n зверей и Васю, при этом разрешается сажать в лодку меньше n зверей. Если вдруг в каком-либо месте (на одном из двух берегов или в лодке) волков оказывается строго больше чем козлов, волки съедают козлов, а Вася расстраивается. Когда Вася плывет на лодке с одного берега на другой, он должен везти с собой хотя бы одного зверя, иначе ему станет скучно, и он, опять же, расстроится. Когда лодка приплывает к берегу, сначала все звери одновременно сходят на берег, а потом выбранные Васей звери одновременно садятся в лодку. Это означает, что в момент когда только что приплывшие звери сошли на берег, а уплывающие звери еще не забрались в лодку, кто-то может кого-то съесть. Васе нужно перевезти всех зверей с одного берега на другой так, чтобы никто никого не съел, а сам Вася не расстроился. Какое наименьшее число раз ему потребуется переплыть реку?

Входные данные

В первой строке через пробел записано два целых числа m и n (1 ≤ m, n ≤ 105) — количество зверей и вместимость лодки.

Выходные данные

Если невозможно перевезти всех животных так, чтобы никто не расстроился, а все козлы остались живы, выведите -1. Иначе выведите одно целое число — сколько раз потребуется переплыть реку.

Примечание

Первый пример из условия соответствует известной детской задаче.

I. TCMCF+++

жадные алгоритмы *1400

Недавно Вася участвовал в соревнованиях по программированию по правилам TCMCF+++. На соревновании предлагалось n задач, и у каждой задачи была цена — некоторое целое число баллов (возможно, отрицательное и даже нулевое). Согласно правилам TCMCF+++, по каждой задаче засчитывались только полные решения, а итоговое количество баллов у участника равнялось произведению цен всех задач, которые он решил. Если человек не решил ничего, то он даже не появлялся в итоговых результатах и не считался участником. Вася понял, что чтобы получать максимальное количество баллов, не всегда выгодно решать все задачи. К сожалению, понял он это только после конца соревнования. Теперь он просит вас помочь ему: выясните, какие задачи нужно было решать, чтобы набрать максимальное количество баллов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество предложенных задач. В следующей строке через пробел записано n целых чисел ci ( - 100 ≤ ci ≤ 100) — цена i-ой задачи. Цены задач могут совпадать.

Выходные данные

Выведите через пробел цены задач, которые надо было решать, чтобы получить наибольшее возможное число баллов. Не забудьте, что нужно было решить хотя бы одну задачу. Если решений несколько, выведите любое.

D. Стирка, сушка, глажка

жадные алгоритмы реализация *1900

У вас есть k предметов одежды, каждый из которых вы хотите постирать, посушить и погладить. В вашем распоряжении n1 стиральных машинок, n2 машинок для отжима и n3 гладильных машины. Каждая машина может обрабатывать один предмет одежды в один момент времени. Вы не можете отжимать предмет одежды до того, как он был постиран, и не можете его гладить, пока он не был отжат. Более того, после того, как предмет одежды был постиран, его надо сразу поместить в машинку для отжима, а после того, как он был отжат, его надо сразу поместить в машинку для глажки.

Стирка одного предмета одежды занимает t1 минут, отжим — t2 минут, а глажка — t3 минут. Найдите минимальное количество минут, за которое вы можете постирать, отжать и погладить все ваши вещи.

Входные данные

Единственная строка содержит семь целых чисел: k, n1, n2, n3, t1, t2, t3 (1 ≤ k ≤ 104; 1 ≤ n1, n2, n3, t1, t2, t3 ≤ 1000).

Выходные данные

Выведите одно целое число — минимальное количество минут, за которые можно постирать, отжать и погладить все вещи.

Примечание

В первом примере у вас есть одна вещь и по одному экземпляру каждой машинки, работа каждой из них займет пять минут, итого весь процесс займет 15 минут.

Во втором примере вы можете начать стирать две вещи в момент времени 0. Если вы сразу начнете стирать третью вещь, то к моменту, когда вы закончите ее отжимать, не будет доступно ни одной гладильной машинки, поэтому вы должны подождать, и начать стирать третью вещь в момент времени 2. Аналогично, вы не можете начать стирать четвертую вещь до момента времени 5, потому что иначе к моменту, когда она будет постирана, не будет доступной машинки для отжима. В итоге вы начнете стирать каждую из 8-ми вещей в моменты времени 0, 0, 2, 5, 10, 10, 12 и 15 соответственно. Последняя вещь будет поглажена в через 15 + 10 + 5 + 2 = 32 минут после начала.

B. Распределенный join

жадные алгоритмы *1900

Piegirl должна объединить две таблицы (операция join) распределенной базы данных, передавая минимально возможный объем трафика по сети.

Предположим, что имеются две таблицы A и B. Каждая из них состоит из нескольких строк, которые хранятся распределено. Кластер, в котором хранится таблица A, разделен на m частей, причем i-я часть кластера содержит ai строк таблицы A. Кластер, в котором хранится таблица B, разделен на n частей, причем i-я часть кластера содержит bi строк таблицы B.

С помощью одной сетевой команды, Piegirl может скопировать любую одну строку из любой части любого кластера в любую часть любого кластера. В итоге для любой строки из таблицы A и любой строки из таблицы B должна существовать часть какого-то кластера, в которой содержатся обе эти строки. За какое минимальное количество сетевых команд можно этого добиться?

Входные данные

Первая строка содержит два целых числа m и n (1 ≤ m, n ≤ 105). Вторая строка содержит m целых чисел, записанных через пробел, ai (1 ≤ ai ≤ 109). Третья строка содержит n целых чисел, записанных через пробел, bi (1 ≤ bi ≤ 109).

Выходные данные

Выведите целое число — минимальное количество операций.

Примечание

В первом примере оптимальным решением является: скопировать все недостающие строки во вторую часть второго кластера. В итоге, понадобится 2 + 6 + 3 = 11 операций.

Во втором примере оптимальное решение: скопировать все строки таблицы B в первую и вторую части первого кластера. Итого понадобится 2·3 = 6 операций.

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.

Выходные данные

Для каждого теста в отдельной строке выведите ответ на задачу.

C. Подарок

Бинарный поиск жадные алгоритмы Структуры данных *1700

Маленький бобренок — начинающий программист, поэтому информатика — его самый любимый предмет. Совсем скоро будет день рождения учительницы по информатике, и бобренок решил приготовить ей подарок. Он посадил n цветков в ряд на подоконнике и стал ждать, пока они вырастут, чтобы собрать букет ко дню рождения учительницы. Однако, спустя некоторое время, бобренок обнаружил, что цветы перестали расти. Бобренок считает, что дарить слишком маленькие цветы некрасиво, поэтому он решил предпринять соответствующие меры.

До дня рождения осталось m дней. Высота i-го цветка (считайте, что цветы в ряду пронумерованы от 1 до n слева направо) в данный момент времени равна ai. В каждый из оставшихся m дней бобренок может один раз с помощью специальной лейки полить w подряд идущих цветков, при этом каждый политый цветок в этот же день вырастает на единицу длины. Теперь бобренок хочет знать: какая максимальная высота может получиться у самого маленького цветка в букете?

Входные данные

В первой строке через пробел записаны целые числа n, m и w (1 ≤ w ≤ n ≤ 105; 1 ≤ m ≤ 105). Во второй строке через пробел записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите целое число — максимальную высоту самого маленького цветка в итоге.

Примечание

В первом примере в первый день нужно полить последние 3 цветка, их высота увеличится на 1. В оставшийся день можно вовсе не поливать цветы. В таком случае высоты цветов будут равны: [2, 2, 2, 3, 2, 2]. Высота самого маленького цветка равна 2. Сделать эту высоту равной 3 за 2 дня никак не получится.

A. Яблов и Тостов

жадные алгоритмы сортировки *1200

Яблов и Тостов играют в игру. Изначально Яблов дает Тостову набор из n чисел, затем ребята начинают действовать следующим образом:

  • Каждый раз, когда Тостов получает набор из чисел, он суммирует все числа набора и добавляет эту сумму к текущему счету. Затем он передает набор Яблову.
  • Каждый раз, когда Яблов получает набор чисел, состоящий из единственного числа, он выбрасывает этот набор. Каждый раз, когда Яблов получает набор чисел, состоящий из более, чем одного числа, он разбивает этот набор на два непустых набора (делать это он может любым способом), а затем отдает оба получившихся набора Тостову.

В тот момент, когда наборов в игре не осталось, друзья смотрят на счет. Какой максимальный счет они могут получить?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 3·105). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — набор, который Яблов дал Тостову изначально.

Выходные данные

Выведите единственное целое число — максимальный возможный счет.

Примечание

Рассмотрим следующую последовательность действий для первого тестового примера. Изначально у Тостова набор [3, 1, 5], он добавляет к счету 9 и передает набор Яблову. Яблов разбивает набор [3, 1, 5] на два [3, 5] и [1], каждый из них передает Тостову. Получив набор [1], Тостов добавляет к счету 1 и отдает его Яблову (Яблов в свою очередь выкинет его). Получив набор [3, 5] Тостов добавляет к счету 8 и отдает его Яблову. Яблов делит набор [3, 5] единственно возможным способом: [5] и [3]. Затем он отдает оба набора Тостову. Получив набор [5], Тостов добавляет к сумме 5 и отдает набор Яблову (тот его выкидывает). Получив набор [3], Тостов добавляет к сумме 3 и отдает набор Яблову (тот его выкидывает). Итого, Тостов добавит 9 + 1 + 8 + 5 + 3 = 26. Это оптимальная последовательность действий.

B. Яблов и игра в карты

жадные алгоритмы *1300

У Яблова есть n карт. На каждой карте написана заглавная буква английского алфавита. Тостов должен выбрать k карт из карт Яблова. Затем Яблов должен дать Тостову несколько монет в зависимости от выбранных карт. Формально, для каждой карты Тостова i надо подсчитать, сколько карт Тостова содержат такую же букву, что и карта i, затем все подсчитанные числа нужно сложить. Именно столько монет Яблов должен дать Тостову.

Вам заданы карты Яблова. Какое максимальное количество монет может получить Тостов?

Входные данные

В первой строке содержатся два целых числа, n и k (1 ≤ k ≤ n ≤ 105). В следующей строке содержится n заглавных букв английского алфавита без пробелов — i-я буква описывает i-ю карту Яблова.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом тестовом примере Тостов должен выбрать девять карт с буквой D и одну любую другую карту. В таком случае за каждую букву D он получит 9 монет, и еще за одну оставшуюся букву 1 монету.

C. Gargari и слоны

жадные алгоритмы реализация хэши *1900

Gargari завидует Caisa, потому что последний прошел игру из прошлой задачи. Теперь Gargari хочет доказать всем, что он самый умный.

У Gargari есть шахматная доска размером n × n. В каждой клетке шахматной доски записано целое число. Gargari хочет разместить на шахматной доске два слона таким образом, что не существует клетки, которая находится под ударом обоих слонов. Рассмотрим клетку доски с числом x, записанным на ней, если она находится под ударом одного из слонов, тогда Gargari получает x долларов за эту клетку. Подскажите Gargari, как разместить двух слонов на доске, чтобы получить как можно больше денег.

Считается, что клетка находится под ударом слона, если она находится на одной диагонали с ним (клетка, в которой стоит слон, также считается находящейся под ударом).

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 2000). В каждой из следующих n строк записано n целых чисел aij (0 ≤ aij ≤ 109) — описание шахматной доски.

Выходные данные

В первой строке выведите максимальное количество долларов, которое Gargari может заработать. Затем выведите четыре целых числа: x1, y1, x2, y2 (1 ≤ x1, y1, x2, y2 ≤ n), где xi обозначает номер строки, в которой находится i-й слон, yi обозначает номер столбца, в котором находится i-й слон. Считайте, что строки шахматной доски пронумерованы от 1 до n сверху вниз, в столбцы пронумерованы от 1 до n слева направо.

Если есть несколько оптимальных решений, разрешается вывести любое.

A. Нет палиндромам!

жадные алгоритмы Строки *1700

Паша ненавидит палиндромы. Он считает строку s терпимой, если каждый ее символ — это одна из первых p букв латинского алфавита, и s не содержит ни одной подстроки-палиндрома длины 2 или больше.

Паша нашел терпимую строку s длины n. Помогите ему найти лексикографически следующую терпимую строку той же длины, либо определите, что такой не существует.

Входные данные

В первой строке записано два целых числа, разделенных пробелом: n и p (1 ≤ n ≤ 1000; 1 ≤ p ≤ 26). Во второй строке записана строка s, состоящая из n строчных латинских букв. Гарантируется, что строка является терпимой (согласно определению выше).

Выходные данные

Если лексикографически следующая терпимая строка той же длины существует, выведите ее. В противном случае выведите «NO» (без кавычек).

Примечание

Строка s лексикографически больше (или просто больше) строки t той же длины, если существует число i, такое что s1 = t1, ..., si = ti, si + 1 > ti + 1.

Лексикографически следующая терпимая строка — это лексикографически минимальная терпимая строка, большая данной.

Палиндром — это строка, которая одинаково читается слева направо и справа налево.

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 — найденная последовательность.

Если существует несколько оптимальных последовательностей, разрешается вывести любую.

A. 24 Game

жадные алгоритмы Конструктив математика *1500

Little X раньше играл в карточную игру под названием «24 Game», но в последнее время она начала казаться ему слишком простой. И вот, он придумал новую игру.

Изначально у вас есть последовательность, состоящая из n целых чисел: 1, 2, ..., n. За один ход можно выбрать из последовательности два числа — обозначим их как a и b — удалить их из последовательности и добавить к последовательности либо a + b, либо a - b, либо a × b.

После n - 1 ходов последовательность будет состоять всего из одного числа. Можете ли вы сделать так, чтобы оно равнялось 24?

Входные данные

В первой строке записано единственное число n (1 ≤ n ≤ 105).

Выходные данные

Если это возможно, выведите в первой строке «YES». В противном случае выведите «NO» (без кавычек).

В случае положительного ответа, в следующих n - 1 строках выведите необходимые операции, по одной в строке. Каждая операция должна иметь вид: «a op b = c», где a и b — числа, выбранные вами на этой операции; op — это либо «+», либо «-», либо «*»; c — это результат соответствующей операции. Обратите внимание, что число c не должно превышать 1018 по модулю. Результат последней операции должен быть равен 24. Отделяйте знак оператора и знак равенства от чисел пробелами.

Если существует несколько корректных ответов, можно вывести любой.

B. Два множества

2-sat жадные алгоритмы Паросочетания поиск в глубину и подобное снм *2000

У Little X есть n различных целых чисел: p1, p2, ..., pn. Он хочет так разделить все числа на два множества, A и B, чтобы выполнялись условия:

  • Если число x принадлежит множеству A, то число a - x также должно принадлежать множеству A.
  • Если число x принадлежит множеству B, то число b - x также должно принадлежать множеству B.

Помогите Little X разделить числа на два множества или определите, что это невозможно.

Входные данные

В первой строке записано три целых числа через пробел n, a, b (1 ≤ n ≤ 105; 1 ≤ a, b ≤ 109). В следующей строке записано n различных целых чисел через пробел p1, p2, ..., pn (1 ≤ pi ≤ 109).

Выходные данные

Если способ разделения чисел на два множества существует, то выведите "YES" в первой строке. Затем выведите n целых чисел: b1, b2, ..., bn (bi равняется либо 0, либо 1), описывающих разделение. Если bi равняется 0, то pi принадлежит множеству A, в противном случае оно принадлежит множеству B.

Если это невозможно, выведите "NO" (без кавычек).

Примечание

Допустимо следующее разбиение: все числа содержатся в одном множестве, а второе множество пустое.

A. I Wanna Be the Guy

жадные алгоритмы реализация *800

Есть такая игра под названием «I Wanna Be the Guy», в ней n уровней. Little X и его друг Little Y подсели на эту игру. Каждый из них хочет пройти игру полностью.

Little X может пройти только p уровней этой игры. А Little Y может пройти только q уровней этой игры. Вам даны номера уровней, которые может пройти Little X, и номера уровней, которые может пройти Little Y. Могут ли Little X и Little Y пройти игру полностью, если объединят свои усилия?

Входные данные

В первой строке записано единственное целое число n (1 ≤  n ≤ 100).

В следующей строке сначала записано целое число p (0 ≤ p ≤ n), затем следуют p различных целых чисел a1, a2, ..., ap (1 ≤ ai ≤ n). Эти числа обозначают номера уровней, которые может пройти Little X. В следующей строке содержатся номера уровней, которые может пройти Little Y, в аналогичном формате. Предполагается, что уровни пронумерованы от 1 до n.

Выходные данные

Если друзья могут пройти все уровни вместе, выведите «I become the guy.». Если это невозможно, выведите «Oh, my keyboard!» (без кавычек).

Примечание

В первом примере Little X может пройти уровни [1 2 3], а Little Y может пройти уровни [2 4], так что вместе ребята могут пройти все уровни.

Во втором примере никто не может пройти уровень 4.

C. МУХ и карточные домики

Бинарный поиск жадные алгоритмы математика Перебор *1700

Белые медведи Меньшиков и Услада из Санкт-Петербургского зоопарка и слоник Хорас из Киевского зоопарка решили построить карточный домик. Для этого они уже нашли внушительную колоду, содержащую n игральных карт. Давайте опишем домик, который они хотят собрать:

  1. Домик состоит из некоторого ненулевого количества этажей.
  2. Каждый этаж состоит из ненулевого количества комнат и потолка. Комната — две карты, прислоненных друг к другу. Комнаты располагаются в ряд, и на каждые две соседние комнаты кладется потолок из еще одной карты.
  3. Каждый этаж, кроме самого нижнего, должен содержать меньше комнат, чем этаж ниже.

Обратите внимание, что домик может заканчиваться этажом с более чем одной комнатой и в таком случае их тоже требуется накрыть потолком. Также количество комнат на соседних этажах не обязательно должно отличаться на единицу, разница может быть больше.

Пока медведи тренируются ставить карты, Хорас пытается сообразить, из скольки этажей должен состоять их дом. Назовем высотой дома количество этажей в нем. Возможно, что из n карт можно собрать много разных домиков разных высот. Кажется, эта задача слонику не под силу, он просит вас посчитать, домики скольки различных высот они смогут собрать, использовав ровно n карт.

Входные данные

В единственной строке находится целое число n (1 ≤ n ≤ 1012) — количество карт.

Выходные данные

Выведите количество различных высот, которые могут быть у домиков, построенных ровно из n карт.

Примечание

В первом примере, использовав все 13 карт, можно построить только такие два дома:

Таким образом из 13 карт можно построить только двухэтажные домики, поэтому ответ — 1.

Из шести карт во втором примере ни одного домика построить нельзя.

C. Уроки дизайна задач: недетеминированность

жадные алгоритмы *1400

Один из способов придумать новую задачу — взять существующую задачу и добавить в нее некоторую недетерминированность. Например, самая сложная задача с Topcoder SRM 595, Constellation, является вероятностной версией выпуклой оболочки.

Попробуем придумать новую задачу описанным способом. Для начала возьмем следующую задачу. Заданы описания n людей, отсортируйте их в лексикографическом порядке по именам. Это обычная задача на сортировку, но ее можно сделать интереснее, добавив случайный элемент. Заданы описания n людей, каждый человек выбирает в качестве хендла либо свое имя, либо фамилию. Может ли лексикографический порядок хендлов в точности совпадать с перестановкой p?

Более формально, если мы обозначим хендл i-го человека как hi, то должно выполняться следующее условие: .

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество людей.

В каждой из следующих n строк записано по две строки. В i-й из них записаны строки fi и si (1 ≤ |fi|, |si| ≤ 50) — имя и фамилия i-го человека. Каждая строка состоит исключительно из строчных букв английского алфавита. Все заданные 2n строк будут различны.

В следующей строке записано n различных целых чисел: p1, p2, ..., pn (1 ≤ pi ≤ n).

Выходные данные

Если это возможно, выведите «YES», в противном случае выведите «NO».

Примечание

В примерах номер 1 и 2 у нас есть 3 человека: tourist, Petr и я (cgy4ever). Как вы видите, вне зависимости от выбранного хендла, сначала должен идти я, затем — tourist и последним — Petr.

В примере номер 3 все будет в порядке, если Copernicus возьмет в качестве хендла «copernicus».

C. Картина Камаль оль-Молька

жадные алгоритмы Конструктив Перебор *2100

Ходят слухи, что одна из картин Камаль оль-Молька была подрисована. По картине провели прямоугольной кистью вправо и вниз.

Представим картину как прямоугольную сетку размера n × m. Сперва прямоугольная кисть размера x × y была поставлена где-то внутри картины так, что её стороны оказались параллельны линиям сетки, (1 ≤ x ≤ n, 1 ≤ y ≤ m). Затем кисть несколько раз сдвинули на клетку вниз или на клетку вправо. В процессе движения кисть оставалась строго в рамках картины. Кисть меняет каждую затронутую ей в какой-либо момент клетку.

Вы нашли одну из старых картин Камаль оль-Молька. Вы хотите знать, могла ли она быть подрисована указанным образом, и если да, то какого минимального размера могла быть кисть.

Входные данные

В первой строке входного файла записано два целых числа n и m, (1 ≤ n, m ≤ 1000), обозначающих высоту и ширину картины.

В следующих n строках содержится картина. В последующих n строках записано по m символов. Символ 'X' обозначает, что клетка была изменена, в противном случае клетка обозначается символом '.'. На картине присутствует хотя бы одна измененная клетка.

Выходные данные

Выведите минимальную площадь кисти, если картина могла быть подрисована указанным образом. В противном случае, выведите  - 1.

D. Dreamoon и множества

жадные алгоритмы Конструктив математика *1900

Dreamoon любит играть с множествами, целыми числами и . По определению, — это наибольший общий делитель a и b, то есть наибольшее положительное целое число, которое делит как a, так и b.

Рассмотрим некоторое множество S из ровно четырех различных положительных целых чисел. Будем говорить, что S имеет ранг k, тогда и только тогда, когда для всех пар различных элементов si, sj из S, .

Даны значения k и n, Dreamoon хочет образовать n множеств ранга k, используя только целые числа от 1 до m таким образом, что никакое число не участвует в двух различных множествах (конечно, некоторые числа можно не использовать ни в одном множестве).

Вычислите минимальное m, при котором это возможно сделать, и выведите одно возможное решение.

Входные данные

В единственной строке записано два целых числа через пробел n, k (1 ≤ n ≤ 10 000, 1 ≤ k ≤ 100).

Выходные данные

В первой строке выведите единственное целое число — минимально возможное m.

В каждой из следующих n строк выведите через пробел по четыре целых числа, составляющие i-е множество.

Порядок множеств и порядок чисел во множестве может быть любым. Если имеется несколько вариантов ответа с минимальным m, выведите любой из них.

Примечание

В первом примере легко увидеть, что множество {1, 2, 3, 4} не является корректным множеством ранга 1, так как .

B. Случайные команды

жадные алгоритмы Комбинаторика Конструктив математика *1300

Для участия в соревнованиях n участников были разбиты некоторым образом на m команд так, чтобы в каждой команде был хотя бы один участник. После соревнований каждая пара участников из одной команды стала друзьями.

Ваша задача — написать программу, которая определит, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования.

Входные данные

В единственная строке содержатся два целых числа n и m, разделенных одним пробелом (1 ≤ m ≤ n ≤ 109) — количество участников и количество команд соответственно.

Выходные данные

Требуется вывести два целых числа kmin и kmax — минимальное возможное количество пар друзей и максимальное возможное количество пар друзей соответственно.

Примечание

В первом примере все участники попадают в одну команду, поэтому в любом случае будет образовано ровно десять пар друзей.

Во втором примере при любом разбиении в одной из команд будет два участника, а в другой — один. В таком случае количество пар друзей всегда будет равно одному.

В третьем примере минимальное количество друзей выходит при разбиении на команды по 2 человека, а максимальное — при разбиении на команды размерами 1, 1 и 4 человек.

C. Украшение столов

жадные алгоритмы *1800

Имеется r красных, g зеленых и b синих воздушных шаров. Для украшения одного стола перед банкетом требуется ровно три воздушных шара. Причем недопустимо, чтобы все три шара были одного цвета. Какое максимальное количество столов t можно украсить, имея заданное количество воздушных шаров?

Ваша задача — написать программу, которая по заданным значениям r, g и b определит наибольшее количество столов t, которые можно украсить требуемым способом.

Входные данные

В единственной строке содержатся три целых числа r, g и b (0 ≤ r, g, b ≤ 2·109) — количество шаров красного, зеленого и синего цвета соответственно. Числа разделяются ровно одним пробелом.

Выходные данные

Выведите единственное целое число t — искомое наибольшее количество столов, которые можно украсить требуемым образом.

Примечание

В первом примере входных данных можно украсить столы следующими наборами воздушных шаров: «rgg», «gbb», «brr», «rrg», где «r», «g» и «b» обозначают воздушные шары, соответственно, красного, зеленого и синего цвета.

B. Башни

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно, все дети в Берляндии любят играть с кубиками. У маленького Пети имеется n башен, состоящих из кубиков одинакового размера. Башня под номером i представляет собой ai кубиков, поставленных друг на друга. Неустойчивостью набора башен Петя называет величину, равную разности высот самой высокой и самой низкой башни. К примеру, если Петя построил из кубиков пять башен с высотами (8, 3, 2, 6, 3), то неустойчивость этого набора равна 6 (самая высокая башня имеет высоту 8, самая низкая — высоту 2).

Мальчик хочет, чтобы неустойчивость его набора башен была как можно меньше. Все, что он может сделать, это несколько раз проделать следующую операцию: взять верхний кубик с какой-то из башен и положить его сверху на какую-то другую башню из своего набора. Обратите внимание, что Петя никогда не будет класть кубик на ту же башню, с которой тот был снят, потому что считает это пустой тратой времени.

Прежде чем отправиться в школу, мальчик успеет произвести не более k таких операций. Петя не хочет опоздать на урок, поэтому вам придется помочь ему выполнить эту задачу.

Входные данные

В первой строке через пробел записаны два целых положительных числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1000) — количество башен в имеющемся наборе и максимальное число операций, которые Петя может произвести. Во второй строке через пробел записаны n целых положительных чисел ai (1 ≤ ai ≤ 104) — исходные высоты башен.

Выходные данные

В первой строке выведите через пробел два целых неотрицательных числа s и m (m ≤ k). Первое из чисел — это величина минимально возможной неустойчивости, которую можно достичь, применив не более k операций, а второе — количество операций, необходимых для этого.

Затем в m строках выведите описание каждой из операций в виде двух целых положительных чисел i и j, каждое из которых лежит в пределах от 1 до n. Они обозначают, что Петя переложил верхний кубик с i-й башни на j-ю (i ≠ j). Обратите внимание, что в процессе выполнения операций высоты некоторых башен могут стать равны нулю.

Если существует несколько корректных последовательностей операций, при которых достигается минимально возможная неустойчивость, разрешается вывести любую из них.

Примечание

В первом примере осуществляется два перекладывания, со второй башни на третью и со второй на первую. После этого высоты башен становятся одинаковыми и равными 6.

C. Экзамены

жадные алгоритмы сортировки *1400

Студент Валера учится на первом курсе университета. Скоро у него сессия, и ему предстоит сдать ровно n экзаменов. Валера — умный парень, поэтому он сможет сдать любой экзамен с первого раза. Кроме того, он может сдавать несколько экзаменов в один день и в любом порядке.

Согласно расписанию, экзамен по i-му предмету нужно сдать в день с номером ai. Однако Валера договорился с каждым преподавателем, и преподаватель i-го предмета разрешил организовать досрочную сдачу своего экзамена в день bi (bi < ai). Таким образом, Валера может сдать экзамен по i-му предмету либо в день ai, либо в день bi. Все преподаватели ставят запись о сдаче экзамена в зачетную книжку в день фактической сдачи экзамена и датируют эту запись числом ai.

Валера считает, что будет достаточно странно, если записи в зачетной книжке будут идти не в порядке неубывания даты. Поэтому Валера просит вас помочь ему. Найдите минимально возможный номер дня, когда Валера сможет сдать последний экзамен, если он будет сдавать экзамены так, чтобы все записи в его зачетной книжке шли в порядке неубывания даты.

Входные данные

В первой строке записано единственное целое положительное число n (1 ≤ n ≤ 5000) — количество экзаменов, которые будет сдавать Валера.

В каждой из следующих n строк записано по два целых положительных числа через пробел ai и bi (1 ≤ bi < ai ≤ 109) — дата сдачи по расписанию и досрочная дата сдачи i-го экзамена соответственно.

Выходные данные

Выведите единственное целое число — минимально возможный номер дня, когда Валера сможет сдать последний экзамен, если он будет сдавать экзамены так, чтобы все записи в его зачетной книжке шли в порядке неубывания даты.

Примечание

В первом примере Валера сначала сдаст экзамен по второму предмету в первый день (в зачетную книжку заносится дата сдачи по расписанию, то есть 3). На следующий день сначала он сдаст экзамен по третьему предмету (будет добавлена запись, датированная днем 4), а после него в тот же день сдаст экзамен по первому предмету (в зачетную книжку отметка будет проставлена с днем 5). Таким образом, последний экзамен Валера сдаст во второй день, и даты в зачетной книжке будут идти в порядке неубывания: 3, 4, 5.

Во втором примере Валера сначала сдаст экзамен по третьему предмету в четвертый день, после него экзамен по второму предмету в пятый день. После этого в шестой день Валера сдаст экзамен по первому предмету.

D. Прыжки в длину

Бинарный поиск жадные алгоритмы реализация *1700

Валерий — учитель физической культуры в одной из школ Берляндии. Скоро школьникам сдавать норматив по прыжкам в длину, а Валерий потерял свою любимую линейку!

Однако нет поводов для разочарования, поскольку Валерий нашел другую линейку длины l сантиметров. На линейку уже нанесены n отметок, с помощью которых можно производить измерения. Будем считать, что отметки пронумерованы числами от 1 до n в порядке их следования от начала линейки к ее концу. Первая отметка совпадает с началом линейки и обозначает начало отсчета. Последняя отметка совпадает с концом линейки и находится на расстоянии l от начала отсчета. Такую линейку можно задать возрастающей последовательностью a1, a2, ..., an, где ai означает расстояние i-й отметки от начала отсчета (a1 = 0, an = l).

Валерий считает, что с помощью линейки можно отмерить расстояние d сантиметров, если существует пара целых чисел i и j (1 ≤ i ≤ j ≤ n), такая, что расстояние между i-й и j-й отметкой в точности равно d (иными словами, aj - ai = d).

Согласно нормам, девочки должны уметь прыгать в длину на расстояние не менее чем x сантиметров, а мальчики должны уметь прыгать в длину на расстояние не менее чем y (x < y) сантиметров. Для проверки способностей детей Валерию нужна линейка, с помощью которой можно отмерить каждое из расстояний x и y.

Ваша задача — определить, какое минимальное количество дополнительных отметок необходимо нанести на линейку так, чтобы с их помощью можно было отмерить расстояния x и y. Валерий может наносить отметки на любом целочисленном неотрицательном расстоянии от начала отсчета, не превышающем длину линейки.

Входные данные

В первой строке записано четыре целых положительных числа через пробел n, l, x, y (2 ≤ n ≤ 105, 2 ≤ l ≤ 109, 1 ≤ x < y ≤ l) — количество отметок, длина линейки и нормативы для девочек и мальчиков соответственно.

Во второй строке записана последовательность из n целых чисел a1, a2, ..., an (0 = a1 < a2 < ... < an = l), где ai означает расстояние от i-й отметки до начала отсчета.

Выходные данные

В первой строке выведите единственное целое неотрицательное число v — минимальное количество отметок, которые нужно дополнительно нанести на линейку.

Во второй строке выведите через пробел v целых чисел p1, p2, ..., pv (0 ≤ pi ≤ l). Число pi означает, что i-ю отметку следует нанести на расстоянии pi сантиметров от начала отсчета. Отметки выводите в любом порядке. Если оптимальных решений несколько, выведите любое из них.

Примечание

В первом примере изначально нельзя отмерить расстояние 230 сантиметров. Для этого достаточно добавить отметку 20 сантиметров или отметку 230 сантиметров.

Во втором примере с помощью линейки уже можно отмерить расстояния 185 и 230 сантиметров, поэтому добавлять новые отметки не нужно.

В третьем примере на линейку нанесены только отметки начала и конца. Нам потребуется добавить две отметки, чтобы проверка способностей детей стала возможной.

D. Перестановки

жадные алгоритмы *1500

Перестановка — это последовательность длины n целых чисел от 1 до n, в которой все числа встречаются ровно по одному разу. Например, (1), (4, 3, 5, 1, 2), (3, 2, 1) — перестановки, а (1, 1), (4, 3, 1), (2, 3, 4) — нет.

Бывает много различных задач на перестановки. Сегодня вам предстоит решить такую. Представьте, что Некто взял несколько перестановок (возможно, с разным количеством элементов), записал их в одну последовательность одну за другой, а затем перемешал полученную последовательность. Требуется восстановить исходные перестановки, если это возможно.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105). Следующая строка содержит перемешанную последовательность из n целых чисел, разделенных одиночными пробелами. Числа в последовательности от 1 до 105.

Выходные данные

Если данную последовательность можно разбить на несколько перестановок так, что каждый элемент последовательности принадлежит в точности одной перестановке, в первой строке выведите количество получившихся перестановок. Вторая строка должна содержать n чисел, соответствующих элементам заданной последовательности. Если i-й элемент относится к первой перестановке, то i-е число должно быть 1, если ко второй — то 2, и т.д. Порядок нумерации перестановок произволен.

Если решений несколько, выведите любое. Если решения не существует, выведите в первой строке  - 1.

Примечание

В первом примере последовательность разбивается на три перестановки: (2, 1), (3, 2, 1, 4, 5), (1, 2). Первая перестановка образована вторым и четвертым элементами последовательности, вторая — третьим, пятым, шестым, седьмым и девятым элементами, третья — первым и восьмым элементами. Ясно, что возможны и другие варианты разбиения.

F. Продавцы снега

жадные алгоритмы сортировки *2800

Новогодние праздники в Берляндии длятся n дней. Только вот снегом зима в этом году не порадовала, поэтому организаторы зимних праздничных мероприятий вынуждены закупать искусственный снег. В Берляндии есть m фирм, продающих снег. Каждый день i-я фирма производит wi кубометров снега. На следующий день снег тает и фирма вынуждена производить wi кубометров снова. Во время праздников действуют новогодние скидки, поэтому каждый день стоимость снега уменьшается. Известно, что в первый день стоимость всего снега, произведенного i-й фирмой, составляет ci бурлей. Каждый день эта общая стоимость уменьшается на ai бурлей, т.е. во второй день она равна ci - ai, в третий день — ci - 2ai, и т. д. Известно, что ни для одной фирмы стоимость производимого ей снега не становится отрицательной или равной нулю. Вам требуется организовать закупку снега таким образом, чтобы каждый день покупать ровно W кубометров снега. При этом у любой фирмы не обязательно покупать весь снег, произведенный ею. Если вы покупаете у i-й фирмы в один из дней, когда стоимость ее снега равна si, ni кубометров снега (0 ≤ ni ≤ wi, число ni не обязательно целое!), то его цена составит бурлей. В течение одного дня можно покупать снег у нескольких фирм. В разные дни можно покупать снег у разных фирм. Требуется сделать закупки таким образом, чтобы потратить как можно меньше денег. Гарантируется, что производимого фирмами снега будет достаточно.

Входные данные

В первой строке заданы целые числа n, m и W (1 ≤ n ≤ 100, 1 ≤ m ≤ 500000, 1 ≤ W ≤ 109) — количество дней, количество фирм и количество снега, которое нужно закупать в каждый из n дней. Во второй строке содержатся m целых чисел wi. В третьей строке — m целых чисел ci. В четвертой строке — m целых чисел ai. Все числа строго положительны и не превосходят 109. Для всех i верно неравенство ci - (n - 1)ai > 0.

Выходные данные

Выведите единственное число — ответ на поставленную задачу. Ответ выводите в формате с десятичной точкой (даже если число целое, точка должна в нем содержаться), без «e» и без лидирующих нулей. Ответ должен отличаться от правильного не более чем на 10 - 9.

A. Разнообразная перестановка

жадные алгоритмы Конструктив *1200

Перестановкой p называется упорядоченный набор чисел p1,   p2,   ...,   pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Число n будем называть длиной перестановки p1,   p2,   ...,   pn.

Ваша задача — найти такую перестановку p длины n, что среди чисел |p1 - p2|, |p2 - p3|, ..., |pn - 1 - pn| ровно k различных.

Входные данные

В единственной строке входных данных находятся два разделённых пробелом целых положительных числа n, k (1 ≤ k < n ≤ 105).

Выходные данные

Выведите n целых чисел — искомую перестановку. Если существует несколько ответов, разрешается вывести любой.

Примечание

Под записью |x| следует понимать абсолютную величину числа x.

D. Детский сад

дп жадные алгоритмы Структуры данных *2400

В детском саду проходит распределение детей по группам. Воспитательница расставила детей в ряд и оценила харизматичность каждого ребенка целым числом. Каждый ребенок должен оказаться ровно в одной группе. Группа детей должна представлять из себя непустой отрезок подряд идущих детей в ряду. Общительность группы определяется как максимальная разность харизматичностей между двумя детьми в группе (в частности, если группа состоит из одного ребенка, то ее общительность равна нулю). Воспитательница хочет разбить детей на некоторое количество групп таким образом, чтобы суммарная общительность групп была максимальной. Помогите найти это значение.

Входные данные

В первой строке содержится целое число n — количество детей в ряду (1 ≤ n ≤ 106).

Во второй строке содержатся n целых чисел ai — харизматичность i-го ребенка ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведете максимальную возможную суммарную общительность всех групп.

Примечание

В первом тестовом примере одним из возможных вариантов наилучшего разбиения будет следующее: первые три ребенка образуют группу с общительностью 2, а оставшиеся два ребенка образуют группу с общительностью 1.

Во втором тестовом примере любое разбиение даст один и тот же результат, в каждой группе общительность будет равна 0.

B. Ценные ресурсы

жадные алгоритмы Перебор *1300

Во многих компьютерных играх стратегического жанра нужно строить города, создавать армию, захватывать племена, накапливать ресурсы. Иногда это приводит к интересным задачам.

Предположим, вам требуется построить город квадратной формы. На карте мира введена декартова система координат. Стороны города должны быть параллельны осям координат. На карте присутствуют рудники с ценными ресурсами, расположенные в точках с целочисленными координатами. Размерами рудников можно пренебречь, то есть их можно считать точками. Город должен быть построен так, чтобы все рудники были внутри или на границе квадрата, которым он образован.

Так как строительство города требует затрат, зависящих от его размера, то необходимо построить город с минимальной площадью. По заданному расположению рудников найдите минимальную возможную площадь города.

Входные данные

Первая строка ввода содержит целое число n — количество рудников на карте (2 ≤ n ≤ 1000). В каждой из n последующих строк содержится по паре целых чисел xi и yi — координаты соответствующего рудника ( - 109 ≤ xi, yi ≤ 109). Все точки попарно различны.

Выходные данные

Выведите минимальную площадь города, которым можно покрыть все рудники с ценными ресурсами.

B. OR в матрице

жадные алгоритмы реализация хэши *1300

Определим логический OR как операцию над двумя логическими значениями (то есть, значениями, которые принадлежат множеству {0, 1}), которая даёт 1, если один или оба операнда равны 1, в противном случае операция даёт 0. Можно определить логическое OR трех или более логических значений аналогичным образом:

, где , равняется 1, если какое-то из ai = 1, в противном случае результат равняется 0.

У Нама есть матрица A, состоящая из m строк и n столбцов. Строки пронумерованы от 1 до m, столбцы пронумерованы от 1 до n. Элемент в строке i (1 ≤ i ≤ m) и столбце j (1 ≤ j ≤ n) обозначается как Aij. Все элементы A равны либо 0, либо 1. По матрице A Нам строит матрицу B того же размера, используя следующюю формулу:

.

(Bij — OR всех элементов в строке i со всеми элементами столбца j матрицы A)

Нам дает вам матрицу B и бросает вызов: сможете ли вы угадать матрицу A? Хотя Нам умен, он вполне мог ошибиться в подсчете матрицы B, так как размеры матрицы A могут быть очень большими.

Входные данные

В первой строке записано два целых числа m и n (1 ≤ m, n ≤ 100) — количество строк и колонок матриц соответственно.

В следующих m строках записано по n целых чисел через пробелы — строки матрицы B (каждый элемент B равен либо 0, либо 1).

Выходные данные

В первой строке выведите «NO», если Нам ошибся при подсчитывании B, в противном случае выведите «YES». Если первая строка равна «YES», то выведите также m строк по n целых чисел — матрицу A, по которой могла быть получена данная матрица B. Если решений несколько, выведите любое.

C. Преобразование в палиндром

жадные алгоритмы Перебор реализация *1700

Нам играет со строкой на своем компьютере. Строка состоит из n строчных английских букв. Строка не представляет собой ничего осмысленного, так что Нам решил её приукрасить, для чего он решил превратить её в палиндром, используя 4 кнопки со стрелками на клавиатуре: влево, вправо, вверх, вниз.

Курсор указывает на некоторый символ строки. Предположим, что курсор сейчас находится в положении i (1 ≤ i ≤ n, строка использует индексируется с 1). Левая и правая стрелки перемещают курсор по строке. Строка циклична, то есть при нажатии на левую стрелку курсор перемещается в положение i - 1, если i > 1, а в противном случае — в конец строки (т.е., положение n). Аналогично себя ведёт правая стрелка (если i = n, то курсор появляется в начале строки).

Когда Нам нажимает на стрелку вверх, то буква, на которую указывает курсор, заменится на следующую букву английского алфавита (алфавит также является цикличным, то есть за буквой «z» следует буква «a»). Аналогично себя ведёт стрелка вниз.

Изначально курсор находится в положении p.

У Нама много домашней работы, поэтому он хочет добиться результата как можно скорее. Помогите ему подсчитать минимальное количество нажатий на стрелочки, необходимое для превращения строки в палиндром?

Входные данные

В первой строке записано два целых числа через пробел, n (1 ≤ n ≤ 105) и p (1 ≤ p ≤ n), соответственно длина строки Нама и начальное положение курсора.

В следующей строке записано n строчных символов, составляющих строку Нама.

Выходные данные

Выведите минимальное количество нажатий, необходимое для преобразования строки в палиндром.

Примечание

Строка является палиндромом, если она одинаково читается слева-направо и справа-налево.

В примере изначальная строка Нама такова: (положение курсора выделено жирным).

В оптимальном решении Нам может совершить 6 следующих шагов:

В результате получится строка , являющаяся палиндромом.

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}.

A. SwapSort

жадные алгоритмы реализация сортировки *1200

В этой задаче вам требуется отсортировать массив из n чисел, используя не более чем n обменов. Для заданного массива найдите последовательность попарных обменов элементов, после которых массив становится отсортированным по неубыванию. Обмены производятся последовательно, один за одним.

Обратите внимание, что в задаче не требуется минимизировать число обменов — требуется найти любой способ длины не более n.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 3000) — количество элементов массива. Вторая строка содержит элементы массива a0, a1, ..., an - 1 ( - 109 ≤ ai ≤ 109), где ai — это i-й элемент массива. Элементы пронумерованы от 0 до n - 1 слева направо. Среди элементов массива могут быть равные.

Выходные данные

В первую строку выведите k (0 ≤ k ≤ n) — количество обменов. Следующие k строк должны содержать описания k искомых обменов по одному в строке. Каждый обмен выводится в виде пары целых чисел i, j (0 ≤ i, j ≤ n - 1), которая обозначает обмен элементов ai и aj. Индексы в парах можно выводить в любом порядке. Обмены производятся в порядке их вывода сверху вниз. Допускается вывод i = j и обмен пары элементов несколько раз.

Если ответов несколько, выведите любой из них. Гарантируется, что хотя бы один ответ существует.

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» (без кавычек).

A. Командная олимпиада

жадные алгоритмы реализация сортировки *800

В школе №0 столицы Берляндии учатся n школьников. Все ребята в этой школе способные: у кого-то склонность к программированию, у кого-то склонность к математике, а у остальных — к физкультуре. Таким образом, для каждого школьника известна величина ti:

  • ti = 1, если i-й школьник имеет склонность к программированию,
  • ti = 2, если i-й школьник имеет склонность к математике,
  • ti = 3, если i-й школьник имеет склонность к физкультуре

Так сложилось, что каждый школьник имеет склонность ровно к одному из этих трех предметов.

На командную олимпиаду по научному многоборью требуются команды по три человека. Учителя школы решили, что команды будут составлены из трех школьников со склонностями к разным предметам. Иными словами, в каждой команде должен быть один математик, один программист и один спортсмен. Разумеется, каждый учащийся может быть членом не более чем одной команды.

Какое наибольшее количество команд школа сможет выставить на олимпиаду? Как для этого следует формировать команды?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 5000) — количество учащихся в школе. Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 3), где ti описывает склонность i-го школьника.

Выходные данные

В первой строке выведите целое число w — искомое наибольшее количество команд.

Далее выведите w строк по три числа в каждой строке. Каждая такая тройка должна обозначать номера школьников, образующих команду. Как команды, так и числа в тройках можно выводить в любом порядке. Школьники пронумерованы целыми числами от 1 до n в порядке их описания во входных данных. Каждый школьник должен участвовать не более чем в одной команде. Если решений несколько, выведите любое.

Если ни одну команду невозможно составить, то выведите единственную строку со значением w равным 0.

E. Восстановление возрастающей последовательности

Бинарный поиск жадные алгоритмы Перебор реализация *2000

Петя написал на доске строго возрастающую последовательность целых положительных чисел a1, a2, ..., an. После этого Вася заменил некоторые цифры в числах этой последовательности на знаки вопроса. Таким образом, каждый знак вопроса соответствует ровно одной стертой цифре.

Восстановите последовательность по тому, что осталось на доске.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 105) — длина последовательности. Следующие n строк содержат по одному элементу последовательности. Каждый из элементов состоит только из цифр и знаков вопросов. Никакой из элементов не начинается с цифры 0. Каждый из элементов имеет длину от 1 до 8 символов включительно.

Выходные данные

Если ответ существует, то выведите в первую строку «YES» (без кавычек). Следующие n строк должны содержать последовательность целых положительных чисел — возможный вариант последовательности Пети. Найденная последовательность должна быть строго возрастающей, получена из заданной путем замены каждого знака вопроса на одиночную цифру. Все числа в найденной последовательности должны быть записаны без ведущих нулей. Если решений несколько, выведите любое из них.

Если ответа не существует, то выведите единственную строку «NO» (без кавычек).

B. Отель в Нью-Йорке

жадные алгоритмы математика *2100

Нью-Йорк представляет собой прямоугольную сетку, состоящую из N вертикальных авеню, пронумерованных от 1 до N, и M горизонтальных улиц, пронумерованных от 1 до M. C друзей остановились в C отелях, расположенных на пересечениях некоторых улиц с некоторыми авеню. Они собираются отметить день рождения одного из них в одном из H ресторанов, также расположенных в пересечениях некоторых авеню и улиц. При этом они хотят, чтобы максимальное среди расстояний, которые требуется проехать друзьям, чтобы добраться до ресторана, было как можно меньше. Помогите друзьям выбрать ресторан для вечеринки.

Считайте, что расстояние между соседними перекрёстками по вертикали и по горизонтали одинаковое и составляет один километр.

Входные данные

В первой строке входных данных содержится два числа N и M — размеры города (1 ≤ N, M ≤ 109). В следующей строке содержится единственное число C — количество отелей, в которых расположились друзья (1 ≤ C ≤ 105). Далее в C строках содержатся описания отелей, каждый из них задается двумя координатами x и y (1 ≤ x ≤ N, 1 ≤ y ≤ M). В следующей строке содержится одно число H — количество ресторанов (1 ≤ H ≤ 105). В следующих строках содержатся описания ресторанов, в том же формате, что и отели.

Несколько ресторанов и отелей могут располагаться возле одного и того же перекрестка.

Выходные данные

В первой строке выходных данных выведите одно число — искомое оптимальное расстояние. В следующей строке выведите номер любого из ресторанов, гарантирующих данное расстояние. Если вариантов ответа несколько, выведите любой.

C. Ваня и экзамены

жадные алгоритмы сортировки *1400

Ваня хочет сдать n экзаменов и получить стипендию. Для получения стипендии средний балл за все экзамены должен быть не меньше avg. Максимальная оценка за экзамен не может превышать r. Ваня сдал экзамены, и за i-й экзамен получил оценку ai. Чтобы поднять за i-й экзамен оценку на 1 балл, Ваня должен сдать bi рефератов. Повышать оценку за экзамен можно несколько раз.

Какое минимальное количество рефератов должен сдать Ваня, чтобы получить стипендию?

Входные данные

В первой строке записано три целых числа n, r, avg (1 ≤ n ≤ 105, 1 ≤ r ≤ 109, 1 ≤ avg ≤ min(r, 106)) — количество экзаменов, максимальный балл и требуемый средний балл соответственно.

В каждой из последующих n строк через пробел записаны целые числа ai и bi (1 ≤ ai ≤ r, 1 ≤ bi ≤ 106).

Выходные данные

В первую строку выведите минимальное количество рефератов.

Примечание

В первом примере Ваня может сдать 2 реферата по 3 экзамену, подняв свою оценку на 2 балла, и 2 реферата по 4 экзамену, подняв свою оценку на 1 балл.

Во втором примере Ване не нужно сдавать рефераты, так как его балл и так выше среднего.

A. Сокровище

жадные алгоритмы *1500

Малек нашел карту сокровищ. В поисках сокровищ он нашел закрытую дверь. На двери была записана строка s из символов '(', ')' и '#'. Ниже была записана инструкция, как открыть дверь. Покорпев над инструкцией, Малек смог её расшифровать, в результате чего он узнал, что надо заменить каждый символ '#' одним или более символом ')' так, чтобы итоговая строка стала красивой.

Ещё ниже было написано, что строка называется красивой, если для каждого i (1 ≤ i ≤ |s|) среди первых i символов строки s символов ')' не больше, чем символов '(', а также общее число символов '(' в строке равняется общему числу символов ')'.

Помогите Малеку открыть дверь, указав ему, сколькими символами ')' надо заменить каждый символ '#'.

Входные данные

В первой строке ввода записана строка s (1 ≤ |s| ≤ 105). Каждый символ этой строки — это один из символов '(', ')', '#'. Гарантируется, что s содержит как минимум один символ '#'.

Выходные данные

Если невозможно заменить символы '#' так, чтобы получилась красивая строка, выведите  - 1. В противном случае для каждого символа '#' выведите в отдельной строке положительное число — количество символов ')', которыми надо заменить этот символ.

Если возможных ответов несколько, разрешается вывести любой.

Примечание

|s| обозначает длину строки s.

E. Распределение партий

жадные алгоритмы сортировки *2100

Вы — ассистент режиссера новой музыкальной постановки. В сценарии постановки присутствует n музыкальных партий, каждую из которых должен исполнить ровно один актер. После кастинга режиссер выбрал m актеров, которые смогут принять участие в постановке. Ваша задача — распределить партии между актерами. Однако, существует несколько ограничений.

Во-первых, каждый актер обладает своим вокальным диапазоном, и не все партии ему подходят. Формально, каждому актеру сопоставляются два целых числа ci и di (ci ≤ di) — частота самой низкой и самой высокой ноты, которую актер способен спеть. Каждой партии также сопоставляются два целых числа — aj и bj (aj ≤ bj) — частота самой низкой и самой высокой ноты, которые присутствуют в партии. i-й актер способен исполнить j-ю партию тогда и только тогда, когда ci ≤ aj ≤ bj ≤ di, т.е. каждая нота партии попадает в вокальный диапазон актера.

Кроме этого, согласно контракту, i-й актер имеет право исполнить не более ki партий. При этом разрешается не назначать некоторым актерам ни одной партии (тогда они поучаствуют в массовых сценах).

Репетиции начинаются через два часа, и вам нужно срочно справиться с распределением!

Входные данные

В первой строке записано одно целое число n — количество партий в постановке (1 ≤ n ≤ 105).

В следующих n строках записано по два целых числа aj и bj — диапазон нот для j-й партии (1 ≤ aj ≤ bj ≤ 109).

В следующей строке записано одно целое число m — количество актеров (1 ≤ m ≤ 105).

В следующих m строках записано по три целых числа ci, di и ki — диапазон i-го актера и количество песен, которые он имеет право исполнить (1 ≤ ci ≤ di ≤ 109, 1 ≤ ki ≤ 109).

Выходные данные

Если существует распределение, удовлетворяющее всем требованиям, в первой строке выведите одно слово «YES» (без кавычек).

В следующей строке выведите n целых чисел через пробел. i-е число должно быть равно номеру актера, который исполнит i-ю партию. Если существует несколько корректных распределений, выведите любое.

Если распределения не существует, выведите одно слово «NO» (без кавычек).

A. Просмотр фильма

жадные алгоритмы реализация *1000

Вы решили посмотреть лучшие моменты некоторого фильма. Ваш плеер имеет две кнопки:

  1. Посмотреть текущую минуту фильма. В результате нажатия этой кнопки вы успешно просматриваете текущую минуту фильма и плеер автоматически переходит к следующей минуте фильма.
  2. Пропустить ровно x минут фильма (x — некоторое фиксированное положительное целое число). Если плеер сейчас находится на t-й минуте фильма, тогда в результате нажатия этой кнопки (t + x)-я минута станет текущей.

Изначально плеер включен на первой минуте, и вы хотите посмотреть ровно n лучших моментов фильма, причем i-й лучший момент начинается на li минуте и заканчивается на ri минуте (более формально, i-й лучший момент состоит из минут: li, li + 1, ..., ri).

Определите, какое минимальное количество минут фильма вам придется посмотреть, если вы хотите посмотреть все лучшие моменты?

Входные данные

В первой строке записаны два целых числа через пробел n, x (1 ≤ n ≤ 50, 1 ≤ x ≤ 105) — количество лучших моментов фильма и параметр x второй кнопки.

В следующих n строках следуют описания лучших моментов фильма, i-я строка описания содержит два целых числа через пробел li, ri (1 ≤ li ≤ ri ≤ 105). Гарантируется, что для всех целых i от 2 до n выполняется неравенство ri - 1 < li.

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом примере плеер изначально включен на первой минуте. Поскольку минуты с 1-й по 4-ю не содержат интересных моментов, мы нажимаем на вторую кнопку. После этого, мы не можем нажать на вторую кнопку и пропустить 3 минуты, поскольку часть из них содержат интересные моменты. Поэтому мы смотрим фильм с 4-й по 6-ю минуты, после этого текущее время равно 7. Аналогично мы снова пропускаем 3 минуты и после этого просматриваем фильм с 10-й по 12-ю минуты. Итого всего мы посмотрим 6 минут фильма.

Во втором примере фильм очень интересный, поэтому придется посмотреть все 100000 минут фильма.

C. Наибольшая правильная скобочная подстрока

дп жадные алгоритмы Конструктив сортировки Строки Структуры данных *1900

И снова вам предлагается задача на правильные скобочные последовательности.

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Вам задана строка, состоящая из символов «(» и «)». Ваша задача найти её наидлиннейшую подстроку, которая является правильной скобочной последовательностью. Также вам надо найти количество таких подстрок.

Входные данные

В первой строке входного файла записана непустая строка, состоящая из символов «(» и «)». Её длина не превосходит 106.

Выходные данные

Выведите длину наибольшей подстроки, являющейся правильной скобочной последовательностью, и количество таких подстрок. Если искомых подстрок не существует, то выведите «0 1» в единственную строку выходных данных.

A. Укладка доминошками

жадные алгоритмы математика *800

Дана прямоугольная клеточная доска размера M × N клеток. Также дано неограниченное количество стандартных доминошек размера 2 × 1 клетку. Доминошки можно поворачивать. Требуется уложить как можно больше доминошек на доску так, чтобы соблюдались следующие условия:

1. Каждая доминошка полностью покрывает две клетки доски.

2. Никакие две доминошки не перекрываются.

3. Каждая доминошка полностью лежит внутри доски. Касание краев доски допускается.

Найдите максимальное количество доминошек, которое можно уложить с данными ограничениями.

Входные данные

В единственной строке записано два целых числа M и N — размеры доски в клетках (1 ≤ M ≤ N ≤ 16).

Выходные данные

Выведите одно число — максимальное количество доминошек, которое можно уложить.

B. Новогодняя перестановка

графы жадные алгоритмы математика поиск в глубину и подобное снм сортировки *1600

У пользователя ainta есть перестановка p1, p2, ..., pn. Приближается Новый год, и юноша хочет как можно лучше украсить свою перестановку.

Перестановка a1, a2, ..., an красивее перестановки b1, b2, ..., bn тогда и только тогда, когда существует целое число k (1 ≤ k ≤ n), для которого верно a1 = b1, a2 = b2, ..., ak - 1 = bk - 1 и ak < bk.

Как известно, перестановка p — очень чувствительная натура, так что её можно изменять только путем перестановки двух различных элементов. Но переставлять элементы сложнее, чем вы думаете. Вам дана матрица A размера n × n, такая что пользователь ainta может переставить значения pi и pj (1 ≤ i, j ≤ n, i ≠ j) тогда и только тогда, когда Ai, j = 1.

Дана перестановка p и матрица A. Пользователь ainta хочет знать, какая из достижимых перестановок самая красивая.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 300) — размер перестановки p.

Во второй строке записано n целых чисел через пробел p1, p2, ..., pn — перестановка p, имеющаяся у пользователя ainta. Каждое целое число от 1 до n встречается ровно один раз в данной перестановке.

Следующие n строк описывают матрицу A. При этом, i-я из них содержит n символов '0' или '1' и описывает i-ю строку A. j-й символ i-ой строки Ai, j — это элемент, находящийся на пересечении i-й строки и j-го столбца A. Гарантируется, что для всех целых чисел i, j, для которых 1 ≤ i < j ≤ n, выполняется условие Ai, j = Aj, i. Также, для всех целых чисел i, для которых 1 ≤ i ≤ n, выполняется условие Ai, i = 0.

Выходные данные

В первой и единственной строке выведите n целых чисел через пробел, описывающих самую красивую достижимую перестановку.

Примечание

В первом примере для достижения самой красивой перестановки необходимо переставить элементы (p1, p7).

Во втором примере для достижения самой красивой перестановки необходимо переставить (p1, p3), (p4, p5), (p3, p4).

Перестановка p — это последовательность целых чисел p1, p2, ..., pn, состоящая из n различных положительных целых чисел, каждое из которых не превышает n. i-й элемент перестановки p обозначается как pi. Размер перестановки p обозначается как n.

C. В Новый год — с книгой!

жадные алгоритмы Конструктив математика реализация *1600

Наступает Новый год и Jaehyun решил прочитать в наступающем 2015 году множество книг (в отличие от этого года, в котором он не преуспел). У него есть n книг, пронумерованных целыми числами от 1 до n. Вес i-й (1 ≤ i ≤ n) книги равняется wi.

Дом Jaehyun'а слишком маленький для книжного шкафа, поэтому он хранит свои n книг в вертикальной стопке. Когда он хочет прочитать некоторую книгу x, он выполняет следующие шаги:

  1. он поднимает все книги над книгой x;
  2. он вынимает книгу x из стопки;
  3. он опускает поднятые книги, не меняя их порядка;
  4. прочитав книгу x, он кладет её на вершину стопки.

Он решил читать книги на протяжении m дней. На j-й (1 ≤ j ≤ m) день он прочитает книгу, которой присвоен номер bj (1 ≤ bj ≤ n). Чтобы прочитать книгу, он использует последовательность действий, описанную выше. Возможно, что он несколько раз будет читать одну и ту же книгу.

Составив такой план, юноша понял, что суммарный вес книг, которые ему надо поднять за m дней, может быть слишком велик. Поэтому он решил поменять порядок книг в стопке до Нового года и минимизировать суммарный вес. Книги можно уложить в стопку в любом возможном порядке. Обратите внимание, что вес книги, которую он хочет почитать на очередном шаге, не учитывается среди поднятых на этом шаге. Можете ли вы помочь ему достичь желаемого?

Входные данные

В первой строке записано два целых числа через пробел, n (2 ≤ n ≤ 500) и m (1 ≤ m ≤ 1000) — количество книг и количество дней, в которые Jaehyun почитал бы книги.

Во второй строке записано n целых чисел через пробел w1, w2, ..., wn (1 ≤ wi ≤ 100) — вес каждой книги.

В третьей строке записано m целых чисел через пробел b1, b2, ..., bm (1 ≤ bj ≤ n) — порядок книг, которые парень хотел бы прочитать. Обратите внимание, что он может читать одну и ту же книгу более одного раза.

Выходные данные

Выведите минимальный суммарный вес книг, которые надо поднять парню, достижимый перестановкой уложенных книг.

Примечание

Приведем картинку, описывающую пример. Каждая вертикальная колонка обозначает уложенные книги.

C. Миша и лес

Деревья жадные алгоритмы Конструктив сортировки Структуры данных *1500

Назовем лесом неориентированный граф без циклов (петли и кратные рёбра также запрещены). Однажды Миша играл с лесом из n вершин. Для каждой вершины v от 0 до n - 1 он записал два числа degreev и sv, где первое число — количество вершин, смежных с вершиной v, а второе — XOR-сумма номеров вершин, смежных с v (в случае, если смежных вершин не было, он записал 0).

На следующий день Миша не смог вспомнить, какой граф у него был изначально. У Миши остались значения degreev и sv. Помогите ему найти количество ребер и сами ребра исходного графа. Гарантируется, что существует лес, которому соответствуют выписанные Мишей числа.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 216), количество вершин в графе.

В i-й из последующих строк находятся числа degreei и si (0 ≤ degreei ≤ n - 1, 0 ≤ si < 216), разделенные пробелом.

Выходные данные

В первой строке выведите число m, количество ребер графа.

Далее выведите m строк, каждая из которых содержит два различных числа a и b (0 ≤ a ≤ n - 1, 0 ≤ b ≤ n - 1), соответствующие ребру (a, b).

Рёбра могут быть выведены в любом порядке; вершины одного ребра также могут быть выведены в любом порядке.

Примечание

XOR-суммой чисел называется результат побитового сложения чисел по модулю 2. Данная операция существует во многих современных языках программирования, например, в языках C++, Java и Python она обозначается как «^», а в Pascal — как «xor».

E. Мистер Китаюта против бамбука

Бинарный поиск жадные алгоритмы *2900

В саду мистера Китаюты посажено n бамбуков (бамбук — высокая, быстрорастущая тропическая трава с полым стволом). На настоящий момент высота i-го бамбука составляет hi метров, и она увеличивается на ai метров в конце каждого дня.

Вообще, мистер Китаюта терпеть не может бамбук. Он как-то попытался вырубить ростки, но потерпел неудачу — слишком крепкие стволы. Но мистер Китаюта не сдался. Он изобрёл волшебный молот, чтобы вогнать бамбук в землю.

За день можно использовать волшебный молот не более k раз, так как его волшебная сила не бесконечна. При каждом ударе волшебным молотом по бамбуку высота бамбука уменьшается на p метров. При этом высота бамбука не может стать отрицательной, то есть если его текущая высота меньше p, она становится равна 0 метрам (росток не исчезает). Иными словами, если ударить волшебным молотом по бамбуку высотой h метров, то новая высота ростка будет max(0, h - p) метров. Разрешается ударять по одному и тому же бамбуку более одного раза в день.

Мистер Китаюта будет сражаться с бамбуком m дней, начиная с сегодняшнего дня. Его цель — минимизировать высоту самого высокого бамбука через m дней (то есть, после последовательности из m повторений «Мистер Китаюта ударяет по росткам бамбука, и затем ростки растут»). Найдите наименьшую возможное значение высоты самого высокого бамбука через m дней.

Входные данные

В первой строке ввода следуют четыре целых числа через пробел, n, m, k и p (1 ≤ n ≤ 105, 1 ≤ m ≤ 5000, 1 ≤ k ≤ 10, 1 ≤ p ≤ 109). Они обозначают количество ростков бамбука в саду Мистера Китаюта, продолжительность противостояния мистера Китаюта в днях, максимальное количество ударов по росткам бамбука в день и силу волшебного молота, соответственно.

В следующих n строках описаны бамбуки. В i-й из этих строк (1 ≤ i ≤ n) следуют два целых числа через пробел, hi и ai (0 ≤ hi ≤ 109, 1 ≤ ai ≤ 109), обозначающих изначальную высоту и скорость роста i-го ростка бамбука, соответственно.

Выходные данные

Выведите наименьшую возможную высоту самого высокого ростка бамбука через m дней.

A. Amr и музыка

жадные алгоритмы реализация сортировки *1000

Amr — молодой программист и большой меломан. Он всегда хотел научиться исполнять музыку, но программирование отнимает слишком много его времени. И вот, у юноши созрел план.

У Amr есть n инструментов, чтобы научиться играть на i-м инструменте, надо потратить на обучение не менее ai дней. Так как Amr занятой человек, он решил посвятить k дней тому, чтобы научиться игре на как можно большем количестве инструментов.

Amr попросил вас помочь ему распределить свои незанятые дни по инструментам, так, чтобы он научился играть на как можно большем количестве инструментов.

Входные данные

В первой строке записано два числа n, k (1 ≤ n ≤ 100, 0 ≤ k ≤ 10 000), количество инструментов и количество дней, соответственно.

Во второй строке записано n целых чисел ai (1 ≤ ai ≤ 100) — количество дней, необходимых для изучения i-го инструмента.

Выходные данные

В первой строке выведите единственное целое число m, обозначающее наибольшее количество инструментов, игре на которых Amr сможет научиться.

Во второй строке выведите m целых чисел через пробел: индексы инструментов, на которых юноше следует учиться играть. Индексы можно выводить в любом порядке.

Если существует несколько оптимальных решений, выведите любое из них. Использовать все дни на учебу необязательно.

Примечание

В первом тесте Amr может научиться играть на всех 4 инструментах.

Во втором тесте другие возможные варианты: {2, 3, 5} или {3, 4, 5}.

В третьем тесте у Amr недостаточно времени для того, чтобы научиться играть на единственном данном инструменте.

B. Антон и та самая валюта

жадные алгоритмы математика Строки *1300

Берляндия, 2016 год. Курс той самой валюты по отношению к бурлю настолько вырос, что для простоты вычислений его дробной частью стали пренебрегать, а сам курс теперь считается целым числом.

Надёжные источники сообщили ворчливому финансисту Антону некоторую информацию о курсе той самой валюты по отношению к бурлю на завтра. Теперь Антон знает, что завтра курс будет четным числом, которое можно получить из сегодняшнего курса, поменяв в нём местами ровно две различные цифры. Из всех возможных значений, удовлетворяющих этим условиям, курс на завтра будет максимально возможным. Гарантируется, что на сегодняшний день курс — положительное нечётное число n. Помогите Антону определить курс той самой валюты на завтра!

Входные данные

В первой строке следует целое положительное нечётное число n — курс той самой валюты на сегодняшний день. Длина записи числа n лежит в пределах от 2 до 105 включительно. Запись n не содержит ведущих нулей.

Выходные данные

Если информация о завтрашнем курсе оказалась противоречивой, то есть ни одного целого числа, удовлетворяющего условию, не существует, выведите  - 1.

В противном случае, выведите курс той самой валюты по отношению к бурлю на завтра. Это должно быть максимально возможное число из тех, которые являются чётными, и которые получаются из сегодняшнего курса путём обмена ровно двух цифр. Запись завтрашнего курса не должна содержать ведущих нулей.

C. Аня и привидения

жадные алгоритмы Конструктив *1600

Аня очень любит смотреть фильмы ужасов. В лучших традициях хоррора, ее сегодня посетят m привидений. Для встречи с ними у Ани заготовлено множество свечей, каждая из которых горит ровно t секунд. За одну секунду она успевает зажечь одну свечу. Более формально, Аня может потратить одну секунду на то, чтобы зажечь одну свечу, после чего эта свеча горит ровно t секунд, а затем тухнет и больше не подлежит использованию.

Про каждое из m привидений Аня знает момент времени, в которое оно придет: i-е посещение произойдет через wi секунд после полуночи, при этом все wi различны. Каждое посещение длится ровно одну секунду.

Какое минимальное количество свечей нужно использовать Ане, чтобы во время каждого посещения горело не менее r свечей? Аня может начинать зажигать свечу в любое время, отстоящее от полуночи на целое число секунд, в том числе и до наступления полуночи.

Входные данные

В первой строке следуют три целых числа m, t, r (1 ≤ m, t, r ≤ 300), обозначающих соответственно количество привидений, которые посетят Аню, время горения одной свечи в секундах и минимальное количество свечей, которые должны гореть во время каждого посещения.

В следующей строке следуют через пробел m чисел wi (1 ≤ i ≤ m, 1 ≤ wi ≤ 300), i-е из которых обозначает, через сколько секунд после полуночи появится i-е привидение. Все wi различны и следуют в строго возрастающем порядке.

Выходные данные

Если возможно добиться того, что во время каждого посещения горит не менее r свечей, то выведите минимальное количество свечей, которое необходимо для этого зажечь Ане.

Если этого добиться невозможно, то выведите  - 1.

Примечание

Аня может начать зажигать свечу в ту же секунду, когда её посещает привидение. Но эта свеча не учитывается как горящая в это посещение.

Чтобы зажечь свечу, требуется ровно одна секунда, и после этой секунды свеча начинает гореть. Это значит, что если Аня начинает зажигать свечу в момент x, то свеча горит в секунды с (x+1)-й по (x+t)-ю включительно.

В первом тесте из условия будет достаточно трех свечей. Например, их можно начать зажигать в моменты времени 3, 5 и 7 секунд после полуночи.

Во втором тесте из условия будет достаточно одной свечи. Например, ее можно начать зажигать за одну секунду до полуночи.

В третьем тесте из условия ответом будет  - 1, так как в каждую секунду может гореть не более одной свечи, а в момент посещения привидением необходимо, чтобы горело три свечи.

E. Артур и скобки

дп жадные алгоритмы *2200

Обратите внимание на нестандартное ограничение по памяти.

Недавно Артур с Сашей изучили правильные скобочные последовательности. Артур отлично понял эту тему и ему настолько ею проникся, что завёл себе любимую правильную скобочную последовательность длины 2n. В отличие от Артура, Саша очень плохо понял тему про правильные скобочные последовательности, и назло Артуру сломал его любимую правильную скобочную последовательность.

Все, что помнит Артур о своей любимой последовательности — это для каждой открывающейся скобки '(' примерное расстояние до соответствующей ей закрывающейся ')'. Для i-й открывающейся скобки он помнит отрезок [li, ri], в котором лежит расстояние до соответствующей ей закрывающейся.

Формально говоря, для i-й открывающейся скобки (при их нумерации слева направо) известно, что разность позиций соответствующей ей закрывающейся скобки и её собственной позиции лежит в отрезке [li, ri].

Помогите Артуру восстановить его любимую правильную скобочную последовательность!

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 600), количество открывающихся скобок в любимой правильной скобочной последовательности Артура.

В следующих n строках записаны числа li и ri (1 ≤ li ≤ ri < 2n), обозначающие отрезок, в котором лежит расстояние от i-й открывающейся скобки до соответствующей ей закрывающейся.

Описания отрезков заданы в том порядке, в котором открывающиеся скобки встречаются в любимой последовательности Артура, если перечислять их слева направо.

Выходные данные

Если по описанным данным возможно восстановить правильную скобочную последовательность, выведите любой возможный вариант.

Если же Артур что-то напутал, и последовательностей, соответствующих данной информации нет, выведите единственную строку «IMPOSSIBLE» (без кавычек).

B. Раскраска шаров

жадные алгоритмы Конструктив реализация *1300

На столе лежит n кучек камней, в i-й кучке находится ai камней. Требуется раскрасить каждый камень в один из k цветов так, чтобы для каждого цвета c и для любых двух кучек i и j количества камней цвета c в кучках i и j отличались не более чем на один.

Иными словами, пусть bi, c — количество камней в i-й кучке, покрашенных в цвет c. Тогда для любых 1 ≤ c ≤ k, 1 ≤ i, j ≤ n должно выполняться |bi, c - bj, c| ≤ 1. Необязательно использовать все k цветов: если цвет c не встречается в кучке i, то bi, c полагается равным нулю.

Входные данные

В первой строке входных данных заданы натуральные числа n и k (1 ≤ n, k ≤ 100), разделенные пробелом — количество кучек и количество цветов соответственно.

Во второй строке заданы n натуральных чисел a1, a2, ..., an (1 ≤ ai ≤ 100), задающие количества камней в кучках.

Выходные данные

Если раскраски камней, удовлетворяющей условию задачи, не существует, в единственной строке выведите «NO» (без кавычек).

Иначе в первой строке «YES» (без кавыечек). Далее должны следовать n строк, в i-й из них должны находиться ai чисел, разделенных пробелами. j-е (1 ≤ j ≤ ai) из этих чисел должно равняться цвету j-го камня в i-й кучке. Если возможных ответов несколько, разрешается вывести любой.

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. Если вариантов с минимальным значением последнего числа несколько, выведите любой. Числа следует выводить без ведущих нулей.

C. Три базовых станции

Бинарный поиск жадные алгоритмы *1800

Деревня Нью-Васюки вытянута вдоль автомобильной трассы и поэтому каждый город на ней характеризуется своим смещением относительно некоторой фиксированной точки — координатой xi. Деревня состоит из n домов, i-ый дом расположен в точке с координатой xi.

Провайдер сотовой связи TELE3 запланировал разместить три базовых станции таким образом, чтобы покрыть связью каждый дом в деревне. Базовая станция мощности d, размещенная в точке t, покрывает связью дома в отрезке [t - d, t + d] (включая границы).

Для упрощения монтажа (да и просто «чтобы не перепутать») планируется, что все три станции будут иметь одинаковую мощность d. Какое минимальное значение d достаточно, чтобы покрыть связью все дома в деревне.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 2·105) — количество домов в деревне. Вторая строка содержит координаты домов — последовательность x1, x2, ..., xn целых чисел (1 ≤ xi ≤ 109). Возможно, что два или более города расположены в одной точке. Координаты заданы в произвольном порядке.

Выходные данные

Выведите искомую минимальную мощность d. Во вторую строку выведите три числа — возможные координаты расположения базовых станций. Выводите координаты с 6 цифрами после десятичной точки. Позиции станций могут быть любыми от 0 до 2·109 включительно. Допускается, чтобы базовые станции имели совпадающие координаты. Если решений несколько, выведите любое.

A. Чубакка и число

жадные алгоритмы реализация *1200

Люк Скайуокер дал Чубакке целое число x. Чубакка не особо разбирается в числах, но обожает инвертировать в них цифры. Инвертировать цифру t — значит заменить её на цифру 9 - t.

Помогите Чубакке из исходного положительного числа x получить минимальное положительное число, инвертировав некоторое (возможно, нулевое) количество цифр. Запись итогового числа не должна начинаться с нуля.

Входные данные

В первой строке содержится единственное целое число x (1 ≤ x ≤ 1018) — число, которое Люк Скайуокер дал Чубакке.

Выходные данные

Выведите ответ на задачу — минимально возможное положительное число, которое может получить Чубакка после инвертирования некоторых цифр. Число не должно содержать ведущих нулей.

C. Drazil и факториал

жадные алгоритмы математика сортировки *1400

Drazil играет в математическую игру с Varda.

Определим для целого числа x как произведение факториалов его цифр. Например, .

Сперва выбирается число a, состоящее из n цифр и содержащее не менее одной цифры, превосходящей 1. Это число может начинаться с ведущего нуля. Цель игры — найти наибольшее возможное целое число x, удовлетворяющее следующим двум условиям:

1. x не содержит ни цифру 0, ни цифру 1.

2. = .

Помогите друзьям найти такое число.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 15) — количество цифр в числе a.

Во второй строке записано n цифр числа a. В числе a есть не менее одной цифры, превышающей 1. Число a может содержать ведущие нули.

Выходные данные

Выведите наибольшее возможное целое число, удовлетворяющее условиям, данным выше. В десятичной записи этого числа не должно быть нулей и единиц.

Примечание

В первом тесте из условия

D. Drazil и плитка

жадные алгоритмы Конструктив *2000

Drazil собирался подготовить следующую задачу про замощение прямоугольного поля n × m плитками размера 1 × 2:

"Дано прямоугольное поле, некоторые ячейки которого пустые, а некоторые ячейки — занятые. Требуется замостить все пустые ячейки плитками размера 1 × 2, таким образом, что никакие две плитки не накладываются друг на друга. Выведите какой-нибудь способ замощения."

Но потом Drazil понял, что он не хочет писать программу-чекер для проверки этой задачи. Его друг Varda посоветовал: "А что, если попросить участника выводить решение, только если оно существует и оно единственное? В противном случае участник должен вывести 'Not unique' ".

Размышляя над новой задачей Drazil подметил, что в новой постановке можно установить ограничения на размеры поля выше, чем для исходной задачи.

Сможете ли вы решить новую задачу?

Обратите внимание, что выводить 'Not unique' требуется как в случае, когда решение не единственное, так и в случае, когда решения вовсе не существует.

Входные данные

В первой строке следуют два целых числа n и m (1 ≤ n, m ≤ 2000).

В следующих n строках описывается поле. Символ '.' обозначает пустую ячейку, а символ '*' обозначает занятую ячейку.

Выходные данные

Если решения не существует, или же оно не уникальное, выведите строку "Not unique".

В противном случае требуется вывести вариант покрытия всех пустых ячеек плитками размера 1 × 2. Обозначайте горизонтальные плитки символами "<>", а вертикальные плитки — символами "^v". Для полного понимания формата вывода обратитесь к примерам вывода.

Примечание

В первом примере действительно существует два решения исходной задачи:


<>^
^*v
v<>

и


^<>
v*^
<>v

Таким образом, ответ — "Not unique".

B. Таня и поздравление

жадные алгоритмы реализация Строки *1400

Маленькая Таня решила поздравить папу с Днем рождения и подарить ему открытку. Она уже составила текст для поздравления — строку s длины n, состоящую из прописных и строчных букв латинского алфавита. Таня пока не умеет писать, поэтому она нашла газету и решила вырезать оттуда буквы и наклеить их в открытку, чтобы получилась строка s. В газете записана строка t, состоящая из прописных и строчных букв латинского алфавита. Известно, что длина строки t не меньше длины строки s.

Возможно, что в газете не хватает каких-то букв для составления поздравления, а какие-то буквы могут оказаться лишними. Поэтому Таня хочет вырезать из газеты некоторые n букв и составить из них поздравление длины ровно n, чтобы оно было максимально похоже на s. Если буква в заданной позиции совпадает и по значению, и по регистру (в строке s и в той строке, что наклеит Таня), то она радостно кричит «УРА!», а если буква в заданной позиции совпадает только по значению, но не по регистру, то она произносит «ОПА».

Таня хочет наклеить такую надпись, чтобы максимальное количество раз прокричать «УРА!», а если это можно сделать несколькими способами, то во вторую очередь она хочет максимизировать количество раз, которое она скажет «ОПА». Вам предстоит помочь Тане в составлении поздравления.

Входные данные

В первой строке задана строка s (1 ≤ |s| ≤ 2·105), состоящая из прописных и строчных букв латинского алфавита — текст для поздравления, который составила Таня.

Во второй строке задана строка t (|s| ≤ |t| ≤ 2·105), состоящая из прописных и строчных букв латинского алфавита — текст, записанный в газете.

Запись |a| обозначает длину строки a.

Выходные данные

Выведите два целых числа, разделенных пробелом, где:

  • первое число — сколько раз Таня прокричит «УРА!» при составлении поздравления,
  • второе число — сколько раз Таня произнесет «ОПА» при составлении поздравления.

E. Артур и вопросы

жадные алгоритмы математика реализация Тернарный поиск *2200

После скобочных последовательностей Артур увлекся теорией чисел. И у него появилась новая любимая последовательность длины n (a1, a2, ..., an), состоящая из целых чисел, и целое число k, не превышающее n.

Эта последовательность обладала следующим свойством. Если выписать суммы всех ее подотрезков, состоящих из k подряд идущих элементов (a1  +  a2 ...  +  ak,  a2  +  a3  +  ...  +  ak + 1,  ...,  an - k + 1  +  an - k + 2  +  ...  +  an), то элементы выписанной последовательности будут строго возрастать.

Например, для следующего примера: n = 5,  k = 3,  a = (1,  2,  4,  5,  6) последовательность сумм будет иметь вид: (1  +  2  +  4,  2  +  4  +  5,  4  +  5  +  6) = (7,  11,  15), а значит последовательность a удовлетворяет описанному свойству.

Очевидно, в последовательности сумм будет n - k + 1 элемент.

Кто-то (не будем говорить кто) заменил в последовательности Артура некоторые числа на знаки вопроса (если число заменяется, то ровно на один знак вопроса). Нужно восстановить последовательность, чтобы она удовлетворяла нужному свойству, и при этом минимизировать сумму |ai|, где |ai| — абсолютная величина ai.

Входные данные

В первой строке следуют два целых числа n и k (1 ≤ k ≤ n ≤ 105), обозначающих соответственно количество чисел в последовательности Артура и длины подотрезков.

В следующей строке следуют через пробел n элементов ai (1 ≤ i ≤ n).

Если ai  =  ?, значит i-й элемент последовательности Артура был заменен на знак вопроса.

В противном случае, ai ( - 109 ≤ ai ≤ 109) — i-й элемент последовательности Артура.

Выходные данные

Если Артур что-то напутал, и последовательности, соответствующей данной информации нет, выведите единственную строку «Incorrect sequence» (без кавычек).

В противном случае, выведите в первую строку выходных данных n целых чисел — любимую последовательность Артура. Если таких последовательностей несколько, выведите последовательность с минимальной суммой |ai|, где |ai| — абсолютная величина ai. Если и таких последовательностей несколько, разрешается вывести любую из них. Элементы последовательности следует выводить без лидирующих нулей.

C. A и B и командная тренировка

жадные алгоритмы математика реализация теория чисел *1300

A и B готовятся к олимпиадам про программированию.

Важная часть подготовки к соревнованиям по программированию — передача знаний опытных участников тем, кто только начинает заниматься олимпиадами. Поэтому на очередной командной тренировке A решил составить команды так, чтобы новички решали задачи вместе с опытными участниками.

A считает, что оптимальный состав команды из трех человек должен состоять из одного опытного участника и двух новичков. Таким образом, каждый опытный участник сможет поделиться опытом с большим количеством людей.

Однако, B считает, что оптимальным будет состав из двух опытных участников и одного новичка. Таким образом, каждый новичок сможет получить больше знаний и опыта.

В результате, A и B решили, что все команды на тренировке должны быть одного из двух вышеописанных типов. Кроме того, они оба считают, что общее количество команд должно быть как можно больше.

На тренировке присутствуют n опытных участников и m новичков. Сможете ли вы посчитать, какое максимальное количество команд может быть сформировано?

Входные данные

Первая строка содержит два целых числа n и m (0 ≤ n, m ≤ 5 * 105) — количество опытных участников и новичков, присутствующих на тренировке.

Выходные данные

Выведите максимальное количество команд одного из двух описанных в условии типов, которое может быть сформировано.

Примечание

Обозначим опытных участников как О, новичков как Н.

В первом тестовом примере команды выглядят так: (О, Н, Н), (О, Н, Н).

Во втором тестовом примере команды выглядят так: (О, Н, Н), (О, Н, Н), (О, О, Н).

B. Две кнопки

графы жадные алгоритмы кратчайшие пути математика поиск в глубину и подобное реализация *1400

Вася нашел странное устройство. На передней панели устройства расположен дисплей, отображающий некоторое целое положительное число, а также красная и синяя кнопки. При нажатии на красную кнопку число на дисплее увеличивается в два раза. При нажатии на синюю кнопку число на дисплее уменьшается на единицу. Если в какой-то момент число перестает быть положительным, устройство ломается. Дисплей может отображать сколь угодно большие числа. Изначально на дисплее отображается число n.

Вася хочет получить на дисплее число m. Какое минимальное количество нажатий ему придется совершить?

Входные данные

Первая и единственная строка ввода содержит два различных целых числа n и m, разделенных пробелом (1 ≤ n, m ≤ 104).

Выходные данные

Выведите одно число — минимальное количество нажатий на кнопки, необходимое, чтобы получить число m из числа n.

Примечание

В первом примере нужно один раз нажать на синюю кнопку, и затем раз один раз на красную кнопку.

Во втором примере удваивать число невыгодно, поэтому надо девять раз нажать на синюю кнопку.

D. Кубики

жадные алгоритмы игры реализация *2100

Как-то раз Вася с Петей собрали конструкцию из m кубиков, на каждом из которых написано число от 0 до m - 1 (каждое число встречалось ровно один раз). Введём систему координат так, что осью OX является земля, а ось OY направлена вверх. Каждый кубик задаётся координатами своего нижнего левого угла, при этом эти координаты целые для каждого кубика.

Конструкция получилась устойчивой. Это значит, что для любого кубика, который не стоит на земле, есть хотя бы один кубик под ним, с которым он касается по стороне или по углу. Более формально, это значит, что для кубика с координатами (x, y) либо выполняется y = 0, либо существует кубик, имеющий координаты (x - 1, y - 1), (x, y - 1) или (x + 1, y - 1).

Теперь мальчики хотят разобрать конструкцию и выложить все кубики в ряд. Очередной кубик удаляется из конструкции и кладется в ряд справа от уже положенных кубиков, при этом ребята вынимают кубики таким образом, что конструкция остаётся устойчивой. Чтобы разнообразить процесс, ребята решили поиграть в следующую игру. Ребята вынимают кубики из конструкции по очереди. Легко видеть, что после разбора конструкции цифры, написанные на кубиках, образуют число, записанное в m-ичной системе счисления (возможно, содержащее ведущий нуль). Вася хочет, чтобы полученное в результате число было наибольшим, а Петя, наоборот, старается его сделать как можно меньше. Вася ходит первым.

Ваша задача — определить, какое число получится после разбора конструкции, если ребята будут действовать оптимально. Определите остаток от деления ответа на 109 + 9.

Входные данные

В первой строке дано число m (2 ≤ m ≤ 105).

В последующих m строках даны координаты кубиков xi, yi ( - 109 ≤ xi ≤ 109, 0 ≤ yi ≤ 109) в порядке следования чисел, написанных на них. Гарантируется, что исходная конструкция устойчива.

Никакие два кубика не совпадают.

Выходные данные

В единственной строке выведите ответ на задачу.

D. Магазин

жадные алгоритмы *2800

Вася играет в одну очень известную и крайне популярную ММОРПГ-игру. У игрового персонажа (героя) Васи имеется k характеристик; на текущий момент i-я из них равна ai. Также в этой игре имеется общая рейтинговая таблица, в которой участники ранжируются согласно произведению всех характеристик героя, по убыванию величины.

Вася собирается "прокачать" своего персонажа, воспользовавшись услугами игрового магазина. Магазин предлагает n возможных способов улучшить характеристики героя; каждый из этих способов принадлежит одному из следующих трех типов:

  1. сделать i-ю характеристику равной b;
  2. прибавить к i-ой характеристике b;
  3. увеличить i-ю характеристику в b раз.

К сожалению, а) каждым улучшением можно воспользоваться только один раз; б) денег на карточке у Васи хватит только на покупку не более чем m из этих n улучшений. Помогите Васе достичь наибольшего рейтинга в игре. Для этого подскажите Васе, какие из улучшений надо приобрести и в каком порядке их использовать, чтобы рейтинг стал как можно больше. Если имеется несколько вариантов решения, выведите любой.

Входные данные

Первая строка содержит три числа — k, n, m (1 ≤ k ≤ 105, 0 ≤ m ≤ n ≤ 105) — количество характеристик, число продающихся улучшений и количество улучшений, которое может позволить себе Вася.

Во второй строке через пробел указаны k чисел ai (1 ≤ ai ≤ 106), начальные значения характеристик.

Далее в n строках через пробел указаны по 3 числа tj, ij, bj (1 ≤ tj ≤ 3, 1 ≤ ij ≤ k, 1 ≤ bj ≤ 106) — тип j-го улучшения (1 для присваивания, 2 для прибавления, 3 для умножения), номер характеристики, к которой его можно применить, и коэффициент b, с которым он действует.

Выходные данные

Первая строка должна содержать число l (0 ≤ l ≤ m) — число улучшений.

Вторая строка должна содержать через пробел l различных чисел vi (1 ≤ vi ≤ n) — номера улучшений в том порядке, в котором их нужно совершать. Улучшения нумеруются начиная с 1, в том порядке, в котором они следуют во вводе.

C. Chicken or Fish?

жадные алгоритмы *2100

Поликарп летит в самолете и, наконец, наступил его любимый момент — обед. Стюардесса авиакомпании БерАвиа разносит еду всем пассажирам последовательно от 1-го до последнего. Поликарп сидит на месте m, и, следовательно, получит еду m-м по очереди.

Всего в ассортименте есть k блюд, и, зайдя на борт, Поликарп успел посчитать сколько порций каждого вида из блюд есть на борту. Таким образом, известны величины a1, a2, ..., ak, где ai — количество порций i-го блюда.

Стюардесса уже раздала еду m - 1 пассажиру и с вежливой улыбкой спросила Поликарпа, что он предпочитает. В этот самый миг Поликарп осознал, что какие-то блюда уже могли закончиться к этому моменту. Для некоторых из m - 1 пассажиров впереди он заметил, какие блюда им дали. Кроме того от некоторых из m - 1 пассажиров впереди он слышал неразборчивое бормотание, эквивалентное фразе «я разочарован». Такое случалось, когда пассажир просил какое-то блюдо, но ему с вежливой улыбкой отвечали, что оно закончилось. В таком случае, ему было необходимо выбрать другое блюдо из тех, что есть в наличии. Если Поликарп не слышал от пассажира никаких звуков, то значит пассажир выбрал блюдо с первой попытки.

Помогите Поликарпу для каждого блюда выяснить: могло ли оно уже закончиться к моменту обслуживания Поликарпа, или оно обязательно в наличии есть.

Входные данные

Каждый тест в этой задаче состоит из одного или более набора входных данных. Сначала следует строка, содержащая единственное целое число t (1 ≤ t ≤ 100 000) — количество наборов входных данных в тесте. Далее следуют сами наборы, перед каждым из них содержится пустая строка.

В первой строке каждого набора входных данных записаны целые числа m, k (2 ≤ m ≤ 100 000, 1 ≤ k ≤ 100 000) — номер места Поликарпа и количество блюд соответственно.

Вторая строка содержит последовательность из k целых чисел a1, a2, ..., ak (1 ≤ ai ≤ 100 000), где ai — начальное количество порций i-го блюда.

Далее следует m - 1 строка, каждая из которых содержит описание наблюдений Поликарпа о выдаче еды впереди сидящему пассажиру: j-я из этих строк содержит пару целых чисел tj, rj (0 ≤ tj ≤ k, 0 ≤ rj ≤ 1), где tj — это номер блюда, что было выдано j-му пассажиру (или 0, если Поликарп не заметил, какое конкретно блюдо ему дали), а rj — это 1 или 0 в зависимости от того разочарован был j-й пассажир или нет соответственно.

Известно, что сумма ai не меньше m, то есть хотя бы какое-то блюдо Поликарпу точно достанется. Гарантируется, что данные непротиворечивы.

Сумма m по всем наборам входных данных не превосходит 100 000. Сумма k по всем наборам входных данных не превосходит 100 000.

Выходные данные

Для каждого набора входных данных теста выведите ответ в виде отдельной строки. Выведите строку из k букв «Y» или «N». Букву «Y» в позиции i надо выводить, если i-е блюдо могло закончиться к моменту начала обслуживания Поликарпа.

Примечание

В первом наборе входных данных в зависимости от выбора второго пассажира ситуация могла развиваться по-разному:

  • Если он выбрал первое блюдо, то к моменту, когда стюардесса дойдёт до Поликарпа, первого блюда не останется;
  • Если он выбрал четвёртое блюдо, то к моменту, когда стюардесса дойдёт до Поликарпа, четвёртого блюда не останется;
  • В противном случае Поликарпу будет доступно любое из четырёх блюд.

Таким образом, ответ — «YNNY».

Во втором наборе входных данных возможен, например, следующий вариант развития событий. Сначала первый пассажир берёт единственное третье блюдо, затем второй пассажир берёт второе блюдо. Затем третий пассажир просит третье блюдо, но его не оказывается в наличии, поэтому он, разочарованно бормоча, вынужден также довольствоваться вторым блюдом. Затем четвёртый пассажир берёт четвёртое блюдо, и в итоге Поликарп оказывается перед выбором между первым, четвёртым и пятым блюдом.

Аналогичным образом может сложиться вариант развития событий, при котором в момент, когда стюардесса подходит к Поликарпу, не остаётся первого либо пятого блюда (такое может произойти, если одно из этих блюд окажется взятым вторым пассажиром). Нетрудно видеть, что четвёртого блюда хватает с запасом, поэтому Поликарп всегда может рассчитывать на него. Таким образом, ответ — «YYYNY».

C. В поисках имени

*особая задача жадные алгоритмы *1400

Марсианского мальчика зовут s — это имя ему совсем недавно дали родители на совершеннолетие. Теперь ему всюду нравится искать свое имя. Если он видит, что из какой-то строки может быть получено его имя путем удаления нуля или более букв (при этом, оставшиеся буквы остаются в том же порядке), то он очень радуется. Например, если saba», то при виде строк «baobab», «aabbaa», «helloabahello» он очень радуется, а при виде строк «aab», «baaa» и «helloabhello» — нет.

Однако вдвое больше чем радоваться один раз, он любит радоваться два раза! Поэтому, получив в подарок строку t, он хочет разрезать ее на две части (левую и правую) так, чтобы каждая из них его очень радовала.

Помогите s определить количество различных способов разрезать заданную строку t на две части искомым образом.

Входные данные

В первой строке записана строка s, которая состоит из строчных букв латинского алфавита. Длина строки s — от 1 до 1000 букв.

Во второй строке записана строка t, которая тоже состоит из строчных букв латинского алфавита. Длина строки t — от 1 до 106 букв.

Выходные данные

Выведите искомое количество способов разрезать строку t на две части так, что каждая из них очень радует s.

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-му из друзей.

Выходные данные

Выведите единственное целое число, равное минимальной возможной площади фотографии, вмещающей всех друзей.

D. Социальная сеть

жадные алгоритмы *2100

Поликарп устроился на стажировку в одну широко известную в узких кругах социальную сеть. Его тестовое задание — посчитать количество уникальных пользователей, посетивших социальную сеть в течение суток. Поликарпу была предоставлена информация о всех запросах пользователей за этот период времени. Для каждого запроса известно его время и... больше ничего не известно, потому что соответствующие запросам идентификаторы пользователей Поликарп уже успел нечаянно удалить из базы данных. Таким образом, теперь невозможно определить, были ли какие-то два запроса сделаны одним и тем же пользователем или разными.

Хотя нет, кое-что все-таки известно, потому что в тот день был достигнут рекорд — M пользователей одновременно в сети! Кроме того, у Поликарпа есть веские основания полагать, что если пользователь сделал запрос в секунду s, то он был в сети в течение T секунд после этого, то есть в секунды s, s + 1, s + 2, ..., s + T - 1. Таким образом, время нахождения пользователя в сети определяется как объединение временных промежутков вида [s, s + T - 1], соответствующих его запросам. В частности, любой пользователь мог находиться в сети с перерывами, то есть временные промежутки не обязаны в объединении давать ровно один отрезок. Если в секунду пришло несколько запросов, то они могли принадлежать как разным пользователям, так и одному и тому же.

Руководствуясь этими соображениями, Поликарп хочет приписать каждому запросу идентификатор пользователя так, чтобы:

  • количество различных пользователей в сети в любую секунду не превышало M,
  • в некоторую секунду количество различных пользователей в сети достигало значения M,
  • общее количество пользователей (количество различных идентификаторов) было как можно больше.

Помогите Поликарпу справиться с тестовым заданием.

Входные данные

В первой строке заданы три целых числа n, M и T (1 ≤ n, M ≤ 20 000, 1 ≤ T ≤ 86 400) — количество запросов, рекордное число пользователей онлайн и время нахождения пользователя в сети после отправки запроса. Следующие n строк содержат времена запросов в формате «hh:mm:ss», где hh — часы, mm — минуты, ss — секунды. Времена запросов идут в порядке неубывания, некоторые из них могут совпадать. Гарантируется, что все времена и даже все промежутки вида [s, s + T - 1] находятся в пределах одних суток (с 00:00:00 до 23:59:59).

Выходные данные

В первой строке выведите число R — наибольшее возможное количество различных пользователей. Следующие n строк должны содержать идентификаторы пользователей для запросов в том же порядке, в каком запросы заданы во входных данных. Идентификаторы пользователей должны быть целыми числами от 1 до R. Запросам одного и того же пользователя должны соответствовать одинаковые идентификаторы, запросам разных пользователей — разные. Если решений несколько, выведите любое. В случае если решения не существует, выведите «No solution» (без кавычек).

Примечание

Рассмотрим первый пример. Пользователь, отправивший первый запрос, был в сети с 17:05:53 до 17:06:02, пользователь, отправивший второй запрос — с 17:05:58 до 17:06:07, пользователь, отправивший третий запрос — с 17:06:01 до 17:06:10. Таким образом, эти запросы не могут принадлежать трем разным пользователям, потому что тогда бы все эти пользователи были бы в сети, например, в 17:06:01, что невозможно, поскольку M = 2. Значит, какие-то два из этих запросов принадлежали одному пользователю. Один из корректных вариантов представлен в ответе к примеру. Для него пользователь 1 был в сети с 17:05:53 до 17:06:02, пользователь 2 — с 17:05:58 до 17:06:10 (он отправил второй и третий запросы), пользователь 3 — с 22:39:47 до 22:39:56.

Во втором примере только один запрос, следовательно, за сутки сеть посетил только один пользователь и не могло быть двух пользователей в сети одновременно. (Время нахождения пользователя в сети равно объединению временных промежутков для запросов, поэтому пользователи, не отправлявшие запросов, не могли быть в сети.)

F. И снова правильная скобочная последовательность

жадные алгоритмы Строки строковые суфф. структуры Структуры данных хэши *2700

У Поликарпа имеется конечная последовательность из открывающихся и закрывающихся скобок. Чтобы не уснуть на лекции, Поликарп развлекается со своей последовательностью. Он умеет выполнять две операции:

  • добавление любой скобки в любую позицию (в начало, в конец или между любыми двумя имеющимися скобками);
  • циклический сдвиг — перемещение самой последней скобки из конца последовательности в начало.

Поликарп может применить к своей последовательности любое количество операций добавления и циклического сдвига в любом порядке. В результате он хочет получить правильную скобочную последовательность минимальной возможной длины. В случае если таких последовательностей несколько, Поликарпа интересует лексикографически наименьшая. Помогите ему найти такую последовательность.

Правильной скобочной последовательностью называется последовательность открывающихся и закрывающихся скобок, из которой путем добавления символов «1» и «+» можно получить корректное арифметическое выражение. Каждой открывающейся скобке должна соответствовать закрывающаяся. Например, последовательности «(())()», «()», «(()(()))» правильные, а «)(», «(()» и «(()))(» — нет.

Последовательность a1 a2... an лексикографически меньше последовательности b1 b2... bn, если найдется такой номер i от 1 до n, что ak = bk при 1 ≤ k < i и ai < bi. Считайте, что «(»  <  «)».

Входные данные

В первой строке содержится последовательность Поликарпа, состоящая из символов «(» и «)». Длина строки от 1 до 1 000 000.

Выходные данные

Выведите правильную скобочную последовательность минимальной длины, которую Поликарп может получить при помощи своих операций. Если таких последовательностей несколько, выведите лексикографически наименьшую.

Примечание

Последовательность в первом примере уже является правильной, но чтобы получить лексикографически наименьший ответ, нужно выполнить четыре операции циклического сдвига. Во втором примере нужно добавить закрывающуюся скобку между второй и третьей скобками и совершить циклический сдвиг. Можно сначала совершить сдвиг, а потом добавить скобку в конце.

A. Виталий и пирожок

жадные алгоритмы Строки хэши *1100

После тяжелого дня Виталий очень проголодался, он хочет съесть свой любимый пирожок с картошкой. Но всё не так просто. Виталий находится в первой комнате дома с n комнатами, расположенными в ряд и пронумерованными с единицы слева направо. Из первой комнаты можно попасть во вторую комнату, из второй комнаты в третью и так далее — из (n - 1)-й комнаты можно попасть в n-ю. Таким образом, в комнату номер x можно попасть только лишь из комнаты номер x - 1.

Пирожок с картошкой находится в n-й комнате, в которую Виталию необходимо попасть.

Между каждой парой последовательных комнат есть дверь. Чтобы попасть в комнату номер x из комнаты номер x - 1 необходимо открыть дверь между комнатами соответствующим ей ключом. Всего в доме существует несколько типов дверей (задаются прописными латинскими буквами) и несколько типов ключей (задаются строчными буквами латинского алфавита). Ключ типа t подходит к двери типа T тогда и только тогда, когда t и T это одна и та же буква, записанная в разных регистрах. Например, ключом f можно открывать двери F.

В каждой из первых n - 1 комнат лежит ровно по одному ключу некоторого типа, которые Виталий может использовать, чтобы попасть в следующие комнаты. После того, как дверь открыта каким-то ключом, Виталий не достаёт ключ из замочной скважины и незамедлительно бежит в следующую комнату. Иными словами, каждым ключом можно открыть не более одной двери.

Виталий понимает, что он может оказаться в какой-то комнате и у него не будет ключа, который открывает дверь в следующую комнату. Перед началом похода за пирожком с картошкой Виталий может купить любое количество ключей любого типа, чтобы гарантированно добраться до комнаты номер n.

Зная план дома, Виталий хочет узнать, какое минимальное количество ключей ему нужно купить, чтобы точно добраться до комнаты номер n, в которой лежит очень вкусный пирожок с картошкой. Напишите программу, которая поможет Виталию максимально сэкономить.

Входные данные

В первой строке входных данных задано целое положительное число n (2 ≤ n ≤ 105) — количество комнат в доме.

Далее следует строка s длины n - 2. Пронумеруем элементы этой строки слева направо, начиная от единицы.

На нечетных позициях в заданной строке s расположены строчные буквы латинского алфавита — типы ключей, которые лежат в соответствующих комнатах. Таким образом, в каждой нечетной позиции i заданной строки s содержится строчная буква латинского алфавита — тип ключа, который лежит в комнате номер (i + 1) / 2.

На четных позициях в заданной строке заданы прописные буквы латинского алфавита — типы дверей между комнатами. Таким образом, в каждой четной позиции i заданной строки s содержится прописная буква — тип двери, ведущей из комнаты номер i / 2 в комнату номер i / 2 + 1.

Выходные данные

Выведите в первую строку целое число — минимальное количество ключей, которое Виталию необходимо приобрести, чтобы попасть из первой комнаты в комнату номер n.

B. Паша и строка

жадные алгоритмы Конструктив математика Строки *1400

На День рождения Паше подарили очень красивую строку s, состоящую из строчных латинских букв. Буквы в строке пронумерованы от 1 до |s| слева направо, где |s| — длина подаренной строки.

Паше не совсем понравился подарок, и он решил его изменить. После Дня рождения в течение m дней Паша выполнял со своей строкой следующие преобразования — каждый день он выбирал целое число ai и переворачивал участок строки (отрезок) с позиции ai по позицию |s| - ai + 1. Гарантируется, что ai ≤ |s|.

Перед вами стоит следующая задача — определить, как будет выглядеть подаренная Паше строка через m дней.

Входные данные

В первой строке входных данных задана подаренная Паше строка s длины от 2 до 2·105 символов, состоящая из строчных латинских букв.

Во второй строке задано одно целое число m (1 ≤ m ≤ 105) — количество дней, в течении которых Паша изменял подаренную строку.

В третьей строке следуют через пробел m элементов ai (1 ≤ ai; ai ≤ |s|) — с какой позиции Паша начинал изменять строку в i-й день.

Выходные данные

Выведите единственной строкой как будет выглядеть подаренная Паше строка s через m дней.

C. Илья и палочки

жадные алгоритмы математика сортировки *1600

Вечером после контеста Илье стало скучно, и он очень захотел помаксимизировать. Он вспомнил, что у него есть набор из есть n палочек и напильник. Каждая палочка характеризуется своей длиной li.

Илья решил составить из палочек прямоугольники. Причем, помня о своем желании, он решил составлять прямоугольники таким образом, чтобы максимизировать их суммарную площадь. Каждую палочку Илья использует в построении не более одного прямоугольника, при этом могут остаться и неиспользованные палочки. Сгибать палочки нельзя.

Из палочек с длинами a1, a2, a3 и a4 можно построить прямоугольник при выполнении следующих свойств:

  • a1 ≤ a2 ≤ a3 ≤ a4
  • a1 = a2
  • a3 = a4

Прямоугольник можно составить из палочек с длинами, например, 3 3 3 3 или 2 2 4 4. Из палочек, например, 5 5 5 7 прямоугольник составить нельзя.

Также у Ильи есть напильник, которым он может уменьшать длины палочек. Палочки изготовлены из особого материала, поэтому длину каждой палочки можно уменьшить не более чем на единицу. Например, палочку с длиной 5 можно либо не уменьшать, либо получить из нее палочку длины 4.

Вам предстоит ответить на вопрос — какую максимальную суммарную площадь прямоугольников может получить Илья при помощи напильника, если он будет составлять прямоугольники из имеющихся палочек?

Входные данные

В первой строке входных данных задано целое положительное число n (1 ≤ n ≤ 105) — количество палочек, которые есть у Ильи.

Во второй строке входных данных следует n целых положительных чисел li (2 ≤ li ≤ 106) — длины палочек.

Выходные данные

В первой строке выходных данных должно содержаться единственное целое неотрицательное число — максимальная суммарная площадь прямоугольников, которые Илья может составить из имеющихся у него палочек при помощи напильника.

D. Артур и стены

графы жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2400

Наконец настал тот день, когда Артур накопил достаточную сумму денег и решил купить квартиру. Ему предложили отличный вариант — квартиру в самом центре города по отличной цене.

План предложенной Артуру квартиры представляет собой прямоугольник размера n × m, разделенный на квадраты размера 1 × 1. В каждом из таких квадратов находится либо стена (такой квадрат обозначен на плане символом "*"), либо свободное от стены место (такой квадрат обозначен на плане символом ".").

Комнаты в квартире представляют собой максимальные по размеру связные области из клеток, свободных от стен. Две клетки считаются соседними, если они имеют общую сторону.

Давней мечтой Артура была квартира, в которой все комнаты представляют собой прямоугольники. Он просит вас посчитать минимальное количество стен, которое нужно удалить для осуществления его мечты. После удаления из клетки стены в ней образуется свободное место. В процессе удаления стен несколько комнат могут объединиться в одну.

Входные данные

В первой строке входных данных следуют два целых числа n, m (1 ≤ n, m ≤ 2000) — размеры плана квартиры Артура.

В следующих n строках задано по m символов — описание плана квартиры.

Если клетка плана обозначена символом "*", значит в ней находится стена.

Если клетка карты обозначена символом ".", значит в этом месте квартиры свободное от стены место, и эта клетка относится к какой-то из комнат.

Выходные данные

Выведите n строк по m символов — как будет выглядеть план квартиры Артура, после удаления минимального количества стен для того, чтобы каждая комната (максимальная по размеру связная область из свободных от стен мест), представляла собой прямоугольник.

Если возможных ответов несколько, разрешается вывести любой из них.

B. Ам Ням и тёмный парк

жадные алгоритмы поиск в глубину и подобное реализация *1400

Ам Ням — главный герой игры Cut the Rope. Он — смышлёный маленький монстрик, который любит ходить в гости к друзьям, живущим по другую сторону парка. Однако старые тёмные парки могут напугать даже такое жизнерадостное существо как Ам Ням, поэтому он хочет обратиться к вам за помощью.

Парк представляет собой 2n + 1 - 1 площадок, соединённых между собой дорожками так, что схема парка представляет собой полное бинарное дерево глубины n. Более формально, вход в парк ведёт в площадку 1. Выходы из парка расположены на площадках 2n, 2n + 1, ..., 2n + 1 - 1, и эти выходы ведут прямо к домам друзей Ам Няма. От каждой площадки i (2 ≤ i < 2n + 1) отходит двусторонняя дорожка в площадку . Таким образом, от входа в парк можно добраться до любого из выходов, пройдя ровно по n дорожкам.

Чтобы осветить дорожки парка вечером, смотритель парка установил фонари вдоль каждой дорожки. Вдоль дорожки, ведущей из i и в поставлено ai фонарей.

Ам Ням любит считать фонари по пути к своему другу. Ам Ням побаивается пауков, которые живут в парке, поэтому он не любит ходить по мало освещённым маршрутам. Он хочет, чтобы на пути к любому из его друзей суммарно находилось одинаковое количество фонарей, тогда он будет чувствовать себя в безопасности.

Он обратился к вам за помощью в установке дополнительных фонарей. Определите, какое минимальное количество фонарей нужно дополнительно поставить на дорожки парка так, чтобы на пути от входа в парк до любого выхода из парка было одинаковое количество фонарей. На каждую дорожку можно добавить произовольное количество фонарей.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 10) — количество дорожек на пути от входа до любого выхода.

В следующей строке следуют 2n + 1 - 2 числа a2, a3, ... a2n + 1 - 1 — исходное количество фонарей на каждой из дорожек в парке. Число ai обозначает количество фонарей на дорожке между площадками i и . Все числа ai — целые положительные, не превосходящие 100.

Выходные данные

Выведите минимальное количество фонарей, которое нужно добавить на дорожки парка, чтобы Ам Ням чувствовал себя в безопасности.

Примечание

Изображение к тесту из условия. Зелёными отмечены дополнительные фонари.

C. Ам Ням и леденцы

жадные алгоритмы математика Перебор *2000

Милый маленький монстрик Ам Ням очень любит леденцы. Однажды он оказался в весьма необычном положении, в котором ему пришлось применить смекалку и сообразительность, чтобы вдоволь полакомиться конфетами. А вы бы справились, оказавшись на его месте?

Как-то раз, придя к своему другу Эвану, Ам Ням не застал его дома, но зато обнаружил два мешка с конфетами. В первом мешке лежало множество синих леденцов, а во втором — множество красных леденцов. Ам Ням знает, что каждый красный леденец весит Wr грамм, а каждый синий — Wb грамм. При этом, съедая один красный леденец, Ам Ням получает Hr единиц радости, а съедая один синий леденец, Ам Ням получает Hb единиц радости.

Любовь к леденцам — это святое, но переедать тоже нельзя. Ам Ням знает, что если он суммарно съест более C грамм конфет, то ему станет плохо. Ам Ням считает, что оставлять часть конфеты неприлично, поэтому он может съесть леденец только целиком. Как прирождённый математик, Ам Ням быстро определил, сколько конфет какого типа ему надо съесть, чтобы получить максимальное количество единиц радости. А вы справитесь повторить его достижение? Считайте, что в каждом из мешков находится больше конфет, чем способен съесть Ам Ням.

Входные данные

В единственной строке заданы пять целых чисел C, Hr, Hb, Wr, Wb (1 ≤ C, Hr, Hb, Wr, Wb ≤ 109).

Выходные данные

Выведите единственное целое число — максимальное количество единиц радости, которое может получить Ам Ням.

Примечание

В первом тесте из условия Ам Ням может съесть по два леденца каждого вида, и получить тем самым 16 единиц радости.

G. Коварный план пауков

Деревья жадные алгоритмы *3300

Пауки — старые враги Ам Няма. Они не меньше его любят есть леденцы, и поэтому они постоянно пытаются не дать монстрику добраться до любимой сладости. Они придумали коварный план, чтобы заманить Ам Няма в ловушку.

Рассмотрим верёвочную конструкцию из n узелков и n - 1 тросика, соединяющего эти узелки. Конструкция образует единое целое, таким образом, тросы с узелками представляют собой дерево. Каждый тросик образованной конструкции имеет свою длину. К узелку x конструкции привязан леденец, который хочет съесть Ам Ням.

Ему стараются в этом помешать y пауков. Они решили опутать леденец и некоторую часть конструкции паутиной, приклеив его таким образом к как можно большей части верёвочного сооружения.

Каждый паук может покрыть паутиной все тросики на пути между двумя произвольными узелками a и b. Таким образом, y пауков могут покрыть множество тросиков, которое является объединением y путей в данном дереве, причём эти y путей могут произвольным образом пересекаться друг с другом. Пауки хотят, чтобы:

  • узелок, содержащий леденец, был смежен хотя бы одному тросику, покрытому паутиной
  • покрытые паутиной тросики образовывали связную конструкцию (зачем покрывать паутиной части, не связанные с леденцом?)
  • суммарная длина тросов, покрытых паутиной, была как можно больше

Пауки ещё не решили, к какому узелку конструкции будет привязан леденец, и сколько пауков будет покрывать конструкцию паутиной, поэтому они обратились к вам за помощью. Помогите им посчитать оптимальный план для нескольких значений x и y.

Входные данные

В первой строке следуют числа n и q (1 ≤ n, q ≤ 105) — количество узелков в конструкции и количество вопросов, которые вам хотят задать пауки.

Последующие n - 1 строка задают верёвочную конструкцию. i-я строка содержит три числа ui, vi, li (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ li ≤ 1000), обозначающие, что между узелками ui и vi есть тросик длины li.

Последующие q строк описывают вопросы пауков. Так как они хотят, чтобы вы отвечали на их вопросы on-line, они специальным образом закодировали свои вопросы.

В последующих q строках записаны по два числа xi, yi. В первом вопросе пауков x = x1, y = y1.

Чтобы вычислить значения x и y в i-м (2 ≤ i ≤ q) запросе пауков, следует воспользоваться следующими формулами:

где Ansi - 1 — это суммарная длина тросов, опутанных паутиной, при ответе на (i - 1)-й вопрос.

Гарантируется, что 1 ≤ xi, yi ≤ n.

Выходные данные

На каждый вопрос пауков выведите в отдельной строке одно целое число Ansi — суммарную длину тросов, опутанных паутиной в оптимальном плане.

B. Система коррекции ошибок

жадные алгоритмы *1500

Форд Префект устроился веб-разработчиком на небольшое предприятие, специализирующееся на производстве полотенец. Его текущей рабочей задачей является создание системы поиска по веб-сайту предприятия. В процессе разработки он столкнулся с необходимостью сравнивать две строки S и T одинаковой длины на схожесть. После недолгого поиска в интернете, он узнал о расстоянии Хэмминга между двумя строками S и T одинаковой длины, которое определяется как количество позиций, в которых в S и T стоят различные символы. Например, расстояние Хэмминга между словами "permanent" и "pergament" равняется двум, так как эти слова отличаются четвёртой и шестой буквой.

Однако во время поиска информации он также подметил, что современные поисковые системы обладают мощными механизмами по исправлению ошибок в запросе для улучшения качества поиска. Не сильно разбирающийся в человеческих существах, Форд предположил, что самой распространённой ошибкой при вводе является обмен двух произвольных букв строки (не обязательно соседних) местами. Теперь он хочет написать функцию, которая определяет, какие две буквы нужно обменять в строке S, чтобы расстояние Хэмминга между новой строкой S и строкой T было как можно меньше, либо определяет, что подобной заменой расстояние между строками уменьшить нельзя.

Помогите ему в этом!

Входные данные

В первой строке расположено целое число n (1 ≤ n ≤ 200 000) — длина строк S и T.

Во второй строке записана строка S.

В третьей строке записана строка T.

Каждая из строк содержит только строчные латинские буквы.

Выходные данные

В первой строке выведите число x — минимальное возможное расстояние Хэмминга между строками S и T, если в S разрешается обменять не более одной пары букв местами.

Во второй строке либо выведите индексы i и j (1 ≤ i, j ≤ n, i ≠ j), если для достижения минимального возможного расстояния требуется обменять символы на позициях i и j, либо выведите "-1 -1", если менять символы не требуется.

Если возможных ответов несколько, выведите любой.

Примечание

Во втором тесте также будет допустимым вывести i = 2, j = 3.

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 различны.

Выходные данные

Выведите одно число — количество вершин в максимальной клике образованного графа.

Примечание

Если вы вдруг умеете решать эту задачу, не используя специфические свойства графа, представленного в условии задачи, то вам полагается приз в миллион доллларов!

Изображение к тесту из условия:

B. Фото на память - 2 (online mirror version)

жадные алгоритмы Перебор сортировки *1900

Прошло много лет, и на вечеринке снова встретились n друзей. С момента последней встречи техника шагнула далеко вперёд, появились фотоаппараты с автоспуском, и теперь не требуется, чтобы один из друзей стоял с фотоаппаратом, и, тем самым, оказывался не запечатлённым на снимке.

Упрощенно процесс фотографирования можно описать следующим образом. На фотографии каждый из друзей занимает прямоугольник из пикселей: в стоячем положении i-й из них занимает прямоугольник ширины wi пикселей и высоты hi пикселей. Но также, при фотографировании каждый человек может лечь, и тогда он будет занимать прямоугольник ширины hi пикселей и высоты wi пикселей.

Общая фотография будет иметь размеры W × H, где W — суммарная ширина всех прямоугольников-людей, а H — максимальная из высот. Друзья хотят определить, какую минимальную площадь может иметь общая фотография, если лечь может не более половины всех друзей (ведь будет странно, если больше n / 2 солидных джентльменов будут лежать на фотографии, не так ли?)

Помогите им в этом.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1000) — количество друзей.

В последующих n строках следуют по два целых числа wi, hi (1 ≤ wi, hi ≤ 1000), обозначающие размеры прямоугольника, соответствующего i-му из друзей.

Выходные данные

Выведите единственное целое число, равное минимальной возможной площади фотографии, вмещающей всех друзей, если лечь может не более половины всех друзей.

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 метров.

D. Рукопожатия

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1900

30 февраля в Центр олимпиадной подготовки программистов (ЦОПП) Берляндского государственного университета пришли n студентов. Они приходили по одному один за другим. Каждый из них, зайдя внутрь, прежде чем сесть за рабочее место, здоровался с присутствующими, пожимая руку. Каждый из пришедших студентов оставался в ЦОПП до конца дня, не покидая его.

В любой момент времени любые три студента могли объединиться и начать писать командный контест, который длился до конца дня. Команда не отвлекалась от контеста ни на минуту, поэтому очередной зашедший студент, здоровающийся с присутствующими, не пожимал руку участникам команд, пишущим контест. Каждая команда состояла ровно из трех студентов, а каждый студент мог стать членом не более чем одной команды. Разные команды могли начать писать контест в разное время.

Зная, скольким присутствующим каждый студент пожал руку, найдите возможный порядок, в котором студенты могли приходить в ЦОПП. Если такого порядка не существует, то сообщите, что это невозможно.

Обратите внимание, что какие-то студенты могли до конца дня работать самостоятельно, не участвуя в командном контесте.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2·105) — количество студентов, пришедших в ЦОПП. В следующей строке содержатся n целых чисел a1, a2, ..., an (0 ≤ ai < n), где ai — количество студентов, которым i-й студент пожал руку.

Выходные данные

Если искомый порядок студентов существует, в первую строку выведите «Possible», а во вторую строку — перестановку номеров студентов, задающую порядок, в котором студенты приходили в центр. Число i стоящее левее числа j в этой перестановке будет означать, что i-й студент пришел раньше j-го студента. Если ответов несколько, выведите любой.

Если искомого порядка студентов не существует, в единственную строку выведите «Impossible».

Примечание

В первом примере из условия порядок событий мог быть следующим:

  • пришел студент с номером 4 (a4 = 0), здороваться ему было не с кем;
  • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 4;
  • пришел студент с номером 1 (a1 = 2), пожал руку двум студентам (с номерами 4, 5);
  • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 4, 5, 1);
  • студенты с номерами 4, 5, 3 объединились в команду и начали писать контест;
  • пришел студент с номером 2 (a2 = 1), пожал руку одному студенту (с номером 1).

Во втором примере из условия порядок событий мог быть следующим:

  • пришел студент с номером 7 (a7 = 0), здороваться ему было не с кем;
  • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 7;
  • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 7, 5);
  • студенты с номерами 7, 5, 2 объединились в команду и начали писать контест;
  • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем (все писали контест);
  • пришел студент с номером 6 (a6 = 1), пожал руку студенту с номером 1;
  • пришел студент с номером 8 (a8 = 2), пожал руку двум студентам (с номерами 1, 6);
  • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 1, 6, 8);
  • пришел студент с номером 4 (a4 = 4), пожал руку четырем студентам (с номерами 1, 6, 8, 3);
  • студенты с номерами 8, 3, 4 объединились в команду и начали писать контест;
  • пришел студент с номером 9 (a9 = 2), пожал руку двум студентам (с номерами 1, 6).

В третьем примере из условия порядок событий восстанавливается однозначно:

  • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем;
  • пришел студент с номером 3 (или с номером 4) (a3 = a4 = 1), пожал руку студенту с номером 1;
  • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 1, 3 (или 4));
  • оставшийся студент с номером 4 (или с номером 3), должен пожать руку одному студенту (a3 = a4 = 1), однако это невозможно, так как существует всего два варианта событий: либо образовалась команда, и он ни с кем не поздоровается, либо он поздоровается со всеми тремя присутствующими, работающими индивидуально.

E. Берляндская система локального позиционирования

жадные алгоритмы Конструктив реализация хэши *2400

В Берляндии вдоль главной улицы столицы курсирует автобус. Улица начинается от главной площади и представляет собой очень длинный отрезок. На протяжении всей улицы стоит n остановок, i-я из них расположена на расстоянии ai от центральной площади, все расстояния различны, остановки пронумерованы по возрастанию удаленности от площади, то есть ai < ai + 1 для всех i от 1 до n - 1. Автобус начинает свой путь от первой остановки, проезжает остановки 2, 3 и так далее. Он доезжает до остановки с номером n, разворачивается и едет в обратную сторону до остановки 1, проезжая все промежуточные остановки в обратном порядке. После этого он опять начинает движение в сторону остановки n. В течение дня автобус безостановочно курсирует по такому маршруту.

Автобус оснащен берляндской системой локального позиционирования. Когда автобус проезжает через остановку, система фиксирует ее номер.

Одна из ключевых возможностей системы — она может отвечать на запросы о пройденном расстоянии автобуса для участков его пути между некоторой парой остановок. Специальный модуль системы получает на вход информацию о наборе остановок на участке пути, причем номер остановки в наборе встречается столько раз, сколько раз мимо нее проехал автобус. Этот модуль возвращает длину пройденного участка пути (или -1, если длину однозначно определить невозможно). Работа модуля усложняется тем, что номера остановок передаются в запросе не в порядке их посещения, а в неубывающем порядке.

Например, если количество остановок равно 6, а участок пути автобуса начинается на остановке номер 5, заканчивается на остановке номер 3 и проходит остановки следующим образом: , то запрос об этом участке пути будет иметь вид: 3, 4, 5, 5, 6. Если же автобус на участке пути от остановки 5 до остановки 3 успевает проехать мимо 1-й остановки (то есть рассматривается участок, который заканчивается вторым посещением остановки 3 на пути из 5), то запрос будет иметь вид: 1, 2, 2, 3, 3, 4, 5, 5, 6.

Вам предстоит повторить подвиг берляндских программистов и реализовать данную функцию.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 2·105) — количество остановок.

Вторая строка содержит n целых чисел (1 ≤ ai ≤ 109) — расстояние i-й остановки от центральной площади. Числа во второй строке идут в порядке возрастания.

В третьей строке записано целое число m (1 ≤ m ≤ 4·105) — количество остановок, которые проехал автобус на некотором участке пути.

Четвертая строка содержит m целых чисел (1 ≤ bi ≤ n) — номера остановок, которые проехал автобус на участке пути, в отсортированном порядке. Номер остановки встречается такое количество раз, сколько раз ее проехал автобус.

Гарантируется, что запрос соответствует некоторому участку пути.

Выходные данные

В единственную строку необходимо вывести расстояние, которое проехал автобус. Если это невозможно однозначно определить, необходимо вывести  - 1.

Примечание

Первый тест из условия демонстрирует первый, разобранный в условии задачи пример.

Второй тест из условия демонстрирует второй, разобранный в условии задачи пример.

В третьем примере возможны два разных маршрута, которые имеют разные длины, следовательно, искомая длина участка не определена однозначно.

В четвертом примере, несмотря на то, что запросу соответствуют два разных маршрута, они имеют одинаковые длины, следовательно, искомая длина участка определена однозначно.

C. Тавас и Карафс

Бинарный поиск жадные алгоритмы математика *1900

Карафс — это овощ в форме прямоугольника размером 1 × h. Жители Тавасполиса любят карафс и кладут его почти в любую еду. Тавас просто без ума от карафса.

У каждого карафса положительная целочисленная высота. У Таваса есть бесконечная последовательность карафсов, пронумерованная с единицы. Высота i-го карафса равняется si = A + (i - 1) × B.

Зафиксируем целое положительное число m и определим операцию m-укуса как уменьшение высоты не более чем m различных несъеденных карафсов на 1. Карафс считается съеденным когда его высота становится равной нулю.

СаДДас дает Вам n запросов. В каждом запросе вам даются числа l, t и m и Вам надо найти наибольшее число r, такое, что l ≤ r и последовательность sl, sl + 1, ..., sr можно съесть, произведя m-укус не более, чем t раз, либо выведите -1, если такого числа r не существует.

Входные данные

В первой строке входного файла записано три целых числа A, B и n (1 ≤ A, B ≤ 106, 1 ≤ n ≤ 105).

В следующих n строках записана информация о запросах. В i-й строке записаны целые числа l, t, m (1 ≤ l, t, m ≤ 106), обозначающие i-й запрос.

Выходные данные

Для каждого запроса выведите ответ на него в отдельной строке.

D. Тавас и Малекас

жадные алгоритмы Строки строковые суфф. структуры хэши *1900

Тавас — странное создание. Обычно, когда люди спят, от них доносится тихое "zzz", но от спящего Таваса доносится строка s длины n.

Сегодня Тавас уснул в гостях у Малекаса. Пока он спал, Малекас немного поработал со строкой s. У Малекаса есть своя любимая строка p. Он определил все позиции x1 < x2 < ... < xk, где p входит в s. Более формально, для каждого xi (1 ≤ i ≤ k) выполняется условие sxisxi + 1... sxi + |p| - 1 = p.

Затем Малекас записал одну из подпоследовательностей x1, x2, ... xk (возможно, пустую) на бумажке. По определению, b — это подпоследовательность последовательности a тогда и только тогда, когда мы можем получить b из a, удалив некоторые элементы (возможно, удалив все или не удалив ничего вовсе).

Когда Тавас проснулся, Малекас всё ему рассказал. Он не смог вспомнить строку s, но он знает, что и p, и s содержат только строчные буквы английского алфавита, а также у него есть подпоследовательность, записанная на бумажке.

Тавасу стало интересно: сколько различных строк s подходит под имеющуюся информацию? Он спросил СаДДаса, но СаДДас недостаточно умен, чтобы решить задачу. Итак, Тавас попросил вас посчитать это количество для него.

Ответ может быть очень большим, так что Тавас хочет, чтобы вы вывели его остаток от деления на 109 + 7.

Входные данные

В первой строке следуют два целых числа, n и m — длина s и длина записанной Малекасом подпоследовательности соответственно (1 ≤ n ≤ 106 and 0 ≤ m ≤ n - |p| + 1).

Во второй строке следует строка p (1 ≤ |p| ≤ n).

В следующей строке следует m целых чисел через пробел y1, y2, ..., ym, подпоследовательность Малекаса (1 ≤ y1 < y2 < ... < ym ≤ n - |p| + 1).

Выходные данные

В единственной строке выведите ответ по модулю 1 000 000 007.

Примечание

В первом тесте из условия подходят все строки вида "ioioi?", где вместо вопросительного знака может стоять любая буква английского алфавита.

Здесь |x| обозначает длину строки x.

Обратите внимание, что такой строки может не существовать, в таком случае ответ — 0.

B. Школьные оценки

жадные алгоритмы реализация *1700

Вовочка учится программированию в элитной школе. Вовочка и его одноклассники по плану должны написать n контрольных работ, за каждую из которых можно получить оценку от 1 до p. Вовочка очень умный и способен любую контрольную написать на любой балл, однако он не хочет сильно выделяться из толпы. Если сумма его баллов за все контрольные превысит значение x, то одноклассники заметят, что он умный, и начнут надоедать просьбами дать списать домашнюю работу. А если медиана его оценок будет меньше y баллов (определение медианы дано в примечании), то мама решит, что он получает слишком много плохих оценок, и запретит ему играть в компьютерные игры.

Вовочка уже написал k контрольных и получил за них оценки a1, ..., ak. Он не хочет допустить ни первой, ни второй из вышеописанных ситуаций, и теперь ему надо определить, какие же оценки он должен получить за оставшиеся контрольные. Помогите ему в этом.

Входные данные

В первой строке записано 5 целых чисел через пробел: n, k, p, x и y (1 ≤ n ≤ 999, n — нечетное, 0 ≤ k < n, 1 ≤ p ≤ 1000, n ≤ x ≤ n·p, 1 ≤ y ≤ p). Здесь n — количество контрольных, которое должен написать Вовочка по плану, k — количество контрольных, которые он уже написал, p — максимальная возможная оценка за контрольную, x — максимальная сумма баллов, при которой одноклассники ещё не пристают к Вовочке с просьбами, y — минимальный медианный балл, при котором мама ещё разрешает ему играть в компьютер.

Во второй строке следуют k целых чисел, разделённых пробелами: a1, ..., ak (1 ≤ ai ≤ p) — оценки, которые Вовочка получил за уже написанные контрольные.

Выходные данные

Если Вовочке не удастся добиться желаемого результата, выведите «-1».

Иначе выведите n - k целых чисел через пробел — оценки, которые должен получить Вовочка на оставшихся контрольных. Если существует несколько возможных решений, выведите любое из них.

Примечание

Медиана последовательности a1, ..., an при нечетном n (в этой задаче n всегда нечетное) — это элемент, стоящий на (n + 1) / 2-й позиции в порядке следования всех ai по неубыванию.

В первом примере сумма баллов равна 3 + 5 + 4 + 4 + 1 = 17, что не превышает 18, а значит, Вовочке не будут надоедать его одноклассники. А медианный балл последовательности {1, 3, 4, 4, 5} равен 4, что не меньше 4, и поэтому мама разрешит Вовочке играть в компьютер.

Обратите внимание, что не требуется максимизировать сумму баллов или медианный балл. Любой из ответов «4 2», «2 4», «5 1», «1 5», «4 1», «1 4» на первый тест является правильным.

Во втором примере Вовочка получил три пятерки, поэтому, даже если он получит еще две единицы, сумма баллов станет равна 17, а это больше требуемого значения 16. Поэтому ответ на этот тест — «-1».

B. Равноудалённая строка

жадные алгоритмы *1100

Маленькая девочка Сьюзи любит строки. Сегодня она занимается измерением расстояния между ними. Поскольку Сьюзи всё же маленькая девочка, в её строках присутствуют только нули и единицы. Она использует определение расстояния Хэмминга:

Расстоянием между двумя строками s и t равной длины, состоящими из нулей и единиц, будем называть количество позиций i, таких что si не равно ti.

Поскольку, кроме всего прочего, Сьюзи любит симметрию, она хочет найти для двух строк s и t длины n такую строку p длины n, чтобы расстояние от p до s было равно расстоянию от p до t.

Сьюзи уже пора идти спать, помогите ей быстрее найти такую строку p или сообщите, что это невозможно.

Входные данные

В первой строке задана строка s длины n.

Во второй строке задана строка t длины n.

Длина строки n лежит в пределах от 1 до 105. Гарантируется, что обе строки содержат только нули и единицы.

Выходные данные

Выведите строку длины n, состоящую из нулей и единиц, удовлетворяющую условию задачи. Если такой строки не существует выведите в единственной строке "impossible" (без кавычек).

Если возможных ответов несколько — выведите любой.

Примечание

В первом примере возможны разные ответы, а именно — 0010, 0011, 0110, 0111, 1000, 1001, 1100, 1101.

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. Очередь

жадные алгоритмы реализация сортировки *1300

Маленькая девочка Сьюзи ходила с мамой в магазин, и ей стало интересно, как можно улучшить обслуживание очередей.

В очереди стоит n людей. Для каждого человека известно время ti, необходимое на его обслуживание. Человек будет недоволен, если время его ожидания будет больше, чем время его обслуживания. Временем ожидания человека считается суммарное время обслуживания всех людей, стоящих перед ним в очереди. Сьюзи подумала, что если поменять местами некоторых людей в очереди, то получится уменьшить количество недовольных.

Помогите Сьюзи найти какого максимального количества довольных можно добиться, переставляя людей в очереди местами.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 105).

В следующей строке находятся n целых чисел ti (1 ≤ ti ≤ 109), разделенных пробелами.

Выходные данные

Введите единственное число — максимальное количество довольных людей в очереди.

Примечание

Значение 4 достигается, например, при такой расстановке: 1, 2, 3, 5, 15. Таким образом можно сделать всех, кроме человека с временем 5, довольными.

E. Пути и деревья

графы жадные алгоритмы кратчайшие пути *2000

Маленькая девочка Сьюзи случайно нашла тетрадь своего старшего брата. У неё есть много более важных дел, чем решение задач, но эта показалась ей слишком интересной, так что она всё же захотела узнать её решение и решила спросить у вас. Итак, условие задачи.

Пусть дан связный взвешенный неориентированный граф G = (V, E) (здесь V — множество вершин, E — множество рёбер). Деревом кратчайших путей из вершины u называется граф G1 = (V, E1), который является деревом, множество его рёбер E1 является подмножеством множества рёбер исходного графа E, и длины кратчайших путей от u до любой вершины в G и в G1 совпадают.

Вам дан связный взвешенный неориентированный граф G и вершина u. Необходимо найти дерево кратчайших путей заданого графа из вершины u, суммарный вес рёбер которого минимален.

Входные данные

В первой строке находятся два числа n и m (1 ≤ n ≤ 3·105, 0 ≤ m ≤ 3·105) — количество вершин и рёбер графа соответственно.

В следующих m строках находятся по три числа, обозначающих очередное ребро — ui, vi, wi — номера вершин, соединённых ребром, и вес ребра (ui ≠ vi, 1 ≤ wi ≤ 109). Гарантируется, что граф связен, и что между каждой парой вершин существует не более одного ребра.

В последней строке ввода находится целое число u (1 ≤ u ≤ n) — номер стартовой вершины.

Выходные данные

Выведите в первой строке минимальный суммарный вес рёбер дерева.

В следующей строке выведите номера рёбер, входящих в дерево, разделяя их пробелом. Рёбра нумеруются с единицы в порядке следования во входных данных. Номера рёбер можно выводить в любом порядке.

Если возможных ответов несколько, выведите любой.

Примечание

В первом тесте из условия возможны два дерева кратчайших путей:

  • с ребрами 1 – 3 и 2 – 3 (суммарный вес 3);
  • с ребрами 1 – 2 и 2 – 3 (суммарный вес 2);

А, например, дерево с ребрами 1 – 2 и 1 – 3 не будет деревом кратчайших путей для вершины 3, потому что расстояние от вершины 3 до вершины 2 в этом дереве равно 3, а в исходном графе оно 1.

B. Солдат и значки

жадные алгоритмы Перебор реализация сортировки *1200

У полковника есть n значков. Он хочет дать по значку каждому из n его солдатов. У каждого значка есть коэффициент крутизны, который показывает уровень, достигнутый владельцем значка. Коэффициент крутизны можно увеличить на 1 за одну монету.

Для каждой пары солдат один из них должен получить значок, коэффициент которого строго выше второго. Для солдат не важно, какие у них значения коэффициента, требуется лишь, чтобы их коэффициенты отличались друг от друга.

Полковник знает, какому солдату должен достаться какой значок исходно, но есть вот какая проблема. У некоторых значков может быть одинаковый коэффициент крутизны. Помогите ему и подсчитайте, сколько денег надо суммарно заплатить, чтобы у всех значков были различные коэффициенты крутизны.

Входные данные

Первая строка состоит из единственного целого числа n (1 ≤ n ≤ 3000) — количества солдат.

В следующей строке записано n целых чисел ai (1 ≤ ai ≤ n), обозначающих коэффициент крутизны каждого значка.

Выходные данные

Выведите единственное целое число — минимальное количество монет, которые придется выплатить полковнику.

Примечание

В первом тесте из примера мы можем увеличить коэффициент первого значка на 1.

Во втором тесте из примера мы можем увеличить коэффициенты второго и третьего значка на 1.

A. Майк, лягушка и цветок

жадные алгоритмы математика Перебор реализация *2200

У Майка есть лягушка и цветок. Его лягушку зовут Xaniar, а его цветок зовут Abol. Изначально (в момент времени 0), высота Xaniar равна h1 и высота Abol равна h2. Каждую секунду Mike поливает Abol и Xaniar.

Если сейчас высота Xaniar равна h1, а высота Abol равна h2, то через секунду высота Xaniar будет равна , а высота Abol будет равна , где x1, y1, x2 и y2 — некоторые целые числа, а обозначает остаток от целочисленного деления a на b.

Майк — фанат спортивного программирования. Он хочет знать через какое время высота Xaniar станет равна a1 и высота Abol станет равна a2 в первый раз.

Майк попросил Вас помочь ему. Вычислите минимальное время или же скажите, что требуемое событие никогда не произойдет.

Входные данные

В первой строке ввода записано целое число m (2 ≤ m ≤ 106).

Во второй строке ввода записаны целые числа, h1 и a1 (0 ≤ h1, a1 < m).

В третьей строке ввода записаны целые числа, x1 и y1 (0 ≤ x1, y1 < m).

В четвертой строка ввода записаны целые числа, h2 и a2 (0 ≤ h2, a2 < m).

В пяятой строке ввода записаны целые числа, x2 и y2 (0 ≤ x2, y2 < m).

Гарантируется, что h1 ≠ a1 и h2 ≠ a2.

Выходные данные

Выведите минимальное количество секунд, необходмое до того момента, как Xaniar достигнет высоты a1, а Abol достигнет высоты a2, а если же это никогда не произойдёт, выведите -1.

Примечание

В первом тесте из условия высоты меняются следующим образом:

Xaniar:

Abol:

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), номер строки и столбца медведя, меняющего состояние.

Выходные данные

После каждого раунда выведите текущий счет медведей.

B. Вечеринка в Looksery

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2300

В компании Looksery, состоящей из n сотрудников, намечается очередная большая вечеринка. У каждого сотрудника в телефонной книге записан свой номер и номера друзей. Каждый, кто приходит на вечеринку, рассылает сообщения своим контактам о том, как там классно. При этом все стараются как можно больше времени потратить на веселье, поэтому рассылают сообщения всем, без разбора, и даже себе.

Игорь и Макс — разработчики Looksery — затеяли спор, кому сколько придёт сообщений. Игорь указывает n чисел, i-е из которых обозначает, сколько, по его мнению, сообщений придет i-му сотруднику. Если Игорь угадает правильно хотя бы одно из этих чисел, то он выиграет, в противном случае выиграет Макс.

Вы поддерживаете Макса в этом споре, поэтому вам требуется по заданным спискам контактов сотрудников определить, существует ли расклад, при котором Игорь проиграет. Точнее, Вам нужно определить, кто из сотрудников должен прийти на вечеринку, а кто — нет, так чтобы после того, как все пришедшие разошлют сообщения своим контактам, каждый сотрудник получил число сообщений отличное от того, что указал Игорь.

Входные данные

В первой строке задано одно целое число n (1 ≤ n ≤ 100) — количество сотрудников компании Looksery.

В следующих n строках задано описание списков контактов сотрудников. В i-й из этих строк записана строка длины n, состоящая из нулей и единиц, задающая список контактов i-го сотрудника. Если j-й символ i-й строки равен 1, то j-ый сотрудник находится в списке контактов i-го, в противном случае — не находится. Гарантируется, что i-й символ i-й строки всегда равен 1.

В последней строке задано n целых чисел, разделенных пробелами: a1, a2, ..., an (0 ≤ ai ≤ n), где ai обозначает число сообщений, которое должен получить i-й сотрудник по мнению Игоря.

Выходные данные

В первой строке выведите одно целое число m — количество сотрудников, которые должны прийти на вечеринку, чтобы Игорь проиграл спор.

Во второй строке через пробел выведите m целых чисел — номера этих сотрудников в произвольном порядке.

Если же Игорь в любом случае выиграет спор, выведите -1.

Если возможных ответов несколько, выведите любой из них.

Примечание

В первом примере по мнению Игоря первый сотрудник получит 0 сообщений. Т.к. его нет в списке контактов других сотрудников, то он должен прийти на вечеринку, чтобы получить сообщение от самого себя. Если на вечеринку придет только первый сотрудник, то он получит 1 сообщение, второй — 0 сообщений, и третий также 1 сообщение. В итоге Игорь не угадает ни одного числа.

Во втором примере, если единственный сотрудник придет на вечеринку, то он получит 1 сообщение и Игорь победит в споре, следовательно ему не стоит этого делать.

В третьем примере первый сотрудник компании получит 2 сообщения, второй — 3, третий — 2, четвертый — 3.

D. Признаки Хаара

жадные алгоритмы реализация *1900

Первый алгоритм для определения лиц на изображении, который работает в реальном времени, был разработан Paul Viola и Michael Jones в 2001 году. Частью алгоритма является процедура, вычисляющая признаки Хаара. В рамках данной задачи мы рассмотрим упрощённую модель данного понятия.

Рассмотрим прямоугольное изображение, представляющее собой таблицу размера n × m. Элементы таблицы являются целыми числами, задающими яркость каждого пикселя в изображении.

Признак также представляет из себя прямоугольную таблицу размера n × m. Каждая ячейка признака покрашена в черный или белый цвет.

Чтобы вычислить значение данного признака на данном изображении, необходимо произвести следующие шаги. Сначала таблица признака совмещается с таблицей изображения (без переворотов или отражений), таким образом, каждый пиксель оказывается целиком покрыт либо черным, либо белым цветом. Значением признака на изображении называется величина W - B, где W — суммарная яркость пикселей изображения, покрытых белыми ячейками признака, а B — суммарная яркость пикселей, покрытых черными ячейками признака.

Ниже изображены примеры наиболее популярных признаков Хаара.

Ваша задача будет заключаться в определении числа операций, которые необходимы для подсчёта признака с помощью так называемых префиксных прямоугольников.

Префиксным прямоугольником называется любой прямоугольник на изображении, левый верхний угол которого совпадает с левым верхним углом изображения.

У вас есть переменная value, значение которой исходно равняется нулю. За одну операцию вы можете посчитать сумму значений пикселей на любом префиксном прямоугольнике, умножить её на любое целое число и прибавить к переменной value.

Вам задан признак. Необходимо посчитать минимальное число операций, которое требуется для вычисления значения этого признака на произвольном изображении. Для лучшего понимания условия, прочтите объяснение первого примера.

Входные данные

В первой строке через пробел заданы два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в признаке.

Следующие n строк содержат описание признака. Каждая строка состоит из m символов, j-й символ i-й строки равен «W», если этот элемент признака имеет белый цвет и «B», если черный.

Выходные данные

Выведите одно число — минимальное количество операций, которое необходимо произвести, чтобы вычислить значение признака.

Примечание

Первый пример соответствует признаку B, изображенному на картинке. Значение этого признака на изображении размера 6 × 8 равняется разности суммарной яркости пикселей в нижней и верхней половине изображения. Для вычисления его значения необходимо выполнить следующие две операции:

  1. Прибавить сумму пикселей на префиксном прямоугольнике с нижним правым углом в 6 строке и 8 столбце с коэффициентом 1 к переменной value (красной рамкой обозначен прямоугольник);
  2. Прибавить сумму пикселей на префиксном прямоугольнике с нижним правым углом в 3 строке и 8 столбце с коэффициентом  - 2 и переменной value.

Таким образом, все пиксели в нижних трёх строках изображения войдут с коэффициентом 1, а все пиксели в верхних трёх строках изображения войдут с коэффициентом 1 - 2 =  - 1, что и требуется.

G. Счастливая очередь

жадные алгоритмы Конструктив сортировки *2200

Любите ли вы лето? Жители Берляндии любят. А особенно они любят в жаркую летнюю погоду полакомиться мороженым. Так и в этот летний день перед киоском с мороженым образовалась огромная очередь из n берляндцев. Известно, что у каждого из них есть с собой некоторая сумма берляндских долларов. Жители Берляндии сговорчивые, поэтому каждый берляндец всего за 1 доллар согласен поменяться местом с тем, кто стоит в очереди непосредственно за ним. Более формально, если человек a стоял сразу за человеком b, то человек a может заплатить человеку b 1 доллар, и тогда a и b поменяются местами. Разумеется, если у человека a нулевое количество долларов, то он не может поменяться местами с b.

Жители Берляндии — люди странные. В частности, они расстраиваются, когда в очереди перед ними стоит кто-то со строго меньшей суммой денег.

Сможете ли вы помочь жителям Берляндии упорядочиться в очереди так, чтобы все они были счастливы? Счастливый берляндец — это тот, который стоит в очереди первым, либо тот, впереди которого стоит другой житель с не меньшим количеством долларов. Учтите, что берляндцы — люди принципиальные, и согласны меняться местами только указанным выше способом.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 200 000) — количество жителей, которые стоят в очереди.

Во второй строке через пробел записаны n целых чисел ai (0 ≤ ai ≤ 109), где ai — это количество берляндских долларов у человека, стоящего на i-й позиции в очереди. Позиции пронумерованы, начиная с конца очереди.

Выходные данные

Если невозможно сделать так, чтобы все берляндцы стали счастливы, выведите ":(" без кавычек. В противном случае в единственной строке через пробел выведите n целых чисел, i-е из которых должно равняться количеству денег, которое будет у человека, оказавшегося на позиции i в новой очереди. Если существует несколько ответов, выведите любой из них.

Примечание

В первом примере два жителя должны поменяться местами, после чего у первого жителя станет 10 монет и он будет в начале очереди, а у второго - 9 монет, и, соответственно, он будет в конце очереди.

Во втором втором тесте добиться требуемого невозможно

В третьем примере первый человек может поменяться местами со вторым, тогда количества долларов у них будет следующими: 4 11 3, потом второй (в новой очереди) поменяется с третьим, и результирующие количества долларов будут равны: 4 4 10. В такой очереди все будут счастливы.

A. Две подстроки

дп жадные алгоритмы Перебор реализация Строки *1500

Дана строка s. Требуется определить, существуют ли в данной строке s две непересекающиеся подстроки "AB" и "BA" (подстроки могут идти в любом порядке).

Входные данные

На вход подаётся строка s длиной от 1 до 105 символов, состоящая из заглавных букв латинского алфавита.

Выходные данные

Выведите "YES" (без кавычек), если строка s содержит две непересекающиеся подстроки "AB" и "BA", и "NO" иначе.

Примечание

В первом примере входных данных, несмотря на то, что есть подстроки "AB" и "BA", их вхождения пересекаются, поэтому ответ — "NO".

Во втором примере входных данных есть следующие вхождения подстрок: BACFAB.

В третьем примере нет ни подстроки "AB", ни подстроки "BA".

E. Скобки в импликациях

жадные алгоритмы Конструктив математика реализация *2200

Напомним, что импликация — это функция от двух логических аргументов, значение которой ложно тогда и только тогда, когда значение первого аргумента истинно, а второго аргумента ложно.

Для записи импликации используется символ '', а аргументы и результат импликации обозначаются '0' (ложное значение, false) и '1' (истинное значение, true). По определению импликации:

Когда логическое выражение содержит несколько импликаций, то при отсутствии скобок оно будет вычисляться слева направо. Например,

.

При наличии скобок сперва вычисляется выражение в скобках. Например,

.

Для заданного логического выражения определите, можно ли расставить в нем скобки так, чтобы значение логического выражения было ложно. Если это возможно, требуется найти такую расстановку скобок.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 100000) — количество аргументов в логическом выражении.

Вторая строка содержит n чисел a1, a2, ..., an (), обозначающих значения аргументов в выражении в порядке следования.

Выходные данные

Выведите "NO" (без кавычек), если расставить в выражении скобки так, чтобы его значение равнялось 0, невозможно.

Иначе выведите "YES" в первой строке и логическое выражение с нужной расстановкой скобок во второй строке.

Выражение должно содержать только символы '0', '1', '-' (символ с ASCII кодом 45), '>' (символ с ASCII кодом 62), '(' и ')'. Символы '-' и '>' могут встречаться в выражении только в паре ("->") и обозначают импликацию. Суммарное количество логических аргументов (т. е. цифр '0' и '1') в выражении должно равняться n. Порядок следования цифр в выражении слева направо должен совпадать с a1, a2, ..., an.

Выражение должно быть правильным. Более формально, правильное выражение определяется следующим образом:

  • Выражения "0", "1" (без кавычек) — правильные.
  • Если v1, v2 — правильные выражения, то v1->v2 — правильное выражение.
  • Если v — правильное выражение, то (v) — правильное выражение.

Общее количество символов в полученном выражении не должно превысить 106.

Если возможных ответов несколько, разрешается вывести любой.

C. GukiZ ненавидит коробки

Бинарный поиск жадные алгоритмы *2200

Профессор GukiZ не уверен, как он сегодня будет добираться до школы, ведь у него на пути кто-то сложил огромную кучу коробок.

Имеется n куч коробок, расположенных в ряд. В этом ряду i-ая слева куча (1 ≤ i ≤ n) содержит ai коробок. К счастью, m учеников хотят помочь GukiZ убрать коробки с его пути. Ученики работают одновременно. В момент времени 0, все ученики расположены слева от первой кучи. Каждому ученику необходима одна секунда, чтобы передвинуться из этой позиции к первой куче. После этого каждый ученик может выполнять две возможные операции, каждая из которых занимает у него ровно одну секунду. Возможные операции таковы:

  1. Если i ≠ n, студент может переместиться от кучи i к куче i + 1;
  2. Если куча, расположенная перед студентом, непуста, студент может убрать из неё одну коробку.

Ученики GukiZ'а не очень умные, так что им надо, чтобы вы сказали им, как убрать коробки побыстрее (профессор очень нетерпеливый человек и не любит ждать). Они просят вас подсчитать минимальное количество секунд t, за которое они могут убрать все коробки с пути GukiZ'а. Обратите внимание, что по истечении t секунд студенты могут располагаться любым образом, но все коробки к этому моменту должны быть убраны.

Входные данные

В первой строке записано два целых числа, n и m (1 ≤ n, m ≤ 105), количество куч коробок и количество учеников GukiZ'а.

Во второй строке записано n целых чисел a1, a2, ... an (0 ≤ ai ≤ 109), где ai обозначает количество коробок в i-й куче. Гарантируется, что как минимум одна куча непуста.

Выходные данные

В единственной строке выведите одно число — минимальное время, необходимое для того, чтобы убрать все коробки, в секундах.

Примечание

Первый пример: ученик должен сначала пройти к первой куче (1 секунда), затем убрать коробку из первой кучи (1 секунда), затем пройти ко второй куче (1 секунда) и наконец, убрать коробку из второй кучи (1 секунда).

Второй пример: одно из оптимальных решений — послать одного ученика, чтобы убрать одну коробку из первой кучи и одну коробку из третьей кучи, и в это же время послать другого студента убрать одну коробку из третьей кучи. Всего на это уйдёт 5 секунд.

Третий пример: в вашем распоряжении много учеников, можно отправить троих из них убрать ящики из первой кучи, четверых из них — убрать ящики из второй кучи, пятерых — убрать ящики из третьей кучи и четверых — убрать ящики из четвертой кучи. Процесс завершится за 5 секунд, когда завершится уборка коробок из последней кучи.

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).

B. Кёя и перестановка

Бинарный поиск жадные алгоритмы Комбинаторика Конструктив математика реализация *1900

Определим перестановку длины n как последовательность p = [p1, p2, ..., pn], состоящую из n различных целых чисел от 1 до n. Мы говорим, что эта перестановка переводит число 1 в число p1, число 2 в число p2, и так далее.

Кёя Оотори только что узнал про циклическое разложение перестановки. Цикл — это последовательность чисел, таких, что каждый элемент этой последовательности переводится перестановкой p в следующий элемент этой последовательности (а последний элемент цикла переводится в первый элемент цикла). Циклическое разложение — это представление p в виде набора циклов, образующих p. Например, перестановка p = [4, 1, 6, 2, 5, 3] имеет циклическое разложение, которое выглядит как (142)(36)(5): действительно, 1 переводится в 4, 4 переводится в 2, 2 переводится в 1, 3 и 6 меняются местами, и 5 остаётся на месте.

Перестановка может иметь несколько циклических разложений, поэтому Кёя определяет стандартное циклическое разложение перестановки следующим образом. Сперва переставим элементы внутри каждого цикла таким образом, чтобы наибольший элемент был на первом месте. Затем переставим все циклы так, чтобы они были отсортированы по их первому элементу. Для данного выше примера стандартное циклическое разложение чисел [4, 1, 6, 2, 5, 3] равно (421)(5)(63).

Кёя заметил, что если убрать скобки внутри стандартного циклического разложения, то мы получаем ещё одну перестановку! Например, [4, 1, 6, 2, 5, 3] превращается в [4, 2, 1, 5, 6, 3].

Кёя заметил, что некоторые перестановки не меняются после применения операции, описанной выше. Он выписал все перестановки длины n, которые не меняются в результате применения описанной операции, в лексикографическом порядке. К сожалению, его друг Тамаки Суо этот список потерял. Кёя хочет воспроизвести список и ему нужна ваша помощь. Вам даны целые числа n и k, выведите перестановку, которая была k-й в списке Кёи.

Входные данные

В первой строке записано два целых числа n, k (1 ≤ n ≤ 50, 1 ≤ k ≤ min{1018, l}, где l — это длина списка Кёи).

Выходные данные

Выведите через пробел n целых чисел, обозначающих перестановку, являющуюся ответом на вопрос.

Примечание

В первом тесте из условия стандартное циклическое разложение выглядит как (1)(32)(4), что дает нам изначальную перестановку после удаления скобок. Первая перестановка в списке равна [1, 2, 3, 4], а вторая перестановка равна [1, 2, 4, 3].

D. Нудистский пляж

Бинарный поиск графы жадные алгоритмы *2300

Организация Nudist Beach (NB) планирует военную операцию по атаке организации Life Fibers (LF). Во время операции предполагается атаковать и захватить несколько городов, которые на настоящий момент находятся под контролем LF.

Дано n городов, обозначенных от 1 до n, и m двунаправленных дорог между ними. На данный момент в каждом из n городов установлена власть LF. Также в k из этих городов расположены крепости LF, и эти города нельзя захватить ни при каких обстоятельствах. Таким образом, NB может захватить произвольное непустое подмножество городов, не содержащих крепостей LF.

После операции NB придется защищать захваченные города от контратаки. Если они захватят город, соединенный со многими городами, контролируемыми LF, то их врагам будет легко отбить город обратно. Таким образом, NB хотят захватить множество городов, такое, что для каждого захваченного города отношение количества соседей, контролируемых NB, к количеству всех соседей этого города, было как можно больше.

Более формально, NB хотят захватить непустое множество городов S, не имеющих крепостей LF. Сила города определяется как (количество соседей x в S) / (общее количество соседей x), где соседними называются два города, соединённых дорогой. Цель NB — максимизировать силу самого слабого города в S.

Вам дано описание графа и городов с крепостями, найдите непустое подмножество, которое максимизирует силу самого слабого города.

Входные данные

В первой строке ввода находятся три целых числа n, m, k (2  ≤  n  ≤ 100 000, 1 ≤ m ≤ 100 000, 1 ≤ k ≤ n - 1).

Во второй строке ввода находятся k целых чисел, представляющих города с крепостями. Все эти города различны.

В следующих m строках описаны дороги. В i-й из этих строк находятся 2 целых числа ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Гарантируется, что от каждого города отходит как минимум одна дорога.

Между каждой парой городов существует не более одной дороги.

Выходные данные

В первой строке выведите целое число r, обозначающее размер оптимального множества (1 ≤ r ≤ n - k).

Во второй строке выведите r целых чисел, обозначающих города из оптимального множества. Города могут следовать в произвольном порядке. Эта строка не должна содержать ни одного города с крепостью.

Если существует несколько возможных ответов, выведите любой из них.

Примечание

В первом примере достигается значение силы 1/2. Ни одно другое подмножество не даёт строго лучшего ответа.

Во втором примере достигается значение силы 1. Обратите внимание, что подмножество не обязательно должно быть связно.

B. Охана прибирается в комнате

жадные алгоритмы Перебор Строки *1200

Охана Мацумаэ пытается убраться в комнате, имеющей вид сетки размера n на n ячеек. Каждая ячейка изначально либо чистая, либо грязная. Охана может мести метлой по столбцам сетки. Её метла очень необычная: если она проводит ею по чистому квадрату, он становится грязным, а если она проводит по грязному квадрату, он становится чистым. Девушка хочет провести метлой по некоторым столбцам комнаты так, чтобы максимизировать количество полностью чистых строк. Разрешается проводить метлой только по всему столбцу, проводить метлой по части столбца запрещается.

Выведите максимальное количество строк, которые она может сделать полностью чистыми.

Входные данные

В первой строке ввода находится единственное целое число n (1 ≤ n ≤ 100).

В следующих n строках дано описано состояния комнаты. В i-й строке находится строка из n символов, обозначающих состояние i-й строки комнаты. В этой строке j-й символ равен '1', если j-й квадрат в i-й строке чистый, и '0', если он грязный.

Выходные данные

Выведите целое число, равное максимальному возможному количеству строк, являющихся полностью чистыми.

Примечание

В первом примере Охана может подмести 1-й и 3-й столбцы. От этого 1-й и 4-й ряд станут полностью чистыми.

Во втором примере комната уже чистая, так что Охане ничего не надо делать.

B. Дело о беглеце

жадные алгоритмы сортировки Структуры данных *2000

Андроид Андреид — известный на всю галактику детектив. Сейчас он преследует преступника, скрывшегося на планете Окса-5, которая почти полностью покрыта водой.

Единственной сушей на планете является архипелаг из n узких островов, расположенных в ряд. Для удобства представим их в виде непересекающихся отрезков на прямой: остров i имеет координаты [li, ri], причем ri < li + 1 для 1 ≤ i ≤ n - 1.

Для достижения своей цели Андреиду необходимо поставить по мосту между каждой парой соседних островов. Мост длины a можно поставить между i-м и (i + 1)-м островами, если существуют такие координаты x и y, что li ≤ x ≤ ri, li + 1 ≤ y ≤ ri + 1 и y - x = a.

Детектива снабдили m мостами, каждый мост можно использовать не более одного раза. Помогите ему определить, достаточно ли ему выданных мостов для того, чтобы соединить каждую пару соседних островов.

Входные данные

В первой строке даны целые числа n (2 ≤ n ≤ 2·105) и m (1 ≤ m ≤ 2·105) — количество островов и мостов.

В следующих n строках идут по два целых числа li и ri (1 ≤ li ≤ ri ≤ 1018) — координаты островов.

В последней строке даны m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 1018) — длины мостов, которыми снабдили Андреида.

Выходные данные

Если поставить по мосту между каждой парой соседних островов требуемым образом невозможно, на единственной строке выведите "No" (без кавычек), иначе на первой строке выведите "Yes" (без кавычек), а на второй — n - 1 чисел b1, b2, ..., bn - 1, которые означают, что между островами i и i + 1 должен быть использован мост с номером bi.

Если существует несколько правильных ответов, выведите любой. Обратите внимание, что в этой задаче строки "Yes" и "No" надо выводить в правильном регистре.

Примечание

В первом тесте из условия, например, можно расположить второй мост между точками 3 и 8, третий мост между точками 7 и 10 и первый мост между точками 10 и 14.

Во втором тесте из условия первый мост слишком короткий, а второй — слишком длинный, поэтому решения не существует.

A. Дело о нулях и единицах

жадные алгоритмы *900

Андроид Андреид — известный на всю галактику детектив. В свободное от работы время он размышляет о строках из нулей и единиц.

Как-то раз ему в голову пришла строка длины n, состоящая из нулей и единиц. Рассмотрим следующую операцию — мы выбираем любые две соседние позиции в строке, и если в одной из них ноль, а в другой — единица, то разрешается удалить обе эти цифры, в результате чего строка строка становится длины n - 2.

Андреид задумался — какой минимальной длины строка может остаться, если примененить описанную операции некоторое (возможно, нулевое) количество раз?

Входные данные

В первой строке входных данных задано целое число n (1 ≤ n ≤ 2·105) — длина строки, которая пришла в голову Андреиду.

Во второй строке записана строка длины n, состоящая из нулей и единиц.

Выходные данные

Выведите единственное целое число — минимальное возможное значение длины строки, которая останется после применения операций, описанных в условии задачи.

Примечание

В первом тесте из условия строка может меняться следующим образом: .

Во втором тесте из условия строка может меняться следующим образом: .

В третьем тесте из условия строка может меняться следующим образом: .

A. Илья и дипломы

жадные алгоритмы математика реализация *1100

Совсем скоро в Берляндии будет проведена школьная олимпиада по информатике, в которой будут участвовать n школьников.

На собрании жюри олимпиады было принято решение о том, что каждый из n участников, в зависимости от результатов, должен будет получить диплом первой, второй или третьей степени. Таким образом, каждый школьник получит ровно один диплом.

Также было решено, что дипломов первой степени должно быть выдано не менее min1 штук и не более max1 штук, дипломов второй степени должно быть выдано не менее min2 штук и не более max2 штук, а дипломов третьей степени — не менее min3 штук и не более max3 штук.

После некоторых обсуждений было решено выбрать из всех вариантов раздачи дипломов, удовлетворяющих описанным ограничениям, такой, который максимизирует количество участников, которые получат дипломы первой степени. Из всех таких вариантов будет выбран такой вариант, который максимизирует количество участников, которые получат дипломы второй степени. Если и таких вариантов несколько, будет выбран тот вариант, который максимизирует количество дипломов третьей степени.

Выбор наилучшего варианта раздачи дипломов был поручен Илье, одному из лучших программистов Берляндии. Однако у него нашлись более важные дела, поэтому именно вам предстоит выбрать наилучший вариант раздачи дипломов, исходя из описанных ограничений.

Гарантируется, что описанные ограничения таковы, что существует способ выбрать такой вариант раздачи дипломов, что все n школьников, участвующих в олимпиаде, получат диплом какой-то степени.

Входные данные

В первой строке строке входных данных следует одно целое число n (3 ≤ n ≤ 3·106) — количество школьников, которые будут участвовать в олимпиаде.

Во следующей строке входных данных следует два целых числа min1 и max1 (1 ≤ min1 ≤ max1 ≤ 106) — минимальное и максимальное ограничения на количество дипломов первой степени, которые могут быть вручены.

В третьей строке входных данных следует два целых числа min2 и max2 (1 ≤ min2 ≤ max2 ≤ 106) — минимальное и максимальное ограничения на количество дипломов второй степени, которые могут быть вручены.

В следующей строке входных данных следует два целых числа min3 и max3 (1 ≤ min3 ≤ max3 ≤ 106) — минимальное и максимальное ограничения на количество дипломов третьей степени, которые могут быть вручены.

Гарантируется, что min1 + min2 + min3 ≤ n ≤ max1 + max2 + max3.

Выходные данные

Выведите в первую строку выходных данных три числа — сколько дипломов первой, второй и третьй степени будет вручено школьникам при наилучшем варианте раздачи дипломов.

Наилучший вариант раздачи дипломов тот, который максимизирует количество школьников, которые получат дипломы первой степени. Из всех подходящих вариантов наилучший тот, который максимизирует количество участников, которые получат дипломы второй степени. Если и таких вариантов несколько, то наилучший тот, который максимизирует количество дипломов третьей степени.

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-й ножки стола.

Выходные данные

Выведите одно целое число — минимальное число единиц энергии, которое нужно затратить Артуру, чтобы сделать стол устойчивым.

C. Amr и химия

графы жадные алгоритмы кратчайшие пути математика Перебор *1900

Amr любит химию, а особенно эксперименты. Он готовится к новому, интересному эксперименту.

У Amr есть n различных типов реактивов. У каждого реактива i есть изначальный объем ai литров. Для этого эксперимента Amr надо смешать друг с другом все реактивы, но сперва надо, чтобы у всех реактивов были одинаковые объемы. Итак, его задание — сделать так, чтобы у всех реактивов были одинаковые объемы.

Для этого Amr может производить операции двух различных типов.

  • Выбрать некий реактив i и удвоить его текущий объем, то есть его новый объем будет равен 2ai
  • Выбрать некий реактив i и разделить его объем на 2, округлив вниз до целого числа литров, то есть новый объем будет равен

Предположим, что каждый реактив расположен в контейнере бесконечного объема. Теперь Amr интересно, какое минимальное количество операций необходимо для того, чтобы объемы всех химикатов стали равны?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105), количество реактивов.

Во второй строке записано n целых чисел через пробел ai (1 ≤ ai ≤ 105), обозначающих изначальный объем i-го реактивов в литрах.

Выходные данные

Выведите единственное целое число — минимальное количество операций, необходимое, чтобы уравнять объемы всех химикатов.

Примечание

В первом тесте оптимальное решение — разделить объем второго реактива на два и умножить объем третьего химиката на два, чтобы все объемы стали равны 4.

Во втором тесте оптимальное решение — разделить объем первого реактива на два и разделить объемы второго и третьего химиката на два дважды, чтобы все объемы стали равны 1.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

A. Почта в Лайнландии

жадные алгоритмы реализация *900

Все города Лайнландии расположены на координатной прямой Ox. Таким образом, каждый город характеризуется своим положением xi — координатой на оси Ox. Никакие два города не расположены в одной точке.

Жители Лайнландии очень любят слать друг другу письма. Житель страны может отослать письмо другому жителю только в том случае, если адресат живёт в другом городе (так как если они живут в одном городе, то им проще ходить в гости).

Удивительно, но факт: стоимость отправки письма в точности равна расстоянию между городом отправителя и городом получателя.

Для каждого города найдите два значения mini и maxi, где mini — минимальная стоимость отправки письма из i-го города в какой-либо другой город, а maxi — максимальная стоимость отправки письма из i-го города в какой-либо другой город.

Входные данные

В первой строке входных данных содержится целое число n (2 ≤ n ≤ 105) — количество городов в Лайнландии. Во второй строке содержится последовательность из n различных целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xix-координата i-го города. Все xi различны и идут в порядке возрастания.

Выходные данные

Выведите n строк, i-я строка должна содержать два целых числа mini, maxi, разделённых пробелом, где mini — минимальная стоимость отправки письма из i-го города, а maxi — максимальная стоимость отправки письма из i-го города.

D. Одномерный морской бой

Бинарный поиск жадные алгоритмы сортировки Структуры данных *1700

Алиса и Боб любят играть в одномерный морской бой. Они играют на поле, имеющем вид строки из n квадратных клеточек (то есть на таблице 1 × n).

В начале игры Алиса в тайне от Боба расставляет на поле k кораблей, каждый из которых имеет вид прямоугольника 1 × a (то есть занимает последовательность из a подряд идущих клеток поля). Корабли не могут пересекаться и даже касаться друг друга.

После этого Боб делает последовательность «выстрелов». Он называет клетки поля, а Алиса сообщает, что клетка пуста («мимо»), либо что эта клетка принадлежит какому-либо кораблю («попал»).

Вот незадача! Похоже, Алиса любит фантазировать. Видимо, именно по этой причине на каждый ход Боба она отвечает «мимо».

Помогите Бобу уличить Алису в фантазировании — найдите первый такой ход Боба, после которого можно наверняка утверждать, что Алиса слукавила.

Входные данные

В первой строке входных данных содержится три целых числа: n, k и a (1 ≤ n, k, a ≤ 2·105) — размер поля, количество кораблей и размер каждого из них. Гарантируется, что n, k и a такие, что на поле возможно расставить k кораблей размера a, что никакие два не пересекаются и не касаются.

Вторая строка содержит целое число m (1 ≤ m ≤ n) — количество ходов Боба.

Третья строка содержит m различных целых чисел x1, x2, ..., xm, где xi — номер клетки, по которой Боб произвёл i-й выстрел. Клетки нумеруются слева направо от 1 до n.

Выходные данные

Выведите единственное целое число — номер такого первого хода Боба, после которого можно наверняка утверждать, что Алиса сказала неправду. Ходы Боба нумеруются от 1 до m в порядке их совершения. Если искомого хода не существует, то выведите «-1».

C. Новый язык

2-sat жадные алгоритмы *2600

Жить в Байтландии было и так неплохо, но добрый король решил порадовать своих подданных и ввести национальный язык. Собрал он лучших мудрецов и отправил в экспедицию по дальним странам, чтобы они узнали всё про то, как должен быть устроен язык.

Долго ли, коротко ли, вернулись мудрецы из путешествия еще более мудрецами. Заперлись на полгода в столовой, после чего сказали королю: "много есть разных языков, но почти во всех есть буквы, которые делятся на гласные и согласные; внутри слова гласные и согласные необходимо сочетать правильно".

Правил очень много, во всех есть исключения, но наш язык будет лишен таких недочётов! Мы предлагаем ввести формальные правила сочетания гласных и согласных, и включить в язык все слова, которые им удовлетворяют.

Правила составления слов:

  • Буквы делятся на гласные и согласные некоторым определённым образом;
  • Все слова имеют длину ровно n;
  • Есть m правил вида (pos1, t1, pos2, t2). Каждое правило гласит: если на позиции pos1 буква типа t1, то на позиции pos2 буква типа t2.

Вам дана некоторая строка s длины n, не обязательно являющаяся корректным словом нового языка. Среди всех слов языка, не меньших лексикографически, чем строка s, найдите лексикографически минимальное.

Входные данные

В первой строке находится одна строка, состоящая из букв 'V' (Vowel) и 'C' (Consonant), определяющая, какие буквы являются гласными, а какие — согласными. Длина этой строки l — это размер алфавита нового языка (1 ≤ l ≤ 26), при этом в качестве букв алфавита используются первые l букв английского алфавита. Если i-й символ строки равен 'V', то данная буква является гласной, иначе — согласной.

Во второй строке находятся два целых числа n, m (1 ≤ n ≤ 200, 0 ≤ m ≤ 4n(n - 1)) — количество букв в одном слове и количество правил соответственно.

Затем в m строках описаны m правил языка в следующем формате: pos1, t1, pos2, t2 (1 ≤ pos1, pos2 ≤ n, pos1 ≠ pos2, 'V', 'C' }).

В последней строке находится строка s длины n, состоящая из первых l маленьких букв латинского алфавита.

Гарантируется, что никакие два правила не совпадают.

Выходные данные

Выведите лексикографически минимальное слово языка, которое лексикографически не меньше s. Если таких слов нет (например, если в языке вообще нет слов), выведите "-1" (без кавычек).

Примечание

В первом тесте слово "aa" не является словом языка, но слово "ab" является.

Во втором тесте из всех четырех возможных только слово "bb" не является словом языка, однако все остальные слова лексиграфически меньше, поэтому ответа нет.

В третьем тесте из-за последнего правила "abac" не принадлежит языку ("a" — гласная, "c" — согласная). Единственное слово с префиксом "ab" соответствующее заданным правилам — это "abaa". Но оно меньше "abac", поэтому ответом будет "acaa"

B. Инвентаризация

жадные алгоритмы математика *1200

На предприятиях всегда много аппаратуры, мебели, других вещей. И за всеми ними нужно следить. Для этого вещам присваивают номера, по номеру куда проще составить базу и все отслеживать.

В процессе ревизии вы с удивлением обнаружили, что нумерация вещей не последовательна, а некоторые вещи и вовсе имеют одинаковый номер! Это нужно срочно исправить. Вы решили сделать так, чтобы номера вещей шли по порядку, начиная с единицы. При этом сменить номер — это достаточно трудоемкий процесс, и вы бы хотели по максимуму использовать текущую нумерацию.

Вам дана информация о текущих номерах для n вещей, находящихся на предприятии. Перенумеруйте вещи так, чтобы их номера образовывали перестановку чисел от 1 до n, при этом количество вещей, номер которых будет изменён, должно быть минимально. Напомним, что набор из n чисел образует перестановку, если все числа лежат в пределах от 1 до n, и никакие два числа не совпадают.

Входные данные

В первой строке находится одно целое число n — количество вещей (1 ≤ n ≤ 105).

Во второй строке находятcя n чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — исходные номера предметов.

Выходные данные

Выведите n чисел — итоговые номера предметов в порядке следования во входных данных. Если возможных ответов несколько, разрешается вывести любой.

Примечание

В первом тесте нумерация уже представляет собой перестановку, поэтому ничего менять не надо.

Во втором тесте есть две пары совпадающих номеров, в каждой паре нужно сменить по одному номеру.

В третьем тесте необходимо заменить 2 на 1, так как нумерация должна начинаться с единицы.

A. Квадратная Земля?

жадные алгоритмы поиск в глубину и подобное реализация *1300

Кролиха Мэг решила заняться прекрасным, а именно вычислить кратчайшее расстояние между двумя точками на поверхности нашей планеты. Но Мэг... что сказать... ей все нужно попроще... Итак, она уже рассматривает нашу планету как двухмерную окружность. Хотя нет, даже хуже — как квадрат, со стороной n. Таким образом, задача свелась к нахождению кратчайшего пути между двумя точками на квадрате (путь должен проходить по сторонам квадрата). Для простоты будем считать, что вершины квадрата находятся в точках с координатами: (0, 0), (n, 0), (0, n) и (n, n).

Входные данные

Единственная строка содержит 5 целых чисел, разделенных пробелами: n, x1, y1, x2, y2 (1 ≤ n ≤ 1000, 0 ≤ x1, y1, x2, y2 ≤ n) соответственно сторона квадрата, координаты первой точки и координаты второй точки. Гарантируется, что точки лежат на сторонах квадрата.

Выходные данные

В единственной строке нужно вывести кратчайшее расстояние между точками.

B. Простая игра

жадные алгоритмы игры Конструктив математика реализация *1300

Как-то Миша и Андрей играли в очень простую игру. Сначала каждый игрок выбирает целое число в пределах от 1 до n. Пусть Миша выбрал число m, а Андрей — число a.

Затем с помощью генератора случайных чисел выбирается случайное целое число c в пределах от 1 до n (любое целое число от 1 до n может быть выбрано с одной и той же вероятностью), после чего побеждает тот игрок, чьё число оказалось ближе к c. Ребята договорились, что в случае, когда m и a находятся на одинаковом расстоянии от c, выигрывает Миша.

Андрей хочет победить любой ценой и просит вас помочь ему. Вам известно число, выбранное Мишей, и число n. Нужно определить, какое число a, должен выбрать Андрей, чтобы вероятность его победы была максимальной.

Более формально, нужно найти такое целое число a (1 ≤ a ≤ n), чтобы вероятность того, что , была максимальна, где c — выбранное равновероятно случайное целое число от 1 до n (включительно).

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ m ≤ n ≤ 109) — диапазон чисел в игре и выбранное Мишей число соответственно.

Выходные данные

Выведите одно целое число — такое значение a, чтобы вероятность победы Андрея была максимальной. Если таких значений несколько, выведите минимальное из них.

Примечание

В первом тесте: Андрей победит если c равно 2 или 3. Вероятность победы Андрея равна 2 / 3. Если Андрей выберет число a, равное 3, то вероятность победы будет 1 / 3. При a, равном 1, вероятность победы — 0.

Во втором тесте: Андрей победит если c равно 1 или 2. Вероятность победы Андрея — 1 / 2. При остальных вариантах выбора a вероятность победы меньше.

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.

C. КНФ-2

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2500

«Конъюнкти́вная норма́льная фо́рма (КНФ) в булевой логике — нормальная форма, в которой булева формула имеет вид конъюнкции дизъюнкций литералов» (взято с https://ru.wikipedia.org/wiki/КНФ).

Иными словами, КНФ — это формула вида , где & обозначает логическое "И" (конъюнкцию), обозначает логическое "ИЛИ" (дизъюнкцию), а vij — это некоторые логические переменные или их отрицания. Каждое выражение в скобках называется дизъюнктом, а vij называются литералами.

Дана КНФ, в которой фигурируют переменные x1, ..., xm и их отрицания. Известно, что каждая переменная входит не более, чем в два дизъюнкта (суммарно как с отрицанием, так и без). Требуется определить выполнима ли эта КНФ, то есть, существуют ли такие значения переменных, при которых значение КНФ истинно. Если КНФ выполнима, то также требуется привести значения переменных, при которых КНФ истинна.

Гарантируется, что каждая переменная входит в каждый дизъюнкт не более одного раза.

Входные данные

В первой строчке заданы целые числа n и m (1 ≤ n, m ≤ 2·105) — количество дизъюнктов и количество переменных соответственно.

Далее в n строках заданы описания каждого из дизъюнктов. В i-й строке находится сначала число ki (ki ≥ 1) – количество литералов в i-м дизъюнкте, затем через пробел перечислены литералы vij (1 ≤ |vij| ≤ m). Литерал, соответствующий vij, это x|vij| либо с отрицанием, если vij отрицательно, либо без отрицания в противном случае.

Выходные данные

Если КНФ не выполнима, выведите единственную строку "NO" (без кавычек), в противном случае выведите две строки: строку "YES" (без кавычек), а затем строку из m нулей или единиц — значения переменных в выполняющем наборе в порядке от x1 до xm.

Примечание

В первом тестовом примере задана формула . Один из возможных ответов — x1 = ИСТИНА, x2 = ИСТИНА.

B. Биржевые заявки

жадные алгоритмы реализация сортировки Структуры данных *1300

В данной задаче вам потребуется обработать набор заявок на торгах и сформировать по ним биржевой стакан.

Заявка — это желание какого-то участника торгов купить или продать акции. Для каждой заявки i известна ее цена pi, направление заявки di — покупка или продажа, а также количество акций qi, которые участник готов купить или продать по цене pi за акцию. Значение qi называется объемом заявки.

Все заявки с одинаковой ценой p и направлением d объединяются в так называемую аггрегированную заявку, цена которой также равна p, направление — d, а объём складывается из исходных заявок.

Биржевой стакан — это таблица из аггрегированных заявок, в которой сначала идут предложения продажи, отсортированные по убыванию цены, а затем предложения покупки, тоже отсортированные по убыванию цены.

Стакан с глубиной s содержит s лучших аггрегированных заявок по каждому направлению. Заявка на покупку тем лучше, чем у неё цена больше, заявка на продажу тем лучше, чем у неё цена меньше. Если аггрегированных заявок в данном направлении меньше s, то они все попадают в итоговый стакан.

Дано n биржевых заявок на покупку и продажу акций, требуется распечатать биржевой стакан глубины s для этих заявок.

Входные данные

В первой строке записаны два целых числа n и s (1 ≤ n ≤ 1000, 1 ≤ s ≤ 50) — количество заявок и глубина стакана соответственно.

В каждой из следующих n строк следуют символ di (либо 'B', либо 'S'), целое число pi (0 ≤ pi ≤ 105), а также целое число qi (1 ≤ qi ≤ 104) — направление, цена и объем заявки соответственно. Символ 'B' означает покупку, 'S' — продажу. Цена любой заявки на продажу больше цены любой заявки на покупку.

Выходные данные

Выведите не больше чем 2s строк, в которых содержатся аггрегированные заявки биржевого стакана глубины s. Заявки требуется выводить в том же формате что и во входных данных.

Примечание

Будем обозначать (x, y) заявку по цене x с объемом y. В тестовом примере имеются три аггрегированные заявки на покупку: (10, 3), (20, 4), (25, 10) и две на продажу: (50, 8), (40, 1)

Нужно вывести не более двух лучших заявок по каждому направлению, поэтому заявку (10 3), имеющую худшую цену среди заявок на покупку, выводить не нужно.

E. Мишка и боулинг

жадные алгоритмы Структуры данных *3200

Лимак — старый бурый мишка. Он часто ходит в боулинг с друзьями. Сегодня он чувствует себя очень хорошо и старается побить собственный рекорд!

За бросок он получает целое число (возможно, отрицательное) очков. В конце игры счет за i-й бросок умножается на i и все счета суммируются. Таким образом, за k бросков на s1, s2, ..., sk очков общий счёт будет равен . В частности, если бросков не было, общий счёт полагается равным 0.

Лимак сделал n бросков и получил счет ai за i-й из них. Он хочет максимизировать свой общий счет и придумал интересную мысль. Он отменит некоторые броски, сказав, что его что-то отвлекло или что дул сильный ветер.

Лимак может отменить любое количество бросков (возможно, все или ни один из них). Общий счет подсчитывается так, как будто были только не отмененные броски (прочитайте пояснения к тестам). Какой максимальный общий счет может получить Лимак?

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 105).

Вторая строка содержит n целых чисел через пробел a1, a2, ..., an (|ai| ≤ 107) — очки, полученные Лимаком за броски в порядке их совершения.

Выходные данные

Выведите максимальный возможный общий счет после отмены некоторых бросков.

Примечание

В первом примере Лимак должен отменить броски со счетами  - 8 и  - 3. Затем у него останутся три броска со счетами  - 2, 0, 5. Общий счет — 1·( - 2) + 2·0 + 3·5 = 13.

Во втором примере Лимак должен отменить бросок со счетом  - 50. Общий счет равен 1·( - 10) + 2·20 + 3·( - 30) + 4·40 + 5·60 = 400.

A. Мишка и выборы

жадные алгоритмы реализация *1200

Лимак — это мишка гризли, жаждущий власти и признания. Он хочет победить в предстоящих выборах и править всей Берляндией.

Дано n кандидатов, включая Лимака. Мы знаем, сколько граждан собираются проголосовать за каждого кандидата, за i-го кандидата будет отдано ai голосов. Лимак — кандидат номер 1. Чтобы победить на выборах, он должен набрать строго больше голосов, чем любой другой кандидат.

Победа важнее всего, так что Лимак решил сжульничать. Он подкупит некоторых граждан и украдет голоса у своих оппонентов. Чтобы подкупить гражданина, Лимак должен дать ему одну конфетку: граждане — мишки, а мишкам нравятся конфетки. У Лимака немного конфеток и ему интересно, сколько граждан ему надо подкупить?

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 100) — количество кандидатов.

Во второй строке записано n целых чисел через пробел, a1, a2, ..., an (1 ≤ ai ≤ 1000) — количество голосов за каждого кандидата. Лимак — кандидат номер 1.

Обратите внимание, что после подкупа количество голосов за некоторого кандидата может равняться нулю или может превышать 1000.

Выходные данные

Выведите минимальное количество граждан, которых Лимак должен подкупить, чтобы набрать строго больше голосов, чем любой другой кандидат.

Примечание

В первом тесте у Лимака 5 голосов. Один из способов достичь победы — подкупить 4 граждан, желающих проголосовать за третьего кандидата. Количество голосов будет 9, 1, 7, 2, 8 (У Лимака будет 9 голосов). Другой способ — отнять 3 голоса у третьего кандидата и 1 голос у второго кандидата, чтобы получилась следующая ситуация: 9, 0, 8, 2, 8.

Во втором примере Лимак украдет 2 голоса у каждого кандидата. Получится: 7, 6, 6, 6.

В третьем примере Лимак одержит победу, не подкупив ни одного гражданина.

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.

B. Инвариантность дерева

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2100

Деревом размера n называется неориентированный связный граф из n вершин без циклов.

Рассмотрим некоторое дерево из n вершин. Назовем дерево инвариантным относительно перестановки p = p1p2... pn, если для любых двух вершин дерева u и v выполняется утверждение: «Вершины u и v соединены ребром тогда и только тогда, когда вершины pu и pv соединены ребром».

Вам дана перестановка p размера n. Найдите какое-нибудь дерево размера n, инвариантное относительно данной перестановки.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 105) — размер перестановки (совпадающий с размером искомого дерева).

Во второй строке дана сама перестановка pi (1 ≤ pi ≤ n).

Выходные данные

Если искомого дерева не существует, то выведите «NO» (без кавычек).

Иначе выведите «YES», а затем выведите n - 1 строку, в каждой из которых находится по два целых числа — концы очередного ребра искомого дерева. Вершины нумеруются с единицы, порядок следования рёбер и порядок следования вершин внутри ребра не имеет значения.

Если решений несколько, выведите любое из них.

Примечание

В первом тесте из условия, при применении к ребру перестановки, ребро (4, 1) перейдет в ребро (1, 4), ребро (4, 2) перейдет в ребро (1, 3), а ребро (1, 3) перейдет в ребро (4, 2). Все эти ребра есть в ответе.

Можно заметить, что во втором тесте из условия, ни одно дерево не подходит под ограничения.

C. Точки на плоскости

геометрия жадные алгоритмы Конструктив разделяй и властвуй сортировки *2100

На плоскости расположены n точек (xi, yi) с целочисленными координатами от 0 до 106. Расстоянием между двумя точках с номерами a и b назовем следующую величину: (расстояние, вычисляемое по такой формуле, называется манхеттенским расстоянием).

Назовем гамильтоновым путем некоторую перестановку pi от 1 до n. Назовем длиной этого пути величину .

Найдите какой-нибудь гамильтонов путь с длиной не более, чем 25 × 108. Обратите внимание, минимизировать длину гамильтонова пути не требуется.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 106).

В i + 1-й строке даны координаты точки с номером i: xi и yi (0 ≤ xi, yi ≤ 106).

Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите перестановку чисел pi от 1 до n — искомый гамильтонов путь. Перестановка должна удовлетворять неравенству .

Если возможных ответов несколько, разрешается вывести любой.

Гарантируется, что существует подходящая перестановка.

Примечание

В тесте из условия, суммарное расстояние равно:

(|5 - 3| + |0 - 4|) + (|3 - 0| + |4 - 7|) + (|0 - 8| + |7 - 10|) + (|8 - 9| + |10 - 12|) = 2 + 4 + 3 + 3 + 8 + 3 + 1 + 2 = 26

B. Игра

жадные алгоритмы Перебор *1700

Вам дано n чисел a1, a2, ..., an. Вы можете выполнить не более k операций. За одну операцию можно умножить одно из данных чисел на x. Требуется сделать как можно больше, где обозначает побитовое ИЛИ.

Найдите максимально возможную величину после выполнения не более k операций оптимальным образом.

Входные данные

В первой строке записано три целых числа n, k и x (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 10, 2 ≤ x ≤ 8).

Во второй строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

Выходные данные

Выведите максимальное значение побитового ИЛИ для элементов последовательности после выполнения операций.

Примечание

В первом примере любой возможный выбор проведения одной операции приведет к трём различным числам 1, 1, 2, так что результат будет равен .

Во втором примере, если дважды умножить 8 на 3, то получим 72. В этом случае числа будут таковы: 1, 2, 4, 72, так что значение ИЛИ будет равно 79, что является наилучшим возможным результатом.

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. Шагаем!

жадные алгоритмы Конструктив *2700

Перед домом Элис есть песчаная дорожка.

Днем по дорожке ходят люди, каждый их шаг оставляет на дорожке след. Элис не может определить, в каком порядке были оставлены следы, но она может разобрать, оставлен ли каждый след левой или правой ногой. Также она уверена, что все люди ходят, наступая попеременно то левой, то правой ногой.

Например, предположим, что один человек пошел по тропинке и оставил какие-то следы. Пусть следы имеют вид RRLRL в порядке следования по дорожке ('R' обозначает правую ногу, а 'L' обозначает левую ногу). Можно подумать, что это какая-то странная последовательность следов. Но на самом деле, некоторые следы остаются от ходьбы задом наперед!

Есть несколько возможных последовательностей шагов, после которых могли остаться такие следы, например 1 → 3 → 2 → 5 → 4 или 2 → 3 → 4 → 5 → 1 (мы считаем, что расстояние между двумя последовательными шагами может быть произвольным). В двух примерах, приведенных выше, было сделано 2 шага назад и 1 шаг назад соответственно.

Элис заинтересовали эти следы. Каждый раз, когда по дорожке проходит человека, она делает фотографию всех его следов, а затем стирает их все, таким образом, каждый следующий человек оставляет новый набор следов. Мы знаем, что люди ходят, наступая попеременно то правой, то левой ногой, но мы не знаем, с какой ноги делается первый шаг.

Элис хочет знать минимальное возможное количество шагов назад, сделанных человеком, оставившим данную последовательность следов. Пожалуйста, помогите Элис посчитать его. Также вам надо составить возможный вариант последовательности шагов для получения наблюдаемой картины.

Входные данные

В единственной строке записана строка S (1 ≤ |S| ≤ 100 000), содержащая все следы в порядке следования по дорожке от её начала до её конца.

Гарантируется, что есть как минимум одна подходящая последовательность шагов.

Выходные данные

Надо вывести 2 строки.

В первой строке должно быть записано число, обозначающее минимальное количество шагов назад.

Во второй строке должна быть записана перестановка целых чисел от 1 до |S|. Эта перестановка должна обозначать порядок, в котором оставлялись следы.

Если существует несколько правильных ответов, разрешается вывести любой из них.

Примечание

В первом примере один из возможных порядков таков: 2 → 5 → 1 → 3 → 4, из них только шаг 5 → 1 является шагом задом наперед, так что ответ равен 1.

Во втором примере один из возможных порядков — просто пройти по всем следам в порядке следования во вводе, таким образом не будет произведено ни одного шага назад.

В третьем примере в любом случае будет произведено 4 шага назад, так как каждый шаг от L к R будет шагом назад.

A. Чат

жадные алгоритмы Строки *1000

Совсем недавно Вася научился печатать на клавиатуре и выходить в интернет. Он сразу же зашел в чат и решил поздороваться со всеми. Вася напечатал слово s. Считается, что у Васи получилось поздороваться, если из напечатанного слова можно удалить некоторые буквы так, чтобы получилось слово "hello". Например, если Вася напечатал слово "ahhellllloou", считается, что он поздоровался, а если он напечатал "hlelo", считается, что Васю не поняли, и ему не удалось поздороваться. По заданному слову s определите, удалось ли Васе поздороваться.

Входные данные

В первой и единственной строке записано слово s, которое напечатал Вася. Это слово состоит из маленьких букв латинского алфавита, его длина не меньше 1 и не больше 100 букв.

Выходные данные

Если Васе удалось поздороваться, выведите "YES", иначе выведите "NO".

B. Монеты

жадные алгоритмы *1300

В Берляндии готовится денежная реформа — вводятся в обращение новые монеты. После долгих экономических расчетов было решено, что самая дорогая монета должна иметь стоимость ровно n бурлей. Так же для удобства было введено следующее ограничение: стоимость каждой монеты должна делиться на стоимость любой более дешевой монеты. Известно, что среди всех возможных вариантов будет выбран вариант с наибольшим количеством новых монет. Найдите этот вариант — выведите в порядке убывания стоимости всех монет.

Входные данные

В первой и единственной строке записано одно целое число n (1 ≤ n ≤ 106) — стоимость самой дорогой монеты.

Выходные данные

Выведите стоимости всех монет в порядке убывания. Количество монет должно быть наибольшим возможным (с заданной стоимостью n самой дорогой монеты), а так же стоимость каждой монеты должна делиться на стоимость любой более дешевой монеты. Естественно, стоимости всех монет должны быть различны. Если решений несколько, выведите любое.

D. Календарь

жадные алгоритмы Строки *2000

БерНефтьГазАлмазБанк имеет филиалы в n городах, причем n четно. Руководство банка хочет издать календарь с названиями всех этих городов, записанными в два столбца: календарь должен состоять из n / 2 строк одинаковой длины, каждая из которых содержит ровно два названия и ровно один разделитель между ними. При этом название каждого города нужно использовать в календаре ровно один раз. По историческим причинам в качестве разделителя слов в календаре используется символ d.

Руководство БерНефтьГазАлмазБанка хочет показать, что для него одинаково важны все филиалы, поэтому порядок их следования в календаре должен быть беспрестрастным: если «склеить» все n / 2 строк словаря в одну так, чтобы между двумя словами из одной строки были разделители, а между разными строками календаря разделителей не было, получается лексикографически наименьшая возможная строка. Это равносильно тому, что нужно найти лексикографически наименьший календарь, причем сравнение календарей происходит построчно.

Помогите БерНефтьГазАлмазБанку — составьте искомый календарь.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 104, n четное) — количество филиалов. Далее следует n строк — названия городов. Все названия состоят из маленьких латинских букв, их длины не меньше 1 и не больше 10 символов. В следующей строке содержится один символ d (d имеет ASCII-код от 33 до 126 включительно, исключая маленькие латинские буквы) — разделитель между словами в строках календаря. Гарантируется, что составить календарь возможно, и все названия различны.

Выходные данные

Выведите n / 2 строк одинаковой длины — искомый календарь. Каждая строка должна содержать ровно 2 слова и ровно 1 разделитель между ними. Если решений несколько, выведите лексикографически минимальное. Лексикографическое сравнение строк реализует оператор < в современных языках программирования.

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» (две минус единицы без кавычек).

A. Таблица НОД

жадные алгоритмы Конструктив теория чисел *1700

Таблица НОД G размера n × n для массива целых положительных чисел a длины n задается формулой

Напомним, что наибольшим общим делителем (НОД) двух положительных целых чисел x и y называется наибольшее целое число, делящее одновременно и x и y, оно обозначается как . Например, для массива a = {4, 3, 6, 2} длины 4 таблица НОД будет выглядеть следующим образом:

Зная все числа таблицы НОД G, восстановите массив a.

Входные данные

В первой строке содержится число n (1 ≤ n ≤ 500) - длина массива a. Во второй строке содержатся n2 чисел, разделенных пробелом - элементы таблицы НОД G для массива a. Все числа таблицы целые положительные и не превышают 109. Обратите внимание, что элементы заданы в произвольном порядке. Гарантируется, что набору входных данных соответствует некоторый массив a.

Выходные данные

В единственную строку выведите n целых положительных чисел - элементы массива a. Если возможных решений несколько, разрешается вывести любое.

B. Задача робота

жадные алгоритмы реализация *1200

Робот Док находится в зале, в котором в ряд стоят n компьютеров, пронумерованных слева направо от 1 до n. В каждом компьютере содержится ровно одна часть информации, каждую из которых Док хочет в итоге получить. Компьютеры оснащены системой защиты, поэтому, чтобы взломать i-й из них, роботу нужно собрать не менее ai любых частей информации из других компьютеров. Осуществить взлом Док может, только находясь непосредственно рядом с компьютером.

Робот собран по современным технологиям и может двигаться вдоль ряда компьютеров в любом из двух возможных направлений, однако смена направления движения требует большое количество ресурсов Дока. Сообщите минимальное количество смен направлений движения, которое придется сделать роботу для сбора всех n частей информации, если изначально он находится рядом с компьютером с номером 1.

Гарантируется, что существует хотя бы одна последовательность действий робота, приводящая к сбору всей информации. Изначально Док не владеет ни одной из частей информации.

Входные данные

В первой строке содержится число n (1 ≤ n ≤ 1000). Во второй строке содержатся n целых неотрицательных чисел a1, a2, ..., an (0 ≤ ai < n), разделенных пробелом. Гарантируется, что робот может собрать все части информации.

Выходные данные

Выведите единственное число — минимальное количество смен направлений движения, которое придется сделать роботу для сбора всех n частей информации.

Примечание

В первом примере собрать все части информации оптимальным образом можно, собрав сначала часть информации в первом компьютере, затем в третьем, затем сменить направление движения и двигаться ко второму компьютеру, и, имея 2 части информации, собрать последнюю часть.

Во втором примере для сбора всех частей оптимальным образом Док может сначала поехать к четвертому компьютеру и получить часть информации, затем, имея одну часть, к пятому компьютеру и получить еще одну часть информации, затем таким же образом ко второму, потом к третьему, и, наконец, к первому. Смены направления произойдут перед движением от пятого ко второму компьютеру, затем от второго к третьему, далее от третьего к первому.

В третьем примере оптимальный порядок сбора частей из компьютеров может выглядеть так: 1->3->4->6->2->5->7.

C. Марина и Вася

жадные алгоритмы Конструктив Строки *1700

Марина любит строки одинаковой длины, а Вася любит, когда существует третья строка, отличающаяся от них ровно в t символах. Помогите Васе найти хотя бы одну такую строку.

Более формально, вам дано даны две строки s1, s2 длины n и число t. Обозначим за f(a, b) количество символов, в которых отличаются строки a и b. Тогда вам требуется найти любую строку s3 длины n такую, что f(s1, s3) = f(s2, s3) = t. Если такой строки нет, то выведите  - 1.

Входные данные

В первой строке записаны два числа n и t (1 ≤ n ≤ 105, 0 ≤ t ≤ n).

Во второй строке записана строка s1 длины n, состоящая из строчных английских букв.

В третьей строке записана строка s2 длины n, состоящая из строчных английских букв.

Выходные данные

Выведите строку длины n, отличающуюся от s1 и от s2 ровно в t символах. Ваша строка должна состоять только из строчных букв английского алфавита. Если же такой строки не существует, выведите -1.

E. Антон и Ира

жадные алгоритмы Конструктив математика *2300

Антон любит получать из одной перестановки другую переставляя её элементы местами за деньги, а Ира не любит платить за глупые игры. Помогите им получить нужную перестановку, заплатив за это как можно меньше.

Более формально, у нас есть две перестановки p и s чисел от 1 до n. Мы можем поменять местами pi и pj, заплатив за это |i - j| монет. Найдите и выведите наименьшее количество монет,которое потребуется, чтобы получить из перестановки p перестановку s. Так же выведите последовательность операций обмена элементов, при которой достигается ответ.

Входные данные

В первой строке записано одно число n (1 ≤ n ≤ 2000) — длина перестановок.

Во второй строке записана последовательность из n чисел от 1 до n — перестановка p. Каждое число от 1 до n встречается по разу в этой строке.

В третьей строке записана последовательность из n чисел от 1 до n — перестановка s. Каждое число от 1 до n встречается по разу в этой строке.

Выходные данные

В первой строке выведите минимальное количество монет, которое нужно потратить для получения перестановки s из перестановки p.

Во второй строке выведите число k (0 ≤ k ≤ 2·106) - число операций для достижения ответа.

В следующих k строках выведите сами операции. Каждая строка должна содержать два числа i и j (1 ≤ i, j ≤ n, i ≠ j), что означает, что надо поменять местами pi и pj.

Гарантируется, что ответ существует.

Примечание

В первом тесте из условия первым ходом мы поменяем местами числа на позициях 3 и 4, и перестановка p примет вид 4 2 3 1. За это мы заплатим |3 - 4| = 1 монету. Вторым ходом поменяем местами числа на позициях 1 и 3, и получим перестановку 3241, которая равна s. За этот ход мы платим |3 - 1| = 2 монеты. Суммарно мы заплатим 3 монеты.

A. Duff и гири

жадные алгоритмы *1500

Duff тренируется с гирями. Чтобы держать девушку в тонусе, Malek дал ей задание. Он дал ей последовательность гирь. Из них i-я весит 2wi фунтов. За каждый ход Duff может поднять некоторые из оставшихся гирь и выбросить их. Она так делает до тех пор, пока гири не закончатся. Malek попросил её минимизировать количество шагов.

Duff — поклонница спортивного программирования. Поэтому на каждом шагу она может поднять и отбросить последовательность гирь 2a1, ..., 2ak тогда и только тогда, когда существует неотрицательное целое число x, такое, что 2a1 + 2a2 + ... + 2ak = 2x, то есть, сумма весов гирь сама должна быть степенью двойки.

Duff — поклонница спортивного программирования, но не программист. Поэтому она попросила Вас о помощи. Помогите ей минимизировать количество шагов.

Входные данные

В первой строке ввода записано целое число n (1 ≤ n ≤ 106), количество гирь.

Во второй строке записано n целых чисел w1, ..., wn, разделенных пробелами (0 ≤ wi ≤ 106 для каждого 1 ≤ i ≤ n), — показатели весов гирь.

Выходные данные

Выведите минимальное количество шагов на единственной строке.

Примечание

В первом примере: один из оптимальных способов — выбросить первые три гири на первом ходу, а остальные — на втором ходу. Произвести эти действия за один ход невозможно, так как их сумма не является степенью двойки.

Во втором примере: единственный оптиальный способ — на каждом ходу выбрасывать по гире. Это нельзя сделать менее, чем за 4 хода, потому что нет такого поднабора гирь, где гирь было бы больше одной, а сумма равнялась степени двойки.

A. Duff и мясо

жадные алгоритмы *900

Duff не может прожить без мяса! Malek покупает ей мясо в течение n дней. Организм девушки в i-й день требует ровно ai килограммов мяса.

Неподалеку есть большой магазин, в котором Malek хочет закупаться мясом для девушки там. На i-й день там продают мясо по pi долларов за килограмм. Malek знает все числа a1, ..., an и p1, ..., pn. Каждый день он может покупать произвольное количество мяса, также он может отложить часть купленного мяса на потом.

Malek постоянно занять готовкой мяса, так что он пропросил Вас о помощи. Помогите ему минимизировать общую сумму денег, потраченных им на то, чтобы радовать Duff на протяжении n дней.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105), количество дней.

Далее следуют n строк, i-я из них содержит два целых числа, ai и pi (1 ≤ ai, pi ≤ 100), количество мяса, необходимого Duff и цена на мясо в этот день.

Выходные данные

Выведите минимульную сумму, необходимую для того, чтобы радовать Duff n дней.

Примечание

В первом тесте оптимальная стратегия будет: купить 1 кг в первый день, 2 кг во второй день и 3 кг в третий день.

Во втором тесте оптимальная стратегия будет: купить 1 кг в первый день и 5 кг (мясо на второй и третий дни) во второй день.

D. Распределение по командам

жадные алгоритмы Конструктив реализация *2000

Недавно в Центре Олимпиадной Подготовки Программистов Берляндского Государственного Университета завершились личные тренировки. По результатам этих тренировок определяются составы команд на предстоящий сезон командных соревнований. Каждая команда состоит из трех человек. Все обучающиеся в Центре имеют номера от 1 до 3n, а все команды — от 1 до n. Распределение по командам происходит следующим образом: пока остались нераспределенные люди, из них выбирается один с самым лучшим итоговым результатом (капитан новой команды), этот человек выбирает себе двоих сокомандников из оставшихся людей в соответствие со своим списком приоритетов. Список приоритетов каждого человека представляет собой перестановку из всех остальных 3n - 1 студентов, занимающихся в центре, исключая его самого.

Вам даны результаты личных тренировок — перестановка чисел от 1 до 3n, где i-ое число — номер студента, занявшего i-ое место. Никакие два студента не делят одно и то же место. Так же Вам заданы составы получившихся команд в том порядке, в каком эти команды были созданы. Ваша задача — определить список приоритетов для студента с номером k. Если возможных списков приоритетов несколько, найдите лексикографически наименьший.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество получившихся команд. Во второй строке через пробел записано 3n целых чисел от 1 до 3n — результаты личных тренировок. Гарантируется, что каждый студент встречается в результатах ровно один раз.

Далее следует n строк по три целых числа от 1 до 3n — каждая строка описывает состав очередной команды. Члены одной команды могут быть перечислены в любом порядке, но сами команды перечислены в порядке их создания. Гарантируется, что распределение корректно, то есть каждый студент является членом ровно одной команды, и такие команды действительно могли быть получены по данным результатам описанным выше способом.

В последней строке записано число k (1 ≤ k ≤ 3n) — номер студента, для которого требуется найти список приоритетов.

Выходные данные

Выведите 3n - 1 чисел — лексикографически наименьший список приоритетов для студента с номером k.

Лексикографическое сравнение реализует оператор < в современных языках программирования. Список a лексикографически меньше списка b, если существует такое i (1 ≤ i ≤ 3n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj. Учтите, что список 1 9 10 лексикографически меньше чем список 1 10 9. То есть сравнение списков отличается от сравнения строк.

C. Эдо и магниты

жадные алгоритмы Перебор реализация *2300

У Эдо скопилась большая коллекция магнитиков на холодильник — целых n штук!

Он решил купить холодильник и повесить магнитики на его дверь. В магазине на заказ могут изготовить холодильник с любым размером двери, удовлетворяющим следующим ограничениям: дверь холодильника должна быть прямоугольником, а длина и ширина двери — целыми положительными числами.

Эдо придумал, как он хочет расположить магнитики на холодильнике. Он ввел систему координат на плоскости, представил каждый магнит в виде прямоугольника со сторонами, параллельными осям координат, и нарисовал их желаемое расположение.

Теперь он хочет убрать не более k магнитиков (возможно, не убирать ни одного) таким образом, чтобы все магнитики оказались прикреплены к двери холодильника, при этом площадь этой двери должна быть минимально возможной. Магнитик считается прикреплённым к двери холодильника, если его центр лежит на двери или на её границе. Относительное расположение неубранных магнитиков на двери холодильника должно совпадать с заданным на плане.

Поясним последние два предложения. Пусть мы хотим повесить на холодильник два магнита. Пусть магнит задан на плане координатами левого нижнего (x1, y1) и правого верхнего (x2, y2) углов, тогда его центр имеет координаты (, ) (возможно, не целые). Под сохранением относительного положения имеется в виду, что доступна только операция параллельного переноса всех магнитов, то есть вектор, соединяющий центры двух магнитов на изначальном плане, должен быть равен вектору, соединяющему центры этих двух магнитов при их расположении на холодильнике.

Стороны двери холодильника так же должны быть параллельны осям координат.

Входные данные

В первой строке содержатся два n и k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ min(10, n - 1)) — количество магнитиков, имеющихся у Эдо, и максимальное количество магнитиков, которые можно не вешать на холодильник, соответственно.

Следующие n строк описывают план расположения магнитиков, нарисованный Эдо. В каждой строке содержится четыре целых числа x1, y1, x2, y2 (1 ≤ x1 < x2 ≤ 109, 1 ≤ y1 < y2 ≤ 109) — координаты левого нижнего и правого верхнего углов текущего магнитика соответственно. Магнитики могут как накладываться друг на друга частично, так и совпадать полностью.

Выходные данные

Выведите единственное целое число — минимальную площадь двери холодильника, на которую можно повесить хотя бы n - k магнитиков, сохраняя относительный порядок.

Примечание

В первом тестовом примере оптимально удалить либо первый, либо третий магнитик. Если удалить первый магнитик, центры двух других будут лежать в точках (2.5, 2.5) и (3.5, 3.5). Таким образом, достаточно купить холодильник с шириной двери 1 и высотой двери 1, и, соответственно, площадью двери также равной 1.

Во втором тестовом примере неважно, какой из магнитиков удалить, потому что ответ все равно не изменится — нужен холодильник с шириной двери 8 и длиной двери 8.

В третьем тестовом примере ничего удалить нельзя, так как k = 0.

B. Вилбур и массив

жадные алгоритмы реализация *1100

Свинка Вилбур снова развлекается с массивами. У него есть массив a1, a2, ..., an, изначально заполненный нулями. За один ход он может выбрать любой индекс i и либо добавить 1 ко всем элементам ai, ai + 1, ... , an, либо вычесть 1 из всех элементов ai, ai + 1, ..., an. Его задача — получить в итоге массив b1, b2, ..., bn.

Вилбур хочет достичь этой цели за минимальное количество ходов, и поэтому он просит вас вычислить это значение.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 200 000) — длину массива ai. Изначально ai = 0 для всех позиций i, так что этот массив не даётся на входе.

Во второй строке входных данных записано n целых чисел b1, b2, ..., bn ( - 109 ≤ bi ≤ 109).

Выходные данные

Выведите минимальное количество ходов, которые необходимо сделать Вилбуру, чтобы получить ai = bi для всех i.

Примечание

В первом примере Вилбур может последовательно выбрать индексы 1, 2, 3, 4, и 5 и прибавить 1 к соответствующим суффиксам.

Во втором примере Вилбур выбирает индексы 1 и 2 и прибавляет 1 к соответствующим суффиксам, а затем выбирает индекс 4 и вычитает 1.

C. Вилбур и точки

жадные алгоритмы Комбинаторика сортировки *1700

Вилбур играет с множеством из n точек на координатной плоскости. Все точки имеют неотрицательные целочисленные координаты. Более того, если точка (x, y) принадлежит множеству Вилбура, то все точки (x', y'), такие, что 0 ≤ x' ≤ x и 0 ≤ y' ≤ y, также принадлежат этому множеству.

Теперь Вилбур хочет пронумеровать точки в имеющемся множестве, то есть присвоить им различные целочисленные номера от 1 до n. Чтобы нумерация была эстетически приятна, Вилбур хочет выполнить такое условие: если некоторая точка (x, y) получает номер i, тогда всем (x',y') из этого множества, таким, что x' ≥ x и y' ≥ y, надо приписать номер не менее i. Например, для множества из четырех точек (0, 0), (0, 1), (1, 0) и (1, 1) есть две эстетически приятные нумерации: 1, 2, 3, 4, и 1, 3, 2, 4.

Друг Вилбура увидел, как тот играет с точками, и решил усложнить ему задачу. Для любой точки он определяет её специальное значение как s(x, y) = y - x. Теперь он даёт Вилбуру последовательность w1, w2,..., wn и просит найти такую эстетически приятную нумерацию точек множества, что специальное значение точки, получившей номер i, будет равно wi, то есть s(xi, yi) = yi - xi = wi.

Теперь Вилбур очень просит вас помочь ему с этой задачей.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000) — размер множества точек, с которым играет Вилбур.

Далее следуют n строк с описаниями точек. В каждой строке записано два целых числа x и y (0 ≤ x, y ≤ 100 000), задающие одну точку из множества Вилбура. Гарантируется, что все точки различны. Также гарантируется, что если некоторая точка (x, y) присутствует во входных данных, то все точки (x', y'), такие, что 0 ≤ x' ≤ x и 0 ≤ y' ≤ y, также присутствуют во входных данных.

В последней строке записано n целых чисел. i-е из них равно wi ( - 100 000 ≤ wi ≤ 100 000) — требуемое специальное значение точки, которая получит номер i в эстетически приятной нумерации.

Выходные данные

Если существует эстетически приятная нумерация точек множества, такая, что s(xi, yi) = yi - xi = wi, то выведите "YES" в первой строке выходных данных. В противном случае выведите "NO".

Если решение существует, далее выведите n строк. В i-й из них строк выведите точку множества, которая получит номер i. Если существует несколько решений, выведите любое.

Примечание

В первом примере точка (2, 0) получает номер 3, точка (0, 0) получает номер 1, точка (1, 0) получает номер 2, точка (1, 1) получает номер 5 и точка (0, 1) получает номер 4. Легко проверить, что такая нумерация является эстетически прятной, и yi - xi = wi.

Во втором примере специальные значения точек множества равны 0,  - 1 и  - 2, в то время как последовательность, которую Вилбуру даёт друг, равна 0, 1, 2. Следовательно, ответа не существует.

B. Ресторан

дп жадные алгоритмы сортировки *1600

Ресторан получил n заказов на проведение банкета. Каждый заказ характеризуется двумя величинами: моментом начала банкета li и моментом конца ri (li ≤ ri).

Руководство ресторана может либо принять заказ, либо отвергнуть его. Какое наибольшее количество заказов может быть принято?

Никакие два принятых заказа не могут пересекаться, то есть не должно существовать момента времени, который принадлежит сразу двум принятым заказам. Если один из заказов начинается в момент, когда заканчивается другой, то они не могут быть приняты вместе.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 5·105) — количество заказов. В каждой из следующих n строк находится пара целых чисел li, ri (1 ≤ li ≤ ri ≤ 109).

Выходные данные

Выведите наибольшее количество заказов, которые могут быть приняты.

C. Алиса, Боб и шоколад

жадные алгоритмы *1200

Алиса и Боб любят игры и соревнования. И сейчас они готовы приступить к новой игре. В ряд они положили n плиток шоколада. Алиса начинает последовательно кушать шоколадки в порядке слева направо, а Боб — в порядке справа налево. Для каждой шоколадки известно время, за которое ее съедает игрок (Алиса и Боб кушают шоколад с одинаковой скоростью). Как только игрок съедает очередную шоколадку, он тут же переходит к следующей. Есть параллельно две шоколадки, не доедать текущую или делать остановки запрещено правилами игра. В том случае, если игроки одновременно пытаются начать кушать одну шоколадку, то Боб как настоящий джентльмен уступает Алисе.

Сколько плиток съест каждый из участников игры?

Входные данные

В первой строке входного файла записано целое число n (1 ≤ n ≤ 105), n — количество плиток на столе. Во второй строке задана последовательность t1, t2, ..., tn (1 ≤ ti ≤ 1000), где ti обозначает время в секундах необходимое для того, чтобы скушать i-ую (в порядке слева направо) плитку шоколада.

Выходные данные

Выведите два числа a и b, где a это количество плиток, съеденных Алисой, а b — Бобом.

C. Сделай палиндром

жадные алгоритмы Конструктив Строки *1800

Строка называется палиндромом, если она одинаково читается слева-направо и справа-налево. Например, строки «kazak», «oo», «r» и «mikhailrubinchikkihcniburliahkim» — палиндромы, а строки «abb» и «ij» — нет.

Замена символа — это выбор позиции символа в строке и замена символа в этой позиции на произвольную другую строчную букву. Таким образом, при замене символа длина строки не изменяется.

Задана строка s. Вы можете сначала заменить в строке s некоторые символы, а затем произвольным образом поменять местами порядок символов в строке. Изменение порядка не считается заменами.

Необходимо получить палиндром за наименьшее количество замен. Если это возможно сделать несколькими способами, то нужно получить лексикографически наименьший палиндром. Таким образом в первую очередь необходимо минимизировать количество замененных символов, а среди таких способов найти какой наименьший лексикографически (алфавитно) палиндром можно получить в результате.

Входные данные

В единственной строке входных данных находится строка s (1 ≤ |s| ≤ 2·105), состоящая из строчных латинских букв.

Выходные данные

Выведите лексикографически наименьший палиндром, который можно получить за наименьшее количество замен.

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'.

Во втором примере Кевин может инвертировать всю строку, и это не изменит результат.

B. Коровам - колокольчиков!

Бинарный поиск жадные алгоритмы *1400

Кевин Сан хочет переместить свою драгоценную коллекцию из n колокольчиков (конечно же коровьих) из Мухоглинска в Эксетер, а там — представьте себе! — на полях растёт не кукуруза, а настоящая трава. Для переезда ему надо упаковать все свои колокольчики в k коробок фиксированного размера. Чтобы коллекция не пострадала в ходе перевозки, Кевин не собирается класть в одну коробку более двух колокольчиков. Так как Кевин хочет минимизировать расходы, требуется найти минимальный размер коробок, которые он может использовать для упаковки всей своей коллекции.

Кевин — дотошный коллекционер, и он знает, что размер i-го колокольчика в его коллекции равен целому числу si. Кевин хранит колокольчики упорядоченными, а именно si - 1 ≤ si для всех i > 1. Также Кевин великолепно упаковывает вещи, поэтому он может поместить один или два колокольчика в коробку размера s тогда и только тогда, когда сумма их размеров не превышает s. Используя информацию о коллекции Кевина, найдите минимальное s, такое что Кевин сможет упаковать все свои n колокольчиков в k коробок размера s.

Входные данные

В первой строке входных данных находятся два числа n и k (1 ≤ n ≤ 2·k ≤ 100 000), обозначающие количество колокольчиков и количество коробок соответственно.

В следующей строке записано n целых чисел s1, s2, ..., sn (1 ≤ si ≤ 1 000 000) — размеры колокольчиков в коллекции Кевина. Гарантируется, что si следуют в порядке неубывания.

Выходные данные

Выведите единственное целое число — минимальное s, такое что Кевин сможет упаковать все свои n колокольчиков в k коробок размера s.

Примечание

В первом примере Кевину придётся упаковать оба колокольчика в одну коробку.

Во втором примере Кевин может упаковать колокольчики следующим образом: {2, 3}, {5} и {9}.

В третьем примере оптимальное решение следующее: {3, 5} и {7}.

A. Сортировка вагонов

жадные алгоритмы Конструктив *1600

На бесконечно длинном железнодорожном пути стоит состав из n вагонов, пронумерованных от 1 до n (номера всех вагонов различны) и предварительно перемешанных. Дэвид Блейн хочет отсортировать вагоны по возрастанию их номеров. За одно действие он может заставить один из вагонов исчезнуть со своего места и телепортировать его либо в начало состава, либо в конец, по своему усмотрению. Какое минимальное количество действий потребуется Дэвиду Блейну, чтобы отсортировать состав?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100 000) — количество вагонов в составе.

Во второй строке записаны n целых чисел pi (1 ≤ pi ≤ n, pi ≠ pj при i ≠ j) — последовательность номеров вагонов в составе.

Выходные данные

Выведите целое число — минимальное количество действий, необходимое для сортировки вагонов.

Примечание

В первом примере можно сначала телепортировать 4-й вагон, а затем 5-й вагон в конец состава.

A. Флеш-карты

жадные алгоритмы реализация сортировки *800

У Эдварда есть n флеш-карт объемом a1, a2, ..., an мегабайт и большой файл размера m мегабайт.

Найдите минимальное количество флеш-карт, на которые можно записать файл Эдварда, если он может разделить свой файл на части произвольного размера.

Входные данные

В первой строке входных данных содержится целое положительных число n (1 ≤ n ≤ 100) — количество флеш-карт.

Во второй строке входных данных содержится целое положительное число m (1 ≤ m ≤ 105) — размер файла Эдварда в мегабайтах.

В следующих n строках входных данных содержится последовательность целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 1000) — размеры флеш-карт в мегабайтах.

Гарантируется, что ответ существует, то есть сумма всех ai не меньше чем m.

Выходные данные

В единственной строке выходных данных должно содержаться целое положительное число — минимальное количество флеш-карт, на которые можно записать файл Эдварда, если он может разделить свой файл на части произвольного размера.

Примечание

В первом тестовом примере Эдварду нужно 2 флеш-карты — первая и третья.

Во втором тестовом примере Эдварду нужны все 3 флеш-карты.

В третьем тестовом примере Эдварду нужна тольно одна флеш-карта и он может выбрать любую из имеющихся — либо первую, либо вторую.

D. Гаджеты за доллары и фунты

Бинарный поиск жадные алгоритмы *2000

Нура хочет купить k гаджетов. У неё есть s бурлей. В магазине каждый из m гаджетов продается либо за доллары, либо за фунты. Таким образом, каждый гаджет характеризуется типом валюты (и стоимостью в этой валюте), за которую он продается. Тип валюты и цена гаджета в этой валюте не меняются со временем.

Покупки Нура может совершать в течение n дней. Для каждого дня известен курс доллара и курс фунта, то есть известна стоимость конвертации бурлей в доллары и фунты.

Каждый день (от 1 до n) Нура может купить любые из гаджетов по текущему курсу. За день можно покупать произвольное количество гаджетов. Каждый гаджет можно купить не более одного раза за все n дней.

Помогите Нуре определить номер наименьшего дня, к концу которого у неё будет k гаджетов. Нура всегда расплачивается бурлями, которые конвертируются по курсу дня покупки. Нура не может купить доллары или фунты, она всегда хранит у себя только бурли. Гаджеты пронумерованы целыми числами от 1 до m в порядке их появления во входных данных.

Входные данные

В первой строке находятся четыре целых числа n, m, k, s (1 ≤ n ≤ 2·105, 1 ≤ k ≤ m ≤ 2·105, 1 ≤ s ≤ 109) — количество дней, общее количество гаджетов, количество гаджетов, которые хочет купить Нура и количество бурлей в распоряжении Нуры.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — стоимость одного доллара в бурлях в i-й день.

В третьей строке находятся n целых чисел bi (1 ≤ bi ≤ 106) — стоимость одного фунта в бурлях в i-й день.

Далее в m строках находятся по два целых числа ti, ci (1 ≤ ti ≤ 2, 1 ≤ ci ≤ 106) — тип гаджета и его стоимость. Если тип гаджета равен 1, то он продается только за доллары и его стоимость указана в долларах. Если тип гаджета равен 2, то он продается только за фунты и его стоимость указана в фунтах.

Выходные данные

Если Нура не сможет купить k гаджетов, в единственной строке выведите число -1.

Если же покупка k гаджетов возможна, в первой строке выведите число d — номер наименьшего дня, к концу которого у Нуры будет k гаджетов. В следующих k строках выведите по два целых числа qi, di — номер гаджета и день в который гаджет был куплен. Все qi должны быть различны, di могут совпадать (то есть в один день Нура может купить несколько гаджетов). Дни пронумерованы от 1 до n. Пары qi, di можно выводить в любом порядке.

Если возможных способов купить гаджеты за минимальное количество дней d несколько, то выведите любой из них.

F. Лягушки и комары

жадные алгоритмы Структуры данных *2500

На координатной прямой Ox сидят n лягушек. Для каждой известны две величины: xi и ti — позиция и начальная длина языка i-й лягушки (гарантируется, что все позиции xi различны). Последовательно в хронологическом порядке на прямую садятся m комаров. Для каждого комара известны два параметра pj — координата точки, куда сел j-й комар, и bj — размер j-го комара. Лягушки и комары представляют собой точки на координатной прямой.

Лягушка может съесть комара, если комар находится в одной точке с лягушкой или правее нее, и расстояние от лягушки до комара не превосходит длины языка лягушки.

Если в какой-либо момент времени комара может съесть несколько лягушек, то его съедает самая левая из лягушек (с минимальным xi). Сразу после того как лягушка съедает комара, ее язык мгновенно вырастает на величину равную размеру этого комара. Возможно, после этого лягушка сможет съесть (и съедает) других комаров.

Выведите для каждой лягушки две величины — количество съеденных комаров и длину языка, после того как все комары сядут на прямую, а лягушки съедят всех комаров, которых смогут.

Очередной комар садится на прямую лишь после того, как будут съедены все возможные комары после приземления предыдущего комара. Комары заданы в порядке времени приземления на прямую.

Входные данные

В первой строке содержится пара целых чисел n и m (1 ≤ n,  m ≤ 2·105) — количество лягушек и комаров.

В следующих n строках содержится по два целых числа xi и ti (0 ≤ xi,  ti ≤ 109) — положение и начальная длина языка i-й лягушки. Гарантируется, что все xi различны.

Далее в m строках содержится по два целых числа pj и bj (0 ≤ pj,  bj ≤ 109) — положение и размер j-го комара.

Выходные данные

Выведите n строк. В i-й из них должны содержаться два целых числа ci и li — количество комаров съеденных i-й лягушкой и длина языка i-й лягушки.

D. Великая победа

графы Деревья жадные алгоритмы кратчайшие пути поиск в глубину и подобное *1800

Шапур победил Валериана. Эта победа была так важна, что Шапур решил вырезать на скале сцену поражения Валериана. Теперь ему нужно было найти наилучшее место и увековечить там свою победу!

Он решил посетить все n городов Персии чтобы найти наиболее подходящую скалу. Но недавняя война утомила его, и он не хотел много путешествовать. Поэтому он хотел посетить каждый из этих n городов хотя бы один раз. При этом пройденное расстояние должно быть как можно меньше. Персидские города соединены двусторонними дорогами. Из каждого города можно дойти до любого другого, причем единственным способом.

Все города пронумерованы от 1 до n. Шапур сейчас в городе 1, и он хочет посетить все остальные города, пройдя как можно меньше. Шапур может закончить свое путешествие в любом городе.

Найдите расстояние, которое Шапур пройдет.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — количество городов.

Следующие n - 1 строк содержат по 3 целых числа xi, yi и wi (1 ≤ xi, yi ≤ n, 0 ≤ wi ≤ 2 × 104). xi и yi — номера двух городов, соединенных дорогой, а wi — длина дороги.

Выходные данные

Выведите одно число — минимальную длину пути Шапура.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

E. Новый год и три мушкетёра

жадные алгоритмы сортировки Структуры данных *2400

Знаете ли вы историю о трёх мушкетёрах? Независимо от ответа, вам требуется им помочь.

Ришелимакьё — кардинал в городе Медведисе. Он нашел трех отважных воинов и назвал их тремя мушкетёрами. Сила Атоса равна a, сила Бортоса равна b, а сила Сарамиса равна c.

2015 год почти закончился, а ещё предстоит победить n преступников. Сила i-го преступника равна ti. Победить некоторых преступников не так-то просто — возможно, мушкетёрам придётся сражаться вместе.

Ришелимакьё будет координировать действия своих мушкетёров. Каждый час каждый из мушкетёров может ничего не делать или сражаться с каким-то преступником, при этом два или даже три мушкетёра могут сражаться с одним и тем же преступником, и тогда их силы складываются. На то, чтобы победить одного преступника, уходит ровно один час, независимо от того, сколько мушкетёров с ним сражаются. Ришелимакьё не может допустить, чтобы в какой-нибудь момент сила преступника оказалась больше суммарной силы сражающихся с ним мушкетёров, ведь тогда он победит!

Более подробно, есть три способа победить конкретного преступника:

  • За один час мушкетер силы x может победить преступника, с силой не превосходящей x. Например, Атос за один час может победить преступника с номером i, только если ti ≤ a.
  • Два мушкетера могут сражаться вместе и за один час одолеть преступника, если его сила не превосходит сумму сил этих двух мушкетеров. Например, Атос и Сарамис за один час могут одолеть преступника с номером i, только если ti ≤ a + c.
  • Аналогично, все три мушкетера могут сражаться вместе и за один час одолеть преступника, чья сила не превосходит суммарной силы трёх мушкетёров a + b + c.

Ришелимакьё не хочет, чтобы мушкетеры сражались в новогоднюю ночь, поэтому хочет скоординировать их действия таким образом, чтобы минимизировать количество часов до того момента, пока будут побеждены все преступники.

Найдите минимальное количество часов, необходимое для того, чтобы одолеть всех преступников. Если мушкетёры не могут победить всех преступников, то выведите "-1" (без кавычек).

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 200 000) — количество преступников.

Во второй строке записано три целых числа a, b и c (1 ≤ a, b, c ≤ 108) — силы мушкетёров.

В третьей строке записано n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 108) — силы преступников.

Выходные данные

Выведите одну строку с ответом.

Если мушкетёры не могут одолеть всех преступников, выведите "-1" (без кавычек). В противном случае выведите минимальное количество часов, которое мушкетёрам придётся потратить для того, чтобы одолеть всех преступников.

Примечание

В первом примере сила Атоса равна 10, Бортоса 20, а Сарамиса 30. Они могут победить всех преступников за два часа:

  • Бортос и Сарамис вместе побеждают пресутпника с силой 50, пока Атос сражается с одним из четырёх преступников с силой 1.
  • Остаётся три преступника, сила каждого 1. Каждый мушкетёр сражается с одним из таких преступников в течение второго часа.

Во втором примере трём мушкетёрам нужно всем вместе сражаться против преступника с силой 51. Это займёт один час. На втором часу они сражаются по отдельности. На третье часу остался один преступник, и любой из мушкетёров побеждает его.

D. Объединение k-подотрезков

жадные алгоритмы сортировки *1800

Вам задано n отрезков на прямой и число k. Будем считать точку на прямой насыщенной, если она принадлежит хотя бы k отрезкам. Найдите набор из наименьшего количества отрезков на прямой, содержащий насыщенные точки и только их.

Входные данные

В первой строке находятся два целых числа n и k (1 ≤ k ≤ n ≤ 106) — количество отрезков и параметр, указанный в условии задачи.

В каждой из следующих n строк находится пара целых чисел li, ri ( - 109 ≤ li ≤ ri ≤ 109) — концы i-го отрезка. Отрезки могут вырождаться в точки, а также могут пересекаться друг с другом произвольным образом. Отрезки заданы в произвольном порядке.

Выходные данные

В первой строке выведите целое число m — наименьшее количество отрезков.

Далее в m строках выведите по два целых числа aj, bj (aj ≤ bj) — концы очередного отрезка. Отрезки нужно выводить в порядке слева направо.

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 денежных единиц. Если правильных ответов несколько — выведите любой.

Примечание

В первом тесте оптимальной стратегией является повышение второго навыка до его максимума, а остальных — на единицу.

Во втором тесте нужно увеличить уровни всех навыков до максимума.

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".

B. Ужин с Наташей

жадные алгоритмы игры *1000

Павел наконец решил пригласить Наташу на ужин. Павел скромный студент, поэтому не хочет идти в дорогущий ресторан. Наташа — девушка с высоким вкусом и предпочитает элитарные заведения.

Город Мюнхетен состоит из n улиц и m проспектов. На пересечении любой улицы и проспекта находится один ресторан. Пронумеруем улицы целыми числами от 1 до n, а проспекты — целыми числами от 1 до m. Стоимость ужина в ресторане на пересечении i-й улицы и j-го проспекта составляет cij.

Павел и Наташа решили выбрать ресторан следующим образом. Сначала Наташа выбирает улицу, на которой хочет ужинать, затем Павел выбирает проспект. Наташа и Павел делают свой выбор оптимально: Наташа желает максимизировать стоимость ужина, а Павел — минимизировать. При выборе улицы Наташа учитывает то, что Павел хочет сэкономить. Определите стоимость ужина влюблённой пары.

Входные данные

В первой строке находится пара целых чисел n, m (1 ≤ n, m ≤ 100) — количество улиц и проспектов в Мюнхетене.

В каждой из следующих n строк находятся m целых чисел cij (1 ≤ cij ≤ 109) — стоимость ужина в ресторане на пересечении i-й улицы и j-го проспекта.

Выходные данные

Выведите целое число a — стоимость ужина Павла и Наташи.

Примечание

В первом примере, если Наташа выберет первую или третью улицу, то Павел сможет выбрать проспект со стоимостью ужина 1. Поэтому Наташа выбирает вторую улицу, а Павел любой проспект. Таким образом, стоимость ужина равна 2.

Во втором примере какую бы улицу не выбрала Наташа, Павел сможет выбрать проспект такой, что стоимость ужина будет равна 1.

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 секунд. Один из примеров оптимального пути: .

A. Сон Студента

жадные алгоритмы математика *1300

Как утверждает статистика, студенты спят не более трёх часов в сутки. Но даже в мире грёз, мерно посапывая, они не всегда могут избавиться от чувства нависшей угрозы.

Спит Бедный Студент и снится ему, как сидит он на экзамене по математическому анализу у самого страшного преподавателя современности, трёхкратного героя Советского Союза, лауреата нобелевской премии по отчислению студентов, многоуважаемого профессора Петра Палыча.

Ни на один вопрос не смог ответить Бедный Студент. Значит, вместо большого просторного офиса придётся ему идти работать на ториевые шахты. Но подождите! Пётр Палыч решил дать Студенту последний шанс! Да, такое может быть только во сне.

И профессор начал: «Встретились венерянская девочка и марсианский мальчик на Земле и захотели прогуляться, держась за руки. Но вот беда: у девочки на левой руке al пальцев, а на правой - ar пальцев. У мальчика, соответственно, bl и br. Им будет удобно держаться за руки только тогда, когда никакая пара пальцев девочки не будет соприкасаться между собой, то есть между любыми двумя пальцами девочки есть палец мальчика. И вместе с этим, никакая тройка пальцев мальчика не должна соприкасаться между собой. Определите, можно ли им взяться за руки так, чтобы обоим было удобно?»

Мальчику и девочке всё равно, кто пойдёт слева, а кто справа. Разница лишь в том, что если мальчик пойдёт слева от девочки, то он возьмёт своей правой рукой её левую руку, а если он пойдёт справа — то наоборот.

Входные данные

В первой строке даны два натуральных числа, не превышающие 100: количество пальцев на левой и правой руках венерянской девочки, соответственно. Во второй строке даны два натуральных числа, не превышающие 100: количество пальцев на левой и правой руках марсианского мальчика, соответственно.

Выходные данные

Выведите YES или NO: ответ на вопрос Петра Палыча.

Примечание

Мальчику и девочке не принципиально, кто пойдёт слева, а кто справа.

C. Жемчужинки

жадные алгоритмы *1500

В ряд расположены n жемчужинок. Пронумеруем жемчужинки целыми числами от 1 до n слева направо. Жемчужинка номер i имеет тип ai.

Последовательность подряд идущих жемчужинок будем называть подотрезком. Подотрезок будем называть хорошим, если в нём есть пара жемчужинок одинакового типа.

Вам требуется разбить исходный ряд жемчужинок на наибольшее количество хороших подотрезков. Обратите внимание, что каждая жемчужинка должна попасть ровно в один подотрезок разбиения.

Рекомендуется для ввода и вывода данных использовать функции scanf, printf в языке C++, поскольку они работают значительно быстрее потоков cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 3·105) — количество жемчужинок в ряду.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 109) — тип i-й жемчужинки.

Выходные данные

В первой строке выведите целое число k — наибольшее количество подотрезков в разбиении ряда жемчужинок.

В каждой из следующих k строк выведите по два целых числа lj, rj (1 ≤ lj ≤ rj ≤ n) — номера самой левой и самой правой жемчужинки в j-м подотрезке.

Выведенный набор должен образовывать разбиение ряда жемчужинок на хорошие подотрезки, то есть каждая жемчужинка исходного ряда должна попасть ровно в один подотрезок и каждый подотрезок должен содержать пару жемчужинок одинакового типа.

Если существует несколько оптимальных решений вы можете вывести любое из них. Подотрезки можно выводить в любом порядке.

Если исходный ряд невозможно разбить на хорошие подотрезки, выведите одно число "-1".

E. Муравьи в листьях

Деревья жадные алгоритмы поиск в глубину и подобное сортировки *2200

Связный граф без циклов называется деревом. Листом дерева называется любая вершина, которая связана ровно с одной другой вершиной.

Задано дерево из n вершин с корнем в вершине 1. В каждом листе дерева находится один муравей. За одну секунду несколько муравьёв могут одновременно перейти в предка вершины в которой они находятся. Два муравья не могут находиться одновременно в одной вершине, за исключением корня дерева.

Определите наименьшее время за которое все муравьи смогут попасть в корень дерева. Обратите внимание, что исходно муравьи находятся только в листьях дерева.

Входные данные

В первой строкее находится целое число n (2 ≤ n ≤ 5·105) — количество вершин в дереве.

Каждая из следующих n - 1 строк содержит пару целых чисел xi, yi (1 ≤ xi, yi ≤ n) — ребра дерева. Гарантируется, что вам задано корректное дерево.

Выходные данные

Выведите целое число t — наименьшее время, необходимое, чтобы все муравьи попали в корень дерева.

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 монетам.

D. День Рождения

жадные алгоритмы математика Теория вероятностей *2700

У студента МФТИ Миши день рождения, и он решил отметить его в своём загородном доме в Подмосковье. К нему пришли n друзей, и после типичного застолья они решили сыграть в жмурки.

Имениннику завязывают глаза, а остальные игроки разбегаются по дому. Игра происходит в несколько раундов. В каждом раунде Миша ловит ровно одного из друзей и должен отгадать, кто это. Вероятность поймать i-го друга не меняется между раундами и равняется pi процентам (как известно, она прямо пропорциональна количеству выпитого i-м другом), при этом p1 + p2 + ... + pn = 100. Миша не имеет никакой информации о том, кого он поймал. После того, как Миша делает попытку отгадать пойманного человека, раунд заканчивается. Даже после этого Мише не говорят, правильно ли он угадал, и начинается новый раунд.

Игра заканчивается, когда Миша угадает хотя бы по разу каждого друга, то есть существует такой набор раундов k1, k2, ..., kn, что в раунде номер ki Миша поймал i-го друга и отгадал его. Миша хочет минимизировать математическое ожидание количества раундов игры. Несмотря на то что Миша ни в какой момент игры не имеет информации о том, кого он уже отгадал, его друзья играют честно, и если они видят, что условие окончания игры выполнено, игра сразу же завершается. Найдите матожидание количества раундов в игре, если Миша будет действовать оптимально.

Входные данные

В первой строке входных данных задано единственное целое число n (1 ≤ n ≤ 100) — количество друзей Миши на подмосковной вечеринке.

Во второй строке записаны n целых чисел pi (), определяющие вероятность поймать i-го друга в каждом конкретном раунде. Вероятности даны в процентах.

Выходные данные

Выведите единственное вещественное число — математическое ожидание количества раундов игры при условии, что Миша действует оптимально. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом тестовом примере оптимальная стратегия — называть двоих друзей по очереди.

B. Составить строку

жадные алгоритмы сортировки *1100

Дан алфавит из n букв, нужно составить строку максимальной длины так, чтобы выполнялись два условия:

  • i-я буква встречалась в строке не больше ai раз;
  • количество вхождений в строку каждой из букв должно быть различным для всех букв, которые встретились в строке хотя бы один раз.
Входные данные

В первой строке входных данных записано единственное целое число n (2  ≤  n  ≤  26) — количество букв в алфавите.

В следующей строке записано n целых чисел ai (1 ≤ ai ≤ 109) — ограничение на количество вхождений i-го символа в строку.

Выходные данные

Выведите одно целое число — максимальную длину строки, удовлетворяющей требованиям.

Примечание

Для удобства возьмём алфавит из трёх букв: «a», «b», «c». В первом тесте из условия, примерами подходящих строк являются: «cccaabbccbb», «aabcbcbcbcb». Во втором тесте из условия примерами подходящих строк являются: «acc», «cbc».

B. Война корпораций

жадные алгоритмы Конструктив Строки *1200

Давным-давно в далёкой-далёкой галактике противоборствовали две огромные IT-корпорации: Pineapple и Gogol. Противостояние длится уже многие годы, но близится переломный момент: компания Gogol разработала абсолютно новое устройство, не имеющее аналогов — планшет Lastus 3000.

В этом устройстве используется впервые созданный искусственный интеллект (ИИ). Члены компании Pineapple пытались всеми силами отложить выход нового девайса. В конце концов, за неделю до выхода Lastus 3000 на рынок юристы обнаружили, что название искусственного интеллекта очень похоже на название телефона, который выпустила компания Pineapple 200 лет назад. Так как компания Pinapple обладает авторским правом на это название, она потребовала изменить имя искусственного интеллекта.

Pineapple утверждает, что название их телефона присутствует в качестве подстроки в имени ИИ. Название этой технологии уже было выгравировано на всех планшетах, поэтому директор Gogol предложил вместо некоторых букв в названии ИИ поставить символ «#». Так как это довольно затратно, надо найти минимальное количество символов, которые нужно заменить на «#», чтобы имя ИИ больше не содержало название телефона Pineapple в качестве подстроки. Помогите компании Gogol решить эту задачу.

Подстрокой называется непустая последовательность подряд идущих символов строки.

Входные данные

Первая строка входных данных содержит название ИИ компании Gogol, длина названия не превосходит 100 000 символов. Вторая строка входных данных содержит название телефона компании Pineapple, её длина не превосходит 30 символов. Обе строки непустые и содержат только маленькие буквы английского алфавита.

Выходные данные

Требуется вывести минимальное количество букв, которое надо заменить на символ «#» в названии ИИ, чтобы оно не содержало название телефона в качестве подстроки.

Примечание

В первом примере название ИИ можно заменить на «int#llect».

Во втором примере название можно не менять.

В третьем примере название ИИ можно поменять на «s#ris#ri». Обойтись меньшим количеством замен не получится.

E. Лягушачьи бои

жадные алгоритмы Структуры данных *2800

Недавно великий комбинатор посетил лягушачьи бои и, поразившись несистемностью правил боёв, решил создать своё увлекательное зрелище, но подчинённое строгим правилам.

Итак, лягушек выставляют на поле, имеющее форму кольца, разделённого на m клеток. Клетки пронумерованы от 1 до m по кругу, после клетки номер m идёт клетка номер 1. i-я лягушка изначально может прыгнуть на ai клеток вперёд.

Лягушки ходят по очереди, начиная с лягушки с номером 1. На своём ходу i-я лягушка прыгает на клеток вперёд, сбрасывая с поля всех других лягушек на своём пути, в том числе и ту, которая находится в конечной клетке текущего прыжка. После этого её значение ai уменьшается на количество удалённых во время данного прыжка лягушек. Если ai становится равным нулю или отрицательным, то i-я лягушка не сможет прыгать в дальнейшем.

После того, как лягушка с номером 1 заканчивает свой ход, ходит лягушка с номером 2, затем лягушка с номером 3 и так далее. После того, как сходит лягушка с номером n, снова ходит лягушка с номером 1. Если лягушка с каким-то номером уже была сброшена с поля, то считается, что она всегда пропускает свой ход.

Великому комбинатору уже не терпится узнать, какие из лягушек в конце концов останутся на поле. Помогите ему узнать это.

Входные данные

В первой строке содержатся два числа n и m (1 ≤ n ≤ 100 000, 2 ≤ m ≤ 109, n ≤ m) — количество лягушек и размер поля соответственно.

В следующих n строках содержатся описания лягушек. Каждое описание состоит из двух чисел pi и ai (1 ≤ pi,  ai ≤ m) — номер клетки, на которой стоит лягушка, и изначальная длина её прыжка соответственно.

Гарантируется, что все значения pi различны.

Выходные данные

В первой строке выведите количество лягушек, которые всегда будут на поле.

В следующей строке выведите номера этих лягушек в любом порядке.

Примечание

В первом примере первая лягушка прыгает на одну клетку и оказывается в клетке номер 3. Затем вторая прыгает на 3 клетки и также оказывается в клетке номер 3, удаляя при этом первую лягушку с поля. Величина следующего прыжка у неё теперь равна 2. Третья лягушка прыгает в клетку номер 2. Затем вторая лягушка прыгает в клетку 5. Третья догоняет её и удаляет с поля. На поле осталась только она.

Во втором примере первая лягушка прыгает на две клетки, удаляя с поля лягушек, стоящих на клетках 2 и 3. Величина её следующего прыжка при этом становится равной нулю. Затем прыгает четвёртая лягушка, удаляет с поля пятую и тоже останавливается. В итоге на поле остаются две лягушки.

C. Башни из кубиков

жадные алгоритмы математика Перебор теория чисел *1600

Сегодня на парах студенты собирают башни из кубиков. Каждый студент собирается построить башню ненулевой высоты, поставив друг на друга некоторое количество блоков из кубиков. n студентов используют блоки, состоящие из двух кубиков, а m студентов используют блоки из трёх кубиков. Блоки кладутся только вертикально, то есть каждый блок добавляет к высоте башни 2 или 3 кубика соответственно.

Студенты хотят, чтобы все башни имели различную высоту, но при этом они не хотят использовать много блоков, поэтому они попросили вас определить минимально возможную высоту самой высокой башни.

Входные данные

В первой строке входных данных записаны два числа n и m (0 ≤ n, m ≤ 1 000 000, n + m > 0) — количество студентов, использующих блоки из двух кубиков, и количество студентов, использующих блоки из трёх кубиков, соответственно.

Выходные данные

Выведите единственное целое число — минимально возможную высоту самой высокой башни, если высоты всех башен положительны и различны.

Примечание

В первом примере студент, использующий блоки из двух кубиков, может построить башню высоты 4, а студенты, использующие блоки из трёх кубиков, — башни высоты 3, 6 и 9. Самая высокая башня будет иметь высоту 9 кубиков.

Во втором примере студенты могут построить башни высотой 2, 4 и 8, используя блоки по два кубика, и башни высотой 3 и 6, используя блоки по три кубика.

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 своих билетов и выиграть каждый приз с вероятностью .

C. Доставка посылки

жадные алгоритмы разделяй и властвуй Структуры данных *2200

Джонни управляет трактором и должен доставить посылку из одного города в другой. Оба города расположены на числовой прямой, при этом Джонни начинает в точке 0 и должен добраться до точки d.

Топливный бак трактора Джонни вмещает не больше чем n литров топлива и изначально заполнен до предела. На то, чтобы проехать одну единицу расстояния, тратится ровно один литр топлива. Вдоль пути расположены m заправок, при этом i-я заправка находится в точке xi и продаёт бензин по pi долларов за литр. Количество бензина на каждой заправке не ограничено. Определите минимальное количество денег, которое придётся потратить Джонни, чтобы доставить посылку.

Входные данные

В первой строке входных данных записаны три целых числа d, n и m (1 ≤ n ≤ d ≤ 109, 1 ≤ m ≤ 200 000) — расстояние, которое необходимо проехать, объём топливного бака и количество заправок на пути соответственно.

В каждой из последующих m строк записаны два целых числа xi и pi (1 ≤ xi ≤ d - 1, 1 ≤ pi ≤ 106) — позиция i-й заправки и стоимость бензина в ней соответственно. Гарантируется, что координаты всех заправок различны.

Выходные данные

Выведите единственно целое число — минимальное количество денег, которое придётся потратить, чтобы доставить посылку из точки 0 в точку d. Если доставить посылку невозможно, то выведите -1.

Примечание

В первом примере топливный бак вмещает 4 литра. Джонни может проехать 3 единицы расстояния до первой заправки, залить там в бак 2 литра (в баке будет 3 литра топлива), проехать ещё 3 единицы расстояния до третьей заправки, купить там 4 литра топлива и доехать до конца. Итого придётся потратить 2·5 + 4·3 = 22 долларов.

Во втором примере Джонни никак не сможет доехать до пункта назначения, потому что у бака недостаточно объёма, чтобы доехать от последней заправки до точки d.

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.

C. Медведь и расстояние между строками

жадные алгоритмы Строки *1300

Лимак — маленький полярный медведь. Ему нравятся красивые строки — строки длины n, состоящие из маленьких английских букв.

Расстоянием между двумя буквами будем называть разницу их позиций в алфавите. Например, , а .

Определим расстояние между двумя красивыми строками как сумму расстояний соответствующих букв. Например, , а .

У Лимака есть красивая строка s и целое число k. Вам требуется найти любую красивую строку s' такую, что или определить, что такой строки не существует.

Рекомендуется для ввода и вывода данных использовать функции gets, scanf, printf в языке C++, поскольку они работают значительно быстрее чем getline, cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

Входные данные

В первой строке находится пара целых чисел n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 106).

Во второй строке находится строка s длины n, состоящая из строчных английских букв.

Выходные данные

Если не существует строки s', удовлетворяющей условиям задачи выведите "-1" (без кавычек).

В противном случае, выведите любую красивую строку s' такую, что .

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», а также они должны быть выведены в хронологическом порядке. Не разрешается перепрыгивать финишную точку, но разрешается в ней приземляться после прыжка. Спортсмен должен остановиться, как только достигнет финиша.

C. Ремонт дорог

*особая задача графы Деревья жадные алгоритмы поиск в глубину и подобное *1800

В Берляндии есть n городов и n - 1 дорога с двусторонним движением. Каждая дорога соединяет какую-то пару городов, при этом от любого города можно доехать до любого другого, используя только данные дороги.

В каждом городе есть ровно одна ремонтная бригада. Чтобы отремонтировать какую-то дорогу, необходима одновременная работа в течение одного дня двух бригад, базирующихся в городах, которые эта дорога соединяет. Обе бригады занимаются ремонтом одной дороги весь день и не могут в этот день участвовать в ремонте других дорог, а вот ничего не делать в течение дня ремонтная бригада вполне может.

Определите минимальное количество дней, в течение которых можно отремонтировать все дороги. Бригады не могут менять города, в которых расположены изначально.

Входные данные

В первой строке входных данных содержится целое положительное число n (2 ≤ n ≤ 200 000) — количество городов в Берляндии.

В каждой из следующих n - 1 строк записаны два числа ui, vi, означающих что i-я дорога соединяет город ui с городом vi (1 ≤ ui, vi ≤ n, ui ≠ vi).

Выходные данные

Сначала выведите число k — минимальное количество дней, за которое возможно отремонтировать все дороги Берляндии.

В следующих k строках выведите описание дорог, которые должны быть отремонтированы в каждый из k дней. В i-й строке выведите сначала число di — количество дорог, которые должны быть отремонтированы в i-й день, а затем через пробел выведите di целых чисел — номера дорог, которые должны быть отремонтированы в i-й день. Дороги нумеруются согласно порядку во входных данных, начиная с единицы.

Если вариантов ответа несколько, разрешается вывести любой из них.

Примечание

В первом примере отремонтировать все дороги можно за два дня, например, отремонтировать дороги 1 и 2 в первый день, а дорогу 3 — во второй.

D. Медвежонок и вклад

жадные алгоритмы сортировки Структуры данных *2400

Codeforces — замечательная платформа, одной из её особенностей является возможность посмотреть вклад того или иного участника в развитие сообщества. У каждого зарегистрированного пользователя есть параметр вклад — целое число, не обязательно положительное. Всего зарегистрировано n участников, вклад i-го из них равен ti.

Маленький полярный медвежонок Лимак только начала заниматься спортивным программированием. У него ещё даже нет своего аккаунта на Codeforces, но он уже может ставить плюсы записям в блогах и комментариям. Минусы Лимак никогда не использует. В рамках данной задачи можно считать, что у каждого зарегистрированного пользователя бесконечно много комментариев и записей в блоге.

  • Лимак может потратить b минут на чтение блога и поставить ему плюс. Вклад автора блога увеличивается на 5.
  • Лимак может потратить c минут на чтение комментария и поставить ему плюс. Вклад автора комментария увеличивается на 1.

Обратите внимание, что возможны входных данные в которых Лимак читает блоги быстрее, чем комментарии.

Лимак очень любит ничьи. Он хотел бы, чтобы у каких-нибудь k пользователей была ничья по вкладу. То есть он собирается прочитать сколько-то блогов и сколько-то комментариев и поставить им плюсы, чтобы в результате существовало целое число x, такое что как вклад как минимум k зарегистрированных пользователей равен в точности x.

Сколько минимум времени придётся потратить Лимаку, чтобы добиться желаемого?

Входные данные

В первой строке входных данных записаны четыре целых числа n, k, b и c (2 ≤ k ≤ n ≤ 200 000, 1 ≤ b, c ≤ 1000) — количество зарегистрированных пользователей, количество пользователей в одной группе по вкладу, которого хочет добиться Лимак, время необходимое на прочтение блога и время необходимое на прочтение комментария соответственно.

Во второй строке записаны n целых чисел t1, t2, ..., tn (|ti| ≤ 109), где ti означает изначальный вклад i-го пользователя.

Выходные данные

Выведите минимальное количество минут, которое придётся потратить Лимаку чтобы добиться ничьей между как минимум k пользователями.

Примечание

В первом примере имеется четыре зарегистрированных пользователя и Лимак хочет, чтобы была ничья между как минимум тремя из них. Оптимальный ответ можно получить следующим образом:

  • Потратить 100 минут на чтение блога пользователя 4 и увеличить его вклад с 1 до 6.
  • Потратить 4·30 = 120 минут на чтение четырёх комментариев пользователя 2 и увеличить его вклад с 2 до 6 (четыре увеличения по 1).

Таким образом Лимак потратит 100 + 4·30 = 220 минут и вклад пользователей 2, 3 и 4 будет равен 6.

Во втором примере Лимак тратит 30 минут на чтение блога и 100 минут на чтение комментария. Он может добиться того, чтобы у трёх пользователей вклад был равен 12 потратив 100 + 3·30 = 190 минут:

  • Потратив 2·30 = 60 минут на чтение двух блогов пользователя номер 2 увеличить его вклад с 2 до 12.
  • Потратив 30 + 100 минут на чтение одного блога и одно комментарий пользователя 3 увеличить его вклад с 6 до 6 + 5 + 1 = 12.

E. Медведь и парадокс

Бинарный поиск жадные алгоритмы математика сортировки *2800

Лимак вырос и стал большим мишкой. Он приготовил n задач для соревнований по спортивному программированию. Изначальная стоимость (количество очков за успешное решение) i-й задачи равна pi. Прорешивание показало, что на решение i-й задачи требуется ровно ti минут. Задачи не обязательно упорядочены по сложности, но менять порядок уже поздно — Лимак уже объявил разбалловку в посте на главной странице. Единственное, что ещё можно поменять, это скорость убывания стоимости задач c.

Обозначим за T время, необходимое для решения всех задач, то есть T = t1 + t2 + ... + tn. Контест продлится ровно T минут, то есть как раз столько, сколько нужно чтобы всё решить.

Баллы за решение задачи линейно убывают со временем. Решение задачи i на минуте x даёт ровно , где константу предстоит выбрать Лимаку.

Предположим значение c фиксировано. Во время соревнования каждый участник выберет какой-нибудь порядок решения задач. Всего возможных порядков n!, каждый из них приведёт к какому-нибудь итоговому количеству очков, не обязательно целочисленному. Скажем, что порядок является оптимальным, если он даёт максимальное количество очков. Другими словами, решение задач в любом другом порядке даст количество очков меньшее либо равное, чем решение задач в таком порядке. Очевидно, что существует хотя бы один оптимальный порядок, однако, оптимальных порядков может быть и несколько.

Лимак предполагает, что каждый участник сразу правильно оценит значение ti для каждой задачи и начнёт решать их в каком-нибудь оптимальном порядке. Также Лимак полагает, что тестеры правильно определили все значения ti.

Для двух различных задач i и j, таких что pi < pj Лимак не хотел бы допустить ситуации, что какой-нибудь участник решавший задачи в оптимальном порядке получил за задачу i строго больше очков, чем за задачу j. Такую ситуацию Лимак называется парадоксом.

Несложно показать, что для c = 0 парадокс невозможен. Однако, для больших значений c это не так. Какое максимальное значение c (но помните, что ) можно выбрать, так чтобы парадокс был невозможен? Другими словами, чтобы для любого оптимального порядка решения задач не произошло парадокса.

Можно доказать, что максимальное c всегда существует.

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 150 000) — количество задач.

Во второй строке записаны n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ 108) — изначальные стоимости задач.

В третье строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 108), i-е из которых означает количество минут, необходимое для решения i-й задачи.

Выходные данные

Выведите единственное вещественное число — максимальное значение c, такое что и ни в одном оптимальном порядке решения задач не произойдёт парадокса. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере 3 задачи. Первая обладает параметрами (4, 1) (изначальная стоимость равна 4, а на решение требуется 1 минута), вторая (3, 1) и третья (10, 8). Продолжительность контеста равна T = 1 + 1 + 8 = 10.

Покажем наличие парадокса при c = 0.7. Решение задач в порядке 1, 2, 3 даст максимальное количество очков, равное:

  1. решение задачи через 1 минуту после начала:
  2. решение задачи через 2 минуты после начала:
  3. решение задачи через 10 минут после начала:

Таким образом, решение задач в таком порядке даёт 3.72 + 2.58 + 3 = 9.3 очков и это единственный оптимальный порядок (можно проверить ответы для других 5 перестановок). Однако, для задач 1 и 3 возникнет парадокс: 4 < 10, но 3.72 > 3. При c = 0.625 парадокса нет и это максимальное такое значение c.

Во втором примере, все 24 порядка решения задач являются оптимальными.

В третьем примере не возникнет парадокса даже при c = 1.

C. Таблица

*особая задача жадные алгоритмы математика реализация *1600

В прямоугольную таблицу из n строк и m столбцов записали все числа от 1 до nm в порядке слева направо, сверху вниз. Таким образом, первая строка содержит числа от 1 до m, вторая — от m + 1 до 2m и так далее.

Затем эти числа выписали в порядке сверху вниз, слева направо. То есть выписали первый столбец (сверху вниз), затем второй и так далее.

Выведите k-ое число, которое было выведено.

Входные данные

В единственной строке входных данных содержится три целых числа n, m и k (1 ≤ n, m ≤ 20000, 1 ≤ k ≤ nm).

Выходные данные

Выведите искомое число.

D. Распределение подарков

*особая задача жадные алгоритмы *1800

Заданы стоимости трех подарков, известно, что самый дорогой достанется старшей сестре, второй по стоимости — средней, а третий — самой младшей. Если два или три подарка имеют одинаковую стоимость, то их их можно раздать произвольным способом сестрам, которым они должны достаться.

Входные данные

В первой строке содержатся три целых числа a1, a2, a3 (1 ≤ a1, a2, a3 ≤ 100) — стоимости подарков.

Выходные данные

Выведите три числа i1, i2, i3 (1 ≤ i1, i2, i3 ≤ 3), все числа различны. Число в первой позиции должно обозначать старшинство сестры, которая получит первый подарок (1 — самая старшая). Аналогичное значения имеют второе и третье числа.

Если существует несколько вариантов ответа, выведите любой вариант.

Примечание

Во втором тесте возможен другой ответ «2 3 1».

B. Бешеные Братья Беспорядка

жадные алгоритмы математика *1200

В этот приятный весенний полдень фермер Джон решил поспать k минут, пока его n коров обсуждают подробности структуры linking-cutting, построенной на кактусах в их стойлах. Коровы пронумерованы от 1 до n, и корова с номером i изначально находится в стойле с номером i. Однако Элси порядком надоело жить в тени славы Бесси, поэтому она организовала тайное общество Бешеных Братьев Беспорядка и планирует нарушить размеренную жизнь на пастбище. Пока фермер Джон будет спать, Элси и её сообщники будут каждую минуту выбирать не более чем одну пару коров и менять их местами.

Элси хотела бы знать, какой максимальный хаос они могут навести за k минут. Обозначим как pi номер коровы расположенной в i-м стойле. Тогда значением хаоса данного расположения коров называется количество таких пар (i, j), что i < j и pi > pj.

Входные данные

В первой строке входных данных записаны два числа n и k (1 ≤ n, k ≤ 100 000) — количество коров и длина сна фермера Джона соответственно.

Выходные данные

Выведите единственное целое число — максимальный уровень хаоса в коровнике, которого можно достигнуть, сделав не более k обменов двух коров местами.

Примечание

В первом примере Бешеные Братья Беспорядка могут за первую минуту поменять местами коров в стойлах 1 и 5, а за вторую минуту поменять местами коров в стойлах 2 и 4. Таким образом, коровы будут стоять с обратном порядке, и значение хаоса будет равно 10.

Во втором примере есть только одна корова, поэтому уровень хаоса равен 0.

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», могут быть прочитаны разными способами, но учитываются только один раз.

D. Собачки и миски

жадные алгоритмы сортировки Структуры данных *1900

На координатной прямой сидит n собачек, i-я собачка находится в точке xi. Кроме того, на прямой есть m мисок с едой, для каждой известна её координата на прямой uj и время tj, через которое еда в миске остынет и станет невкусной. Это значит, что если собачка прибежит к миске в момент времени, строго больший tj, то еда уже остынет, и собачка кушать её не станет.

Считая, что каждая собачка бежит со скоростью 1, найдите максимальное количество собачек, которые смогут покушать. Считайте, что собачки побегут к тем мискам, на которые вы им укажете. Из одной миски не могут кушать две или более собачки.

Собачки могут обгонять друг друга, то есть, если одна из них остановится покушать, другая может пройти мимо неё, чтобы попасть к другой миске.

Входные данные

В первой строке находится пара целых чисел n и m (1 ≤ n, m ≤ 200 000) — количество собачек и мисок соответственно.

Во второй строке находятся n целых чисел xi ( - 109 ≤ xi ≤ 109) — координата i-й собачки.

В следующих m строках находятся пары целых чисел uj и tj ( - 109 ≤ uj ≤ 109, 1 ≤ tj ≤ 109) — координата j-й миски и время, когда остынет еда в ней, соответственно.

Гарантируется, что никакие две собачки не находятся в одной точке. Никакие две миски также не могут находиться в одной точке.

Выходные данные

Выведите одно целое число a — максимальное количество собачек, которые смогут покушать.

Примечание

В первом примере первая собачка побежит направо к первой миске, третья собачка сразу начнёт есть из второй миски, четвёртая собачка побежит влево к третьей миске, а пятая собачка побежит влево к четвёртой миске.

C. Печать условий

жадные алгоритмы Конструктив сортировки *1500

На тренировку по подготовке к соревнованиям по программированию пришли n команд. Тренер для каждой команды подобрал тренировку, комплект задач для i-й команды занимает ai страниц. В распоряжении тренера есть x листов бумаги, у которых обе стороны чистые, и y листов, у которых только одна сторона чистая. При печати условия на листе первого типа можно напечатать две страницы из условий задач, а при печати на листе второго типа — только одну. Конечно, на листе нельзя печатать условия из двух разных комплектов задач. Обратите внимание, что при использовании листов, у которых обе стороны чистые, не обязательно печатать условие на обеих сторонах, одна из них может остаться чистой.

Вам предстоит определить максимальное количество команд, которым тренер сможет напечатать комплекты задач целиком.

Входные данные

В первой строке входных данных следуют три целых числа n, x и y (1 ≤ n ≤ 200 000, 0 ≤ x, y ≤ 109) — количество команд, количество листов бумаги с двумя чистыми сторонами и количество листов бумаги с одной чистой стороной.

Во второй строке входных данных следует последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 10 000), где i-е число равно количеству страниц в комплекте задач для i-й команды.

Выходные данные

Выведите единственное целое число — максимальное количество команд, которым тренер сможет напечатать комплекты задач целиком.

Примечание

В первом тестовом примере можно напечатать оба комплекта задач. Один из возможных ответов — напечатать весь первый комплект задач на листах с одной чистой стороной (после этого останется 3 листа с двумя чистыми сторонами и 1 лист с одной чистой стороной), а второй комплект напечатать на трех листах с двумя чистыми сторонами.

Во втором тестовом примере можно напечатать оба комплекта задач. Один из возможных ответов — напечатать первый комплект задач на двух листах с двумя чистыми сторонами (после этого останется 1 лист с двумя чистыми сторонами и 5 листов с одной чистой стороной), а второй комплект напечатать на одном листе с двумя чистыми сторонами и на пяти листах с одной чистой стороной. Таким образом, тренер использует все листы для печати.

В третьем тестовом примере можно напечатать только один комплект задач (любой из трёх 11-страничных). Для печати 11-страничного комплекта задач будет израсходована вся бумага.

D. Дефрагментация памяти

жадные алгоритмы Конструктив реализация *1600

Память компьютера состоит из n ячеек, которые выстроены в ряд. Пронумеруем ячейки от 1 до n слева направо. Про каждую ячейку известно, свободна она или принадлежит какому-либо процессу (в таком случае известен процесс, которому она принадлежит).

Для каждого процесса известно, что принадлежащие ему ячейки занимают в памяти непрерывный участок. С помощью операций вида «переписать данные из занятой ячейки в свободную, а занятую теперь считать свободной» требуется расположить все принадлежащие процессам ячейки в начале памяти компьютера. Другими словами, любая свободная ячейка должна располагаться правее (иметь больший номер) любой занятой.

Вам необходимо найти минимальное количество операций переписывания данных из одной ячейки в другую, с помощью которых можно достичь описанных условий. Допустимо, что относительный порядок ячеек в памяти для каждого из процессов изменится после дефрагментации, но относительный порядок самих процессов должен остаться без изменений. Это значит, что если все ячейки, принадлежащие процессу i, находились в памяти раньше всех ячеек процесса j, то и после перемещений это условие должно выполняться.

Считайте, что номера всех процессов уникальны, хотя бы одна ячейка памяти занята каким-либо процессом.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — количество ячеек в памяти компьютера.

Во второй строке входных данных следуют n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), где ai равно либо 0 (это означает, что i-я ячейка памяти свободна), либо номеру процесса, которому принадлежит i-я ячейка памяти. Гарантируется, что хотя бы одно значение ai не равно 0.

Процессы пронумерованы целыми числами от 1 до n в произвольном порядке. При этом процессы не обязательно пронумерованы последовательными числами.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое нужно сделать для дефрагментации памяти.

Примечание

В первом тестовом примере достаточно двух операций:

  1. Переписать данные из третьей ячейки в первую. После этого память компьютера примет вид: 2 2 0 1.
  2. Переписать данные из четвертой ячейки в третью. После этого память компьютера примет вид: 2 2 1 0.

E. Автобус

Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

Вдоль дороги стоят n путешественников. Дорога представляет собой прямую, размерами путешественников можно пренебречь, считая их точками.

Водитель автобуса Василий, благодаря мобильному приложению, знает для каждого путешественника точку xi, в которой тот стоит. Кроме того, он знает расстояние di, которое i-й путешественник хочет проехать на автобусе. Таким образом, i-й путешественник планирует выйти из автобуса в точке xi + di. Теперь Василий хочет решить, кого из путешественников он подвезёт, а кого оставит пылиться у дороги.

Василий решил, что сегодня он должен хорошо заработать, поэтому решил перевезти в точности a путешественников. В автопарке есть автобусы любых видов. Чем больше мест в автобусе, тем дороже стоит его аренда.

Помогите Василию определить минимальное количество пассажирских мест в автобусе, которых будет достаточно для перевозки ровно a путешественников. Ни в какой момент времени в автобусе не может быть путешественников больше, чем количество пассажирских мест в автобусе. Василий сам может решить какое конкретно подмножество из a путешественников он перевезёт на автобусе.

Считайте, что автобус всегда едет слева направо (от меньших координат к большим) и начинает свой путь левее самого левостоящего путешественника. Если в одной точке какой-то путешественник должен выйти из автобуса, а другой войти, считайте, что сначала произойдет выход одного путешественника из автобуса, а затем другой путешественник сможет зайти в автобус.

Входные данные

В первой строке входных данных следует два целых положительных числа n и a (1 ≤ a ≤ n ≤ 200 000) — количество путешественников, стоящих вдоль дороги, и минимальное количество путешественников, которых Василий хочет подвезти.

В каждой из следующих n строк содержится по два целых числа xi и di (1 ≤ xi, di ≤ 109) — координата, в которой находится i-й путешественник, а также расстояние, на которое он хочет переместиться на автобусе. Координаты путешественников заданы в произвольном порядке. В одной точке могут находиться несколько путешественников.

Выходные данные

Сначала выведите одно целое число — минимальное количество пассажирских мест в автобусе, которых будет достаточно для перевозки хотя бы a путешественников.

Затем выведите a целых чисел — номера путешественников, которых подвезёт Василий. Путешественники нумеруются, начиная с единицы, в том порядке, в котором заданы во входных данных. Номера можно выводить в произвольном порядке. Если ответов несколько, разрешается вывести любой из них.

Примечание

В первом тестовом примере достаточно одноместного автобуса. К примеру, Василий может подвезти третьего и первого путешественников, либо второго и первого путешественников.

B. Гарри Поттер и история магии

жадные алгоритмы Перебор реализация *1700

История магии, пожалуй, самый скучный предмет в Школе Чародейства и Волшебства Хогвартс. Гарри Поттер обычно спит на уроках истории, а лекции за него пишет Самопишущее Перо. Профессор Бинс, учитель истории магии, читает лекции настолько скучным и монотонным голосом, что он оказывает усыпляющее действие даже на Самопишущее Перо. Из-за этого Перо часто допускает ошибки, особенно в датах.

И вот в конце семестра профессор Бинс решил собрать у учеников пергаменты с лекциями на проверку. Рон Уизли в панике: если у Гарри есть хотя бы какие-то конспекты, пусть и с ошибками, то у него нет никаких, потому что на лекциях Рон тоже спал, а его перо давно сгрызла крыса Короста. Гермиона Грейнджер отказалась дать Рону свои конспекты, потому что, по ее мнению, все должны учиться самостоятельно. Поэтому Рону ничего не остается делать, кроме как переписывать конспекты Гарри.

Из-за ошибок Пера у Гарри вышла полнейшая путаница с датами: годы восстаний гоблинов и других важных для магического мира событий идут не по порядку, иногда даже встречаются даты из будущего. Теперь при переписывании Рон хочет изменить некоторые цифры так, чтобы даты шли в хронологическом (т.е. неубывающем) порядке и чтобы в конспектах не было дат позже 2011 года или раньше 1000 года. Чтобы полученная в результате последовательность была как можно ближе к той, которую диктовал профессор Бинс, Рон будет изменять не более одной цифры в каждой дате на другую цифру. Помогите ему сделать это.

Входные данные

В первой строке входного файла содержится одно целое число n (1 ≤ n ≤ 1000) — количество дат в конспектах Гарри. Следующие n строк содержат сами даты y1, y2, ..., yn, по одной в строке. Каждая дата является четырехзначным целым числом (1000 ≤ yi ≤ 9999).

Выходные данные

Выведите n чисел z1, z2, ..., zn (1000 ≤ zi ≤ 2011) — даты, получившиеся у Рона. Числа выводите по одному в строке. Числа zi должны образовывать неубывающую последовательность. Каждое число zi должно отличаться от соответствующей даты yi не более чем одной цифрой. Замена первой цифры числа на 0 не допускается. Если возможных решений несколько, выведите любое. Если решений нет, выведите «No solution» (без кавычек).

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, но, поскольку они не располагаются в одной строке или в одном столбце, при сжатии их можно сделать равными.

E. Часовой механизм

Деревья жадные алгоритмы поиск в глубину и подобное снм Структуры данных *3200

Меня зовут Джим ди Гриз, я самый ловкий мошенник и авантюрист во всей галактике. По мотивам моих похождений написано множество книг, а ограблениям, совершённым мною, нет числа. Однако вы смогли застать меня в весьма неприятной ситуации.

Не обнаружив себя перед камерами, перехитрив десяток охранников и обойдя множество ловушек, я смог добраться до желанного ящика с сокровищами. Отворив его крышку, я активировал бомбу с часовым механизмом, который уже отсчитывает секунды до неминуемого взрыва! К счастью, мне уже приходилось сталкиваться с бомбами подобной модели, и я знаю, что часовой механизм можно остановить, если правильно соединить проводами контакты на панели управления.

Передо мной n контактов, соединённых n - 1 проводами. Контакты пронумерованы целыми числами от 1 до n. Бомба устроена таким образом, что если некоторый набор из k ≥ 2 контактов c1, c2, ..., ck соединён по циклу, то есть между парами контактов c1 и c2, c2 и c3, ..., ck и c1 есть k различных проводов, то срабатывает проверка безопасности, и заряд мгновенно детонирует, не оставляя от неудачливого взломщика и следа. В том числе, если два контакта соединены более чем одним проводом, то на них образуется цикл длины 2, и бомба также взрывается. Соединять контакт с самим собой запрещается.

С другой стороны, если я отсоединю одновременно более чем один провод (иными словами, в какой-то момент времени будет подключено менее n - 2 проводов), то сработает другая проверка безопасности, которая приведёт к такому же плачевному результату. Таким образом, всё, что мне остаётся, это последовательно вытаскивать провод и вставлять его в новое место, следя, чтобы не образовалось цикла, связывающего контакты.

Я знаю, как надо расположить провода, чтобы остановить часовой механизм. Но у меня остаётся всё меньше и меньше времени на это! Помогите мне выбраться из передряги: найдите кратчайшую последовательность безопасных операций, каждая из которых представляет собой отключение определённого провода и его подключение в новое место, а также выстраивает провода требуемым образом.

Входные данные

В первой строке входных данных находится число n (2 ≤ n ≤ 500 000) — количество контактов.

В каждой из последующих n - 1 строках записана пара целых чисел xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), обозначающих номера контактов, соединённых очередным проводом в данный момент времени.

В последних n - 1 строках в аналогичном формате задаётся схема подключения проводов, останавливающая часовой механизм.

Гарантируется, что обе заданных схемы корректны (то есть, не содержат циклов и проводов, соединяющих контакт с самим собой).

Выходные данные

В первой строке выведите число k (k ≥ 0) — минимальное количество проводов, которые потребуется переподключить.

В последующих k строках выведите четвёрки чисел ai, bi, ci, di, означающих, что на i-м шаге нужно отсоединить провод, соединяющий контакты ai и bi, и соединить им контакты ci и di. Разумеется, к этому моменту времени провод между контактами ai и bi должен присутствовать на схеме.

Если оптимальных последовательностей несколько, то выведите любую из них.

Если требуемой последовательности операций не существует, выведите одно число -1.

Примечание

Картинка с пояснением к тестам из условия:

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. Красота картин

жадные алгоритмы сортировки *1200

На выставку были привезены n картин. Каждая картина имеет красоту ai. Известно, что посетитель выставки всегда радуется, когда при движении вдоль ряда картин следующая картина красивее предыдущей.

Какое максимальное количество раз может порадоваться посетитель при оптимальном порядке расположения картин на стене? Иными словами, расставьте элементы последовательности a таким образом, чтобы максимизировать количество i (1 ≤ i ≤ n - 1), таких что ai + 1 > ai.

Входные данные

В первой строке входных данных следует число n (1 ≤ n ≤ 1000) — количество картин.

Во второй строке входных данных следует последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000), где ai означает красоту i-й картины.

Выходные данные

Выведите единственное целое число — максимальное количество пар соседних картин таких, что ai + 1 > ai, после оптимального переупорядочивания последовательности a.

Примечание

В первом примере оптимальный порядок расположить картины: 10, 20, 30, 40, 50.

В втором примере оптимальный порядок расположить картины: 100, 200, 100, 200.

C. Таня и игрушки

жадные алгоритмы реализация *1200

В Берляндии недавно появилась в продаже новая коллекция игрушек. В этой коллекции 109 типов игрушек, пронумерованных целыми числами от 1 до 109. Игрушка из новой коллекции i-го типа стоит i бурлей.

Таня уже успела собрать n игрушек различных типов a1, a2, ..., an из новой коллекции. Сегодня у Тани день рождения, и её мама решила потратить не более m бурлей на подарок дочери. Таня в качестве подарка выберет несколько игрушек различных типов из новой коллекции. Конечно, она не хочет получить в качестве подарка игрушку того типа, которая у неё уже есть.

Таня хочет, чтобы в результате в её коллекции было как можно больше различных типов игрушек. Новая коллекция слишком разнообразна, а Таня еще слишком мала, поэтому она просит вас помочь ей в этом.

Входные данные

В первой строке содержатся два целых числа n (1 ≤ n ≤ 100 000) и m (1 ≤ m ≤ 109) — количество типов игрушек, которые уже есть у Тани, и количество бурлей, которые мама готова потратить на покупку новых игрушек.

В следующей строке содержатся n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — типы игрушек, которые у Тани уже есть.

Выходные данные

В первой строке выведите единственное целое число k — количество игрушек различных типов, которые следует выбрать Тане, чтобы количество различных типов игрушек в её коллекции стало максимально возможным. Разумеется, суммарная стоимость выбранных игрушек не должна превышать m.

Во второй строке выведите k разделённых пробелами различных целых чисел t1, t2, ..., tk (1 ≤ ti ≤ 109) — типы игрушек, которые следует выбрать Тане.

Если ответов несколько, разрешается вывести любой из них. Значения ti можно выводить в любом порядке.

Примечание

В первом примере мама должна купить две игрушки: одну игрушку 2-го типа и одну игрушку 5-го типа. При любой другой покупке на 7 бурлей (учитывая, что игрушки типов 1, 3 и 4 уже куплены), купить две и более игрушек не получится.

E. Новая реформа

графы жадные алгоритмы поиск в глубину и подобное снм Структуры данных *1600

В Берляндии есть n городов, соединённых m двусторонними дорогами. Дороги не могут соединять город с самим собой, и каждая пара городов соединяется не более чем одной дорогой. Не гарантируется, что из любого города можно доехать до любого другого, используя только имеющиеся дороги.

Президент Берляндии решил внести изменения в систему дорожных путей и дал указание министерству транспорта заняться данной реформой. Теперь каждая дорога должна стать односторонней (вести только из одного города в другой).

Чтобы не вызвать большого недовольства у жителей, необходимо провести реформу так, чтобы оставалось как можно меньше обособленных городов. Город считается обособленным, если в него не входит ни одна дорога, при этом выходящие из этого города дороги допустимы.

Помогите министерству транспорта найти минимальное количество обособленных городов после проведения реформы.

Входные данные

В первой строке входных данных следуют два целых положительных числа n и m — количество городов и дорог в Берляндии (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 100 000).

В следующих m строках содержатся описания дорог: i-я дорога задаётся двумя различными целыми числами xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), где xi и yi равны номерам городов, которые соединяет i-я дорога.

Гарантируется, что между каждой парой городов не может быть более одной дороги, но не гарантируется, что из любого города можно доехать до любого другого, используя только дороги.

Выходные данные

Выведите единственное число — минимальное количество обособленных городов после проведения реформы.

Примечание

В первом примере допустима следующая ориентация дорог: , , .

Во втором примере: , , , , .

В третьем примере: , , , , .

F. Поликарп и сено

графы жадные алгоритмы поиск в глубину и подобное снм сортировки *2000

У фермера Поликарпа есть склад с сеном, который можно представить как прямоугольную таблицу n × m, где n — количество строк, а m — количество столбцов в таблице. В каждой клетке таблицы содержится стог сена. Высота в метрах стога, расположенного в i-й строке и j-м столбце, равна целому числу ai, j и совпадает с количеством кубометров сена в данном стоге, поскольку все клетки имеют размер основания 1 × 1.

Поликарп решил навести на складе порядок, сняв некоторое целое количество кубометров сена с верхушки каждого стога. С разных стогов разрешается снимать различный объем сена. В том числе стог разрешается не трогать совсем или, наоборот, убирать полностью. Если стог убран полностью, то соответствующая клетка становится пустой и стога более не содержит.

Поликарп хочет, чтобы после реорганизации выполнялись следующие требования:

  • суммарный объём сена на складе должен быть в точности равен k,
  • высоты всех стогов (то есть клеток, содержащих ненулевое количество сена) должны быть одинаковыми,
  • высота хотя бы одного стога должна остаться такой же, как была,
  • для устойчивости оставшейся конструкции все стога должны представлять собой одну связную область.

Два стога считаются соседними, если они имеют общую сторону в таблице. Область называется связной, если от любого стога этой области можно добраться до любого другого стога этой области, двигаясь только по соседним стогам. При этом два соседних стога обязательно принадлежат одной области.

Помогите Поликарпу выполнить это нелёгкое задание или сообщите, что это невозможно.

Входные данные

В первой строке входных данных находятся три целых числа n, m (1 ≤ n, m ≤ 1000) и k (1 ≤ k ≤ 1018) — количество строк и столбцов прямоугольной таблицы, в которую уложены стога с сеном, и требуемое суммарное количество кубометров сена после реорганизации.

Далее следует n строк по m целых положительных чисел ai, j (1 ≤ ai, j ≤ 109), где ai, j равно количеству кубометров сена, из которых состоит стог, который находится в i-й строке и j-м столбце таблицы.

Выходные данные

В первой строке выведите «YES», если Поликарп сможет совершить реорганизацию, и «NO» в противном случае. Если ответ «YES», то в следующих n строках выведите по m чисел — высоты оставшихся стогов. Все оставшиеся ненулевые значения должны быть равны, представлять собой связанную область, и хотя бы одно из этих значений не должно быть изменено.

Если существует несколько ответов, разрешается вывести любой из них.

Примечание

В первом примере ненулевые значения составляют связную область, значения не превосходят начальных высот стогов. Все ненулевые значения равны 7, а их количество равно 5, значит суммарный объём оставшегося сена равен требуемому значению k = 7·5 = 35. При этом стог, находящийся во второй строке и третьем столбце, остался нетронутым.

A. Взаимнопростый массив

жадные алгоритмы математика реализация теория чисел *1200

Вам задан массив из n элементов. Вам нужно превратить его во взаимнопростый массив за наименьшее количество действий.

За одно действие вы можете вставить любое положительное целое число, не превосходящее величины 109, в любое место массива.

Массив называется взаимнопростым, если любая пара соседних чисел взаимнопроста.

В теории чисел два числа a и b называются взаимнопростыми, если единственным положительным делителем обоих чисел является число 1.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 1000) — количество элементов в массиве.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

Выходные данные

В первой строке выведите целое число k — наименьшее количество элементов, которые нужно добавить в массив a, чтобы он стал взаимнопростым.

Во второй строке выведите n + k целых чисел aj — элементы массива a после добавления k элементов. Обратите внимание, что этот массив должен быть взаимнопростым, то есть все пары соседних элементов должны быть взаимнопросты. Также новый массив должен быть получен из исходного массива a добавлением ровно k элементов.

Если существует несколько решений, выведите любое.

D. Международная олимпиада

жадные алгоритмы Конструктив математика реализация *2000

Международная олимпиада по сокращениям проходит каждый год, начиная с 1989-го года. Каждый год, когда проходит олимпиада, ей присваивается сокращённое название. Сокращённое название выглядит как IAO'y, где y — это несколько последних цифр текущего года. Организаторы выбирают сокращения таким образом, чтобы они не повторялись. Из всех ещё не использованных сокращений организаторы выбирают самое короткое и присваивают его текущей олимпиаде.

Таким образом, первые три олимпиады (1989, 1990 и 1991 соответственно) получили сокращения IAO'9, IAO'0 и IAO'1, а олимпиада 2015-го года получила сокращение IAO'15, так как IAO'5 уже было использовано в 1995-ом году.

Вам даны n сокращений, определите, в какие годы проходили соответствующие олимпиады.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 1000) — количество сокращений.

Следующие n строк содержат по одному сокращению. Каждое сокращение содержит не более девяти цифр.

Выходные данные

Для каждого сокращения, встречающегося во входных данных, выведите в том же порядке год, в который проходила соответствующая олимпиада.

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 неотрицательны.

Выходные данные

Выведите одно число — самое высокое место, которые Вы можете занять, взломав некоторые решения.

Примечание

Рассмотрим первый пример. Если не взламывать ни одно решение, то вы займете первое место (таблица слева). Если же взломать решение третьего участника по первой задаче (единственное, которое вы можете взломать), то максимальный балл за первую задачу изменится, и вы займете второе место (таблица справа).

A. Ребус

жадные алгоритмы Конструктив математика Разбор выражений *1800

Вам дан ребус вида ? + ? - ? + ? = n, то есть состоящий из знаков вопроса, разделённых знаками «+» и «-», знака равенства и целого положительного числа n. Требуется заменить каждый из знаков вопроса на целое число от 1 до n так, чтобы равенство выполнялось.

Входные данные

Во входных данных содержится ребус. Гарантируется, что ребус состоит из не более чем 100 знаков вопроса, число n целое положительное и не превосходит 1 000 000, все знаки и числа разделены пробелом, знаки арифметических операций стоят только между двумя знаками вопроса.

Выходные данные

В первой строке выходных данных выведите «Possible» (без кавычек), если ребус имеет решение, и «Impossible» (без кавычек) в противном случае.

Если решение ребуса существует, то во второй строке выведите ребус, в котором вопросики заменены на целые числа от 1 до n. Следуйте формату, используемому в примерах.

C. Простые строки

дп жадные алгоритмы Строки *1300

zscoder любит простые строки! Строка t называется простой, если любая пара соседних букв различается. Например, строки ab, aba, zscoder — простые, в то время как строки aa, add не являются таковыми.

У zscoder есть строка s. Он хочет изменить в ней наименьшее количество букв, чтобы строка s стала простой. Помогите ему с этой задачей!

Входные данные

В единственной строке находится строка s (1 ≤ |s| ≤ 2·105) — строка, которая есть у zscoder. Строка s состоит только из строчных английских букв.

Выходные данные

Выведите простую строку s' — строку s после минимального количества изменений. Если существует несколько решений, можете вывести любое из них.

Обратите внимание, что строка s' также должна состоять только из строчных английских букв.

D. Красивое подмножество

жадные алгоритмы Конструктив теория чисел *1800

Кортеж положительных целых чисел {x1, x2, ..., xk} называется простым, если для всех пар положительных чисел (i, j) (1 ≤ i < j ≤ k) число xi + xj является простым.

Вам задан массив a из n положительных целых чисел a1, a2, ..., an (не обязательно различных). Вам нужно найти простое подмножество массива a наибольшего размера.

Простое число — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.

Подмножеством массива a называется кортеж, который может быть получен из a удалением некоторых (возможно всех) элементов массива.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 1000) — количество целых чисел в массиве a.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — элементы массива a.

Выходные данные

В первой строке выведите целое число m — наибольший размер простого подмножества массива a.

Во второй строке выведите m целых чисел bl — элементы наибольшего по размеру простого подмножества массива a.

Если существует несколько решений, вы можете вывести любое из них. Числа подмножества вы можете выводить в любом порядке.

A. Пристрастный учитель

графы дп жадные алгоритмы реализация *1800

По итогам учебного года учитель решил поощрить своих учеников — раздать им немного ирисок. Он попросил n учеников встать в ряд. Так как учитель очень пристрастен, то он руководствуется следующим правилом при раздаче ирисок.

Он смотрит на первых двух учеников и даёт больше ирисок тому из них, у которого выше оценки. Если у этих двух учеников одинаковые оценки, то они получают одинаковое количество ирисок. Процесс раздачи проходит аналогичным образом для любой пары рядом стоящих учеников, начиная с первого и заканчивая последним.

Известно, что каждый ученик получит как минимум одну ириску. Вам следует найти, сколько ирисок учитель даёт каждому ученику, таким образом, чтобы общее количество розданных ирисок было наименьшим.

Входные данные

В первой строке входного файла записано количество учеников n (2 ≤ n ≤ 1000). Во второй строке содержатся (n - 1) знаков, состоящих из "L", "R" и "=". Для каждой пары рядом стоящих учеников "L" означает, что у ученика слева оценки выше, "R" значает, что выше оценки у ученика справа, а "=" означает, что у обоих оценки одинаковые.

Выходные данные

Содержит n целых чисел, записанных через пробел — сколько ирисок получит каждый ученик в очереди, начиная с первого и заканчивая последним.

B. Перестановка

жадные алгоритмы *1800

Пусть A = {a1, a2, ..., an} — это некоторая перестановка первых n натуральных чисел {1, 2, ..., n}. Вам задано натуральное число k и ещё одна последовательность B = {b1, b2, ..., bn}, где bi — количество элементов aj в A слева от элемента at = i, для которых aj ≥ (i + k).

Например, если n = 5, то A может быть равно {5, 1, 4, 2, 3}. Тогда для k = 2, B равно {1, 2, 1, 0, 0}. Но если k = 3, то B = {1, 1, 0, 0, 0}.

Для двух последовательностей X = {x1, x2, ..., xn} и Y = {y1, y2, ..., yn}, пусть i-ые элементы будут первыми элементами, при которых xi ≠ yi. Если xi < yi, то X лексикографически меньше, чем Y, в то время, как если xi > yi, то X лексикографически больше, чем Y.

Вам даны n, k и B. Вычислите лексикографически наименьшее возможное значение A.

Входные данные

В первой строке записаны через пробел два целых числа n и k (1 ≤ n ≤ 1000, 1 ≤ k ≤ n). Во второй строке записаны n целых чисел, уточняющих значения B = {b1, b2, ..., bn}

Выходные данные

Выведите в единственной строке n целых чисел A = {a1, a2, ..., an}, при которых A принимает лексикографически наименьшее возможное значение. Гарантируется, что решение существует.

A. Выходные

жадные алгоритмы Конструктив математика Перебор *900

На планете Марс год длится ровно n дней (високосных годов на Марсе не бывает). При этом недели у марсиан такие же, как у землян — 5 рабочих дней и затем 2 выходных.

Перед вами стоит задача — определить минимально и максимально возможное количество выходных дней в году на Марсе.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 1 000 000) — количество дней в году на Марсе.

Выходные данные

Выведите два целых числа — минимально и максимально возможное количество выходных дней в году на Марсе.

Примечание

В первом тестовом примере год на Марсе состоит из 14 дней, а значит независимо от того, с какого дня начинается год, в нём в любом случае будет ровно 4 выходных.

Во втором тестовом примере дней в году на Марсе всего 2, и они оба могут быть как рабочими днями, так и выходными.

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. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим первый пример.

Путь Адила: .

Путь Беры: .

Длина пути Адила равняется . Длина пути Беры равняется .

B. Робин Гуд

Бинарный поиск жадные алгоритмы *2000

Все мы слышали захватывающие истории о приключениях Робина Гуда, который, будучи великолепным лучником, воровал деньги у богатых и раздавал их бедным.

В Кекландии проживает n человек, при этом у человека номер i изначально имеется ci монет. Каждый день Робин Гуд отбирает 1 монету у самого богатого человека и отдаёт её самому бедному человеку (самому бедному, после того как он уже забрал 1 монету у самого богатого). Если самого богатого или самого бедного невозможно выбрать однозначно, то из подходящих вариантов Робин Гуд выбирает одного случайного. К сожалению, Робин Гуд уже стар и через k дней уйдёт на пенсию. Он решил провести все эти дни отбирая деньги у богатых и раздавая бендым.

После того как Робин Гуд отбирает монету у самого богатого, этот человек может стать самым бедным, и может даже так произойти, что Робин Гуд отдаст ему его монету назад. Например, если в какой-то день у всех жителей одинаковое количество монет, то и на следующий день у всех жителей также будет одинаковое количество монет.

Вам поручено найти разность количества денег у самого богатого и самого бедного человека через k дней. Обратите внимание, что случайность выбора среди самых богатых и самых бедных не влияет на ответ.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 500 000, 0 ≤ k ≤ 109) — количество жителей Кекландии и количество дней, оставшихся до выхода Робина Гуда на пенсию.

Во второй строке записаны n целых чисел, i-е из которых равно ci (1 ≤ ci ≤ 109) — изначальное количество монет у i-го жителя.

Выходные данные

Выведите одно целое число — разницу между самым богатым и самым бедным жителем Кекландии через k дней.

Примечание

Проследим как изменяется богатство людей в первом примере.

  1. [1, 1, 4, 2]
  2. [2, 1, 3, 2] или [1, 2, 3, 2]

Таким образом, ответ равен 3 - 1 = 2.

Во втором примере никаких изменений происходить не будет.

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. Организация гонки

жадные алгоритмы Структуры данных *3300

Страна Кекляндия состоит из n прекрасных городов, пронумерованных слева направо числами от 1 до n. Города соединены n - 1 дорогой, при этом дорога номер i соединяет города i и i + 1, а её длина равняется wi километров.

Каждая машина, попадающая в город i сразу получает gi литров бензина. Никакого другого способа получить бензин в Кекляндии не существует.

Президент Кекляндии Кеко нанял вас организовать самую красивую гонку, которая когда-либо происходила в Кекляндии. Пусть гонка проходит между городами l и r (l ≤ r). Гонка будет состоять из двух этапов. На первом этапе машины едут из города l в город r. После этого, на следующий день машины едут из города r в город l. Разумеется, поскольку это гонка, то машины едут к цели напрямик, то есть на первом этапе едут только направо, а на втором этапе едут только налево. Красота гонки равняется r - l + 1, то есть количеству городов на каждом этапе. Топливный бак всех машин имеет бесконечный размер, так что гонщики всё время забирают весь бензин, который им дают.

В начале каждого этапа гонщики начинают с пустым баков (0 литров бензина), но они сразу получают бензин, который выдают при попадании в стартовый город (то есть город l на первом этапе и город r на втором).

Между некоторыми парами городов l и r гонку организовать не получится, поскольку у машины может кончится топливо до того, как она доедет до конца маршрута.

У вас есть k подарков. Каждый раз, когда вы дарите подарок городу i, его значение gi увеличивается на 1. Подарки можно распределять между городами произвольным образом, в том числе дарить несколько подарков одному городу (каждый раз увеличивая gi на один). Какую самую красивую гонку можно организовать?

Входные данные

В первой строке входных данных записаны два числа n и k (2 ≤ n ≤ 100 000, 0 ≤ k ≤ 109) — количество городов в Кекляндии и количество подарков соответственно.

В следующей строке записано n - 1 целое число. i-e из этих числе равно wi (1 ≤ wi ≤ 109) — длине дороги между городом i и i + 1.

В последней строке записаны n целых чисел, i-е из которых равно gi (0 ≤ gi ≤ 109) — количеству бензина, которые выдаётся при прибытии в город i.

Выходные данные

Выведите одно целое число — максимально возможную красоту гонки.

Примечание

В первом примере вы можете дать один подарок каждому городу и тогда получится организовать гонку между городами 1 и 4.

Во втором примере можно увеличить g5 на 1 и g6 на 4, тогда станет возможной гонка между городами 2 и 8.

B. Задачи для раунда

жадные алгоритмы реализация *1300

Для очередного раунда Codeforces были подготовлены n задач. Задачи упорядочены по возрастанию сложности, при этом сложности всех задач различны. Дополнительно про некоторые m пар задач известно, что они похожи. Авторы раунда решили поделить задачи между двумя дивизионами согласно следующим правилам:

  • В каждом дивизионе будет предложена хотя бы одна задача.
  • Каждая задача будет использована ровно в одном дивизионе (да, это необычное требование для Codeforces).
  • Любая задача, используемая в первом дивизионе, сложнее любой задачи, используемой во втором дивизионе.
  • Если какие-то две задачи похожи, то они обязательно используются в разных дивизионах.

Посчитайте количество способов разбить задачи на два дивизиона, так чтобы выполнялись все правила. Два способа считаются различными, если существует задача, которая в разных способах будет использована в разных дивизионах.

Обратите внимание, что отношение похожести двух задач не является транзитивным, то есть если задача i похожа на задачу j, а задача j похожа на задачу k, то это не означает, что i похожа на k.

Входные данные

В первой строке входных данных записаны два числа n и m (2 ≤ n ≤ 100 000, 0 ≤ m ≤ 100 000) — количество подготовленных задач и пар похожих задач соответственно.

В каждой из последующих m строк записана пара похожих задач ui, vi (1 ≤ ui, vi ≤ n, ui ≠ vi). Гарантируется, что никакая пара задач не встречается во входных данных дважды.

Выходные данные

Выведите единственное целое число — количество способов разбить задачи на два дивизиона.

Примечание

В первом примере задачи 1 и 2 обязательно будут использованы во втором дивизионе, а задачи 4 и 5 — в первом. Задача 3 может быть использована как в первом, так и во втором дивизионе.

Во втором примере все пары задач являются похожими, поэтому не существует способа разбить задачи на два дивизиона, не нарушая никаких правил.

Третий пример иллюстрирует, что отношение похожести не является транзитивным. Задача 3 похожа на задачу 1 и на задачу 2, но при этом 1 не похожа на 2, и они могут быть использованы для одного дивизиона.

C. Денежные операции

жадные алгоритмы Конструктив сортировки Структуры данных *2100

В Васином городе есть n банков, расположенных по кругу так, что соседними являются банки, номера которых различаются на 1, а также банк номер 1 и банк номер n (если n > 1). При этом, сам себе банк соседом не является.

В каждом банке у Васи есть счёт с каким-нибудь балансом. Заметим, что он может быть и отрицательным, если Вася должен банку.

Васе доступна следующая операция: взять два соседних банка и перечислить со счёта в одном банке на счёт в другом любое количество денег. При этом нет никаких ограничений на размер переводимой суммы или текущее состояние счёта в любом из банков.

Вася путается в больших числах, поэтому он просит вас определить, за какое минимальное количество операций он может обнулить сумму денег, лежащую на счёте в каждом из банков. Гарантируется, что Вася может это сделать, то есть суммарный баланс Васи по всем банкам равен нулю.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000) — количество банков.

Во второй строке записаны n целых чисел ai ( - 109 ≤ ai ≤ 109), i-е из которых определяет баланс Васи в i-м банке. Гарантируется, что сумма всех ai равна 0.

Выходные данные

Выведите минимальное количество операций, за которое Вася может обнулить баланс в каждом банке.

Примечание

В первом примере можно перечислить из первого банка в третий сумму 5.

Во втором примере можно перечислить сначала из третьего банка во второй, а потом из второго в первый сумму 1.

В третьем примере одним из оптимальных ответов является следующая последовательность действий:

  1. перечислить из первого банка во второй сумму 1;
  2. перечислить из второго банка в третий сумму 3;
  3. перечислить из третьего банка в четвертый сумму 6.

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.

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.

C. Операции с кучей

жадные алгоритмы Конструктив Структуры данных *1600

Недавно Петя начал изучать структуру данных «Двоичная куча».

Куча, с которой он работает, позволяет выполнять следующие операции:

  • добавить число в кучу;
  • узнать минимальное число в куче;
  • удалить минимальное число из кучи.

Таким образом, в любой момент куча содержит в себе набор чисел (возможно, пустой), среди которых, возможно, есть одинаковые.

Чтобы лучше запомнить материал, Петя взял пустую кучу и стал применять к ней различные операции. Он не хотел ничего упустить, поэтому все выполненные операции он аккуратно записывал в журнал в порядке их выполнения, соблюдая следующий формат:

  • insert x — в кучу было добавлено число x;
  • getMin x — был выполнен запрос минимума, результатом запроса было число x;
  • removeMin — из кучи было удалено текущее минимальное число (только одно вхождение).

Последовательность операций была корректной, то есть на момент выполнения операций getMin и removeMin в куче находился хотя бы один элемент.

Пока Петя обедал, его младший брат Вова забежал к нему в комнату и вырвал из журнала несколько случайных страниц, так как ему не из чего было строить бумажные кораблики.

В какой-то момент Вова понял, что Петина последовательность операций могла стать некорректной. Например, если выполнять оставшиеся операции в том же порядке, в каком они были записаны, то результат операций getMin может не совпадать с результатом, записанным в журнале, а какие-то из операций getMin и removeMin вообще не могут быть выполнены, так как на момент их выполнения куча пуста.

Теперь Вове нужно дописать в произвольные места в журнале какие-нибудь операции так, чтобы последовательность снова стала корректной, то есть чтобы результат всех операций getMin совпадал с результатом, записанным в журнале, и все операции могли быть корректно выполнены. Вова хочет сделать это как можно быстрее, пока Петя не вернулся с обеда, то есть дописать в журнал минимально возможное количество операций. Любую операцию разрешается дописывать в начало последовательности, между любыми двумя операциями или в конец последовательности операций.

Помогите Вове решить эту проблему.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 100 000) — количество записей, оставшихся в журнале Пети.

В каждой из следующих n строк записана одна из оставшихся в журнале записей об операциях с кучей в формате, описанном выше. Все числа во входных данных целые и не превышают 109 по абсолютной величине.

Выходные данные

В первой строке выведите целое число m — минимальное количество операций в исправленной последовательности.

В следующих m строках выведите эту последовательность операций по одной операции в каждой строке в формате, описанном выше. Все числа должны быть целыми и не превышать 109 по абсолютной величине.

Обратите внимание, что исправленная последовательность должна содержать в себе последовательность операций из входных данных в качестве подпоследовательности.

Гарантируется, что существует корректная последовательность операций, длина которой не превосходит 1 000 000.

Примечание

В первом примере после добавления в кучу числа 3 минимумом будет являться единственное число 3, и для того, чтобы результатом операции getMin было число 4, нужно удалить из кучи 3 (как минимум) и затем добавить 4.

Во втором примере число 1 добавляется дважды, и удалить его нужно также дважды.

B. Майк и переулки

графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное *1600

Только что Майк был очень занят подготовкой к экзаменам и контестам, теперь же, чтобы проветриться, он решил прогуляться мимо городских достопримечательностей.

Город состоит из n перекрестков с номерами от 1 до n. Майк начинает прогулку от своего дома и идет вдоль определенной последовательности перекрестков. Чтобы дойти от перекрестка i до перекрестка j, Майку нужно потратить |i - j| единиц энергии. Суммарное количество энергии, потраченное Майком при прогулке вдоль последовательности перекрестков p1 = 1, p2, ..., pk равно единицам энергии.

Конечно, прогулки были бы скучными без переулков. Переулком называется специальный путь, позволяющий Майку идти от одного перекрестка к другому, используя лишь 1 единицу энергии. Всего в городе Майка ровно n переулков, i-й из них позволяет пройти от перекрестка с номером i к перекрестку с номером ai (i ≤ ai ≤ ai + 1) (но не в противоположном направлении), то есть для каждого перекрестка существует ровно один исходящий переулок. Формально, если Майк выберет последовательность p1 = 1, p2, ..., pk, то для каждого 1 ≤ i < k удовлетворяющего pi + 1 = api and api ≠ pi Майк потратит всего 1 единицу энергии вместо |pi - pi + 1| единиц, прогуливаясь от перекрестка pi к перекрестку pi + 1. К примеру, если Майк решит выбрать последовательность p1 = 1, p2 = ap1, p3 = ap2, ..., pk = apk - 1, то потратит суммарно k - 1 единицу энергии на прогулку вдоль перекрестков.

Перед тем как отправиться в путь, Майк просит вас для каждого перекрестка посчитать минимальное количество энергии, необходимое, чтобы дойти до него от дома Майка. Формально, для каждого 1 ≤ i ≤ n Майка интересует минимально возможное суммарное количество энергии некоторой последовательности p1 = 1, p2, ..., pk = i.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 200 000) — количество перекрестков в городе Майка.

Во второй строке содержатся n чисел a1, a2, ..., an (i ≤ ai ≤ n , , описывающие переулки города. i-й из них позволяет Майку дойти от переулка i до переулка ai за одну единицу энергии. Заметьте, что переулки не позволяют проход в обратном направлении (от ai к i).

Выходные данные

В единственной строке выведите n чисел m1, m2, ..., mn, где mi означает наименьшее количество единиц энергии, которое Майку нужно потратить, чтобы добраться от перекрестка 1 до перекрестка i.

Примечание

В первом примере подходящими являются следующие последовательности:

1: 1; m1 = 0;

2: 1, 2; m2 = 1;

3: 1, 3; m3 = |3 - 1| = 2.

Во втором примере последовательность для любого перекрестка 1 < i всегда имеет вид 1, i, а mi = |1 - i|.

В третьем примере входных данных можно рассматривать следующие последовательности:

1: 1; m1 = 0;

2: 1, 2; m2 = |2 - 1| = 1;

3: 1, 4, 3; m3 = 1 + |4 - 3| = 2;

4: 1, 4; m4 = 1;

5: 1, 4, 5; m5 = 1 + |4 - 5| = 2;

6: 1, 4, 6; m6 = 1 + |4 - 6| = 3;

7: 1, 4, 5, 7; m7 = 1 + |4 - 5| + 1 = 3.

B. Ставки

жадные алгоритмы реализация *1200

В Челябинске живет очень уважаемый бизнесмен Никита со странным прозвищем "БОСС". Как-то раз Никита решил съездить с его другом Алексеем на чемпионат мира по летнему биатлону. Никита, как особо важная персона, получил жетон, позволяющий ставить на каждом участке не более чем на одного спортсмена.

Для начала друзья узнали правила: в гонке n участков равной длины и m участников. Участники пронумерованы от 1 до m. Про каждого участника известно:

  • li — номер участка, с которого биатлонист начинает бежать,
  • ri — номер участка, на котором биатлонист заканчивает бежать,
  • ti — время, которое требуется биатлонисту чтобы преодолеть один участок пути,
  • ci — прибыль в рублях, которую получит поставивший на него человек, в случае победы i-ого спортсмена на одном из участков.

i-ый биатлонист проезжает участки с li по ri включительно. Весь путь участник пробегает за (ri - li + 1)·ti единиц времени. Одну секцию участник пробегает ровно за ti единиц времени. В случае победы спортсмена на k участках поставивший на него получит k·ci рублей.

На каждом участке победитель определяется независимо следующим образом: если есть хотя бы один биатлонист, бегущий данный участок, то из всех них победителем является тот, кто пробежал этот участок за минимальное время (преодолел участок за меньшее время, чем другие). В случае равенства времени побеждает спортсмен с меньшим порядковым номером. Если же участников этапа нет, то победитель на этом этапе неопределен. Стоит добавить, что в летнем биатлоне все участники движутся с постоянной скоростью.

Также стоит добавить, что Никита может ставить на каждом участке на любого участника, бегущего данный участок.

Помогите друзьям определить максимальную возможную прибыль.

Входные данные

В первой строке находится два целых числа n и m (1 ≤ n, m ≤ 100). Далее следуют m строк, в каждой из которых записано 4 целых числа li, ri, ti, ci (1 ≤ li ≤ ri ≤ n, 1 ≤ ti, ci ≤ 1000).

Выходные данные

Выведите одно целое число — максимальную прибыль в рублях, которую могут получить друзья. На каждом из n участков разрешается поставить деньги не более чем на одного спортсмена.

Примечание

В первом тесте оптимально ставить: на 1-2 участках на 1 биатлониста, на 3 участке на 3 биатлониста, на 4 участке на 4 биатлониста. Итого: прибыль 5 рублей за 1 участок,прибыль 5 рублей за 2 участок, прибыль 30 рублей за 3 участок, прибыль 20 рублей за 4 участок. Суммарная прибыль 60 рублей.

Во втором тесте оптимально ставить: на 1 и 5 участках на 1 биатлониста, на 2-4 участке на 2 биатлониста, на 6-7 участках на 4 спортсмена. На 8 участке нет победителя. На 1 участке прибыль 10 рублей, на 2,3,4 по 15 рублей, на 5 участке прибыль 10 рублей, на 6,7 участках прибыль 20 рублей. Суммарная прибыль 105 рублей.

B. SMS

жадные алгоритмы Разбор выражений Строки *1600

Маленький морж Клычок, как и все современные моржи, любит общаться с помощью SMS. Однажды он столкнулся с проблемой, что при отправке больших текстов они разделяются на части по n символов (размер одного SMS сообщения), и разрываются целые предложения или даже слова!

Клычку это не понравилось, и перед ним встала задача разбить текст на сообщения самостоятельно таким образом, чтобы ни одно предложение не было разбито на части при отправке, и количество SMS сообщений для отправки было бы минимальным. Если два подряд идущих предложения находятся в разных сообщениях, то пробел между ними можно не учитывать (Клычок этот пробел не набирает).

Текст маленького моржа имеет следующий вид:

TEXT ::= SENTENCE | SENTENCE SPACE TEXT
SENTENCE ::= WORD SPACE SENTENCE | WORD END
END ::= {'.', '?', '!'}
WORD ::= LETTER | LETTER WORD
LETTER ::= {'a'..'z', 'A'..'Z'}
SPACE ::= ' '

Под SPACE следует подразумевать символ пробела.

Сколько же сообщений отправил Клычок?

Входные данные

В первой строке задается целое число n — размер одного сообщения (2 ≤ n ≤ 255). В следующей строке находится сам текст. Длина текста не превышает 104 символов. Гарантируется, что текст удовлетворяет описанному выше формату. В частности, из этого следует, что текст не пуст.

Выходные данные

В первой и единственной строке выведите количество SMS сообщений, которое потребуется Клычку. Если разбить текст невозможно, выведите "Impossible" без кавычек.

Примечание

Рассмотрим третий пример. Текст будет разбит на 3 сообщения: "Hello!", "Do you like fish?" и "Why?".

A. Карты

жадные алгоритмы реализация *800

В колоде карт есть n карт (nчётное число). На каждой карте написано целое положительное число. В новую карточную игру будут играть n / 2 человек. Каждому из игроков перед началом игры будет роздано ровно по две карты, причём каждая карта из колоды будет роздана ровно одному игроку.

Перед вами стоит задача найти такой способ раздачи карт, чтобы у каждого из игроков сумма чисел, написанных на полученных им картах, совпадала. Гарантируется, что входные данные таковы, что это всегда возможно.

Входные данные

В первой строке входных данных записано целое положительное число n (2 ≤ n ≤ 100) — количество карт. Гарантируется, что n чётно.

Во второй строке следует последовательность из n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 100), где ai равно числу, написанному на i-й карте.

Выходные данные

Выведите n / 2 пар целых чисел, по одной паре в строке — номера карт, которые нужно отдать каждому игроку. Каждая карта должна быть роздана ровно одному игроку. Карты нумеруются в том же порядке, в котором описываются во входных данных, начиная с единицы. Гарантируется, что входные данные таковы, что ответ всегда существует. Если возможных правильных ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере карты распределены таким образом, что у каждого из игроков сумма чисел равна 8.

Во втором примере все значения ai равны между собой. Следовательно, любое разбиение на пары является правильным ответом.

A. Наибольшее возрастание

дп жадные алгоритмы реализация *800

Вам задан массив, состоящий из n целых чисел. Перед вами стоит задача определить наибольшую длину возрастающего подмассива заданного массива.

Подмассивом называется последовательность подряд идущих элементов массива. Подмассив называется возрастающим, если каждый из его элементов строго больше предыдущего.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество чисел.

Во второй строке следует n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите наибольшую длину возрастающего подмассива заданного массива.

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.

D. Капитан Америка

жадные алгоритмы Потоки *3100

Стив Роджерс в восторге от новых щитов, которые ему выдали в S.H.I.E.L.D. Осталось только их раскрасить. Всего щитов n, i-й из которых расположен в точке (xi, yi) координатной плоскости. Вполне возможно, что два или более щита расположены в одной точке.

Стив хочет покрасить каждый щит в красный или синий цвет. Покраска щита в красный стоит r долларов, а покраска в синий стоит b долларов.

Дополнительно покраска Стива должна удовлетворять m условиям. Каждое условие описывается тремя целыми числами ti, li и di:

  • Если ti = 1, то модуль разницы между количеством красных и количеством синих щитов на прямой x = li не должен превосходить di.
  • Если ti = 2, то модуль разницы между количеством красных и количеством синих щитов на прямой y = li не должен превосходить di.

Стив поручил вам найти корректную раскраску минимальной стоимости.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество щитов и количество ограничений соответственно.

Во второй строке записаны два целых числа r и b (1 ≤ r, b ≤ 109).

Последующие n строк содержат координаты щитов. В i-й из них записаны два целых числа xi и yi (1 ≤ xi, yi ≤ 109).

В последующих m строках записаны ограничения, в j-й из них записаны три целых числа tj, lj и dj (1 ≤ tj ≤ 2, 1 ≤ lj ≤ 109, 0 ≤ dj ≤ n).

Выходные данные

Если удовлетворить все ограничения невозможно, то выведите -1 в первой и единственной строке выходных данных.

В противном случае сначала выведите минимальную суммарную стоимость покраски всех щитов. Во второй строке выведите строку длины n, состоящую из букв «r» и «b». i-й из этих символов должен быть равен «r», если i-й щит следует покрасить в красный цвет в оптимальном ответе, и «b», если его следует покрасить в синий.

Если оптимальных решений несколько, выведите любое из них.

A. Циклический сдвиг букв

жадные алгоритмы Конструктив реализация Строки *1200

Вам дана непустая строка s, состоящая из строчных букв английского алфавита. Требуется ровно один раз выбрать в s непустую подстроку и сдвинуть её буквы по циклу: «z» «y» «x» «b» «a» «z», то есть заменить каждую букву подстроки на предыдущую в английском алфавите (а букву «a» на букву «z»).

Требуется определить, какую лексикографически минимальную строку можно получить после выполнения ровно одного сдвига?

Входные данные

В первой строке входных данных записана строка s (1 ≤ |s| ≤ 100 000), состоящая из строчных букв английского алфавита.

Выходные данные

Выведите лексикографически минимальную строку, которую можно получить из s, сдвинув ровно одну непустую подстроку.

Примечание

Строка s называется лексикографически меньшей, чем строка t такой же длины, если существует такое 1 ≤ i ≤ |s|, что s1 = t1, s2 = t2, ..., si - 1 = ti - 1, а si < ti.

B. Восстановление строки

жадные алгоритмы Конструктив математика реализация *1900

Любой строке s, состоящей из символов «0» и «1», можно сопоставить четвёрку чисел a00, a01, a10 и a11, где axy — количество двухсимвольных подпоследовательностей строки s, равных последовательности {x, y}.

В данной задаче вам дана четвёрка чисел a00, a01, a10 и a11, требуется найти непустую строку s, которая этой четверке чисел соответствует, либо определить, что такой строки не существует. Можно доказать, что если хотя бы один ответ существует, то найдется ответ, длина которого не превосходит 1 000 000.

Входные данные

В единственной строке входных данных записаны четыре неотрицательных целых числа a00, a01, a10 и a11, каждое из которых не превосходит 109.

Выходные данные

Если подходящая непустая строка существует, то выведите её в единственной строке выходных данных. В противном случае выведите «Impossible». Длина ответа не должна превосходить 1 000 000.

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).

B. Контрольные пункты

жадные алгоритмы реализация сортировки *1500

Спортсмен Вася участвует в соревнованиях по спортивному ориентированию. На соревновательной прямой расположены n контрольных пунктов с координатами x1, x2, ..., xn. Вася стартует из точки с координатой a. Ему необходимо посетить как минимум n - 1 контрольный пункт, чтобы финишировать. Участники могут посещать контрольные пункты в произвольном порядке.

Васю интересует, какие контрольные пункты и в каком порядке ему нужно посещать, чтобы пройденное им расстояние было минимально возможным. Помогите ему вычислить это расстояние.

Входные данные

В первой строке входных данных даны два целых числа n и a (1 ≤ n ≤ 100 000,  - 1 000 000 ≤ a ≤ 1 000 000) — количество контрольных пунктов и начальная координата Васи соответственно.

Во второй строке записаны n целых чисел x1, x2, ..., xn ( - 1 000 000 ≤ xi ≤ 1 000 000) — координаты контрольных пунктов.

Выходные данные

Выведите одно целое число — минимальное суммарное расстояние, которое нужно пройти Васе, чтобы посетить как минимум n - 1 контрольный пункт.

Примечание

В первом примере требуется посетить хотя бы два контрольных пункта. Оптимальный вариант — сначала дойти до третьего (расстояние 12 - 10 = 2), а потом до второго (расстояние 12 - 7 = 5). Итоговое расстояние равняется 2 + 5 = 7.

Во втором примере достаточно посетить один контрольный пункт, поэтому оптимально будет направиться в точку  - 10.

C. Мемори и деволюция

жадные алгоритмы математика *1600

Мемори изучает деволюцию различных объектов, в данный момент треугольников. Она начинает с равностороннего треугольника со сторонами, равными x, и хочет выполнить несколько операций так, чтобы получить равносторонний треугольник со сторонами y.

За одну секунду Мемори может изменить длину ровно одной стороны текущего треугольника так, чтобы он оставался невырожденным треугольником (то есть треугольником ненулевой площади). В любой момент времени все стороны треугольника должны иметь целочисленную длину.

За какое минимальное количество секунд Мемори сможет получить равносторонний треугольник с длиной стороны y?

Входные данные

В единственной строке входных данных записаны два целых числа x и y (3 ≤ y < x ≤ 100 000) — изначальная и желаемая длина всех сторон треугольника соответственно.

Выходные данные

Выведите одно целое число — минимальное количество секунд, которое потребуется Мемори, чтобы получить равносторонний треугольник со стороной y, если она начинает с равностороннего треугольника со стороной x.

Примечание

В первом примере Мемори начинает с равностороннего треугольника со стороной 6 и хочет получить равносторонний треугольник со стороной 3. Обозначим треугольник со сторонами a, b и c как (a, b, c). Мемори может выполнить следующие преобразования: .

Во втором примере Мемори может проделать такие изменения: .

В третьем примере возможным ответом является .

B. Дополни слово

жадные алгоритмы *1300

Кодер ZS любит читать словарь. Он считает, что слово хорошее, если найдется его подстрока (непрерывный отрезок букв) длины 26 такая, что она содержит каждую букву латинского алфавита ровно по одному разу. В частности, если длина строки строго меньше 26, такой подстроки не существует и строка не является хорошей.

Теперь Кодер ZS сообщил вам слово, в котором некоторые буквы пропущены, так как он забыл их. Он хочет определить, возможно ли вставить пропущенные буквы так, что слово станет хорошим. Если это возможно, ему нужно найти пример такого слова. Поможете ему?

Входные данные

Первая и единственная строка входных данных содержит единственную строку s (1 ≤ |s| ≤ 50 000) — слово, которое помнит Кодер ZS. Каждый символ строки является заглавной буквой латинского алфавита ('A'-'Z') или же является знаком вопроса ('?'), где знаки вопроса означают буквы, которые Кодер ZS вспомнить не может.

Выходные данные

Если способа заменить все знаки вопроса заглавными буквами так, что слово станет хорошим, не существует, выведите  - 1 в единственной строке.

В противном случае, выведите строку, соответствующую хорошему слову, которое Кодер ZS мог запомнить. Эта строка должна соответствовать строке из входных данных, за исключением знаков вопроса, замененных заглавными буквами латинского алфавита.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере из условия, ABCDEFGHIJKLMNOPQRZTUVWXYS является правильным ответом, потому что она содержит подстроку длины 26 (в данном случае это вся строка), содержащую все буквы латинского алфавита ровно по одному разу. Заметьте, что существует несколько решений, например ABCDEFGHIJKLMNOPQRSTUVWXYZ или ABCEDFGHIJKLMNOPQRZTUVWXYS.

Во втором примере из условия пропущенных букв нет. Также данная строка не содержит подстроки длины 26, включающую в себя все буквы алфавита, так что ответ равен  - 1.

В третьем примере из условия любая строка длины 26, содержащая все буквы латинского алфавита, подходит в качестве ответа.

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.

B. Анатолий и тараканы

жадные алгоритмы *1400

Как и многие студенты, Анатолий живёт в общежитии. Как известно, помимо студентов в общежитии также живут тараканы, при этом тараканы бывают двух видов: чёрные и рыжие. У Анатолия в комнате живёт n тараканов.

Однажды Анатолий выстроил всех тараканов в одну шеренгу. Анатолий по своей природе перфекционист, поэтому он хочет, чтобы в шеренге цвета тараканов чередовались. Также у него есть ведро чёрной и ведро рыжей краски. За один ход Анатолий может либо поменять местами любых двух тараканов, либо перекрасить одного из тараканов в другой цвет.

Помогите Анатолию определить, какое минимальное число ходов ему придётся сделать, чтобы цвета всех тараканов в шеренге чередовались?

Входные данные

В первой строке входных данных задано число n (1 ≤ n ≤ 100 000) — количество тараканов.

Во второй строке записана строка длины n, состоящая из символов «b» и «r», означающих соответственно чёрного и рыжего таракана.

Выходные данные

Выведите одно число — минимальное количество действий, которые придётся совершить Анатолию, чтобы цвета тараканов в шеренге чередовались.

Примечание

В первом примере Анатолию следует поменять местами третьего и четвертого тараканов. Для этого ему понадобится один ход, поэтому ответ 1.

Во втором примере оптимальным решением будет перекрасить в рыжий цвет второго и четвёртого тараканов. На это потребуется 2 хода.

В третьем примере цвета тараканов в шеренге уже чередуются, поэтому ответ 0.

A. Гоштасп, Виштасп и Эйди

*особая задача жадные алгоритмы математика *1800

Гоштасп хорошо программирует, и все в его школе это знают. Однажды его друг Виштасп попросил решить задачу:

Дано натуральное число n, определите, является ли оно хорошим.

Натуральное число x называется хорошим, если существует набор различных чисел a1, a2, ..., am такой, что . При этом каждое число из набора ai либо должно быть простым, либо должно равняться единице.

Виштасп предлагает Гоштаспу разделить с ним свое Эйди поровну, если он сможет решить задачу. Эйди — это деньги, которые дарят детям на Новруз их родители и другие родственники.

Помогите Гоштаспу решить задачу!

Входные данные

В первой строке записано одно натуральное число n (1 ≤ n ≤ 10000).

Выходные данные

Если число не является хорошим, выведите 0. Иначе выведите числа a1, ..., am. Если существует несколько решений, выведите лексикографически наибольшее из них. Решения сравниваются как последовательности чисел, а не как строки.

Чтобы сравнить последовательности a1, ..., am и b1, ..., bn найдите первый индекс i такой, что ai ≠ bi. Если ai < bi, то a лексикографически меньше, а если bi < ai, то b лексикографически меньше. Если m ≠ n, добавьте (только для сравнения) нули в конец меньшей последовательности и выполните сравнение.

Количество элементов в последовательности (m) минимизировать не требуется.

При выводе последовательности следуйте формату примеров.

F. Нефть

*особая задача жадные алгоритмы математика *1900

Доктор Мосаддык хочет выкопать несколько нефтяных скважин в Персидском заливе. Залив представляет собой прямоугольное поле размера n × m. Каждая клетка либо содержит нефть, либо пуста.

Две клетки считаются соседними, если у них есть общая сторона. Путь — это такая последовательность клеток c1, c2, ..., cx, что каждая из них содержит нефть, и для каждого i: клетка ci имеет общую сторону с ci - 1 и ci + 1 (если они существуют). Две клетки называются соединенными, если между ними существует путь. Если выкопать скважину в определенной клетке, то можно добывать нефть из всех клеток, соединенных с данной. Выкапывать скважины в пустых клетках не разрешается.

Доктор Мосаддык также знает, что в Персидском заливе пустые клетки образуют целые ряды и строки. То есть если какая-то клетка пуста, то столбец и/или строка, содержащие ее, тоже пусты.

Помогите доктору Мосаддыку выяснить, сколько скважин нужно выкопать, чтобы выкачать всю нефть в заливе.

Входные данные

В первой строке через пробел записаны два целых числа n и m (1 ≤ n, m ≤ 100).

Во второй строке записано целое число t (0 ≤ t ≤ n) — количество пустых строк. Далее следует t различных целых чисел из диапазона [1, n] — номера пустых строк.

В третьей строке записано целое число s (0 ≤ s ≤ m) — количество пустых столбцов. Далее следует s различных целых чисел из диапазона [1, m] — номера пустых столбцов.

Строки нумеруются от 1 до n (сверху вниз), а столбцы нумеруются от 1 до m (слева направо).

Выходные данные

Выведите одно число, минимальной количество скважин, которое должен выкопать доктор Мосаддык, чтобы выкачать всю нефть.

Это количество совпадает с количеством областей, на которые распадается прямоугольник после удаления всех пустых строк и столбцов.

A. Церемония закрытия

жадные алгоритмы *2000

Церемония закрытия Squanch Code Cup проводится в большом зале на n × m человек. Сам зал состоит из n рядов, в каждом из которых находится m стульев. Каждый стул имеет две координаты: (x, y) (1 ≤ x ≤ n, 1 ≤ y ≤ m).

На вход в зал столпилось две очереди: k человек находится в точке с координатами (0, 0), и n·m - k человек в точке с координатами (0, m + 1). У каждого человека должен быть билет на определённое место. Если у человека p с начальными координатами (x, y) билет на место (xp, yp), ему нужно будет пройти |x - xp| + |y - yp|.

Про каждого человека известна его выносливость, а именно какое максимальное расстояние он может пройти. Ваша задача узнать, можно ли распределить все билеты, чтобы каждый человек смог дойти до своего места.

Входные данные

Первая строка ввода содержит два натуральных числа n и m (1 ≤ n·m ≤ 104) — размеры зала.

Вторая строка содержит несколько целых неотрицательных чисел. Первое число k (0 ≤ k ≤ n·m) обозначает число людей с начальными координатами (0, 0). За ним следуют k чисел, обозначающих выносливость этих людей.

Третья строка содержит несколько целых неотрицательных чисел. Первое число l (l = n·m - k) обозначает число людей с начальными координатами (0, m + 1) За ним следуют l чисел, обозначающих выносливость этих людей.

Выносливость задается натуральными числами, не превышающими n + m.

Выходные данные

Если можно распределить билеты описанным способом, выведите «YES». Иначе выведите «NO».

D. Максим и массив

жадные алгоритмы Конструктив математика Структуры данных *2000

Недавно Максим нашел никому не нужный массив n целых чисел. Ему сразу пришла в голову идея для изменения этого массива: он придумал целое положительное число x и решил прибавлять или вычитать его из произвольных элементов массива. Формально, за одну операцию Максим выбирает целое число i (1 ≤ i ≤ n), и меняет i-й элемент массива ai либо на ai + x, либо на ai - x. Обратите внимание, что операцию можно применять более одного раза к элементу на одной и той же позиции.

Максим — любопытный минималист, поэтому он хочет узнать, какое минимальное значение может принять произведение всех элементов массива (то есть ), если Максим применит к нему не более k операций. Помогите ему в этом.

Входные данные

В первой строке входных данных содержится три целых числа n, k и x (1 ≤ n, k ≤ 200 000, 1 ≤ x ≤ 109) — количество элементов в массиве, максимальное количество операций и число, придуманное Максимом, соответственно.

Во второй строке содержится n целых чисел a1, a2, ..., an () — элементы массива, который нашел Максим.

Выходные данные

В единственной строке выведите n целых чисел b1, b2, ..., bn  — элементы массива после применения к нему не более чем k описанных операций. В частности, должно быть верным для всех 1 ≤ i ≤ n, а произведение всех элементов массива должно быть минимально возможным.

Если ответов несколько, выведите любой.

D. Генерация наборов

Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *1900

Вам задан набор Y из n различных целых положительных чисел y1, y2, ..., yn.

Назовём набор X из n различных целых положительных чисел x1, x2, ..., xn генератором для Y, если из набора X можно получить набор Y, применяя к элементам набора X следующие две операции:

  1. Умножить произвольное число xi на два, то есть заменить xi на xi.
  2. Умножить произвольное число xi на два и прибавить единицу, то есть заменить xi на xi + 1.

Обратите внимание, не требуется, чтобы все числа в наборе X были различны после выполнения каждой операции.

Наборы в данной задаче сравниваются как множества чисел. Другими словами, два набора различных чисел X и Y совпадают, если, выписав оба набора в отсортированном порядке, мы получим одинаковые массивы.

Заметьте, что любой набор чисел (или его перестановка) сам является одним из своих генераторов.

По заданному набору Y найдите его генератор, в котором максимальное число минимально.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 50 000) — количество чисел в наборе Y.

Во второй строке записаны n чисел y1, ..., yn (1 ≤ yi ≤ 109). Гарантируется, что все числа в наборе различны.

Выходные данные

Выведите n чисел — генератор для заданного набора Y, в котором максимальное число как можно меньше. Если подходящих наборов несколько, разрешается вывести любой из них.

C. Поликарп на радиостанции

жадные алгоритмы *1600

Поликарп — музыкальный редактор на радиостанции. Ему принесли план плей-листа на завтрашний день, являющийся последовательностью a1, a2, ..., an, где ai — группа, которая будет исполнять i-ю песню. Поликарп обожает группы с номерами от 1 до m, но прохладно относится ко всем остальным.

Обозначим как bj количество песен, которые завтра будет играть группа с номером j. Помогите Поликарпу изменить плей-лист так, чтобы минимальное среди чисел b1, b2, ..., bm было как можно больше.

Найдите искомое максимальное значение минимума величин bj (1 ≤ j ≤ m), а также минимальное количество изменений в плей-листе, которое необходимо сделать, чтобы достигнуть такого значения минимума. Одно изменение в плей-листе — это замена группы, которая должна исполнять песню номер i, на любую другую.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ m ≤ n ≤ 2000).

Во второй строке следует n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai равно номеру группы, которая должна исполнять песню i.

Выходные данные

В первую строку выведите два целых числа — максимальное значение минимума величин bj (1 ≤ j ≤ m), где bj — количество песен его любимой группы j, которые будут в изменённом плей-листе, а так же минимальное количество изменений в плей-листе, которое необходимо сделать, чтобы достигнуть этого.

Во вторую строку выведите изменённый плей-лист. Если оптимальных ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере после изменений Поликарпа окажется, что первая группа будет исполнять две песни (b1 = 2), как и вторая группа (b2 = 2). Таким образом, минимальное из этих значений равно 2. Большее минимальное значение невозможно получить какими-либо заменами в плей-листе.

Во втором примере после изменений Поликарпа окажется, что первая группа будет исполнять две песни (b1 = 2), вторая группа — 3 песни (b2 = 3), а третья — 2 песни (b3 = 2). Таким образом, наилучшее минимальное значение равно 2.

D. Озёра в Берляндии

графы жадные алгоритмы поиск в глубину и подобное реализация снм *1600

Карта Берляндии представляет собой прямоугольник размера n × m, состоящий из клеток размера 1 × 1. Каждая из клеток карты является либо сушей, либо водой. Со всех краёв Берляндия омывается океаном.

Озёрами называются такие связные по сторонам максимальные по включению области из клеток с водой, которые не имеют общих границ с океаном. Другими словами, озеро — это область клеток с водой, такая что из любой клетки можно добраться до любой другой, не покидая озера, двигаясь только между соседними по стороне клетками, никакая из клеток не расположена на границе прямоугольника и нельзя добавить ещё одну клетку с водой, так что по-прежнему можно будет добраться от любой клетки до любой другой.

Перед вами стоит задача засыпать землей минимальное количество клеток таким образом, чтобы в Берляндии стало ровно k озёр. Изначально на карте находятся не менее k озер.

Входные данные

В первой строке входных данных записаны три целых положительных числа n, m и k (1 ≤ n, m ≤ 50, 0 ≤ k ≤ 50) — размеры карты и количество озёр, которые должны остаться на карте.

В следующих n строках следует по m символов — описание карты. Каждый из символов — либо «.» (означает, что соответствующая клетка это участок с водой), либо «*» (означает, что соответствующая клетка — это участок суши).

Гарантируется, что на данной карте не менее k озер.

Выходные данные

В первую строку выведите минимальное количество клеток, которые из воды нужно превратить в сушу.

В следующие n строк выведите m символов — карта после внесения в неё изменений. Формат должен строго соответствовать формату карты из входных данных (размеры карты выводить не нужно). Если решений несколько, выведите любое из них.

Гарантируется, что ответ всегда существует.

Примечание

В первом примере всего содержится два озера — первое состоит из клеток (2, 2) и (2, 3), а второе состоит из клетки (4, 3). Выгодно засыпать второе озеро, так как оно наименьшее по размеру. Обратите внимание, что участок воды в нижнем левом углу поля не является озером, так как этот участок граничит с океаном.

E. Односторонняя реформа

графы жадные алгоритмы Конструктив поиск в глубину и подобное Потоки *2200

В Берляндии есть n городов и m двунаправленных дорог, которыми соединены некоторые пары городов. Известно, что между каждой парой городов существует не более одной дороги, а также никакая дорога не соединяет город сам с собой. Допустимо, что между некоторыми парами городов не существует пути по дорогам от одного до другого.

Дорожный министр решил провести в Берляндии реформу и заориентировать все дороги в стране, то есть сделать каждую дорогу односторонней. При этом министр хочет максимизировать количество таких городов, чтобы количество дорог, начинающихся в этих городах, было равно количеству дорог, которые в них заканчиваются.

Входные данные

В первой строке следует целое положительное число t (1 ≤ t ≤ 200) — количество наборов входных данных.

Каждый из наборов входных данных задаётся следующим образом. В первой строке следует два целых числа n и m (1 ≤ n ≤ 200, 0 ≤ m ≤ n·(n - 1) / 2) — количество городов и количество дорог в Берляндии.

В следующих m строках следует описание дорог в Берляндии. В каждой строке находятся по два целых числа u и v (1 ≤ u, v ≤ n) — номера городов, которые соединяет очередная дорога. Гарантируется, что никакая дорога не соединяет город с самим самой и между любой парой городов существует не более одной дороги. Допустимо, что между некоторыми парами городов не существует пути по дорогам от одного до другого.

Гарантируется, что суммарное количество городов во всех наборах входных данных не превосходит 200.

Обратите внимание, что для взломов вы можете использовать только тесты, состоящие из одного набора входных данных, то есть t должно быть равно единице.

Выходные данные

Для каждого набора входных данных выведите сначала искомое максимальное количество таких городов, что количество дорог, начинающихся в этих городах, было равно количеству дорог, которые в них заканчиваются.

В следующих m строках выведите заориентированные дороги. Сначала выводите номер города, в котором дорога начинается, а затем номер города, в котором дорога заканчивается. Если ответов несколько, выведите любой из них. Дороги в каждом наборе входных данных разрешается выводить в любом порядке. Каждая дорога должна быть выведена ровно один раз.

F. st-остов

графы жадные алгоритмы реализация снм *2300

Вам задан связный неориентированный граф, состоящий из n вершин и m рёбер. Каждое ребро соединяет две различные вершины, любую пару вершин соединяет не более одного ребра.

Также вам даны две различные вершины s и t, а также две величины ds и dt. Перед вами стоит задача построить любой остов заданного графа (обратите внимание, что граф невзвешенный), у которого степень вершины s не превышает ds, а степень вершины t не превышает dt, либо сообщить, что это невозможно.

Остов (покрывающее дерево) графа G — такой его подграф, который является деревом и содержит все вершины графа G. Иными словами, это связный граф, содержащий n - 1 ребро и полученный из заданного графа G удалением некоторых рёбер.

Степенью вершины называется число инцидентных этой вершине рёбер.

Входные данные

В первой строке следует два целых числа n и m (2 ≤ n ≤ 200 000, 1 ≤ m ≤ min(400 000, n·(n - 1) / 2)) — количество вершин и количество рёбер соответственно.

В следующих m строках следует описание рёбер графа. В каждой из строк находятся по два целых числа u и v (1 ≤ u, v ≤ n, u ≠ v) — номера вершин, соединённых очередным ребром. Гарантируется, что в графе не содержится петель и кратных рёбер, а также то, что граф связный.

В последней строке следуют четыре целых числа s, t, ds и dt (1 ≤ s, t ≤ n, s ≠ t, 1 ≤ ds, dt ≤ n - 1).

Выходные данные

Если ответа не существует, выведите в первую строку «No» (без кавычек).

В противном случае в первую строку выведите «Yes» (без кавычек). В следующей (n - 1)-й строке выведите по два целых числа — описание рёбер остова. Каждое из рёбер остова должно быть выведено ровно один раз.

Выводить ребра можно в любом порядке. Концы ребер также можно выводить в любом порядке.

Если решений несколько, выведите любое из них.

B. Пакетная сортировка

жадные алгоритмы математика Перебор реализация *1500

Вам задана таблица, состоящая из n строк и m столбцов.

Числа в каждой строке образуют перестановку от чисел 1 до m.

Разрешается не более одного раза для каждой строки поменять в ней два числа местами. Также разрешается не более одного раза поменять местами два столбца целиком. Таким образом, суммарно можно совершить от 0 до n + 1 действия. Описанные действия можно выполнять в любом порядке.

Проверьте, можно ли с помощью указанных действий добиться ситуации, чтобы в каждой строке была записана тождественная перестановка 1, 2, ..., m. Другими словами, существует ли такая последовательность действий, в результате которой числа в каждой из строк будут отсортированы по возрастанию.

Входные данные

В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 20) — количество строк и столбцов в заданной таблице.

В следующих n строках записаны по m чисел — содержимое таблицы. Гарантируется, что числа в каждой строке образуют перестановку чисел от 1 до m.

Выходные данные

Выведите «YES» (без кавычек), если с помощью указанных действий можно получить тождественную перестановку одновременно во всех строках таблицы. В противном случае выведите «NO» (без кавычек).

Примечание

В первом примере можно действовать следующим образом:

  1. Сначала поменять местами второй и третий столбец. После этого действия таблица будет выглядеть так:
    1 2 3 4
    1 4 3 2
  2. Затем во второй строке поменять местами числа на второй и четвёртой позиции. После этого действия таблица будет выглядеть так:
    1 2 3 4
    1 2 3 4

C. Трассировка луча

жадные алгоритмы математика реализация сортировки теория чисел хэши *1800

В прямоугольной комнате размером n на m метров расположено k датчиков, датчик номер i расположен в точке с координатами (xi, yi). Все датчики расположены в различных точках, находящихся строго внутри прямоугольника.

Противоположные углы комнаты находятся в точках с координатами (0, 0) и (n, m). Стены комнаты расположены параллельно осям координат.

В момент времени 0, из точки (0, 0) в направлении точки (1, 1) выпускается лазерный луч. Луч летит со скоростью метров в секунду. Таким образом, луч окажется в точке (1, 1) ровно через одну секунду после старта.

При столкновении со стеной луч отражается по закону, что угол падения равен углу отражения. При попадании луча в любой из четырёх углов комнаты он останавливается.

Определите для каждого датчика первый момент времени, когда луч пройдет сквозь точку, содержащую этот датчик. Для датчиков, через которые луч не пройдёт, выведите  - 1.

Входные данные

В первой строке входных данных записаны три числа n, m и k (2 ≤ n, m ≤ 100 000, 1 ≤ k ≤ 100 000) — размеры комнаты и количество датчиков.

В следующих k строках записаны по два целых числа xi и yi (1 ≤ xi ≤ n - 1, 1 ≤ yi ≤ m - 1) — координаты датчиков. Гарантируется, что никакие два датчика не находятся в одной точке.

Выходные данные

Выведите k целых чисел, i-е из которых должно равняться времени в секундах, через которое луч пройдёт через i-й датчик, или  - 1, если этого не произойдёт.

Примечание

В первом примере луч пройдёт последовательно через точки со следующими координатами: (0, 0), (1, 1), (2, 2), (3, 3). Таким образом, через 3 секунды после вылета луч остановится в точке (3, 3).

Во втором примере луч пройдёт последовательно через точки со следующими коорданатами: (0, 0), (1, 1), (2, 2), (3, 3), (2, 4), (1, 3), (0, 2), (1, 1), (2, 0), (3, 1), (2, 2), (1, 3), (0, 4). В этом примере луч остановится в точке (0, 4) через 12 секунд после вылета. За это время он отразится от стен в точках (3, 3), (2, 4), (0, 2), (2, 0) и (3, 1).

D. Плотная подпоследовательность

жадные алгоритмы Строки Структуры данных *1900

Вам дана строка s, состоящая из строчных английских букв, и целое число m.

Выберем из данной строки некоторые символы так, чтобы в любой непрерывный подотрезок длины m попал хотя бы один выбранный символ. Заметьте, что здесь выбираются именно позиции символов, а не сами символы.

Затем из символов, которые стоят на выбранных позициях, собирается новая строка. При этом необходимо использовать все символы на выбранных позициях, но их разрешается переставлять как угодно.

Формально, мы выбираем некоторую подпоследовательность индексов 1 ≤ i1 < i2 < ... < it ≤ |s|. Выбранная последовательность должна удовлетворять условию: для любого j, такого что 1 ≤ j ≤ |s| - m + 1, среди выбранных индексов найдется хотя бы один, который принадлежит отрезку [j,  j + m - 1], то есть существует k от 1 до t, такое что j ≤ ik ≤ j + m - 1.

Затем мы выбираем некоторую перестановку p выбранных индексов и составляем новую строчку sip1sip2... sipt.

Найдите лексикографически минимальную строку, которую можно получить с помощью описанных действий.

Входные данные

Первая строка входных данных содержит одно число m (1 ≤ m ≤ 100 000).

Во второй строке записана сама строка s. Гарантируется, что строка непустая, состоит из строчных английский букв и её длина не превосходит 100 000. Также, гарантируется, что число m не превосходит длины строки.

Выходные данные

Выведите лексикографически минимальную строку, которую можно получить с помощью описанных действий.

Примечание

В первом примере мы можем выбрать подпоследовательность {3} и составить строку «a».

Во втором примере мы можем выбрать подпоследовательность {1, 2, 4} и составить из символов на этих позициях строку «aab».

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) — количество единиц товара, которое может быть продано в каждом городе.

Выходные данные

Выведите одно число — максимальное количество товара, которое может быть продано во всех городах после некоторой последовательности перевозок.

D. Шарики на контесте

жадные алгоритмы Структуры данных *1800

Одной из традиций соревнований ACM-ICPC является раздача командам воздушных шариков за каждую сданную задачу. В данной задаче мы считаем, что штрафное время не имеет значения, и команды упорядочиваются только по количеству воздушных шариков. Это означает, что место команды равно количеству команд со строго большим количеством шариков, увеличенное на 1. Например, если семь команд имеют больше шариков, то ваша команда займёт восьмое место. Разрешается, чтобы несколько команд занимали одно и то же место.

Вам следует знать, что перед соревнованием полезно плотно кушать. Если количество шариков у команды превышает суммарный вес её участников, то команда начинает летать по площадке и случайно касается потолка, что строго запрещено правилами и приводит к немедленной дисквалификации команды. Дисквалифицированные команды не учитываются в результатах.

Соревнование только что завершилось. Всего участвовали n команд, пронумерованных от 1 до n. Команда с номером i заработала ti шариков и имеет суммарный вес wi. Гарантируется, что ti не превосходит wi, то есть изначально ни одна команда не летает.

Лимак выступает за первую команду. Он не любит читерство, поэтому никогда не заберёт шарик у другой команды. Вместо этого он может отдавать шарики своей команды другим командам, добившись с помощью этого, чтобы они летали и были дисквалифицированы. Лимак может раздать любое количество шариков от нуля до количества шариков у его команды.

Какое самое лучше (минимальное) место может занять в итоге команда Лимака?

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 300 000) — количество команд.

В i-й из последующих n строк записаны два целых числа ti и wi (0 ≤ ti ≤ wi ≤ 1018) — количество шариков и вес i-й команды соответственно. Лимак является участником из первой команды.

Выходные данные

Выведите одно целое число — лучшее место, которое может занять Лимак.

Примечание

В первом примере у Лимака вначале есть 20 шариков. У трёх команд больше шариков (32, 40 и 45 шариков), поэтому Лимак занимает изначально четвёртое место. Одной из оптимальных стратегий является:

  1. Лимак отдаёт 6 шариков команде с 32 шариками и весом 37. Этого как раз достаточно, чтобы эта команда начала летать. К сожалению, теперь у Лимака только 14 шариков, и его команда опускается на пятое место.
  2. Лимак отдаёт 6 шариков команде с 45 шариками. Теперь у них 51 шарик при весе 50, и они также зарабатывают дисквалификацию.
  3. Лимак отдаёт по 1 шарику каждой из двух команд с 16 шариками.
  4. Теперь у Лимака 20 - 6 - 6 - 1 - 1 = 6 шариков.
  5. Осталось три команды, у которых 40, 14 и 2 шарика.
  6. Команда Лимака занимает третье место, потому что у двух команд строго больше шариков.

Во втором примере Лимак занимает второе место и никак не может его улучшить.

В третьем примере у Лимака достаточно шариков, чтобы избавиться от команд 2, 3 и 5 (то есть команд с 81 000 000 000, 5 000 000 000 и 46 000 000 000 шариками соответственно). У Лимака остаётся 0 шариков, и он занимает второе место (разделив его с командами 6 и 7).

E. Слишком много денег

жадные алгоритмы Перебор *2600

Альфред хочет купить игрушечного лося, который стоит c долларов. В магазине совсем нет сдачи, поэтому ему необходимо набрать ровно c долларов, ни больше и ни меньше. У него есть n монет. Чтобы набрать c долларов он использует следующий алгоритм: обозначим через S множество используемых сейчас монет. Изначально множество S пусто. Альфред последовательно добавляет в множество S новые монеты, каждый раз выбирая такую, что после её добавления суммарная стоимость монет не превышает c. Среди всех таких монет он выбирает наиболее дорогую. Если таких монет не существует, а суммарная стоимость множества S всё ещё меньше c, то Альфред сдаётся и уходит. Обратите внимание, что Альфред только добавляет монеты в множество S и никогда их оттуда не убирает.

Как программист, вы, скорее всего, знаете, что алгоритм Альфреда может не набрать множество монет с нужной суммой c, даже если оно существует. Например, пусть у Альфреда есть одна монета достоинством $3, одна монета достоинством $4 и две монеты достоинством $5 долларов, а игрушечный лось стоит $12. Следуя своему алгоритму, Альфред возьмёт обе монеты достоинством $5 и на этом остановится, так и не набрав нужную сумму. С другой стороны, набрать $12 долларов можно было, взяв по одной монете достоинством $3, $4 и $5.

Боб попытался убедить Альфреда в недостатках его алгоритма, но тот отказывается в это верить. Боб решил дать Альфреду ещё монет (в дополнение к тем, что уже есть у Альфреда), чтобы его алгоритм перестал работать. Боб может дать Альфреду любое количество монет любой стоимости (единственное условие, что каждая монета должна стоить целое положительное число долларов). Разрешается дать несколько монет одинаковой стоимости. Боб просит вас найти подходящее множество монет минимальной суммарной стоимости. Если решения не существует, выведите «Greed is good». Можете считать, что если ответ существует, то он положительный, то есть без дополнительных монет алгоритм Альфреда работает на данном множестве монет и для данной стоимости лося.

Входные данные

В первой строке входных данных записано целое число c (1 ≤ c ≤ 200 000) — стоимость игрушечного лося, которую надо заплатить Альфреду. Во второй строке записано число n (1 ≤ n ≤ 200 000) — изначальное количество монет у Альфреда. Далее следует n строк, в каждой из которых содержится одно целое число x (1 ≤ x ≤ c), означающее стоимость очередной монеты.

Выходные данные

Если решение существует, выведите минимальную суммарную стоимость монет, которые Боб должен дать Альфреду, чтобы его алгоритм перестал работать. В противном случае выведите «Greed is good» (без кавычек).

Примечание

В первом примере Боб должен дать Альфреду монету стоимости $5. После этого алгоритм Альфреда перестаёт набирать нужную сумму.

Во втором примере Боб ничего не может поделать, чтобы алгоритм Альфреда перестал работать.

F. Семейные фотографии

жадные алгоритмы игры *2900

Хотя Алиса и Бонни — родные сёстры, отношения между ними очень напряжённые. Когда они нашли на чердаке старые семейные фотографии, они сразу принялись спорить про каждую из них, кому она должна достаться. В конце концов, они решили сыграть в игру, по очереди забирая себе по одной фотографии. Алиса ходит первой.

Фотографии лежат в n стэках. В каждом стэке содержится ровно две фотографии. На каждом ходу игрок может взять только фотографию, которая является сейчас верхней в каком-нибудь из стэков.

Каждая фотография описывается двумя целыми неотрицательными числами a и b, означающими, что обладание данной фотографией принесёт a единиц счастья Алисе и b единиц счастья Бонни. Значения a и b могут отличаться для разных фотографий.

Разрешается не брать фотографию и пропустить текущий ход. Игра заканчивается, когда заканчиваются фотографии или когда оба игрока последовательно пасуют (то есть и Алиса, и Бонни не хотят сейчас ходить).

Игроки не стараются максимизировать своё количество счастья. Вместо этого, каждая из игроков действует таким образом, чтобы максимизировать своё счастье минус счастье своей сестры. Считая, что оба игрока действуют оптимально, найдите результат игры, то есть значение x - y, где x — счастье Алисы, а y — счастье Бонни.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — количество стэков из двух фотографий. Далее следуют n строк, каждая из которых описывает один из стэков. Каждое описание стэка состоит из четырёх неотрицательных целых чисел a1, b1, a2 и b2, не превышающих 109. Числа a1 и b1 описывают верхнюю фотографию в стэке, а числа a2 и b2 описывают нижнюю фотографию.

Выходные данные

Выведите одно целое число, равное разнице между счастьем Алисы и счастьем Бонни, если они обе действуют оптимально.

D. Распределение футболок

жадные алгоритмы Конструктив Потоки *1800

В качестве сувениров на соревновании по программированию было решено вручить футболки. Всего в типографии были напечатаны футболки шести размеров: S, M, L, XL, XXL, XXXL (размеры перечислены в порядке возрастания). Для каждого размера от S до XXXL вам известно количество футболок такого размера.

Во время регистрации организаторы попросили каждого из n участников указать размер футболки. Если участник колебался между двумя размерами, то он мог указать два соседних — это означает, что ему подойдет футболка любого из двух размеров.

Напишите программу, которая определит, возможно ли из напечатанных в типографии футболок сделать подарок каждому участнику соревнования. Конечно, каждому участнику должна достаться футболка его размера:

  • требуемого размера, если указан один размер;
  • любого из двух размеров, если указаны два соседних размера.

В случае положительного ответа программа должна найти любой из вариантов раздачи футболок.

Входные данные

В первой строке входных данных содержится шесть целых неотрицательных чисел — количество футболок с размерами S, M, L, XL, XXL, XXXL, соответственно. Суммарное количество напечатанных футболок не превосходит 100 000.

Во второй строке содержится целое положительное число n (1 ≤ n ≤ 100 000) — количество участников соревнований.

В следующих n строках содержатся указания участников — в i-й из них содержатся размеры, указанные i-м участником. Если участник указал только один размер, строка совпадает с его названием. Если же участник указал два размера, то они заданы своими названиями через запятую без разделения пробелами. В этом случае сначала записан меньший размер, затем — больший. Гарантируется, что в таком случае эти размеры соседние.

Выходные данные

Если ответа не существует выведите «NO» (без кавычек).

В противном случае, в первой строке выведите «YES» (без кавычек). В следующих n строках выведите размеры футболок, которые получат участники. Порядок участников должен совпадать с тем порядком, который задан во входных данных.

Если решений несколько, выведите любое.

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.

C. Дорога до кинотеатра

Бинарный поиск жадные алгоритмы сортировки *1700

Вася находится в центре проката машин и хочет как можно скорее добраться до кинотеатра. Сеанс, на который он уже купил билет, начнётся через t минут. Считайте, что есть прямая дорога от центра проката машин до кинотеатра длиной s километров. Введём систему координат так, что центр проката машин находится в точке 0, а кинотеатр находится в точке s.

Известно, что по пути от центра проката машин до кинотеатра есть k заправочных станций, причём на всех можно заливать неограниченное количество топлива совершенно бесплатно! Считайте, что операция залива топлива осуществляется мгновенно.

В центре проката есть n машин, i-я из которых характеризуется двумя числами ci и vi — стоимостью аренды машины и вместимостью её бака. Таким образом, на заправке нельзя заливать в машину топлива больше вместимости её бака vi. В центре проката все машины изначально полностью заправлены.

Каждая из машин может ехать в одном из двух скоростных режимов: обычном и ускоренном. В обычном режиме машина проезжает 1 километр за 2 минуты, при этом тратит на это 1 литр топлива. В ускоренном режиме машина проезжает 1 километр за 1 минуту, при этом тратит на это 2 литра топлива. Режим может быть изменён в любой момент. Изменять режим разрешается неограниченное количество раз.

Перед вами стоит задача выбрать машину с минимальной стоимостью аренды, на которой Вася успеет добраться до кинотеатра до начала своего сеанса, то есть не позднее, чем через t минут. Считайте, что в центре проката все машины изначально полностью заправлены.

Входные данные

В первой строке записаны четыре целых положительных числа n, k, s и t (1 ≤ n ≤ 2·105, 1 ≤ k ≤ 2·105, 2 ≤ s ≤ 109, 1 ≤ t ≤ 2·109) — количество машин в центре проката, количество заправок на пути до кинотеатра, позиция кинотеатра и время, оставшееся до начала сеанса.

В следующих n строках следуют по два целых положительных числа ci и vi (1 ≤ ci, vi ≤ 109) — стоимость аренды i-й машины и объём её топливного бака.

В следующей строке следуют k различных целых чисел g1, g2, ..., gk (1 ≤ gi ≤ s - 1) — позиции заправок на пути до кинотеатра в произвольном порядке.

Выходные данные

Выведите минимальную стоимость аренды подходящей машины, то есть такой, что Вася успеет добраться до кинотеатра до начала сеанса (не позднее, чем через t минут). Если ни одна из машин не подойдёт Васе, выведите -1.

Примечание

В первом примере Вася успеет доехать до кинотеатра вовремя на первой и третьей машине, но выгоднее поехать на первой, стоимость аренды которой равна 10, а объём топливного бака равен 8. Тогда до первой заправки Вася сможет доехать в ускоренном режиме за 3 минуты, потратив на это 6 литров топлива, а затем, заправив полный бак, он сможет проехать 2 километра в обычном режиме за 4 минуты, потратив на это 2 литра бензина. Оставшиеся 3 километра он проедет в ускоренном режиме за 3 минуты, потратив на это 6 литров бензина.

D. Морской бой

жадные алгоритмы Конструктив математика *1700

Галя играет в одномерный морской бой на поле размера 1 × n. В этой игре на клеточном поле расположены a кораблей, каждый состоит из b последовательных клеток. При этом одна клетка не может являться частью более чем одного корабля, однако, корабли могут соприкасаться.

Гале неизвестно положение кораблей. Галя может делать выстрелы по клеткам, при этом после каждого выстрела ей сообщается, является эта клетка частью какого-нибудь корабля (в таком случае считается, что Галя «попала»), или нет (тогда Галя «промахнулась»).

Галя уже сделала k выстрелов и все из них были промахами.

Перед вами стоит задача определить минимальное количество позиций, выстрелив в которые, Галя гарантированно попадет хотя бы в один из кораблей.

Гарантируется, что существует хотя бы одна расстановка кораблей, удовлетворяющая описанным условиям.

Входные данные

В первой строке находятся четыре целых положительных числа n, a, b, k (1 ≤ n ≤ 2·105, 1 ≤ a, b ≤ n, 0 ≤ k ≤ n - 1) — длина поля, количество кораблей на поле, длина каждого корабля и количество выстрелов, которые Галя уже произвела.

Во второй строке следует строка длины n, состоящая из нулей и единиц. Если i-й символ строки равен единице, то Галя уже стреляла в эту клетку, в противном случае, нет. Гарантируется, что в этой строке ровно k единиц.

Выходные данные

В первую строку выведите минимальное количество позиций, выстрелив в которые, Галя гарантированно попадёт хотя бы в один из кораблей.

Во вторую строку выведите позиции, в которые Галя должна стрелять.

Каждая позиция должна быть выведена ровно один раз. Позиции разрешается выводить в произвольном порядке. Позиции пронумерованы с 1 до n, начиная с самой левой.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере известно, что остался один корабль длины два. Он может располагаться как слева от уже сделанного выстрела (символа «1»), так и справа. Таким образом, чтобы наверняка попасть в него, надо произвести два выстрела: один в левую часть, другой в правую.

E. Подчинённые

графы жадные алгоритмы Конструктив сортировки Структуры данных *1900

В крупной компании работают n сотрудников, каждый из которых имеет уникальный номер от 1 до n. Из них ровно один сотрудник является главным, его номер равен s. Также известно, что все сотрудники, кроме главного, имеют ровно одного непосредственного начальника.

Каждому из сотрудников было поручено подать информацию о том, сколько начальников у него есть (не только непосредственных). Под начальниками сотрудника понимается его непосредственный начальник, а также непосредственный начальник непосредственного начальника данного сотрудника, и так далее. Например, если в компании три сотрудника, первый из которых главный, у второго сотрудника непосредственный начальник — первый сотрудник, а у третьего сотрудника непосредственный начальник второй сотрудник, то у третьего сотрудника всего два начальника — один непосредственный и один не непосредственный. Главный сотрудник является начальником всех сотрудников, кроме самого себя.

Некоторые из сотрудников поторопились, ошиблись в подсчете и подали неверную информацию. Перед вами стоит задача определить минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

Входные данные

В первой строке следует два целых положительных числа n и s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ n) — количество сотрудников и номер главного сотрудника.

Во второй строке следует n целых чисел a1, a2, ..., an (0 ≤ ai ≤ n - 1), где ai равно количеству начальников (не обязательно непосредственных) у сотрудника i, о котором он сообщил при подаче информации.

Выходные данные

Выведите минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

Примечание

В первом примере мог ошибиться, например, только первый сотрудник, в том случае, если:

  • у первого сотрудника начальником является второй сотрудник,
  • у третьего сотрудника начальником является первый сотрудник,
  • второй сотрудник является главным.

A. The Elder Trolls IV: Oblivon

жадные алгоритмы математика *1600

Вася играет в The Elder Trolls IV: Oblivon. Ох уж эти создатели компьютерных игр! Чего только они не придумают! В The Elder Trolls IV: Oblivon появились совершенно уникальные монстры. Одним из них является Неубивамемый Слизень. Почему "неубиваемый"? Во-первых, потому, что убить его можно только режущим оружием, так что любителям двуручных янтарных молотов необходимо подыскивать себе подходящий ножичек. Во-вторых, необходимо нанести Неубиваемому Слизню очень много режущих ударов. Крайне много. Слишком много!

Вася уже успел прокачать своего персонажа до 80 уровня и для получения 81-ого ему было поручено убить Неубиваемого Слизня. Монстр имеет очень интересную форму. Он представляет собой прямоугольный параллелепипед размером x × y × z, состоящий из неразрушаемых клеток, размером 1 × 1 × 1. За один удар персонаж Васи может разрубить Слизня целиком вдоль линии воображаемой сетки, т.е. плоскостью параллельной одной из граней параллелепипеда. Монстр погибает только тогда, когда количество частей, на которые его разрубил Вася, достигает некоторого критического числа.

После каждого удара все части монстра не распадаются, а остаются на своем месте. То есть Вася может разрубать сразу несколько частей одним ударом.

Вася хочет узнать на какое максимальное количество частей он может разрубить Неубиваемого Слизня, нанеся ему не более чем k ударов.

Персонаж Васи пользуется абсолютно тонким мечом бесконечной длины.

Входные данные

В единственной строке заданы 4 целых числа x, y, z, k (1 ≤ x, y, z ≤ 106, 0 ≤ k ≤ 109).

Выходные данные

Вывести единственное число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом примере Вася проводит 3 попарно перпендикулярных разреза. Первым разрезом он разрубает монстра на две части, затем каждую часть разрубает еще на две вторым разрезом, потом каждую из 4 частей он снова разрубает на две последним разрезом.

B. Need For Brake

Бинарный поиск жадные алгоритмы сортировки *2000

Вася играет в Need For Brake. Играет потому, что ему подарили на день рождения новенький компьютерный руль! Теперь то он уж точно займет первое место в чемпионате в его любимой компьютерной игре в жанре авто-симуляторов!

В чемпионате, состоящем из некоторого количества заездов, принимают участие n гонщиков. По результатам каждого заезда гонщики занимают места с 1 по n-ое (никакие два гонщика не разделяют одно место) и первые m мест являются призовыми. За i-ое призовое место гонщик получает bi очков, которые прибавляются к его очкам, заработанным за все предыдущие заезды. Известно, что к данному моменту гонщик i набрал ai очков. По итогам чемпионата гонщики сортируются в порядке убывания суммы очков. При равном количестве очков сортировка производится по возрастанию имени гонщика в лексикографическом порядке.

К сожалению, чемпионат уже подошел к концу и остался всего лишь один заезд. Вася решил узнать какое самое высокое и самое низкое место он может занять по итогам чемпионата.

Входные данные

В первой строке задано число n — количество гонщиков (1 ≤ n ≤ 105). В каждой из следующих n строк через пробел записаны si и ai — псевдоним, под которым выступает гонщик (непустая строка, состоящая из не более чем 20 маленьких латинских букв), и количество очков этого гонщика (0 ≤ ai ≤ 106). Гонщики заданы в произвольном порядке.

В следующей строке находится число m (0 ≤ m ≤ n). Далее идет m неотрицательных целых чисел bi. i-ое число в этой строке равно числу бонусных очков за i-ое призовое место (0 ≤ bi ≤ 106).

В последней строчке задан псевдоним, под которым выступает Вася.

Выходные данные

Вывести два числа — самое высокое и самое низкое места, которые может занять Вася по итогам чемпионата.

D. FreeDiv

графы жадные алгоритмы поиск в глубину и подобное *2200

Вася играет во FreeDiv. В этой игре он управляет огромным государством, в котором имеется n городов и m двусторонних дорог между ними. К сожалению, не из каждого города можно добраться до любого другого по этим дорогам. Поэтому Вася решил разделить государство на провинции так, что в каждой провинции из каждого города можно добраться до всех городов этой провинции, но между провинциями дорог нет.

В отличие от других пошаговых стратегий, во FreeDiv у игрока имеется возможность строить туннели между городами - двусторонние дороги, по которым можно перемещать войска незаметно для противника. Однако, в каждый город может вести не более одного туннеля. Сам Вася хочет построить сеть туннелей так, чтобы между любой парой городов его государства был путь по дорогам или туннелям, но при этом в каждую провинцию шло не более k туннелей (иначе, эту провинцию будет сложно удержать в случае захвата остальных провинций вражескими войсками).

Вася обнаружил, что, возможно, ему не удастся построить такую сеть при текущем состоянии государства. Возможно, ему придется предварительно построить несколько дорог между городами различных провинций для объединения этих провинций. Ваша задача определить, какое наименьшее количество дорог нужно построить Васе, чтобы в полученном государстве можно было построить требуемую сеть туннелей.

Входные данные

В первой строке заданы три целых числа n, m и k (1 ≤ n, k ≤ 106, 0 ≤ m ≤ 106). В каждой из следующих m строк содержатся два целых числа — номера городов, соединенных соответствующей дорогой. Никакая дорога не соединяет город с самим собой, между каждой парой городов есть не более одной дороги.

Выходные данные

Необходимо вывести единственное число — наименьшее количество дополнительных дорог.

Примечание

В первом примере в государстве всего одна провинция, поэтому туннелей и дополнительных дорог не требуется.

Во втором примере в государстве две провинции. Их можно соединить, например, туннелем между городами 1 и 3.

В третьем примере необходимо построить минимум одну дополнительную дорогу. Например, можно построить дорогу между городами 1 и 2, после чего соединить город 1 с городом 3, а город 2 с городом 4 туннелями.

A. Toda 2

жадные алгоритмы реализация *1800

D. Running Over The Bridges

жадные алгоритмы математика реализация *2200

Polycarp is playing a game called "Running Over The Bridges". In this game he has to run over n bridges from the left to the right. Bridges are arranged one after the other, so the i-th bridge begins where the (i - 1)-th bridge ends.

You have the following data about bridges: li and ti — the length of the i-th bridge and the maximum allowed time which Polycarp can spend running over the i-th bridge. Thus, if Polycarp is in the beginning of the bridge i at the time T then he has to leave it at the time T + ti or earlier. It is allowed to reach the right end of a bridge exactly at the time T + ti.

Polycarp can run from the left side to the right one with speed 0.5, so he will run over a bridge with length s in time s. Besides, he has several magical drinks. If he uses one drink, his speed increases twice (i.e. to value 1) for r seconds. All magical drinks are identical. Please note that Polycarp can use a drink only at integer moments of time, and he drinks it instantly and completely. Additionally, if Polycarp uses a drink at the moment T he can use the next drink not earlier than at the moment T + r.

What is the minimal number of drinks Polycarp has to use to run over all n bridges? If this number is not greater than 105, then you have to find out the moments of time when Polycarp has to use each magical drink.

Input

The first line contains two integers n and r (1 ≤ n ≤ 2·105, 1 ≤ r ≤ 1012) — the number of bridges and the duration of the effect of a magical drink.

The second line contains a sequence of integers l1, l2, ..., ln (1 ≤ li ≤ 5·106), where li is equal to the length of the i-th bridge.

The third line contains a sequence of integers t1, t2, ..., tn (1 ≤ ti ≤ 107), where ti is equal to the maximum allowed time which Polycarp can spend running over the i-th bridge.

Output

The first line of the output should contain k — the minimal number of drinks which Polycarp has to use, or -1 if there is no solution.

If the solution exists and the value of k is not greater than 105 then output k integers on the next line — moments of time from beginning of the game when Polycarp has to use drinks. Print the moments of time in chronological order. If there are several solutions, you can output any of them.

Note

In the first case, there is only one bridge and it is clear that Polycarp cannot run over it without magical drinks. So, if he will use one magical drink on start (moment of time 0), and the second one — three seconds later (moment of time 3), he will be able to reach the end of the bridge in time. Please note, in this case there are several possible answers to the problem. For example, Polycarp can use the first drink at the moment of time 4 and the second one — at the moment of time 7.

In the second case, Polycarp cannot run over all bridges even if he will use magical drinks. So, answer in this case is -1.

In the fourth case, Polycarp can run over all bridges without magical drinks.

E. Award Ceremony

жадные алгоритмы реализация *2200

I. Olympiad in Programming and Sport

графы дп жадные алгоритмы Потоки *2000

B. Купоны и скидки

жадные алгоритмы Конструктив *1100

Уже начался сезон олимпиад по программированию, а значит пора писать командные тренировки. Серёжа ведёт тренировки у своих команд не первый год и знает, что к туру надо подготовить не только набор задач и разбор. Тренировка длится несколько часов, и команды, которые в ней участвуют, успевают за это время проголодаться. Поэтому на каждую тренировку Серёжа закупает некоторое количество пицц, чтобы после окончания тура команды подкрепились и обсудили свои успехи и неудачи.

Командам предстоит написать n тренировок в течение n последовательных дней. Во время каждой тренировки на каждую команду, пришедшую в этот день, Серёжа заказывает по пицце в своей любимой пиццерии. Серёжа уже знает, что на i-ю тренировку придёт ровно ai команд.

В пиццерии проходят две акции. В рамках первой акции можно получить скидку, если купить две пиццы в один день. Вторая акция позволяет получить купон на покупку одной пиццы в день на протяжении двух последовательных дней.

Серёжины тренировки очень популярны, поэтому ему приходится часто делать заказы в этой пиццерии. Как их самый ценный клиент, он может неограниченно пользоваться указанными скидками и купонами в любых количествах в любые дни.

Серёжа хочет заказать все пиццы, пользуясь только скидками и купонами. При этом он не хочет приобретать ни в один из дней больше пицц, чем ему нужно в этот день. Помогите Серёже определить, может ли он закупить пиццу на все тренировки, пользуясь только купонами и скидками. Обратите внимание, не разрешается, чтобы после окончания n-го дня оставались активные купоны.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество тренировок.

Во второй строке находится n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 10 000), разделённых пробелами, — количества команд, которые придут на каждую из тренировок.

Выходные данные

Если Серёжа может заказать все пиццы, используя только скидки и купоны и не покупая лишние пиццы ни в один из дней, выведите «YES» (без кавычек). Иначе выведите «NO» (без кавычек).

Примечание

В первом примере Серёжа может воспользоваться одним купоном для покупки пицц в первый и второй день, одним купоном для покупки пицц во второй и третий день и одной скидкой в четвёртый день для покупки двух пицц. Это единственный возможный способ заказать все пиццы для данного теста.

Во втором примере Серёжа не может воспользоваться ни купоном, ни скидкой, не заказав при этом лишнюю пиццу. Обратите внимание, что в некоторые дни на тренировку может не прийти ни одной команды, как, например, во второй день в данном тесте.

C. Носки

графы жадные алгоритмы поиск в глубину и подобное снм *1600

Арсений уже совсем взрослый и самостоятельный. Мама решила оставить его на m дней в одиночестве и уехать отдыхать в тёплые страны. Перед этим она наготовила ему много еды, оставила достаточное количество карманных денег и постирала всю одежду.

Однако за десять минут до отъезда в тёплые страны ей пришла в голову мысль, что Арсению надо оставить точную инструкцию, какую одежду надевать в какой из дней её отсутствия. Арсений живёт в очень необычной семье, в которой вся одежда пронумерована: например, n носков Арсения имеют различными целые номера от 1 до n. Поэтому всё, что потребовалось его маме, это указать для каждого дня два числа li и ri — номера носков, которые надо надеть в i-й день на левую и правую ногу соответственно (разумеется, li не совпадает с ri). Каждый носок покрашен в один из k цветов.

Уже после отъезда матери Арсений заметил, что в некоторые дни в соответствии с инструкцией ему придётся надеть носки разных цветов, что, конечно, является досадной оплошностью, вызванной спешкой перед отъездом при составлении инструкции. Но Арсений находчивый мальчик, и, по счастливому совпадению, он нашёл у себя дома банки с красками всех k цветов, которые встречаются среди его носков.

Арсений собирается перекрасить некоторые носки таким образом, чтобы, следуя инструкции, оставленной его мамой, на протяжении каждого из m дней носить одноцветные носки. Арсений уже запланировал деловые встречи в каждый день отсутствия мамы, в течение которых у него не будет возможности заниматься перекраской носков, поэтому он должен определиться с цветами и провести всю работу именно сейчас.

Он хочет как можно быстрее расправиться с этой задачей, чтобы отправиться играть в недавно вышедшую суперпопулярную игру Bota-3, поэтому он просит вас помочь определить минимальное количество носков, которое ему придётся перекрасить, чтобы в каждый день надевать два одноцветных носка.

Входные данные

В первой строке находится три целых числа n, m и k (2 ≤ n ≤ 200 000, 0 ≤ m ≤ 200 000, 1 ≤ k ≤ 200 000) — количество носков, количество дней отсутствия мамы и количество доступных цветов соответственно.

Во второй строке находится n разделённых пробелами целых чисел c1, c2, ..., cn (1 ≤ ci ≤ k) — цвета носков Арсения.

В каждой из последующих m строк находится по два целых числа li, ri (1 ≤ li, ri ≤ n, li ≠ ri) — номера носков, которые Арсений должен надеть в i-й день на левую и правую ногу соответственно.

Выходные данные

Выведите единственное целое число — минимальное количество носков, которые Арсений должен перекрасить, чтобы не насмешить людей разноцветными носками ни в один из дней отсутствия мамы.

Примечание

В первом примере Арсений может, например, перекрасить первый и третий носки во второй цвет.

Во втором примере ничего перекрашивать не придётся.

D. Археология 80-го уровня

жадные алгоритмы Перебор сортировки Структуры данных *2200

Археологи, найдя секретный ход в подземелье одной из пирамид в Цикляндии, столкнулись с необычным замком на двери в сокровищницу. На замке было написано n слов, каждое из которых состоит из нескольких иероглифов. Рядом с замком на стене был обнаружен необычный круглый рычаг, поворот которого меняет иероглифы, из которых состоят слова на замке, по некоторому принципу. Также рядом с иероглифом была найдена надпись на древнецикляндском, которая гласит, что замок откроется, только если слова, написанные на замке, станут идти в лексикографическом порядке (определение дано в пояснении).

Несмотря на то, что археологи отлично знали весь древнецикляндский алфавит, который состоял из c иероглифов, они никак не могли определить закономерность, по которой меняются буквы. Наконец кто-то догадался позвать вас, главного мыслителя современной Цикляндии. Вам хватило одного взгляда, чтобы понять, что поворот рычага на одну позицию по часовой стрелке заменяет каждый иероглиф на следующий за ним по алфавиту, то есть x-й (1 ≤ x ≤ c - 1) иероглиф превращается в (x + 1)-й, а c-й превращается в первый.

Помогите археологам определить, на сколько позиций по часовой стрелке надо повернуть рычаг, чтобы можно было открыть дверь, либо определите, что требуемого положения рычага не существует, и надо либо искать ещё какой-нибудь потайной рычаг, либо идти за динамитом.

Входные данные

В первой строке находится два числа n и c (2 ≤ n ≤ 500 000, 1 ≤ c ≤ 106) — количество слов, написанных на замке, и количество иероглифов в древнецикляндском алфавите.

Каждая из последующих n строк описывает одно слово, написанное на замке. В i-й из последующих строк сначала находится целое число li (1 ≤ li ≤ 500 000), обозначающее длину i-го слова, после чего следует li целых чисел wi, 1, wi, 2, ..., wi, li (1 ≤ wi, j ≤ c) — алфавитные номера иероглифов, составляющих i-е слово. Символ 1 является самым маленьким в древнецикляндском алфавите, а символ c — самым большим.

Гарантируется, что суммарная длина всех слов не превосходит 106.

Выходные данные

Если возможно открыть дверь, поворачивая рычаг, выведите число x (0 ≤ x ≤ c - 1), обозначающее, сколько раз его надо повернуть по часовой стрелке. Если подходящих значений x несколько, выведите любое из них.

Если, поворачивая рычаг, дверь открыть невозможно, выведите  - 1.

Примечание

Слово a1, a2, ..., am длины m лексикографически не превосходит слова b1, b2, ..., bk длины k, если выполняется одно из двух:

  • либо в первой позиции i, такой что ai ≠ bi, символ ai идёт раньше по алфавиту, чем символ bi, то есть в первой различающейся позиции символ слова a меньше символа слова b;
  • либо (если такой позиции нет) m ≤ k, то есть второе слово начинается с первого либо совпадает с ним

Про последовательность слов говорят, что они идут в лексикографическом порядке, если каждое слово в нём (кроме последнего) лексикографически не превосходит следующего за ним.

В первом примере после поворота рычага на 1 позицию по часовой стрелке слова примут следующий вид:


1 3
2
3 1 2
3 1 2 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. Санаторий

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1200

Василий провел свой отпуск в санатории и, вернувшись, обнаружил, что совершенно забыл о подробностях отдыха!

В столовой санатория каждый день проходили завтрак, обед и ужин (конечно, именно в таком порядке). Единственное, что осталось у Василия — карточка из столовой, в которой находится запись о том, сколько раз он посещал завтрак, обед или ужин (таким образом, запись представляет собой три неотрицательных целых числа). Василий мог иногда пропустить ту или иную трапезу, например, в один и тот же день он мог посетить завтрак и ужин, но пропустить обед, а в какой-то из дней он мог не ходить в столовую вовсе.

Василий уже не помнит, в какое время суток он приехал в санаторий (перед завтраком, перед обедом, перед ужином, или после ужина), а в какое уехал (до завтрака, до обеда, до ужина или после ужина) поэтому он готов рассматривать любой из этих вариантов. После приезда в санаторий Василий не покидал его до момента отъезда. Обратите внимание, Василий мог уехать из санатория в тот же день, что и приехал.

По записи в карточке помогите Василию определить, какое наименьшее количество трапез в столовой санатория он мог пропустить. Трапезы, проходящие в день приезда Василия до его приезда и трапезы, проходящие в день отъезда Василия после его отъезда, пропущенными считать не следует.

Входные данные

В единственной строке входных данных содержатся три целых числа b, d и s (0 ≤ b, d, s ≤ 1018,  b + d + s ≥ 1) — количество завтраков, обедов и ужинов, которые посетил Василий во время отдыха в санатории, соответственно.

Выходные данные

Выведите единственное целое число — наименьшее возможное количество трапез, пропущенных Василием.

Примечание

В первом примере из условия Василий пропустил бы один ужин, если, например, приехал бы к завтраку, пробыл два дня в санатории (включая день приезда) и уехал после завтрака третьего дня.

Во втором примере из условия Василий мог приехать к завтраку, сходить на него, и сразу же покинуть санаторий, не пропустив ни одной трапезы.

В третьем примере из условия Василий мог пробыть в санатории один полный день, не пропустив ни одной трапезы.

D. Экзамены

Бинарный поиск жадные алгоритмы сортировки *1700

Впереди у студента Васи сессия, которая будет длиться n дней. Васе предстоит сдать экзамены по m предметам. Предметы пронумерованы от 1 до m.

Про каждый день известно, какой из m предметов можно сдать в этот день. Возможно, что в какой-то день нельзя сдавать ни один предмет. Однако в каждый день можно сдавать не более одного предмета.

В очередной день Вася может либо сдавать экзамен по тому предмету, который можно сдавать в этот день (сдача занимает весь день), либо готовиться весь день к экзамену по некоторому предмету, либо отдыхать.

Про каждый из предметов Вася знает число ai — количество дней, которые нужно готовиться, чтобы сдать экзамен по предмету номер i. Вася может переключаться между подготовкой к экзаменам, то есть необязательно готовиться непрерывно ai-е дней к экзамену номер i. Перемешивать порядок подготовки к экзаменам можно произвольным образом.

Перед вами стоит задача определить минимальный номер дня, в который Вася сможет закрыть сессию — то есть сдать экзамены по всем предметам, либо определить, что это невозможно сделать. Экзамен по каждому предмету нужно сдать ровно один раз.

Входные данные

В первой строке следует два целых положительных числа n и m (1 ≤ n, m ≤ 105) — длительность сессии в днях и количество предметов.

Во второй строке следует n целых чисел d1, d2, ..., dn (0 ≤ di ≤ m), где di равно номеру предмета, экзамен по которому можно сдать в день номер i. Если di равно 0, то в день номер i нельзя сдавать какой-либо экзамен.

В третьей строке следует m целых положительных чисел a1, a2, ..., am (1 ≤ ai ≤ 105), где ai равно количеству дней, которые нужно готовиться, чтобы сдать экзамен по предмету i.

Выходные данные

Выведите целое число — минимальный номер дня, в который Вася сможет сдать все экзамены. Если это невозможно, выведите -1.

Примечание

В первом тестовом примере Вася может дейстовать следующим образом. В первый и второй день готовиться к экзамену номер 1 и сдать его в пятый день, а между этим подготовиться к экзамену номер 2 в третий день и сдать его в четвёртый.

Во втором тестовом примере Вася должен готовиться к экзамену номер 3 первые четыре дня и сдать его в пятый день. Затем в шестой день подготовиться к экзамену номер 2 и сдать его в седьмой день. После этого ему нужно подготовиться к экзамену номер 1 за восьмой день и сдать его в девятый день.

В третьей тестовом примере Вася не сможет сдать единственный экзамен, так как не успеет к нему подготовиться.

E. Розетки

жадные алгоритмы сортировки *2100

Совсем скоро состоится финал чемпионата мира по программированию ICM ACPC! К сожалению, организаторы соревнования были так заняты подготовкой задач, что совершенно упустили важный технический момент — организацию электропитания рабочих мест участников.

Всего для участников выделено n компьютеров, i-й из которых имеет мощность, задающуюся целым положительным числом pi. В то же время для подключения к электросети доступно m розеток, j-я из которых предоставляет электропитание мощностью, задающейся целым положительным числом sj. Подключить i-й компьютер к j-й розетке можно тогда и только тогда, когда их мощности совпадают, то есть pi = sj, а к одной розетке можно подключить не более одного компьютера. Таким образом, если, к примеру, мощности всех компьютеров и розеток попарно различны, то ни один компьютер не представляется возможным подключить ни к одной из розеток.

Чтобы исправить ситуацию, профессор Пуч Вильямс в экстренном порядке заказал фургон переходников — делителей мощности. Каждый переходник представляет собой одну вилку и одну розетку с делителем напряжения между ними. После установки переходника на розетку мощности x, ее мощность становится равной , то есть делится пополам с округлением вверх, например и .

Каждый переходник можно использовать лишь единожды. На розетку можно последовательно устанавливать несколько переходников, подсоединяя их один к другому. Например, установив на розетку мощности 10 два переходника, к ней станет можно подключить компьютер мощности 3.

Организаторам предстоит установить переходники так, чтобы одновременно подключить максимальное количество компьютеров c. Если существует несколько возможных конфигураций подключения, организаторы хотят найти ту, которая использует минимальное число переходников u для подключения c компьютеров.

Помогите организаторам найти максимально возможное число компьютеров c, которые можно подключить одновременно, а также минимальное число адаптеров u, необходимых для этого.

Фургон переходников содержит достаточное их количество для выполнения задачи. Гарантируется, что получится подключить хотя бы один компьютер.

Входные данные

В первой строке содержится два целых числа n и m (1 ≤ n, m ≤ 200 000) — количество компьютеров и розеток соответственно.

Во второй строке содержится n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ 109) — мощности, требуемые для питания компьютеров.

В третьей строке содержится m целых чисел s1, s2, ..., sm (1 ≤ si ≤ 109) — мощности, предоставляемые розетками.

Выходные данные

В первую строку выведите два числа c и u — максимальное количество компьютеров, которые можно одновременно подключить, и минимальное количество переходников, чтобы подключить c компьютеров.

Во второй строке выведите m целых чисел a1, a2, ..., am (0 ≤ ai ≤ 109), где ai равно количеству переходников, которые следует установить на i-ю розетку. Сумма всех ai должна быть равна u.

В следующей строке выведите n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ m), где bj-е равно номеру розетки, к которую следует подключить j-й компьютер. Значение bj = 0, что j-й компьютер не будет подключен к какой-либо розетке. Все bj, отличные от 0, должны быть попарно различны. Мощность j-го компьютера должна совпадать с мощностью розетки bj после установки abj переходников. Количество ненулевых bj должно быть равно c.

Если ответов несколько, выведите любой.

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].

Обратите внимание, что при выводе съеданий используется нумерация монстров в их текущем порядке в очереди.

B. Антон и цифры

жадные алгоритмы математика Перебор реализация *800

Недавно Антон нашёл у себя дома коробку с цифрами. В коробке было k2 цифр 2, k3 цифр 3, k5 цифр 5 и k6 цифр 6.

Любимые числа Антона — 32 и 256. Поэтому он, конечно же, решил составить из цифр, находившихся в коробке, свои любимые числа. При этом он хочет, чтобы сумма составленных чисел была как можно больше. Помогите Антону найти эту сумму!

Каждую цифру можно использовать не более одного раза, то есть в составленных Анотоном числах должно быть не больше k2 цифр 2, k3 цифр 3 и так далее. Неиспользованные цифры в сумме не учитываются.

Входные данные

В единственной строке входных данных находятся четыре целых числа k2, k3, k5, k6 — количество цифр 2, 3, 5 и 6 соответственно (0 ≤ k2, k3, k5, k6 ≤ 5·106).

Выходные данные

В единственной строке выходных данных выведите единственное число — максимальную сумму любимых чисел Антона, которые можно составить с помощью цифр из коробки.

Примечание

В первом примере есть пять цифр 2, одна цифра 3, три цифры 5 и четыре цифры 6. Антон может из этих цифр составить три числа 256 и одно число 32. Тогда ответ будет равен 256 + 256 + 256 + 32 = 800. Заметьте, что после составления чисел осталась одна цифра 2 и одна цифра 6. В ответе они никак не учитываются.

Во втором примере выгоднее всего составить одно число 256. Поэтому ответ равен 256.

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 секунд.

B. Урбанизация

жадные алгоритмы сортировки теория чисел *1100

Местные власти узнали о комбинаторных способностях Остапа Бендера и обратились к нему за помощью в вопросе урбанизации. Имеется n человек, которые хотят переехать жить в города. Состояние i-го из них равняется ai. Планируется построить два города и поселить в первый из них n1 человек, а во второй — n2 человек. Разумеется, каждый из n кандидатов может быть поселён не более, чем в один город. Таким образом, некоторое подмножество кандидатов размером n1 будут поселены в первый город, из оставшихся некоторое подмножество кандидатов размера n2 будут поселены во второй город, а остальным будет отказано в поселении.

Для улучшения показателей региона в глазах вышестоящего начальства местные власти решили выбрать соответствующие подмножества кандидатов таким образом, чтобы сумма средних арифметических состояний жителей этих двух городов была максимальна. Средним арифметическим состояний жителей города называется сумма всех состояний ai жителей города, поделённая на количество жителей (n1 или n2 соответственно). Деление следует осуществлять в вещественных числах без каких-либо округлений.

Помогите местным властям найти оптимальный способ заселить два города.

Входные данные

В первой строке входных данных записаны три числа n, n1 и n2 (1 ≤ n, n1, n2 ≤ 100 000, n1 + n2 ≤ n) — количество кандидатов на поселение в города, планируемое количество жителей первого города и планируемое количество жителей второго города соответственно.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100 000), i-е из которых соответствует уровню достатка i-го кандидата.

Выходные данные

Выведите одно вещественное число — максимально возможную сумму средних арифметических состояний жителей двух городов. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первой примере одним из оптимальных решений будет поселить кандидата 1 в первый город, а кандидата 2 — во второй.

Во втором примере оптимальным расселением будет назначить кандидатов 3 и 4 в первый город, а кандидата 2 — во второй. Получаем (a3 + a4) / 2 + a2 = (3 + 2) / 2 + 4 = 6.5

C. Теннисный Чемпионат

жадные алгоритмы Комбинаторика Конструктив математика *1600

Бразильский город Рио-де-Жанейро принимает крупный теннисный турнир, и Остап Бендер не намерен пропускать это событие. В турнире примут участие n теннисистов, причём с первого же матча будет идти игра на выбывание — проигравший сразу покидает турнир.

Организаторы ещё не составили сетку чемпионата, но известно, что два игрока могут играть друг с другом, если и только если количество игр, уже проведённых одним из них, отличается от количества игр, проведённых другим, не более чем на одну игру (в любую сторону). Разумеется, оба игрока должны были выиграть все свои встречи, чтобы всё ещё участвовать в турнире.

Пока турнир не начался и зрители ищут, чем занять себя в ожидании, Остап решил вычислить, в каком максимальном количестве партий может принять участие победитель турнира. Скорее всего, без вашей помощи ему не справиться.

Входные данные

В единственной строке входных данных записано целое число n (2 ≤ n ≤ 1018) — количество участников турнира.

Выходные данные

Выведите одно целое число — максимальное количество партий, в которых может принять участие победитель турнира.

Примечание

Во всех примерах будем считать, что турнир выигрывает участник с номером 1.

В первом примере будет всего одна игра, поэтому ответ очевидно 1.

Во втором примере первый игрок может последовательно обыграть игрока 2, а затем игрока 3.

В третьем примере первый игрок не может последовательно обыграть всех остальных, так как если он сыграет с игроками 2 и 3, то у него будет уже две партии, а игрока номер 4 — ноль партий. Тогда они не смогут сыграть и турнир не завершится. Таким образом, ответ 2 и он достигается на сетке турнира, в которой сначала играют пары (1, 2) и (3, 4), а затем победители этих пар играют друг с другом.

E. Чемпионат

жадные алгоритмы Конструктив математика Потоки *2900

Остап Бендер решил в очередной раз дать сеанс одновременной игры по шахматам. В этот раз он тщательно готовился, поэтому следил за ходом одного крупного турнира по шахматам. В турнире принимали участие m шахматистов, каждый сыграл с каждым ровно одну партию. В случае победы участник получал 2 очка, ничьей — 1 очко, поражения — 0 очков.

Остап не хотел держать в голове всю турнирную таблицу, поэтому для каждого участника он вычислил итоговое количество набранных им очков (то есть сумму его очков по всем партиям, в которых он принимал участие). Далее Остап упорядочил участников по невозрастанию набранных очков и запомнил результаты первых n из этого списка.

Теперь у великого комбинатора возник вопрос, а ничего ли он не напутал и действительно ли существует турнирная таблица, по которой могли быть получены данные n чисел? Другими словами, можно ли так назначить исходы всех попарных встреч для m шахматистов, что после вычисления итоговой суммы для каждого, упорядочивания и отбрасывания последних m - n останется набор чисел, в точности совпадающий с тем, что помнит Остап?

Входные данные

В первой строке входных данных записаны два числа m и n (1 ≤ n ≤ m ≤ 3000) — количество участников турнира и количество лучших результатов, которые помнит Остап.

Во второй строке записаны n целых чисел в порядке невозрастания — набранные участниками очки, как их помнит Остап. Гарантируется, что все эти числа — целые неотрицательные и не превосходят m.

Выходные данные

Если не существует турнира, по которому Остап мог получить данный набор чисел, выведите «no» в единственной строке выходных данных. В противном случае в первой строке выходных данных выведите «yes», а следующих m строках — сам турнир. Каждая строка описания турнира должна состоять из m символов «X», «W», «D» и «L». Символ «X» всегда ставится на главной диагонали (и только там), то есть в i-й позиции i-й строки, символ «W» в j-й позиции i-й строки означает, что игрок номер i обыграл игрока номер j, символы «D» и «L» на соответствующей позиции означают ничью и поражение соответственно.

Выведенная таблица должна быть непротиворечива, а набор чисел, состоящий из баллов n участников с наилучшим счётом, должен совпадать с набором, указанным во входных данных. Если подходящих ответов несколько, разрешается вывести любой из них.

E. Тане - 5 лет!

графы жадные алгоритмы Паросочетания расписания *3300

Тане исполнилось 5 лет и все её друзья собрались на праздновании дня рождения. Всего, включая Таню, на празднике присутствуют n детишек.

Праздник уже подходит к концу, но напоследок запланированы игровые автоматы. В зале, где проходит праздник, есть m игровых автоматов, которые пронумерованы от 1 до m. Каждый из детей уже составил список тех автоматов, в которые он хочет поиграть. Более того, если ребенок хочет поиграть на каком-то автомате, то он знает точно, сколько ему надо времени, чтобы насладиться игрой на нём. На любом автомате единовременно может играть только один ребенок.

Так как праздник уже затянулся, то все взрослые гости уже хотят по домам. Чтобы ускорить процесс вы можете дополнительно заказывать вторые экземпляры автоматов, для того чтобы арендовать второй экземпляр автомата j надо заплатить pj бурлей. Арендовав автомат, его можно использовать до конца праздника.

Как скоро все дети смогут поиграть в соответствии со своими пожеланиями, если у вас есть бюджет b бурлей на аренду дополнительных автоматов. Для каждого автомата в наличии есть только один запасной, так что арендовать третий экземпляр автомата нельзя.

Дети могут прерываться во время игры произвольным образом. Если i-й ребенок хочет поиграть на j-м автомате, то после аренды еще одного автомата j допустимо, что часть времени он сыграет на основном экземпляре j-го автомата, а часть — на дополнительном (причем любая из этих частей может выродиться в пустую). Переключение между автоматами может происходить мгновенно в целочисленные моменты времени. Конечно, ребенок не может играть на двух автоматах одновременно.

Помните, что цели сэкономить нет (на детях не экономят!), требуется минимизировать время окончания игры последнего из детей.

Входные данные

В первой строке входных данных записаны три целых числа n, m и b (1 ≤ n ≤ 40, 1 ≤ m ≤ 10, 0 ≤ b ≤ 106) — количество детей на празднике, количество автоматов и бюджет на аренду дополнительных автоматов.

Вторая строка содержит m целых чисел p1, p2, ..., pm (1 ≤ pj ≤ 106), где pj — цена аренды второго экземпляра j-го автомата.

Далее входные данные содержат n строк, i-я из которых описывает пожелания i-го из детей. Строка начинается с числа ki (0 ≤ ki ≤ m) — количества автоматов, на которых хочет поиграть ребенок i. Далее в строке записаны ki пар целых чисел, y-ая из которых xiy, tiy, обозначающих, что i-й ребенок хочет поиграть tiy (1 ≤ tiy ≤ 2500) минут на автомате xiy (1 ≤ xiy ≤ m). Для каждой из этих n строк среди значений xiy нет одинаковых.

Выходные данные

В первую строку выведите искомое минимальное время.

Во вторую строку выведите строку из нулей и единиц длины m, j-й символ равен '1', если был арендован дубликат j-го автомата.

В третью строку выведите g (0 ≤ g ≤ 106) — количество промежутков непрерывной игры всех детей. Далее в g строках выведите сами промежутки в виде четверки чисел i, j, s, d, которая обозначает, что ребенок i без перерыва играл в автомат j с момента времени s (s ≥ 0) в течение d (d ≥ 1) минут. Строки можно выводить в любом порядке.

Если ответов несколько, выведите любой из них.

A. Алёна и mex

жадные алгоритмы Конструктив *1700

Мама хочет подарить маленькой девочке Алёне массив из n целых неотрицательных чисел. Но массив должен быть особенным.

Алёна девочка капризная, поэтому когда мама подарит ей массив, Алёна рассмотрит m подмассивов подаренного ей массива. Назовем подмассивом некоторую последовательность из подряд идущих чисел в массиве. i-й подмассив задается двумя числами li и ri, и он состоит из чисел a[li], a[li + 1], ..., a[ri].

Капризная Алёна посмотрит на mex каждого подмассива. Среди всех m mex-ов девочка выберет минимальный, и она хотела бы, чтобы минимальный mex был как можно больше.

Ваша задача найти массив a из n неотрицательных чисел такой, чтобы минимальный mex подмассивов, заданных Алёной, был максимален.

mex множества чисел S — это минимальное неотрицательное целое число, которое не встречается в множестве S.

Входные данные

В первой строке находятся два числа n и m (1 ≤ n, m ≤ 105).

В следующих m строках задано описание подмассивов, интересующих Алёну. В i-й из этих строк заданы два числа li и ri (1 ≤ li ≤ ri ≤ n), которым соответствует подмассив a[li], a[li + 1], ..., a[ri].

Выходные данные

В первой строке выведете одно число — максимально возможный минимальный mex.

Во второй строке выведете n чисел — массив a. Числа в массиве a должны быть от 0 до 109.

Гарантируется, что существует оптимальный ответ, в котором все числа в массиве a находятся в пределах от 0 до 109.

Если существует несколько решений, выведите любое.

Примечание

Пояснение к тесту из условия: на подмассиве (1, 3) mex равен 3, на подмассиве (2, 5) mex равен 3 и на подмассиве (4, 5) mex тоже равен 2, следовательно минимальный mex среди подмассивов, интересующих Алёну, равен 2.

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» опять же без кавычек, затем через пробел — номер минуты, на которой «заяц» будет пойман.

A. Владик и перелеты

жадные алгоритмы Конструктив реализация *1200

Владик — спортивный программист. В этом году он собирается победить на международной олимпиаде школьников по информатике. Но все не так просто, как кажется: перед Владиком стоит вопрос, как выгоднее всего добраться до места проведения олимпиады.

Владику известно n аэропортов. Все аэропорты расположены на одной прямой. Каждый аэропорт имеет свой уникальный порядковый номер от 1 до n, дом Владика находится возле аэропорта с номером a, а место проведения олимпиады — рядом с аэропортом, имеющим номер b. Дом Владика и место проведения олимпиады могут находиться возле одного и того же аэропорта.

Чтобы добраться до олимпиады, Владик может совершить любое количество промежуточных перелетов, однако он должен начать в аэропорте a и завершить свой полет в аэропорте b.

Каждый аэропорт принадлежит ровно одной из двух обслуживающих компаний. Стоимость перелета из аэропорта с номером i в аэропорт с номером j равняется нулю, если эти аэропорты принадлежат одной компании, и |i - j|, если они принадлежат разным компаниям.

Найдите минимальную стоимость, за которую Владик может долететь на олимпиаду.

Входные данные

В первой строке входных данных записаны три целых числа n, a, и b (1 ≤ n ≤ 105, 1 ≤ a, b ≤ n) — количество аэропортов, номер аэропорта, из которого Владик начнет свой путь, и номер аэропорта, рядом с которым проводится олимпиада.

Далее записана строка длины n, состоящая только из символов 0 и 1. Если на позиции i в данной строке стоит 0, то i-й аэропорт принадлежит первой компании, а иначе — второй компании.

Выходные данные

Выведите одно целое число — минимальную стоимость, за которую Владик может долететь на олимпиаду.

Примечание

В первом примере Владик может сперва долететь до аэропорта с номером 2, заплатив |1 - 2| = 1 единицу стоимости (поскольку аэропорты принадлежат разным компаниями), а затем бесплатно долететь из аэропорта 2 до 4 (поскольку аэропорты принадлежат одинаковым компаниям). Таким образом, стоимость такого перелета равна 1. Долететь бесплатно невозможно, поэтому ответ на пример равен 1.

Во втором примере Владик может сразу бесплатно долететь из аэропорта 5 до аэропорта 2, поскольку они принадлежат одинаковым компаниям.

D. Зеленый и черный чай

жадные алгоритмы Конструктив математика *1500

Иннокентий очень любит чай и сегодня хочет выпить ровно n чашек чая. Он бы выпил и больше, но у него осталось ровно n пакетиков чая, a из которых — зеленый чай и b — черный.

Иннокентий не любит пить более, чем k раз подряд один и тот же чай (зеленый или черный). Перед вами стоит задача определить порядок заваривания пакетиков, при котором Иннокентий сможет выпить n чашек чая, при этом он не будет пить один и тот же чай более k раз подряд, либо сообщить, что это невозможно. Каждый пакетик должен быть заварен ровно один раз.

Входные данные

В первой строке следуют четыре целых числа n, k, a и b (1 ≤ k ≤ n ≤ 105, 0 ≤ a, b ≤ n) — количество чашек чая, которые хочет выпить Иннокентий, максимальное количество чашек одного и того же чая, которые Иннокентий может выпить подряд, количество пакетиков с зеленым чаем и количество пакетиков с черным чаем. Гарантируется, что a + b = n.

Выходные данные

Если выпить n чашек чая не удастся, выведите «NO» (без кавычек).

В противном случае, выведите строку длины n, состоящую из символов 'G' и 'B'. Если очередной символ равен 'G', то очередная кружка должна быть с зеленым чаем. Если очередной символ равен 'B', то очередная кружка должна быть с черным чаем. Если ответов несколько, разрешается вывести любой из них.

E. Замена чисел

жадные алгоритмы математика реализация *1900

У Евгения есть n карточек, на каждой из которых написано ровно одно целое число. Евгений хочет поменяться с Николаем некоторыми карточками так, чтобы количество четных чисел на его карточках стало равно количеству нечетных чисел на его карточках, при этом все числа стали различными.

У Николая есть m карточек, на которых написаны различные числа от 1 до m, то есть у Николая есть ровно одна карточка, на которой написано число 1, ровно одна карточка, на которой написано число 2 и так далее.

Назовем обменом процесс, в котором Евгений отдает одну из своих карт Николаю, и берет у него одну другую карту. Перед вами стоит задача найти минимальное количество обменов карт, а также определить какие на какие карточки нужно обменивать Евгению.

Входные данные

В первой строке следуют два целых числа n и m (2 ≤ n ≤ 2·105, 1 ≤ m ≤ 109) — количество карточек у Евгения и количество карточек у Николая. Гарантируется, что n четно.

Во второй строке следует последовательность из n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — числа на карточках Евгения.

Выходные данные

Если ответа не существует, выведите -1.

В противном случае, в первую строку выведите минимальное количество обменов. Во вторую строку выведите n чисел — карточки Евгения после обмена с Николаем. Порядок карточек должен совпадать с порядком карт из входных данных. Если i-я карточка не обменивалась, то i-е число должно совпадать с числом из входных данных. В противном случае, будет считаться, что эта карточка была поменяна, и i-е число должно равняться числу на карточке, на которую она была поменяна.

Если ответов несколько, разрешается вывести любой из них.

F. Музыка в машине

жадные алгоритмы Структуры данных *2200

Саша ездит на работу на машине, и дорога занимает ровно k минут. По дороге он слушает музыку. Все песни в его плейлисте расположены друг за другом и от прослушивания i-й из них Саша получает удовольствие равное ai. При этом i-я песня длится ti минут.

Перед началом пути Саша включит произвольную песню под номером x, и будет слушать песни по очереди: сначала песню под номером x, затем песню под номером (x + 1), затем песню под номером (x + 2), и так далее. Он будет слушать песни пока не приедет на работу, либо пока не послушает последнюю песню из своего плейлиста.

Каждую песню Саша может либо прослушать полностью, либо прослушать ее частично. Во втором случае он слушает песню целое число минут хотя бы половину её длительности. Формально, если длина песни равна d минут, то Саша послушает ее в течение не менее минут, а затем сразу переключит на следующую песню (если она есть). Например, если длина песни, которую Саша будет слушать частично, равна 5 минутам, то он должен послушать её хотя бы 3 минуты, а если длина песни равна 8 минутам — хотя бы 4 минуты.

Переключение песен происходит мгновенно.

При этом Саша согласен прослушать частично не более w песен. Если последняя прослушанная песня играла менее, чем половину своей длительности, то она не приносит Саше удовольствия и не учитывается в песнях, прослушанных частично. Пропускать песни нельзя. Удовольствие от песни не зависит от режима ее прослушивания, для i-й песни эта величина равна ai.

Помогите Саше выбрать такое x и выбрать не более w песен для частичного прослушивания, чтобы он получил максимальное удовольствие. Напишите программу находящую максимальное удовольствие, которое может получить Саша, от прослушивания песен по дороге на работу.

Входные данные

В первой строке следуют три целых числа n, w и k (1 ≤ w ≤ n ≤ 2·105, 1 ≤ k ≤ 2·109) — количество песен в плейлисте, количество песен, которые Саша согласен послушать частично и время в минутах, за которое Саша доезжает до работы.

Во второй строке следуют n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 104), где ai равно удовольствию, которое Саша получит от прослушивания i-й песни.

В третьей строке следуют n целых положительных чисел t1, t2, ..., tn (2 ≤ ti ≤ 104), где ti равно длительности i-й песни в минутах.

Выходные данные

Выведите максимальное удовольствие, которое может получить Саша, от прослушивания песен по дороге на работу.

Примечание

В первом примере Саше нужно начать прослушивание с песни номер 2. Ее он должен прослушать частично (за 4 минуты), затем полностью прослушать песню номер 3 (за 3 минуты) и потом частично прослушать песню номер 4 (за 3 минуты). После прослушивания этих песен Саша получит удовольствие равное 4 + 3 + 5 = 12. Песню номер 5 Саша прослушать не успеет, так как потратит на прослушивание песен 2, 3 и 4 время равное 4 + 3 + 3 = 10 минутам и до работы останется ехать всего 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.

Примечание

В первом примере Вася должен перед первым днем зимы поменять резину с летней на зимнюю, проездить на ней три дня, после чего переодеть резину с зимней на летнюю, так как безопасно на зимней резине можно ездить как раз три дня. Таким образом, суммарное количество смен резины равно двум.

Во втором примере Вася должен перед первым днем зимы поменять резину с летней на зимнюю, затем после первого дня зимы поменять резину с зимней на летнюю. После второго дня нужно вновь поменять резину с летней на зимнюю, и после третьего дня поменять резину с зимней на летнюю. Таким образом, суммарное количество смен резины равно четырем.

D. Санта-Клаус и палиндром

жадные алгоритмы Конструктив Структуры данных *2100

Санта-Клаус очень любит палиндромы. Недавно у него был день рождения. В гости к Санта-Клаусу пришли k друзей, каждый из них подарил ему строку si одной и той же длины n, красота i-й строки равна ai. Возможно, что ai является отрицательным — это значит, что строка не является красивой по мнению Санта-Клауса.

Санта-Клаус без ума от палиндромов. Ему стало интересно: какую максимальную суммарную красоту может иметь палиндром, если склеить какие-то (возможно все) из подаренных строк? Каждый подарок можно использовать не более одного раза. Обратите внимание, что все подаренные строки имеют одинаковую длину n.

Напоминаем, что палиндром — это строка, которая не изменится, если её развернуть задом наперёд.

Так как пустая строка является палиндромом, то искомая максимальная красота — неотрицательна. Даже если все ai отрицательны, Санта-Клаус может получить пустую строку в качестве палиндрома.

Входные данные

В первой строке задано два целых числа через пробел, k и n — количество друзей Санта-Клауса и длина строки, подаренной каждым другом (1 ≤ k, n ≤ 100 000; n·k  ≤ 100 000).

Далее следуют k строк. i-я из них содержит подаренную строку si и её красоту ai ( - 10 000 ≤ ai ≤ 10 000). Строка состоит из n строчных букв латинского алфавита, а её красота — целое число. Подаренные строки могут совпадать. Одинаковые строки могут иметь разную красоту.

Выходные данные

Выведите искомую максимальную суммарную красоту.

Примечание

В первом примере из условия Санта-Клаус может склеить палиндром abbaaaxyxaaabba, используя строки 5, 2, 7, 6, 3 (склеив их именно в этом порядке).

E. Санта-Клаус и мандарины

Бинарный поиск жадные алгоритмы Структуры данных *2100

У Санта-Клауса есть n мандаринов, причём i-й из них имеет ai долек. Санта-Клаус пришел в школу, где учится k учеников. Он решил угостить их мандаринами.

Так как на всех мандаринов может не хватить, Санта-Клаус решил поделить их на части, чтобы никто не обиделся. Для этого он может делить мандарины пополам, а также делить любую часть пополам. Если количество долек в мандарине или в части, которую Санта-Клаус делит, нечётное, то в одной получившейся части окажется на одну дольку больше, чем в другой. Делить мандарин или часть мандарина можно лишь в том случае, если после деления каждая получившаяся часть будет иметь хотя бы одну дольку.

Санта-Клаус хочет дать каждому из школьников ровно один мандарин или одну часть мандарина (в частности, каждый ученик должен получить положительное количество долек). Возможно, что у Санта-Клауса останется несколько мандаринов или частей после того, как он раздаст часть из них школьникам.

Пусть в результате угощения i-му ученику достанется bi долек. В таком случае радость Санта-Клауса будет равна минимальному значению среди всех bi.

Найдите максимальную возможную величину радости Санта-Клауса, которую он может получить после угощения учеников мандаринами.

Входные данные

В первой строке находятся два целых положительных числа n и k (1 ≤ n ≤ 106, 1 ≤ k ≤ 2·109) — количество мандаринов и количество учеников.

Во второй строке находится последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 107), где ai равно количеству долек в i-м мандарине.

Выходные данные

Если невозможно раздать всем ученикам по манадарину или части мандарина, выведите -1. В противном случае выведите максимально возможную величину радости Санта-Клауса.

Примечание

В первом примере Санта-Клаусу нужно разделить второй манадрин пополам, чтобы в одной части было 5 долек, а в другой 4. Тогда он сможет отдать одному ученику часть, в которой 5 долек, а второму целый первый манадарин, в котором также 5 долек.

Во втором примере Санта-Клаусу нужно разделить пополам оба манадрина, тогда он сможет отдать двум ученикам части по 6 долек, а двум другим ученикам — части по 7 долек.

В третьем примере Санта-Клаус не сможет дать всем ученикам хотя бы по одной дольке, так как у него есть всего 2 дольки и 3 ученика.

A. Задача Бахгольда

жадные алгоритмы математика реализация теория чисел *800

Задача Бахгольда формулируется очень просто. Дано целое положительное число n. Требуется представить его в виде суммы максимального количества простых слагаемых. Известно, что представление в виде суммы простых существует для всех целых положительных чисел, больших 1.

Напомним, целое положительное число k называется простым, если оно больше 1 и у него ровно два целых положительных делителя — 1 и k.

Входные данные

В единственной строке записано целое число n (2 ≤ n ≤ 100 000).

Выходные данные

В первой строке выведите целое число k — максимально возможное количество простых слагаемых.

В следующей строке выведите k чисел — сами простые слагаемые. Их сумма должна быть равна n. Числа можно выводить в любом порядке. Если оптимальных решений несколько, разрешается вывести любое из них.

C. Голосование

жадные алгоритмы реализация *1500

В организации Alternative Cake Manufacturing (ACM) работает n сотрудников. Сейчас там проводится очень важное голосование, и все ведущие мировые СМИ пытаются спрогнозировать его результат.

Так получилось, что каждый из сотрудников имеет ярко выраженные политические взгляды и принадлежит либо к фракции депубликанцев, либо к фракции ремократов, и каждой фракции выгоден свой результат голосования. Процедура голосования устроена крайне необычно:

  1. Каждый из n сотрудников высказывается по очереди, начиная с сотрудника номер 1 и заканчивая сотрудником номер n. При этом если к моменту, когда сотруднику пора высказаться, его уже лишили права голоса, то он просто пропускает свой ход (и уже никак не участвует в голосовании в последствии).
  2. Высказывание сотрудника состоит в том, чтобы лишить права голоса любого другого сотрудника или ничего не сделать. Лишать права голоса можно как тех кто уже высказался, так и тех, кому только предстоит высказаться. Лишение права голоса действует в течение всего процесса голосования.
  3. Когда все сотрудники выскажутся, процедура повторяется: снова по очереди высказываются все от сотрудника 1 до сотрудника n, кто ещё не лишился права голоса.
  4. Повторения процедуры происходят до тех пор, пока не останется только один сотрудник с правом голоса, то он в одиночку решает исход голосования. Разумеется, он принимает решение в пользу своей фракции.

Зная порядок голосования и то, что все сотрудники действуют оптимально (и знают порядок голосования и кто принадлежит какой фракции), вы должны предсказать, какая фракция одержит верх.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 200 000) — количество сотрудников.

Далее записана строка из n символов, i-й из которых равен «D», если i-й человек поддерживает депубликанцев, либо «R», если i-й человек поддерживает ремократов.

Выходные данные

Выведите «D», если на голосовании будет принято решение, устраивающее фракцию депубликанцев, и «R», если ремократов.

Примечание

Рассмотрим один из вариантов голосования:

  1. 1-й сотрудник лишает голоса сотрудника 5.
  2. 2-й сотрудник лишает голоса сотрудника 3.
  3. 3-й сотрудник пропускает ход, так как его лишил голоса сотрудник 2.
  4. 4-й сотрудник лишает голоса сотрудника 2.
  5. 5-й сотрудник пропускает ход, так как его лишил голоса сотрудник 1.
  6. 1-й сотрудник опять высказывается и лишает голоса сотрудника 4.
  7. Только сотрудник 1 остался с правом голоса, поэтому голосование заканчивается принятием решения в пользу фракции депубликанцев.

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).

C. Новый год и рейтинг

Бинарный поиск жадные алгоритмы математика *1600

У каждого пользователя Codeforces есть рейтинг, который описывается одним целым числом, возможно отрицательным или нулём. Все пользователи разделены на два дивизиона. К первому дивизиону относятся пользователи с рейтингом 1900 и выше. Пользователи с рейтингом 1899 и меньше относятся ко второму дивизиону. После каждого соревнования, в зависимости от показанного результата рейтинг пользователя изменяется на некоторое целое число, возможно отрицательное или ноль.

В 2016 году Лимак принял участие в n соревнованиях. Он помнит, что во время соревнования i он был дивизионе di (то есть он принадлежал данному дивизиону непосредственно перед началом данного соревнования) и после соревнования его рейтинг изменился на величину ci. Обратите внимание, отрицательные значения ci означают, что рейтинг уменьшился.

Какой максимальный рейтинг может быть у Лимака после всех n соревнований? Если его рейтинг может быть сколь угодно большим, то выведите «Infinity». Если информация является противоречивой и не может быть верной ни для какого значения рейтинга, выведите «Impossible».

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 200 000).

В i-й из последующих n строк записаны два целых числа ci и di ( - 100 ≤ ci ≤ 100, 1 ≤ di ≤ 2), описывающих изменение рейтинга после соревнования и дивизион Лимака во время i-го соревнования.

Выходные данные

Если текущий рейтинг Лимака может быть сколь угодно большим, то выведите «Infinity» (без кавычек). Если информация из входных данных является невозможной, то выведите «Impossible» (без кавычек). В противном случае выведите максимально возможный рейтинг Лимака после всех n соревнований.

Примечание

В первом примере следующий сценарий соответствует всей информации из входных данных и максимально возможному итоговому рейтингу:

  1. Рейтинг Лимака изначально равен 1901 и он находится в дивизионе 1. После первого контеста рейтинг Лимака понижается на 7.
  2. С рейтингом 1894 Лимак соревнуется в дивизионе 2. Его рейтинг увеличивается на 5.
  3. Рейтинг Лимака равен 1899 и он всё ещё в дивизионе 2. В последнем контесте года изменение его рейтинга равняется  + 8 и он завершает год с рейтингом 1907.

Во втором примере, ситуация что Лимак соревновался в дивизионе 1, а после увеличения рейтинга на 57 оказался в дивизионе 2, является невозможной.

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, так как Дед Мороз хочет раздать все конфеты.

Если решений несколько, выведите любое.

A. Леша и разбиение массива

жадные алгоритмы Конструктив реализация *1200

Одним весенним днем, идя в университет, Леша нашел массив A. Леша очень любит разбивать массив на несколько частей. В этот раз он решил, что неплохо было бы найти разбиение массива A на несколько, а возможно и на один, новых массивов, причем чтобы сумма элементов в каждом новом массиве не была равна нулю. Ещё одним необходимым условием является то, что при склейке новых массивов должен получиться старый массив A.

Леша очень устал после университета, и поэтому разбиение массива было поручено вам. Помогите Леше!

Входные данные

В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 100) — количество элементов в массиве A.

В следующей строке входных данных находятся n целых чисел a1, a2, ..., an ( - 103 ≤ ai ≤ 103) — элементы массива A.

Выходные данные

Если необходимого разбиения массива A не существует, то в единственной строке выходных данных выведите «NO» (без кавычек).

Иначе в первой строке строке выходных данных выведите «YES» (без кавычек). В следующей строке выходных данных следует вывести целое число k — количество массивов в разбиении. В каждой из следующих k строк следует вывести пару целых чисел li, ri, означающих, что подотрезок A[li... ri] исходного массива A является i-м массивом в разбиении. Числа li, ri должны удовлетворять следующим условиям:

  • l1 = 1
  • rk = n
  • ri + 1 = li + 1, для всех 1 ≤ i < k.

Если ответов несколько, то выведите любой.

D. Федор и купоны

Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

Все наши герои имеют хобби. И Федор не исключение. Ему очень нравится ходить в супермаркет около дома и покупать всякие вещи.

Все товары в супермаркете имеют уникальный целый номер. И для каждого уникального целого номера найдется ровно один товар в супермаркете. Так как Федор делает много покупок, ему хотелось бы посещать супермаркет с экономией. Поэтому у него есть n скидочных купонов. i-й купон действует на товарах с номерами с li-го по ri-й включительно. Сегодня он решил взять с собой в супермаркет ровно k купонов.

Федор хочет выбрать k купонов так, чтобы количество таких товаров x, что на товар x действуют все купоны, было максимально (для лучшего понимания посмотрите примеры). Федор, кроме денег, ещё хочет сэкономить силы и время, поэтому просит вас сделать выбор купонов. Помогите Федору!

Входные данные

В первой строке входных данных находятся два целых числа n, k (1 ≤ k ≤ n ≤ 3·105) — количество купонов у Федора и количество купонов, которые следует выбрать.

В каждой из следующих n строк входных данных находятся два целых числа li и ri ( - 109 ≤ li ≤ ri ≤ 109) — описание i-го купона. Купоны могут совпадать.

Выходные данные

В первой строке следует вывести единственное целое число — максимальное количество товаров, на которые действуют все купоны. То есть товар, на который не действует какой-то из выбранных купонов, не считается.

В следующей строке выходных данных следует вывести k различных целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — номера купонов, выбрав которые, мы получим максимальное количество товаров, на которые действуют все эти купоны.

Если оптимальных ответов несколько, выведите любой.

Примечание

В первом примере, если Федор возьмет первые два купона, то они оба будут действовать на все товары в отрезке [40, 70]. Всего таких товаров 31.

Во втором примере ни на один товар не действуют два купона, поэтому ответ 0. Федор может взять любые два купона в этом примере.

B. Польшар и Игра

Бинарный поиск жадные алгоритмы игры сортировки Строки Структуры данных *1100

Польшар играет со Врагошаром в некоторую игру. Правила просты. Игроки по очереди называют слова, называть слово, которое уже прозвучало, нельзя. Начинает Польшар. Проигрывает тот шар, который не может сказать ранее неназванного слова.

Вам даны списки слов, известных Польшару и Врагошару. Определите, кто выиграет, если оба играют оптимально?

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 103) — число слов, которые знают Польшар и Врагошар соответственно.

Затем следуют n строк, по одной в строке — слова, известные Польшару.

Затем следуют m строк, по одной в строке — слова, известные Врагошару.

Заметьте, что ни один из шаров не может знать слово больше одного раза (слова различны), но некоторые слова могут быть известны обоим игрокам.

Каждое слово непустое и состоит из не более чем 500 строчных букв латинского алфавита.

Выходные данные

В единственной строке выведите ответ: «YES», если выиграет Польшар, и «NO» иначе. Оба шара играют оптимально.

Примечание

В первом примере Польшар знает намного больше слов и выиграет без труда.

Во втором примере если Польшар скажет вначале kremowka, то Врагошар не сможет использовать это слово. Единственное, что может сделать Врагошар — сказать wiedenska. Польшар скажет wadowicka и выиграет.

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.

B. Большой день для Баша

жадные алгоритмы математика теория чисел *1400

Баш отправился в путешествие, чтобы стать величайшим мастером Покемонов. Чтобы получить первого покемона, он отправился в лабораторию профессора Зулу. Поскольку Баш — любимый студент профессора, Зулу разрешил ему взять столько покемонов из лаборатории, сколько Баш захочет.

Однако, профессор предупрел Баша, что группа из k > 1 покемонов с силами {s1, s2, s3, ..., sk} склонна к драке между собой, если gcd(s1, s2, s3, ..., sk) = 1 (смотрите примечания для определения gcd).

Баш, будучи умным студентом, не хочет, чтобы его покемоны дрались между собой. В то же время, он хочет максимизировать количество покемонов, которые он возьмет. Можете помочь Башу найти максимальное число покемонов, которых он может взять с собой?

Обратите внимание: Один покемон не может драться сам с собой.

Входные данные

Входные данные находятся в двух строках.

Первая строка содержит целое число n (1 ≤ n ≤ 105) — число покемонов в лаборатории профессора.

Следующая строка содержит n целых чисел, где i-е из них равно si (1 ≤ si ≤ 105) — силе i-го покемона.

Выходные данные

Выведите одно число — максимальное число покемонов, которых Баш может взять.

Примечание

gcd (наибольший общий делитель) множества натуральных чисел {a1, a2, ..., an} равняется наибольшему натуральному числу, на которое делятся все числа {a1, a2, ..., an}.

В первом примере Баш может взять покемонов с силами {2, 4}, потому что gcd(2, 4) = 2.

Во втором примере Баш может взять покемонов с силами {2, 4, 6}, и не существует группы больше с gcd ≠ 1.

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 — новые вес и прочность ребра соответственно.

Выводите рёбра в том же порядке, в каком они заданы во входных данных, то есть первые два числа каждой строки должны оставаться неизменёнными.

B. Мыши и сыр

жадные алгоритмы *2100

Современные исследования показали, что стая голодных мышей в поисках сыра действует следующим образом: если поблизости есть несколько кусков сыра, то каждая мышь выбирает себе ближайший, после чего все мыши одновременно начинают двигаться в направлении выбранного куска сыра. Как только мышь, или несколько мышей, достигают точки назначения и там есть сыр, они его съедают, а все мыши, которые прибежали позже остаются голодными. Скорость передвижения всех мышей одинакова.

Если существует несколько способов выбрать ближайшие куски сыра, то мыши выберут такой способ, в соответствии с которым минимальное количество мышей стаи останется голодной. Чтобы проверить эту теорию ученые решили провести эксперимент. Они расположили N мышей и M кусков сыра в прямоугольной системе координат, таким образом, что все мыши находятся на некоторой прямой y = Y0, а все куски сыра - на другой прямой y = Y1. Но чтобы проверить результаты эксперимента ученым нужна программа которая воспроизводит поведение стаи голодных мышей.

Напишите программу, вычисляющую количество мышей, которые останутся без сыра.

Входные данные

Первая строка входного файла содержит четыре целых часа N (1 ≤ N ≤ 105), M (0 ≤ M ≤ 105), Y0 (0 ≤ Y0 ≤ 107), Y1 (0 ≤ Y1 ≤ 107, Y0 ≠ Y1). Вторая строка содержит последовательность из N строго возрастающих чисел — абсциссы мышей. Третья строка содержит M строго возрастающих чисел — абсциссы кусков сыра. Все абсциссы целые и не превышают по модулю 107.

Выходные данные

Единственная строка выходного файла должна содержать единственное число — минимальное количество мышей, которые останутся без сыра.

Примечание

Все три мыши выберут первый кусок сыра. Сыр съедят вторая и третья, которые прибегут к нему одновременно. Первая останется голодной, потому что бежала в том же направлении и опоздала. Второй кусок сыра останется несъеденный.

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, если таких пар не существует.

B. Фродо и подушки

Бинарный поиск жадные алгоритмы *1500

Дома у Фродо собираются ночевать n хоббитов. У Фродо есть n кроватей, стоящих в ряд, и m подушек (n ≤ m). Каждому хоббиту для сна нужна кровать и хотя бы одна подушка, однако, каждый хочет как можно больше подушек. Понятно, что подушки не всегда можно поделить поровну, однако любой хоббит обидится, если у него будет меньше подушек, чем у соседа, хотя бы на две.

Фродо будет спать на k-й с краю кровати. Какое максимальное число подушек он может положить себе, чтобы у каждого хоббита была хотя бы одна подушка, все подушки были розданы хоббитам, и никто из них не обиделся?

Входные данные

В единственной строке находятся три целых числа n, m и k (1 ≤ n ≤ m ≤ 109, 1 ≤ k ≤ n) — число хоббитов, число подушек и номер кровати Фродо.

Выходные данные

Выведите одно число — максимальное число подушек, которые Фродо может положить себе, чтобы никто не обиделся.

Примечание

В первом примере Фродо может взять себе максимум две подушки. Тогда, например, хоббит, который будет спать на первой кровати, может также взять себе две подушки, а хоббиты, которые будут спать на третьей и четвертой кровати, могут взять себе по одной подушке.

Во втором примере Фродо может взять себе максимум четыре подушки. Тогда остальные хоббиты должны будут взять себе по три подушки.

В третьем примере Фродо может взять три подушки себе, дав две подушки хоббиту, спящему посередине, и одну подушку хоббиту на третьей кровати.

D. Даша и очень сложная задача

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1700

Войдя в систему, Даша принялась решать задачи. Одна из них звучала следующим образом:

По данным двум последовательностям a и b длины n необходимо построить последовательность c длины n, i-й элемент которой вычисляется следующим образом: ci = bi - ai.

Об a и b также известно, что их элементы лежат в интервале от l до r. Более формально, выполняются равенства l ≤ ai ≤ r и l ≤ bi ≤ r. Про последовательность c известно, что все ее элементы различны.

Решение задачи Даша написала быстро, но вот проверить ее работу на стандартном тесте оказалось не так просто. Из-за ошибки в системе тестирования из теста была известна только последовательность a и сжатая последовательность последовательности c.

Дадим определение сжатой последовательности. Сжатой последовательностью последовательности c длины n будем считать такую последовательность p длины n, что pi равно количеству чисел, меньше либо равных чем ci, в последовательности c. К примеру, для последовательности c = [250, 200, 300, 100, 50] сжатой последовательностью является p = [4, 3, 5, 2, 1]. Обратите внимание, что в c все числа различны. Следовательно, сжатая последовательность содержит все числа от 1 до n включительно.

Помогите Даше найти любую последовательность b, для которой посчитанная сжатая последовательность последовательности c верна.

Входные данные

В первой строке находятся три целых числа n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ 109) — длина последовательностей и границы отрезка, в котором лежат элементы a и b.

В следующей строке входных данных находятся n целых чисел a1,  a2,  ...,  an (l ≤ ai ≤ r) — элементы последовательности a.

В следующей строке входных данных находятся n различных целых чисел p1,  p2,  ...,  pn (1 ≤ pi ≤ n)сжатая последовательность последовательности c.

Выходные данные

Если подходящей последовательности b не существует, то в единственной строке выходных данных выведите «-1».

Иначе в единственной строке выходных данных должно содержаться n целых чисел — элементы любой подходящей последовательности b.

Примечание

Найденная во втором примере последовательность b является подходящей, потому что построенная последовательность c = [2 - 3, 2 - 4, 2 - 8, 9 - 9] = [ - 1,  - 2,  - 6, 0] (напомним, что ci = bi - ai) имеет сжатую последовательность равную p = [3, 2, 1, 4].

E. Даша и головоломка

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2000

После решения задачи, Даша решила отдохнуть. Она уже была готова приступить к своему любимому занятию — оригами, но вспомнила о головоломке которую не смогла решить.

Дерево — это неориентированный связный граф без циклов. В частности, в дереве из n вершин всегда n - 1 ребро.

Головоломка заключалась в расположении вершин в точках декартовой плоскости с целочисленными координатами, так чтобы проведенные отрезки между вершинами соединенными ребрами были параллельны осям координат. Также пересечение отрезков допускается только на их концах. Различным вершинам должны соответствовать различные точки.

Помогите Даше найти любой из искомых способов расположения вершин дерева на плоскости.

Гарантируется, что если можно расположить вершины дерева на плоскости не нарушив условия выше, то это можно сделать воспользовавшись точками с целочисленными координатами по модулю не превышающими 1018.

Входные данные

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 30) — количество вершин в дереве.

Следующие n - 1 строк содержат по два целых числа ui, vi (1 ≤ ui, vi ≤ n), которые означают, что i-е ребро дерева соединяет вершины ui и vi.

Гарантируется что описанный граф является деревом.

Выходные данные

Если головоломка не имеет решения, то в единственной строке выходных данных выведите «NO».

Иначе, первая строка выходных данных должна содержать «YES». В следующих n строках должна содержаться пара чисел xi, yi (|xi|, |yi| ≤ 1018) — координаты точки соответствующей i-ой вершине дерева.

Если решений несколько, выведите любое.

Примечание

В первом примере одним из возможных размещений дерева будет следующее:

B. USB vs. PS/2

жадные алгоритмы реализация сортировки *1400

В связи с увеличением количества студентов в Берляндском государственном университете было решено оборудовать новый компьютерный кабинет. Вам было поручено купить мыши, и как можно дешевле, ведь в стране кризис!

Компьютеры, заказанные для кабинета, оказались существенно разными. Некоторые из них имеют только порты USB, некоторые — только PS/2, а на некоторых присутствуют оба варианта.

На сайте компьютерного магазина вы нашли прайс-лист, в котором для m мышей указаны цена и тип порта, к которому мышь можно подключить (USB или PS/2). Каждая мышь из списка есть в магазине в единственном экземпляре.

Вы хотите купить некоторый набор мышей из данного прайс-листа так, чтобы в первую очередь максимизировать количество оборудованных мышами компьютеров (не гарантируется, что удастся оборудовать все компьютеры), а при равенстве этой величины минимизировать суммарную стоимость купленных мышей.

Входные данные

В первой строке следуют три целых числа a, b и c (0 ≤ a, b, c ≤ 105) — количество компьютеров, имеющих только USB входы, количество компьютеров, имеющих только PS/2 входы, и количество компьютеров, у которых присутствуют оба варианта, соответственно.

Затем на новой строке записано единственное целое число m (0 ≤ m ≤ 3·105) — количество мышей в прайс-листе.

Далее следуют m строк, описывающих очередную мышь. В i-й строке сначала записано целое число vali (1 ≤ vali ≤ 109) — стоимость i-й мыши, затем, через пробел, тип порта (USB или PS/2), необходимый для её подключения.

Выходные данные

Выведите два целых числа через пробел — количество оборудованных компьютеров и суммарную стоимость приобретённых мышей.

Примечание

В первом примере можно купить первые три мыши, оборудовав один из компьютеров с USB входом мышью с USB выходом, а две PS/2 мыши подключить к компьютеру с PS/2 и компьютеру с обоими входами.

D. Максимальный путь

дп жадные алгоритмы реализация *2300

Дана прямоугольная таблица 3 × n, в каждой клетке которой записано число. Разрешается переходить из клетки в клетку, если они имеют общую сторону.

Найдите такой путь из верхней левой в правую нижнюю клетку таблицы, чтобы никакая клетка таблицы не была посещена дважды, а сумма чисел, записанных в клетках найденного пути, была максимальной.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество столбцов в таблице.

В следующих трёх строках следует по n целых чисел — описание таблицы, причём j-е число в i-й строке соответствует ячейке таблицы aij ( - 109 ≤ aij ≤ 109).

Выходные данные

Выведите максимальную сумму чисел на пути из левой верхней в правую нижнюю клетку таблицы. Путь не должен посещать никакую клетку дважды.

Примечание

Путь для первого примера из условия:

Путь для второго примера:

B. Обфускация кода

жадные алгоритмы реализация Строки *1100

Костя очень любит писать контесты на Codeforces. Правда, его расстраивает, что его постоянно взламывают. Поэтому перед очередным контестом он решил обфусцировать свой код (то есть изменить его так, чтобы сделать менее читабельным).

Обфускация происходит так. Сперва Костя смотрит на первый идентификатор в своей программе и заменяет все его вхождения на букву a, затем смотрит на следующий, который ещё не был заменён, и заменяет все его вхождения на букву b, и так далее. Костя — хороший программист, поэтому в его изначальной программе не бывает однобуквенных имён. Кроме того, в любой его программе не более 26 различных идентификаторов.

Вам дан список идентификаторов из некоторой программы в том порядке, в котором они встречаются в программе, с удалёнными пробелами и символами переноса строки. Определите, могла ли эта программа получиться в результате обфускации Костей.

Входные данные

В единственной строке входного файла содержится строка S, состоящая из маленьких латинских букв (1 ≤ |S| ≤ 500) — список идентификаторов программы с удалёнными пробелами.

Выходные данные

Если данная программа могла получиться в результате обфускации Костей, выведите «YES» (без кавычек), иначе выведите «NO».

Примечание

В первом примере, один из возможных списков идентификаторов такой: «number string number character number string number». Обфускация такой программы выглядела бы следующим образом:

  • заменить все вхождения number на a, в результате получается «a string a character a string a»,
  • заменить все вхождения string на b, в результате получается «a b a character a b a»,
  • заменить все вхождения character на c, в результате получается «a b a c a b a»,
  • все идентификаторы заменены, поэтому обфускация завершается.

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, которого нет в соответствующем пути.

B. Махмуд и треугольник

геометрия жадные алгоритмы Конструктив математика сортировки теория чисел *1000

У Махмуда есть n отрезков, i-й из них имеет длину ai. Ехаб поспорил с ним, сможет ли он использовать ровно 3 отрезка для того, чтобы составить из них невырожеднный треугольник. Махмуд никогда не спорит, если не уверен, что может выиграть, поэтому он спросил вас, должен ли он принять этот вызов или нет. Вам даны длины отрезков, проверьте, можно ли выбрать ровно 3 из них, чтобы составить невырожденный треугольник.

Махмуд должен использовать ровно 3 отрезка, он не может составить отрезок из двух или изменять какие-либо длины. Невырожденным считается треугольник с положительной площадью.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 105) — число отрезков.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — длины отрезков.

Выходные данные

В единственной строке выведите «YES», если можно выбрать ровно три отрезка и составить из них невырожденный треугольник, и «NO» иначе.

Примечание

В первом примере Махмуд может выбрать отрезки с длинами 2, 4 и 5 и составить из них невырожденный треугольник.

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.

B. Очередь

жадные алгоритмы Перебор *2100

Наконец-то! Васе исполнилось 14 лет, а значит, пора получать паспорт! Для этого ему необходимо обратиться в паспортный стол. Но не все так просто. В паспортном столе работает только одно окно по приему документов, а очередь в него иногда занимают задолго до его открытия. Вася хочет подать документы завтра.

Он знает, что окно начинает работать спустя ts минут после полуночи, а закрывается спустя tf после полуночи (то есть (tf - 1) — последняя минута, когда окно еще работает). На прием документов от одного человека тратится ровно t минут. Если до закрытия окна остается меньше t минут, то обслуживание новых посетителей прекращается.

Ещё Вася знает, что завтра придет ровно n посетителей. Для каждого посетителя Вася знает время, в которое он придет. Каждый приходящий посетитель занимает очередь в окно, и не уходит, пока его не обслужат (или пока окно по приему документов не закроется). Если в момент прихода посетителя окно свободно (в частности, если в этот же момент закончили обслуживать предыдущего посетителя), то пришедшего посетителя начинают сразу же обслуживать.

Времена приходов всех посетителей положительны, Вася, если надо, может прийти и в нулевой момент времени (т. е. ровно в полночь), однако он не может прийти в момент времени, выражающийся нецелым числом минут после полуночи. Если Вася приходит одновременно с несколькими посетителями, то он пропускает их вперед и встает в конец очереди.

Вася, безусловно, хочет прийти так, чтобы успеть подать документы до закрытия окна. Но из всех таких вариантов он хочет выбрать такой, чтобы стоять в очереди как можно меньше. Помогите ему.

Входные данные

В первой строке входных данных находятся три положительных целых числа: время открытия окна ts, время закрытия окна tf и время обслуживания одного человека t. В следующей строке дано одно целое число n — количество посетителей (0 ≤ n ≤ 100 000). В третьей строке перечислены положительные целые числа в порядке неубывания — времена, в которые посетители приходят в паспортный стол.

Все времена заданы в минутах и не превосходят 1012; гарантируется, что ts < tf. Также гарантируется, что Вася может прийти так, чтобы успеть подать документы до закрытия окна.

Выходные данные

В выходной файл выведите одно целое неотрицательное число — время, когда должен прийти Вася. Если Вася приходит одновременно с несколькими посетителями, то он пропускает их вперед и встает в конец очереди. Если оптимальных решений несколько, выведите любое.

Примечание

В первом примере первый посетитель приходит точно к открытию окна, и его обслуживают две минуты. В момент времени 12 минут окно освобождается, и, если Вася подойдет к этому моменту, то его обслужат без очереди, т.к. следующий посетитель подойдет только в момент времени 13 минут.

Во втором примере, чтобы успеть подать документы, Васе надо прийти раньше всех.

C. Гирлянда

графы Деревья жадные алгоритмы поиск в глубину и подобное *2000

Однажды под Новый Год Диме приснилось, что ему подарили сказочную гирлянду. Гирлянда — это набор лампочек, некоторые пары которых соединены проводами. Дима запомнил, что она представляла из себя единое целое, то есть любая пара лампочек была связана некоторой последовательностью проводов. Еще он заметил, что проводов было ровно на один меньше, чем лампочек.

Необычность гирлянды состояла в том, что яркость каждой лампочки зависела от температуры этой лампочки, которая могла быть как отрицательной, так и положительной! У Димы есть два друга, и он захотел поделиться с ними сказочным подарком. Для этого он планирует разрезать два разных провода так, чтобы гирлянда распалась на три части. Дима хочет, чтобы все три части светились одинаково, то есть чтобы в каждой из них суммарная температура лампочек совпадала. Конечно же, каждая из частей должна быть непустой, то есть в ней должна быть хотя бы одна лампочка.

Помогите ему найти способ, как это сделать, либо определите, что такого не существует.

Осматривая гирлянду, Дима поднял ее, взяв за какую-то лампочку. Таким образом, каждая лампочка, кроме той, за которую он взял, оказалась висящей на некотором проводе. Поэтому в качестве ответа вам нужно вывести номера двух различных лампочек, что будет означать, что Диме нужно разрезать провода, за которые они подвешены. Соответственно, в ответ не может входить лампочка, за которую Дима взял гирлянду.

Входные данные

В первой строке находится целое число n (3 ≤ n ≤ 106) — количество лампочек в гирлянде.

Затем следует n строк: в i-й из них находится информация об i-й лампочке, а именно, два целых числа — номер лампочки ai, к которой она подвешена (если такой нет, то число 0), и температура ti ( - 100 ≤ ti ≤ 100). Лампочки пронумерованы от 1 до n.

Выходные данные

Если решения не существует, выведите ровно одно число -1.

В противном случае выведите одну строку из двух различных чисел — номеров искомых лампочек. Если правильных ответов несколько, выведите любой.

Примечание

Схема гирлянды и разрезаний к первому примеру из условия:

D. Кефир

Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

Маленькая девочка Оля очень любит кефир. Каждый день она выпивает ровно k пакетов кефира, если их имеется хотя бы k, в противном случае — все, что есть. Но есть одна проблема: сроки годности. На каждом пакете написан день, позже которого этот пакет пить нельзя (ровно в этот день еще можно). Поэтому если в холодильнике у Оли в какой-то момент оказывается просроченный пакет, она его выкидывает.

Оля очень не любит выкидывать пакеты с кефиром, поэтому она применяет следующую стратегию: каждый раз, когда надо выпить очередной пакет, она выбирает тот, у которого срок годности заканчивается раньше всего. Несложно видеть, что эта стратегия минимизирует количество выкинутых пакетов и, в частности, позволяет обойтись без выкидывания, если это вообще возможно.

Но основная проблема, с которой столкнулась Оля, — это покупка нового кефира. Сейчас у Оли в холодильнике есть n пакетов кефира, про каждый известен его срок годности (через сколько дней он заканчивается). Оля пришла в магазин, и там есть m пакетов кефира, про каждый тоже известен его срок годности.

Определите, какое максимальное количество пакетов может купить Оля так, чтобы потом не пришлось ничего выбрасывать. Считайте, что Оля сегодня еще не пила ни одного пакета кефира.

Входные данные

В первой строке находятся три целых числа n, m, k (1 ≤ n, m ≤ 106, 1 ≤ k ≤ n + m) — число пакетов кефира у Оли в холодильнике, число пакетов кефира в магазине и сколько пакетов выпивает Оля каждый день.

Во второй строке находятся n целых чисел f1, f2, ..., fn (0 ≤ fi ≤ 107) — сроки годности пакетов кефира, которые уже есть у Оли в холодильнике. Срок годности выражается числом дней, на которые еще можно отложить употребление этого пакета. Таким образом, срок годности 0 означает, что пакет нужно выпить сегодня, 1 — что не позже завтра, и так далее.

Наконец, в третьей строке находятся m целых чисел s1, s2, ..., sm (0 ≤ si ≤ 107) — сроки годности пакетов, которые есть в магазине, в аналогичном формате.

Выходные данные

Если в любом случае Оля не сможет выпить даже уже имеющиеся у нее пакеты, выведите ровно одно число -1.

Иначе в первой строке выведите максимальное количество пакетов x, которые Оля может купить так, чтобы ничего не выбрасывать. В следующей строке выведите ровно x чисел — номера пакетов, которые следует взять (пакеты нумеруются в том порядке, в котором они заданы во входном файле, начинается с 1). Естественно, числа не должны повторяться, однако могут идти в произвольном порядке. Если существует несколько подходящих наборов, разрешается вывести любой.

Примечание

В первом примере из условия k = 2 и дома у Оли есть три пакета со сроками годности 0, 1 и 1 (т. е. истекающими сегодня, завтра и завтра), а в магазине есть 3 пакета со сроком годности 0 и 3 пакета со сроком годности 2. Оля может купить три пакета, например, один со сроком годности 0 и два со сроком годности 2.

Во втором примере все три уже имеющихся пакета имеют срок годности, оканчивающийся сегодня, и поэтому Оля не успеет их выпить вне зависимости от того, возьмет ли она еще один пакет в магазине или нет.

В третьем примере сегодня Оля выпьет k = 2 пакета (один уже имеющийся и один из магазина), а завтра — оставшийся один пакет.

E. Поищите без сдачи!

жадные алгоритмы *2400

Студент Арсений любит планировать свои действия ровно на n дней вперед. Он каждый день ходит в столовую обедать, и поэтому он уже определился, что он будет заказывать в каждый из этих n дней. Цены в столовой не меняются, поэтому в i-й из этих дней Арсений пообедает ровно на ci рублей.

В ходу монеты номиналом 1 рубль и купюры номиналом 100 рублей. У Арсения сейчас имеется m монет и достаточно много купюр (вы можете считать, что бесконечно много). Арсений любит современные технологии, поэтому везде, кроме столовой, он расплачивается карточкой, а в столовой карточки не принимают, и ему приходится расплачиваться наличными.

Кассир всегда просит студента расплатиться без сдачи. К сожалению, это не всегда возможно, но Арсений старается минимизировать недовольство кассира. Недовольство кассира в каждый из дней определяется суммарным количеством монет и купюр в сдаче Арсению в этот день, а именно, если кассир сдал x купюр и монет в день i, то его недовольство в этот день равно x·wi. Кассир всегда выдает сдачу наименьшим возможным числом купюр и монет, у него достаточно монет и купюр для этого.

Арсений хочет расплачиваться так, чтобы минимизировать суммарное недовольство кассира за n дней. Помогите ему определить, как ему стоит расплачиваться в каждый из n дней!

Заметьте, что Арсению всегда хватит денег, чтобы расплатиться, так как у него бесконечно много купюр. Арсений может использовать монеты и купюры, полученные в сдаче, в любой из следующих дней.

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ 109) — число дней, на которые Арсений распланировал свои действия, и число имеющихся у него монет в данный момент.

Во второй строке находится последовательность целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 105) — суммы, которые Арсений собирается потратить в каждый из дней.

В третьей строке находится последовательность целых чисел w1, w2, ..., wn (1 ≤ wi ≤ 105) — коэффициенты недовольства кассира в каждый из дней.

Выходные данные

В первой строке выведите одно целое число — минимальное суммарное недовольство кассира, которого может достичь Арсений.

Далее выведите n строк. В i-й из этих строк выведите два числа — число купюр и число монет, которыми Арсений должен расплатиться в i-й день.

Естественно, в любой из дней сумма, которую даст Арсений, должна быть не меньше суммы, на которую он собирается пообедать. Также эта сумма не должна превышать 106 рублей: Арсений никогда не носит большие суммы с собой.

Если оптимальных ответов несколько, выведите любой.

B. Новость о зачёте

*особая задача жадные алгоритмы *1200

Поликарп учится в университете в группе, состоящей из n студентов (включая его самого). Все они зарегистрированы в социальной сети «ЕстьКонтакт!».

Не все из студентов одинаково общительны. Про каждого студента известна величина ai — максимальное количество сообщений, которые i-й студент согласен послать за сутки. Студент не может посылать сообщения сам себе.

Рано утром Поликарп узнал важную новость о том, что завтра состоится зачёт по программированию. По этой причине эту новость необходимо срочно сообщить всем одногруппникам с помощью личных сообщений.

Перед вами стоит задача составить такой план использования личных сообщений, чтобы:

  • студент i послал не более ai сообщений (для всех i от 1 до n);
  • все студенты узнали новость о зачёте (изначально она известна только Поликарпу);
  • студент может сообщать новость другому только в том случае, если сам её знает.

Считайте, что все студенты пронумерованы различными целыми числами от 1 до n, а Поликарп всегда имеет номер 1.

В этой задаче вам не следует минимизировать количество сообщений, момент времени, когда все узнают о зачете или еще какой-либо другой параметр. Найдите любой способ использования личных сообщений, который удовлетворяет требованиям выше.

Входные данные

В первой строке следует целое положительное число n (2 ≤ n ≤ 100) — количество студентов.

Во второй строке следует последовательность a1, a2, ..., an (0 ≤ ai ≤ 100), где ai равно максимальному количеству сообщений, которые может послать i-й студент. Считайте, что Поликарп всегда имеет номер 1.

Выходные данные

Если сообщить всем студентам новость о зачёте невозможно, в первую строку выведите -1.

В противном случае, в первую строку выведите целое число k — количество сообщений, которые будут посланы. В каждой из следующих k строк выведите по два различных целых числа f и t, означающие, что студент номер f отправил сообщение с новостью студенту номер t. Все сообщения должны быть выведены в хронологическом порядке, то есть студент, отправляющий сообщение, уже должен знать новость. Допускается, что студенты могут получать повторные сообщения с новостью о зачёте.

Если ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере Поликарп (студент с номером 1) может отправить сообщение студенту с номером 2, который может после этого отправить сообщение студентам номер 3 и 4. Таким образом, все студенты узнают о зачёте.

C. Цикл в лабиринте

*особая задача графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное *1700

Робот находится в прямоугольном лабиринте размера n × m. Каждая из клеток лабиринта либо пустая, либо занята препятствием. Робот может передвигаться между соседними по стороне клетками влево (символ «L»), вправо (символ «R»), вверх (символ «U») или вниз (символ «D»). Робот может переместиться в клетку, только если она пустая. Изначально робот находится в пустой клетке.

Перед вами стоит задача найти лексикографически минимальный цикл Робота длины ровно k, который начинается и заканчивается в той клетке, в которой Робот находится изначально. Роботу разрешается посещать любую клетку сколько угодно раз (включая стартовую).

Считайте, что путь Робота задаётся строкой, состоящей из символов «L», «R», «U» и «D». Например, если Робот сначала пойдёт вниз, потом влево, затем вправо и вверх, то его путь записывается как «DLRU».

В этой задаче вам не нужно минимизировать длину пути. Найдите минимальную лексикографически (в алфавитном порядке, как в словаре) строку, которая удовлетворяет требованиям выше.

Входные данные

В первой строке следуют три целых числа n, m и k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 106) — размеры лабиринта и длина цикла.

В каждой из следующих n строк следуют по m символов — описание лабиринта. Если символ равен «.», то текущая клетка пустая. Если символ равен «*», то текущая клетка занята препятствием. Если символ равен «X», то изначально Робот находится в этой клетке, и она пустая. Гарантируется, что символ «X» встречается в лабиринте ровно один раз.

Выходные данные

Выведите лексикографически минимальный путь Робота длины ровно k, который начинается и заканчивается в той клетке, в которой Робот находится изначально. Если такого пути не существует, выведите «IMPOSSIBLE» (без кавычек).

Примечание

В первом примере для Робота существует всего два циклических пути длины 2 — «UD» и «RL». Второй вариант лексикографически меньше.

Во втором примере Робот должен выполнять перемещения в следующем порядке: вниз, влево, вниз, вниз, влево, влево, влево, вправо, вправо, вправо, вверх, вверх, вправо, вверх.

В третьем примере Робот не может переместиться ни в одну из соседних клеток, так как все они заняты препятствиями.

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).

B. Мишка и различные имена

жадные алгоритмы Конструктив *1500

В армии непросто сформировать отряд, который был бы эффективным на поле боя. Важную роль играет коммуникация, поэтому никакие два солдата не должны иметь одного имени (что делать, если пришел приказ отправить Боба в разведку, а в отряде два Боба?).

Отряд солдат эффективен если и только если имена всех солдат в отряде различны. Например, отряд (Джон, Боб, Лимак) эффективен, а отряды (Гэри, Боб, Гэри) и (Алиса, Алиса) — нет.

Вы — шпион во вражеском лагере. Вы заметили n стоящих в ряд солдат, пронумерованных от 1 до n. Генерал хочет сформировать отряд из k стоящих друг за другом солдат. Для каждого отрезка из k солдат генерал выписал, эффективен ли отряд из них, или нет.

Вы смогли украсть листок генерала, на нем написаны n - k + 1 слов s1, s2, ..., sn - k + 1, каждое из которых либо «YES», либо «NO»:

  • Слово s1 описывает отряд из солдат с номерами от 1 до kYES», если отряд эффективен, и «NO» иначе).
  • Слово s2 описывает отряд из солдат с номерами от 2 до k + 1.
  • И так далее до слова sn - k + 1, которое описывает отряд из солдат с номерами от n - k + 1 до n.

Ваша задача состоит в том, чтобы найти возможные имена n солдат, соответствующие записям генерала. Каждое имя должно состоять из латинских букв и иметь длину от 1 до 10 включительно, первая буква должна быть заглавной, остальные должны быть строчными. Имена не обязаны существовать на самом деле — можно вывести «Xyzzzdj» или, например, «T».

Найдите и выведите любое решение. Можно показать, что всегда существует хотя бы одно решение.

Входные данные

Первая строка содержит два целых числа n и k (2 ≤ k ≤ n ≤ 50) — число солдат и размер отрядов соответственно.

Вторая строка содержит n - k + 1 слов s1, s2, ..., sn - k + 1. Слово si равно «YES» если отряд солдат с i-го по i + k - 1-ый эффективен, иначе оно равно «NO».

Выходные данные

Найдите любое решение, удовлетворяющее условиям. В единственной строке выведите n слов через пробел, означающий имена солдат по порядку. Первая буква каждого имени должна быть заглавной, остальные — строчными. Все имена должны содержать только латинские буквы и иметь длину от 1 до 10.

Если корректных решений несколько, выведите любое из них.

Примечание

В первом примере 8 солдат. Для каждых последовательных 3 солдат мы знаем, эффективен ли отряд их этих солдат или нет. Проанализируем предложенный правильный ответ:

  • Первые три солдата (т. е. Adam, Bob, Bob) не создадут эффективный отряд, потому что среди них есть два солдата с именем Bob. Действительно, первое слово s1 — это «NO».
  • Солдаты со 2-го по 4-й (Bob, Bob, Cpqepqwer) тоже образуют неэффективный отряд, и второе слово s2 тоже «NO».
  • Солдаты с 3-го по 5-й (Bob, Cpqepqwer, Limak) образуют эффективный отряд, и слово s3 — это «YES».
  • ...,
  • Солдаты с 6-го по 8-й (Adam, Bob, Adam) образуют неэффективный отряд, и слово s6 — это «NO».

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.

B. Динамическая стоимость задач

жадные алгоритмы Перебор *2000

Вася и Петя участвуют в раунде Codeforces. Раунд длится два часа и состоит из пяти задач.

В раунде используется динамическая стоимость задач. Если вам посчастливилось ни разу не участвовать в раундах Codeforces с динамической стоимостью задач, поясним, что это значит. Максимальная стоимость задачи зависит от отношения числа решивших данную задачу к общему числу участников раунда, причем участниками раунда считаются все сделавшие хотя бы одну попытку.

Обратите внимание на границы диапазонов. Например, если в раунде участвуют 40 человек, а задачу решили 10 из них, то доля решивших равна 1 / 4, а максимальная стоимость задачи равна 1500.

Если максимальная стоимость задачи равна x, то за каждую целую минуту, прошедшую от начала раунда до отправки участником верного решения по задаче, участник потеряет x / 250 баллов. Например, если максимальная стоимость задачи равна 2000, а участник отправил верное решение по ней спустя 40 минут после начала раунда, то этому участнику будет начислено 2000·(1 - 40 / 250) = 1680 баллов за эту задачу.

Всего в раунде n участников, считая Васю и Петю. Про каждого участника и каждую задачу известно, сколько целых минут прошло от начала раунда до отправки данным участником решения по данной задаче, или что участник не делал попыток по задаче.

За две секунды до конца раунда оказалось так, что все попытки участников прошли претесты, а также не было сделано ни одной попытки взлома. Вася полагает, что за оставшиеся две секунды никто не успеет отправить решение или попытаться взломать другое решение, а все уже сделанные попытки участников успешно пройдут системное тестирование.

К сожалению, Вася — обманщик и еще до начала раунда зарегистрировал на него 109 + 7 новых аккаунтов. Теперь Вася может отправить от имени новых аккаунтов любые из своих решений, чтобы изменить окончательные стоимости задач. Кроме того, Вася может отправлять неправильные решения на любые задачи. Обратите внимание, что Вася не может отправлять правильные решения на те задачи, которые он сам не решил.

Вася стремится к тому, чтобы набрать на текущем раунде строго больше баллов, чем Петя. Скрипты, позволяющие обфусцировать решения Васи и отправлять их в систему от имени любого из новых аккаунтов за доли секунды, у Васи уже готовы. Однако Вася не хочет делать свой обман слишком очевидным, поэтому он желает достичь своей цели, сделав попытки от имени как можно меньшего числа новых аккаунтов.

Найдите минимальное число новых аккаунтов, необходимое Васе для того, чтобы обогнать Петю (при условии, что предположения Васи верны), или сообщите, что Вася не сможет достичь своей цели.

Входные данные

Первая строка содержит целое число n (2 ≤ n ≤ 120) — количество участников раунда, считая Васю и Петю.

Каждая из следующих n строк содержит пять целых чисел ai, 1, ai, 2..., ai, 5 ( - 1 ≤ ai, j ≤ 119) — количество целых минут, прошедших от начала раунда до отправки участником i решения по задаче j, либо -1, если участник i не делал попыток по задаче j.

Гарантируется, что каждый участник сделал хотя бы одну попытку.

Вася — участник под номером 1, Петя — участник под номером 2, остальные участники даны в произвольном порядке.

Выходные данные

Выведите единственное число — минимальное число новых аккаунтов, необходимое Васе для того, чтобы обогнать Петю, или  - 1, если Вася не сможет достичь своей цели.

Примечание

В первом примере оптимальная стратегия Васи — отправить от имени двух новых аккаунтов решения последних трех задач. В таком случае первые две задачи будут иметь стоимость 1000, а последние три — 500. Общее число баллов Васи составит 980 + 940 + 420 + 360 + 270 = 2970, а Петя наберет лишь 800 + 820 + 420 + 440 + 470 = 2950 баллов.

Во втором примере Васе следует от имени двух новых аккаунтов отправить по одному неверному решению на любую из задач, а от имени еще одного нового аккаунта — отправить только верное решение по первой задаче. В этом случае максимальные стоимости задач составят 500, 1500, 1000, 1500, 3000. Вася наберет 2370 баллов, а Петя — 2294 балла.

В третьем примере Вася добьется желаемого, если отправит решения первых четырех задач от имени 27 новых аккаунтов. Тогда стоимости задач составят 500, 500, 500, 500, 2000. Благодаря высокой стоимости пятой задачи Вася сможет обойти Петю, очень быстро решившего первые четыре задачи, но не решившего пятую.

C. Степное разбиение

Бинарный поиск жадные алгоритмы Конструктив математика *2200

Можно показать, что любое натуральное число x единственным образом представимо в виде x = 1 + 2 + 4 + ... + 2k - 1 + r, где k и r — целые, k ≥ 0, 0 < r ≤ 2k. Такое представление будем называть степным разбиением x на слагаемые.

Например, степные разбиения чисел 12, 17, 7 и 1 выглядят так:

12 = 1 + 2 + 4 + 5,

17 = 1 + 2 + 4 + 8 + 2,

7 = 1 + 2 + 4,

1 = 1.

Алиса взяла последовательность натуральных чисел (элементы в которой могли повторяться), каждый элемент последовательности заменила на последовательность из всех слагаемых его степного разбиения, расположила все получившиеся числа в неубывающем порядке и отдала Борису. Теперь Борису интересно, сколько элементов могло быть в исходной последовательности Алисы. Найдите все возможные варианты!

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 105) — количество чисел, которые Алиса отдала Борису.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1012; a1 ≤ a2 ≤ ... ≤ an) — числа, отданные Алисой.

Выходные данные

Выведите в возрастающем порядке все возможные значения m такие, что существует последовательность натуральных чисел длины m такая, что если каждый элемент последовательности заменить слагаемыми из его степного разбиения и расположить получившиеся числа в неубывающем порядке, получится последовательность чисел, заданная во входных данных.

Если таких значений m не существует, выведите единственное число -1.

Примечание

В первом примере Алиса могла получить такую последовательность чисел из последовательности [6, 20].

Во втором примере последовательностью Алисы могла быть как [4, 5], так и [3, 3, 3].

C. Максимальное число

*особая задача жадные алгоритмы Конструктив реализация *1200

У Степана есть новейшее устройство с экраном, на котором могут отображаться цифры. Каждая из цифр изображается в семисекционных областях так, как показано на рисунке ниже.

Таким образом, например, для изображения цифры 3 нужно подсветить 5 секций на экране, а для цифры 66 секций.

Заряда новейшего устройства хватает, чтобы подсветить суммарно n секций на экране.

Степану стало интересно — какое максимальное число может быть изображено на экране его новейшего устройства. Перед вами стоит задача определить это число. Обратите внимание, что оно не должно содержать лидирующих нулей. Считайте, что семисекционных областей на экране устройства хватит для изображения любого целого числа.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 100 000) — количество секций, которые могут быть подсвечены на экране устройства одновременно.

Выходные данные

Выведите максимальное число, которое может быть изображено на экране новейшего устройства Степана.

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.

D. Облако хештегов

Бинарный поиск жадные алгоритмы реализация Строки *1800

Вася ведёт публичную страницу организации «Мышь и клавиатура», где постоянно публикует различные новости из мира спортивного программирования. Для удобства поиска по новостям Вася прикрепляет к каждой из них список хештегов. В данной задаче хештегом называется строка, состоящая из маленьких букв английского алфавита и ровно одного символа '#', расположенного в начале строки. Длиной хештега будем называть количество символов в нём, без учёта символа '#'.

Начальство Васи распорядилось, что хештеги у каждой новости должны быть расположены в лексикографическом порядке (для пояснения смотрите примечания).

Поскольку Васе не хочется менять порядок хештегов в уже написанной новости, он решил удалить у некоторых хештегов некоторый суффикс (какое-то количество последних символов), при этом можно даже удалить весь текст хештега, оставив только символ '#', но сам символ '#' удалять нельзя. Из всех возможных вариантов такого удаления Вася хочет выбрать тот, в котором суммарно будет удалено минимальное количество символов. Если и таких вариантов несколько, то разрешается использовать любой из них.

Входные данные

В первой строке находится одно число n (1 ≤ n ≤ 500 000) — количество хештегов в новости.

Каждая из следующих n строк содержит ровно один хештег положительной длины.

Гарантируется, что суммарная длина всех хештегов (то есть всех строк, без учёта символа '#') не превосходит 500 000.

Выходные данные

Выведите полученные после удаления символов хештеги.

Примечание

Слово a1, a2, ..., am длины m лексикографически не превосходит слова b1, b2, ..., bk длины k, если выполняется одно из двух:

  • либо в первой позиции i, такой что ai ≠ bi, символ ai идёт раньше по алфавиту, чем символ bi, то есть в первой различающейся позиции символ слова a меньше символа слова b;
  • либо, если такой позиции i нет, и m ≤ k, то есть второе слово начинается с первого либо совпадает с ним

Про последовательность слов говорят, что они идут в лексикографическом порядке, если каждое слово в нём (кроме последнего) лексикографически не превосходит следующего за ним.

Для слов, состоящих из маленьких латинских букв, лексикографический порядок совпадает с алфавитным порядком расположения слов в словаре.

Хештег, состоящий только из символа '#', лексикографически не больше любого другого хештега. Поэтому в третьем примере мы не можем оставить два первых слова и сократить два вторых.

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.

A. Игра на строке

Бинарный поиск жадные алгоритмы Строки *1700

Любимое занятие Насти — вычеркивать буквы из слова, чтобы получилось другое слово. Но получается это у нее довольно плохо, потому что она еще маленькая. Поэтому ей всегда помогает ее старший брат Сергей.

Сергей дал Насте слово t и хочет, чтобы из него получилось слово p. Настя начинает вычеркивать буквы в некотором порядке (последовательно, строго в этом порядке), который задан перестановкой номеров букв слова t: a1... a|t|. Длину слова x мы обозначаем |x|. Заметим, что после вычеркивания буквы нумерация не меняется. Например, если t = «nastya» и a = [4, 1, 5, 3, 2, 6] тогда вычеркивания образуют следующую последовательность слов: «nastya» «nastya» «nastya» «nastya» «nastya» «nastya» «nastya».

Этот порядок изначально известен Сергею. Его задача состоит в том, чтобы в некоторый момент времени остановить сестру и закончить вычеркивание самому, получив после этого слово p. Так как Насте нравится это занятие, Сергей хочет остановить ее как можно позже. Ваша задача — сообщить, сколько букв может вычеркнуть Настя до того, как ее остановит Сергей.

Гарантируется, что слово p можно получить вычеркиванием букв из t.

Входные данные

Первая и вторая строки входного файла содержат слова t и p, соответственно. Слова состоят из строчных букв латинского алфавита (1 ≤ |p| < |t| ≤ 200 000). Гарантируется, что слово p можно получить вычеркиванием букв из t.

Следующая строка содержит перестановку a1, a2, ..., a|t| номеров букв, задающую порядок, в котором Настя вычеркивает буквы слова t (1 ≤ ai ≤ |t|, все ai различны).

Выходные данные

Выведите одно число — максимальное число букв, которые может вычеркнуть Настя.

Примечание

В первом примере последовательность вычеркивания букв Настей выглядит так:

«ababcba» «ababcba» «ababcba» «ababcba»

Продолжать вычеркивать Настя не может, потому что из «ababcba» нельзя получить «abb».

Таким образом, Настя может вычеркнуть только три буквы в свой последовательности.

B. Странное округление

жадные алгоритмы Перебор *1100

Поликарп без ума от круглых чисел. Особенно ему нравятся числа, которые делятся на 10k.

В заданном числе n Поликарп хочет удалить наименьшее количество цифр, чтобы получилось число, которое делится на 10k. Например, если k = 3, то в числе 30020 достаточно удалить одну цифру (цифру 2). В таком случае результат будет равен 3000, что делится на 103 = 1000.

Напишите программу, которая выведет минимальное количество цифр, которые надо удалить из числа n, чтобы результат делился на 10k. Результат не должен начинаться с ненужного лидирующего нуля (то есть с нуля может начинаться только число 0, которое обязано быть записано ровно одной цифрой).

Гарантируется, что ответ существует.

Входные данные

В единственной строке входных данных записаны два целых числа n и k (0 ≤ n ≤ 2 000 000 000, 1 ≤ k ≤ 9).

Гарантируется, что ответ на задачу существует. Все числа во входных данных записаны в традиционной форме записи целых чисел, то есть без лишних лидирующих нулей.

Выходные данные

Выведите w — искомое минимальное количество цифр. После удаления подходящих w цифр из числа n должно получиться значение, которое делится на 10k и начинается с нуля в единственном случае (число равно нулю и записано ровно одной цифрой 0).

Примечание

В примере 2 вы можете удалить цифру 1 и любой из нулей. Тогда останется число 0, которое делится на любое другое число.

C. Нечестные продавцы

жадные алгоритмы Конструктив сортировки *1200

Игорь узнал о скидках в магазине и решил купить n товаров. Скидки в магазине продлятся неделю и Игорь знает про каждый товар, что сейчас он стоит ai, а после недели скидок будет стоить bi.

Не все из продавцов в магазине честные, поэтому некоторые товары сейчас стоят дороже, чем будут стоить после недели скидок.

Игорь решил, что купит не менее k товаров сейчас, а с остальными подождет неделю, чтобы максимально сэкономить. Перед вами стоит задача определить минимальную сумму, которую Игорь может потратить, чтобы купить все n товаров.

Входные данные

В первой строке следуют два целых положительных числа n и k (1 ≤ n ≤ 2·105, 0 ≤ k ≤ n) — количество товаров, которые Игорь хочет купить, и минимальное количество товаров, которые Игорь обязательно хочет купить сейчас.

Во второй строке следует последовательность a1, a2, ..., an (1 ≤ ai ≤ 104) — цены товаров в период скидок.

В третьей строке следует последовательность b1, b2, ..., bn (1 ≤ bi ≤ 104) — цены товаров после периода скидок.

Выходные данные

Выведите минимальную сумму, которую Игорь может потратить, чтобы купить все n товаров при условии, что прямо сейчас он хочет купить не менее k товаров.

Примечание

В первом примере Игорю выгоднее всего купить сразу товар номер 3, заплатив за это 6, а товары номер 1 и 2 подождать, тогда он сможет купить их за 3 и 1, соответственно. Суммарно Игорь заплатит 6 + 3 + 1 = 10.

Во втором примере Игорю выгоднее всего купить сразу товары с номерами 1, 2, 4 и 5, заплатив за них 3, 4, 10 и 3, соответственно. Товар номер 3 Игорю выгоднее купить после скидок, он заплатит за это 5. Суммарно Игорь заплатит 3 + 4 + 10 + 3 + 5 = 25.

C. Андрюша и разноцветные шарики

графы Деревья жадные алгоритмы поиск в глубину и подобное *1600

Андрюша каждый день с самого детства ходит через городской парк. Дорожки и полянки парка все время казались ему слишком одинаковыми, и однажды он решил украсить их и сделать разнообразными.

Парк состоит из n полянок, которые соединены между собой (n - 1) двусторонними дорожками, причем от каждой полянки можно дойти по дорожкам до любой другой. Андрюша решил на каждой полянке повесить один цветной шарик. Цвета шариков задаются целыми положительными числами, начиная с 1. Чтобы парк стал более разнообразным, Андрюша решил выбирать цвета шариков по-особенному. А именно, он хочет развесить шарики так, чтобы для любых трех попарно различных полянок a, b и c таких, что a и b соединены дорожкой, и b и c соединены дорожкой, цвета шариков на этих полянках были попарно различными.

Чтобы не тратить много денег на покупку шариков, Андрюша хочет использовать как можно меньше различных цветов. Так как Андрюша не очень силен в программировании, он просит вас помочь ему решить эту задачу.

Входные данные

В первой строке находится одно целое число n (3 ≤ n ≤ 2·105) — число полянок в парке.

В каждой из следующих (n - 1) строк находятся два целых числа x и y (1 ≤ x, y ≤ n) — номера двух полянок, соединенных очередной дорожкой.

Гарантируется, что от любой полянки можно добраться до любой другой по дорожкам.

Выходные данные

В первой строке выведите одно целое число k — минимальное количество цветов, которое необходимо использовать Андрюше.

Во второй строке выведите n целых чисел, i-е из которых равняется цвету шарика, который нужно повесить на i-й полянке. Каждое из чисел должно быть в пределах от 1 до k.

Примечание

В первом примере из условия парк состоит из трех полянок, которые последовательно соединены: 1 → 3 → 2. Значит, цвета шариков на каждой полянке должны быть попарно различны.

Иллюстрация к первому примеру.

Во втором примере в парке можно найти следующие тройки полянок, соединенных последовательно:

  • 1 → 3 → 2
  • 1 → 3 → 4
  • 1 → 3 → 5
  • 2 → 3 → 4
  • 2 → 3 → 5
  • 4 → 3 → 5
Отсюда мы видим, что каждая пара полянок лежит в какой-нибудь тройке, а значит цвета шариков на всех полянках должны быть попарно различны.
Иллюстрация ко второму примеру.

В третьем примере есть следующие тройки:

  • 1 → 2 → 3
  • 2 → 3 → 4
  • 3 → 4 → 5
Это значит, что одного или двух цветов недостаточно, а для трех цветов ответ существует и приведен в примере.
Иллюстрация к третьему примеру.

D. Иннокентий и футбольная лига

2-sat графы жадные алгоритмы кратчайшие пути реализация Строки *1900

Иннокентий — президент только что созданной футбольной лиги в Байтландии. Первая задача, которая стоит перед ним — обеспечить трансляцию всех матчей лиги по телевидению. Как вы, возможно, знаете, во время футбольного матча на экране отображаются сокращенные названия команд и текущий счет. Конечно, будет странно, если сокращенные названия клубов соперников совпадут, поэтому Иннокентий должен придумать. как сократить название каждого из клубов лиги до трех букв так, чтобы у всех команд лиги были разные названия.

Название каждого клуба состоит из двух слов: названия команды и города, в котором располагается клуб, например, «DINAMO BYTECITY». Иннокентий не хочет сильно искажать название, поэтому он хочет выбрать сокращенное название для каждого из клубов таким образом, чтобы:

  1. либо сокращенное название клуба совпадало с первыми тремя буквами названия команды, например, для вышеприведенный команды это «DIN»,
  2. либо первые две буквы сокращенного названия клуба совпадали с первыми двумя буквами названия команды, а третья — с первой буквой города команды. Например, для вышеприведенный команды это «DIB».

Кроме этого, если для какой-то команды x выбран второй вариант названия, то не должно быть команды, у которой выбран первый вариант сокращенного названия, совпадающий с первым вариантом названия команды x. Например, если сокращенное название вышеприведенной команды это «DIB», то никакая команда, у которой выбран первый вариант сокращенного названия, не должна иметь сокращенного названия «DIN». При этом возможно, что какая-то команда получит название «DIN», где «DI» — первые две буквы названия команды, а «N» — первая буква города. Конечно, никакие две команды не должны иметь одинакового сокращенного названия.

Помогите Иннокентию выбрать сокращенное название для каждой из команд. Если это невозможно, сообщите об этом. Если возможных ответов несколько, Иннокентия устроит любой из них. Если для некоторой команды совпадают оба варианта сокращенного названия, то Иннокентий все равно будет формально считать, что выбран только один из этих вариантов.

Входные данные

В первой строке находится единственное целое число n (1 ≤ n ≤ 1000) — число футбольных клубов в лиге.

В каждой из следующих n строк находятся два слова — название команды и название города очередного клуба. И название команды, и название города состоят из заглавных букв латинского алфавита и имеют длину не менее 3 и не более 20.

Выходные данные

Если выбрать сокращенные названия, удовлетворив требованиям Иннокентия, невозможно, выведите единственную строку «NO».

Иначе в первую строку выведите «YES». Далее выведите n строк, в каждой строке выведите выведите сокращенное название очередного клуба. Выводите клубы в том же порядке, в каком они заданы во входных данных.

Если возможных ответов несколько, выведите любой.

Примечание

В первом примере можно выбрать первый вариант названия для обеих команд.

Во втором примере невозможно подобрать названия, т. к. по условию нельзя у одной команды выбрать первый вариант названия, а у второй выбрать второй вариант названия, если первые варианты названий у этих команд совпадают.

В третьем примере можно выбрать вторые варианты названий у первых двух команд, и первый вариант — у третьей команды.

В четвертом примере обратите внимание на то, что разрешается, чтобы выбранное название некоторой команды x совпадало с первым вариантом названия y, если первый вариант названия x не совпадает с первым вариантом названия y.

B. Антон и занятия

жадные алгоритмы сортировки *1100

Антону нравятся шахматы. А еще ему нравится программирование. Неудивительно, что он решил посещать занятия по шахматам и по программированию.

У Антона есть n вариантов, когда он будет заниматься шахматами, i-й вариант задается отрезком времени (l1, i, r1, i). Также у него есть m вариантов, когда он будет заниматься программированием, i-й вариант задается отрезком времени (l2, i, r2, i).

Антону необходимо выбрать ровно один из n возможных отрезков времени, когда он будет заниматься шахматами и ровно один из m возможных отрезков времени, когда он будет заниматься программированием. Ему хочется побольше отдохнуть между занятиями, поэтому из всех возможных пар отрезков он хочет выбрать ту, расстояние между отрезками в которой как можно больше.

Расстоянием между двумя отрезками (l1, r1) и (l2, r2) будем называть минимально возможное расстояние между точкой на первом отрезке и точкой на втором отрезке, то есть минимально возможное |i - j|, где l1 ≤ i ≤ r1 и l2 ≤ j ≤ r2. В частности, если отрезки пересекаются, то расстояние между ними равно 0.

Антону интересно, сколько времени он сможет отдохнуть между занятиями в лучшем случае. Помогите ему найти это число!

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 200 000) — количество отрезков времени, когда Антон может заниматься шахматами.

В каждой из следующих n строк находятся целые числа l1, i и r1, i (1 ≤ l1, i ≤ r1, i ≤ 109) — i-й отрезок времени, когда Антон может заниматься шахматами.

В следующей строке входных данных записано целое число m (1 ≤ m ≤ 200 000) — количество отрезков времени, когда Антон может заниматься программированием.

В каждой из следующих m строк находятся целые числа l2, i и r2, i (1 ≤ l2, i ≤ r2, i ≤ 109) — i-й отрезок времени, когда Антон может заниматься программированием.

Выходные данные

Выведите одно целое число — максимально возможное расстояние между отрезками.

Примечание

В первом примере Антон может заниматься шахматами в отрезок времени (2, 3), а программированием — в отрезок времени (6, 8). Нетрудно заметить, что в этом случае расстояние между отрезками равно 3.

Во втором примере какую бы Антон пару отрезков не выбрал, они будут пересекаться. Поэтому ответ — 0.

B. Не бойся

жадные алгоритмы математика реализация *1300

С того момента, как гигантские головы появились в небе, все человечество в опасности, поэтому все Рики и Морти из всех параллельных вселенных собираются в группы, чтобы найти решение, чтобы избавиться от гигантских голов.

Всего есть n параллельных вселенных, участвующих в этом событии (n Риков и n Морти). То есть в каждой из n вселенных есть один Рик и один Морти. Они собираются в m групп. Каждый человек может быть в нескольких группах, и каждая группа может содержать произвольное количество людей.

Рики и Морти зарегистрировались онлайн в этих группах. Также человек может вступить в группу больше одного раза (разработчик этого сайта не рассмотрел эту возможность).

Лето из вселенной #1 знает, что в каждой параллельной вселенной (включая это лето) ровно один из Рика и Морти из этой вселенной предатель и ровно один верен, но никто не знает кто именно. Лето знает, что мы обречены, если существует группа, в которой каждый участник предатель (они спланируют и уничтожат мир).

Лето знает, что если есть вероятность того, что миру конец (иначе говоря, есть группа, в которой все участники предатели), то оно должно немедленно отменить это событие. Поэтому оно хочет знать отменять ли событие. Вы должны ответить ему да только в том случае, если существует хотя бы один сценарий (из 2n возможных сценариев, 2 возможных сценария для того, кому быть предателем в каждой вселенной) такой, что миру наступит конец.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 104) — количество вселенных и количество групп соответственно.

Следующие m строк содержат информацию о группах. i-я из них сначала содержит целое число k (количество раз, которое кто-то вступил в i-ю группу, k > 0), за которым следует k целых чисел vi, 1, vi, 2, ..., vi, k. Если vi, j отрицательное, это значит, что Рик из вселенной номер  - vi, j вступил в группу, иначе это значит, что Морти из вселеннй номер vi, j вступил в неё.

Сумма всех k по всем группам не превышает 104.

Выходные данные

В единственной строке выведите ответ на вопрос Лета. Выведите «YES», если оно должно отменить событие, иначе «NO».

Примечание

В первом тестовом примере 1-я группа содержит только Рика из вселенной номер 3, поэтому в случае, если он предатель, тогда все участники его группы предатели, и поэтому Лето должно отменить событие.

A. Игра в автобусе

жадные алгоритмы *1200

После того как лиса Кейл выиграла онсайт-раунд известного соревнования по программированию, она поехала домой в свой замок на автобусе. Проезд стоил 220 йен. В автобусе она встретила кролика Ханако, и они решили сыграть в следующую игру.

  • В начале игры они собрали в кучу монеты: x монет по 100 йен каждая и y монет по 10 йен каждая.
  • Ходили они по очереди, лиса Кейл начинала игру.
  • На каждом ходу игрок должен брать ровно 220 йен из стопки монет. Если ходила Кейл и существовало более одного способа выбрать 220 йен, то она выбирала такой набор монет, в котором количество монет по 100 йен максимально. Если ходил кролик Ханако и существовало более одного способа выбрать 220 йен, то он выбирал такой набор монет, что он содержал наибольшее количество монет по 10 йен.
  • Тот игрок, кто не смог выбрать ровно 220 йен — проиграл.

Напишите программу, которая определит победителя по заданным x и y.

Входные данные

Единственная строка входных данных содержит целые числа x (0 ≤ x ≤ 106) и y (0 ≤ y ≤ 106), которые разделены пробелом.

Выходные данные

В случае победы лисы Кейл выведите «Ciel». В противном случае, выведите «Hanako».

Примечание

Первый ход делает лиса Кейл, она выбирает две монеты по 100 йен и две монеты по 10 йен. Второй ход (его делает кролик) — кролик выбирает одну монету в 100 йен и двенадцать монет по 10 йен. На третьем ходу Кейл не может выбрать ровно 220 йен, таким образом она проигрывает.

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».

C. Поделись на три!

дп жадные алгоритмы математика теория чисел *2000

На доске записано целое положительное число n, не содержащее лишних лидирующих нулей и состоящее не более чем из 105 цифр. Необходимо стереть минимальное количество цифр таким образом, чтобы получить красивое число.

Число называется красивым, если оно записано так, что содержит хотя бы одну цифру, не содержит лишних лидирующих нулей и число делится нацело на 3. Например, 0, 99, 10110 — красивые, а 00, 03, 122 — не являются красивыми.

Напишите программу, которая по заданному числу n найдет такое красивое число, которое можно получить из заданного путем вычеркивания минимального количества цифр, или сообщит, что ответа не существует. Вычеркивать из n можно произвольный набор цифр, например, эти цифры не обязаны идти подряд.

Если невозможно получить какое-либо красивое число, то выведите -1. Если ответов несколько, то выведите любой.

Входные данные

В единственной строке задано целое положительное число n (1 ≤ n < 10100000). Заданная запись числа n не содержит лишних лидирующих нулей.

Выходные данные

Выведите единственное число — любое красивое число, полученное вычеркиванием минимального количества цифр. Если ответ не существует, то выведите  - 1.

Примечание

В первом примере для получения числа, которое делится нацело на 3, достаточно удалить только первую цифру. Однако тогда в числе будет присутствовать лишний лидирующий ноль, который недопустим. Следовательно, минимальное количество цифр, которые надо стереть, равно двум.

E. Разноцветные шары

жадные алгоритмы математика теория чисел *2500

На столе стоят n коробок с разноцветными шарами. Цвета пронумерованы от 1 до n. В i-й коробке лежит ai шаров i-го цвета. Требуется разбить шары на минимальное количество наборов таких, что:

  • каждый шар принадлежит ровно одному набору,
  • каждому набору принадлежит хотя бы один шар,
  • в каждом наборе все шары одного цвета,
  • размеры любых двух наборов отличаются не более чем на 1.

Выведите искомое минимальное количество наборов.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 500).

Во второй строке задано n целых чисел a1, a2, ... , an (1 ≤ ai ≤ 109).

Выходные данные

Выведите одно число — минимальное возможное количество наборов.

Примечание

В первом примере можно разбить шары на следующие наборы: первую коробку — на набор из 4 шаров, вторую — на наборы из 3 и 4 шаров и третью — на два набора из 4 шаров.

C. Название компании

жадные алгоритмы игры сортировки *1800

Клиент банка Олег и аналитик Игорь — хорошие друзья. Однако, иногда они спорят по мелочам. Недавно они основали новую компанию, но испытывают трудности с выбором названия для компании.

Чтобы разрешить спор, они решили сыграть в игру. Название компании будет состоять из n букв. У Олега и Игоря есть по одному набору из n букв (наборы могут содержать одну и ту же букву несколько раз, наборы могут отличаться). Изначально название компании состоит из n знаков вопроса. Олег и Игорь ходят по очереди, Олег ходит первым. На каждом ходу игрок выбирает одну букву c, имеющуюся у него в наборе, и заменяет один любой знак вопроса на эту букву c. Затем одна такая буква c исчезает из его набора. Игра оканчивается, когда все знаки вопроса заменены на какие-то буквы.

Например, предположим, у Олега есть набор букв {i, o, i}, а у Игоря есть набор букв {i, m, o}. Одна из возможных игр приведена ниже:

Изначально название компании равно ???.

Олег заменяет второй знак вопроса на «i». Название компании теперь ?i?. Набор букв Олега теперь равен {i, o}.

Игорь заменяет третий знак вопроса на «o». Название компании теперь ?io. Набор букв Игоря теперь равен {i, m}.

Наконец, Олег заменяет первый знак вопроса на «o». Название компании теперь oio. Набор букв Олега равен {i}.

В итоге название компании равно oio.

Олег хочет, чтобы название компании было лексикографически как можно меньше, а Игорь хочет, чтобы название компании было лексикографически как можно больше. Каким будет название компании, если Олег и Игорь играют оптимально?

Строка s = s1s2...sm лексикографически меньше строки t = t1t2...tm (если s ≠ t), если si < ti, где i — наименьший индекс такой, что si ≠ ti (т.е. sj = tj для всех j < i).

Входные данные

Первая строка содержит строку s длины n (1 ≤ n ≤ 3·105). Все символы строки — строчные латинские буквы. Строка описывает множество букв в наборе Олега.

Вторая строка содержит строку t длины n. Все символы строки — строчные латинские буквы. Строка описывает множество букв в наборе Игоря.

Выходные данные

Выведите строку из n строчных латинских букв — название компании при условии, что Олег и Игорь играют оптимально.

Примечание

Одна из оптимальных игр в первом примере:

  • Изначально название компании равно ???????.
  • Олег заменяет первый знак вопроса на «f». Название компании становится f??????.
  • Игорь заменяет второй знак вопроса на «z». Название компании становится fz?????.
  • Олег заменяет третий знак вопроса на «f». Название компании становится fzf????.
  • Игорь заменяет четвертый знак вопроса на «s». Название компании становится fzfs???.
  • Олег заменяет пятый знак вопроса на «i». Название компании становится fzfsi??.
  • Игорь заменяет шестой знак вопроса на «r». Название компании становится fzfsir?.
  • Олег заменяет седьмой знак вопроса на «k». Название компании становится fzfsirk.

Во втором примере независимо от того, как играют друзья, название компании всегда получится равным xxxxxx.

F. Восстановление последовательности

битмаски жадные алгоритмы Структуры данных *2800

Однажды у Зейна была хорошая последовательность a из n целых чисел a1, a2, ..., an, но он ее потерял.

Последовательность называется хорошей, если и только если все ее элементы — целые неотрицательные числа, не превосходящие 109.

Однако, Зейн помнит, что он играл с последовательностью, применяя к ней m операций.

Было два типа операций:

1. Найти максимальное значение среди чисел с индексами i такими, что l ≤ i ≤ r, по данным l и r.

2. Присвоить значение d элементу последовательности с индексом k, по данным k и d.

После того, как он поиграл с последовательностью, он восстановил массив до исходного состояния. Это значит, что пропали изменения в последовательности a, внесенные операциями типа 2. После этого Зейн потерял последовательность.

К счастью, Зейн помнит все операции, их порядок, а также результат всех операций типа 1, которые оказались различными. Кроме этого, Зейн знает, что среди всех хороших последовательностей, которые произвели бы те же результаты после применения этих операций в соответствующем порядке, последовательность a имела наибольшую красоту.

Красота последовательности — это побитовый OR всех элементов последовательности. Например, красота последовательности Зейна a равняется a1 OR a2 OR ... OR an.

Зейн понимает, что не всегда возможно точно восстановить потерянную последовательность по данной информации, поэтому он будет доволен получить любую хорошую последовательность b, состоящую из n целых чисел b1, b2, ..., bn такую, что:

1. она даст такой же результат при применении данных операций;

2. имеет такую же красоту, как и последовательность Зейна a.

Если такая последовательность существует, найдите ее. Иначе сообщите, что Зейн запомнил что-то неправильно.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 3·105) — число элементов в последовательности Зейна и число операций, соответственно.

Строка i из следующих m строк начинается с одного целого числа ti () — типа i-й операции.

Если операция типа 1 (ti = 1), то далее три числа li, ri и xi следуют (1 ≤ li ≤ ri ≤ n, 0 ≤ xi ≤ 109) — параметры операции и максимальный элемент среди элементов с индексами от li до ri, включительно.

Если операция типа 2 (ti = 2), то далее следуют два целых числа ki и di (1 ≤ ki ≤ n, 0 ≤ di ≤ 109), что означает, что элемент с индексом ki должен стать равным di после этой операции.

Гарантируется, что xi ≠ xj для всех пар (i, j) таких, что 1 ≤ i < j ≤ m, и ti = tj = 1.

Операции даны в том порядке, в котором они применялись. То есть, первой дана операция, которая применялась первой, и так далее.

Выходные данные

Если не существует подходящей хорошей последовательности, выведите «NO» (без кавычек) в единственной строке.

Иначе, выведите «YES» (без кавычек) на первой строке, и n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 109) на второй строке.

Если существует несколько ответов, выведите любой из них.

Примечание

В первом примере легко показать, что данная хорошая последовательность подходит. В частности, ее красота равна 19 OR 0 OR 0 OR 0 OR 1  =  19.

Во втором примере ясно, что две операции противоречат друг другу, поэтому не существует подходящей хорошей последовательности.

B. Нечетная сумма

дп жадные алгоритмы реализация *1400

Дана последовательность из n целых чисел a1, a2, ..., an. Необходимо найти такую её подпоследовательность, что её сумма нечётна и максимальна по всем таким подпоследовательностям. Гарантируется, что в заданной последовательности найдется подпоследовательность с нечетной суммой.

Подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов.

Напишите программу, которая найдет сумму искомой подпоследовательности.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105).

Во второй строке задано n целых чисел a1, a2, ..., an ( - 104 ≤ ai ≤ 104). В данной последовательности есть хотя бы одна подпоследовательность с нечетной суммой.

Выходные данные

Выведите сумму искомой подпоследовательности.

Примечание

В первом примере сумма второго и четвертого элементов равна 3.

C. Минимальная строка

жадные алгоритмы Строки Структуры данных *1700

На день рождения Пете подарили строку s длиной до 105 символов. Он взял еще две пустые строки t и u и решил сыграть в игру. По правилам в игре допускается два варианта ходов:

  • Изъять символ из начала строки s и приписать его в конец строки t.
  • Изъять символ из конца t и приписать его в конец строки u.

В результате Петя хочет, чтобы строка u была лексикографически минимальна, а s и t — пусты.

Напишите программу, которая поможет Пете выиграть в игру.

Входные данные

В единственной строке задана непустая строка s (1 ≤ |s| ≤ 105), состоящая из строчных латинских букв.

Выходные данные

Выведите полученную строку u.

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, если решения не существует.

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.

E. Украшения для аквариума

жадные алгоритмы Структуры данных *2500

Аркадий и Маша хотят выбрать украшения для своего общего аквариума в игре Fishdom. Всего имеется n доступных украшений, каждое из которых стоит некоторое количество монет. Для выполнения задания Аркадий и Маша должны выбрать ровно m из данных украшений, причем, конечно, они собираются потратить как можно меньше монет.

Есть одна трудность: Маше нравятся некоторые a из данных украшений, а Аркадию – некоторые b. При этом некоторые украшения могут не нравиться ни Аркадию, ни Маше, или, наоборот, нравиться обоим. Ребята хотят выбрать украшения так, чтобы каждому нравились хотя бы k из выбранных. Помогите Маше и Аркадию найти минимальную сумму монет, которую придется потратить для этого.

Входные данные

В первой строке заданы три натуральных числа n, m и k (1 ≤ n ≤ 200000, 1 ≤ m ≤ n, 1 ≤ k ≤ n) — количество доступных украшений, сколько украшений надо выбрать, сколько украшений должно понравиться каждому.

Во второй строке заданы n натуральных чисел c1, c2, ..., cn (1 ≤ ci ≤ 109) — стоимости украшений.

В третьей строке дано число a (1 ≤ a ≤ n) — количество украшений, которые нравятся Маше. В четвертой строке даны a различных чисел x1, x2, ..., xa (1 ≤ xi ≤ n) — номера украшений, которые нравятся Маше.

В следующих двух строках описаны номера украшений, которые нравятся Аркадию, в том же формате.

Выходные данные

Вывести единственное число — минимальное количество монет, которое придется потратить для выполнения всех условий. Если выполнить все требования не удастся, нужно вывести -1.

Примечание

В первом примере существует единственный вариант выбрать 3 украшения, удовлетворяющих всем требованиям — нужно взять украшения с номерами 1, 2, 3.

Во втором примере вместо украшения 3 можно взять украшение 4, которое тоже нравится Аркадию, но дешевле на одну монету.

В третьем примере невозможно выбрать 2 украшения так, чтобы они оба понравились и Маше, и Аркадию.

B. Весомые Клавиши

жадные алгоритмы Конструктив Строки *900

Вы нашли странную функцию f. Функция принимает две строки s1 и s2. Эти строки могут состоять только из строчных букв латинского алфавита, а их длины должны совпадать.

Результатом функции f будет другая строка той же длины. Символ i результата равен минимальному из i-го символа s1 и i-го символа s2.

Например, f(«ab», «ba») = «aa», а f(«nzwzl», «zizez») = «niwel».

Вы нашли две строки x и y совпадающей длины, состоящие только из строчных букв латинского алфавита. Найдите любую строку z такую, что f(x, z) = y, или выведите -1, если такой строки z не существует.

Входные данные

Первая строка содержит строку x.

Вторая строка содержит строку y.

Обе строки x и y состоят только из строчных букв латинского алфавита, x и y имеют одинаковую длину от 1 до 100.

Выходные данные

Если не существует строки z такой, что f(x, z) = y, выведите -1.

Иначе выведите строку z такую, что f(x, z) = y. Если существует несколько возможных ответов, выведите любой из них. Строка z должна быть той же длины, что и строки x и y и состоять только из строчных букв латинского алфавита.

Примечание

Первый пример разобран в условии.

Другое возможное решение во втором примере — «zizez»

В третьем примере нет решений. Другими словами, не существует строки z такой, что f(«ab», z) =  «ba».

A. Хайди и Библиотека (простая)

жадные алгоритмы *1800

Ваши поиски Хайди закончились – вы наконец-то нашли ее в библиотеке, и одета она была как человек. На самом деле Хайди уже очень много времени находилась там!

В её обязанности входит покупать и хранить книги в библиотеке, чтобы люди могли их брать и читать. Всего существует n различных книг, пронумерованных от 1 до n.

Рассмотрим работу библиотеки в течение n следующих дней. Хайди знает заранее, что в i-й день (1 ≤ i ≤ n) ровно один человек придет в библиотеку, захочет взять книгу номер ai, прочитает ее за несколько часов и вернет ее обратно в тот же день.

Хайди хочет удовлетворить всех своих посетителей, поэтому она должна быть уверена, что книга ai всегда есть в наличии в библиотеке в i-й день. Ночью (перед началом i-го дня) она может пойти в книжный магазин (который работает по ночам, чтобы избежать конкуренции с библиотекой) и купить любую книгу. Каждая из книг стоит 1 CHF. Конечно, если у нее в библиотеке уже есть книга нужная книга, Хайди не нужно покупать её ещё раз. Изначально в библиотеке нет ни одной книги.

Библиотека устроена таким образом, что размер хранилища библиотеки составляет k, другими словами в любой момент времени в библиотеке может находиться не более чем k книг. Если после покупки новой книги в библиотеке станет более, чем k книг, Хайди должна сначала избавиться от какой-нибудь уже имеющейся книги, чтобы освободить место для новой. Если позже ей понадобится книга, от которой она избавилась, ей нужно будет купить эту книгу снова.

Вам задано k и последовательность запросов посетителей на книги — a1, a2, ..., an. Перед вами стоит задача определить минимальную сумму (в CHF), которую Хайди нужно потратить, чтобы удовлетворить запросы всех посетителей.

Входные данные

В первой строке следуюь два числа n и k (1 ≤ n, k ≤ 80).

Во второй строке следуют n чисел a1, a2, ..., an (1 ≤ ai ≤ n), где ai равно номеру книги, которую хочет прочитать посетитель в i-й день.

Выходные данные

В единственной строке выведите минимальную стоимость покупки книг в книжном магазине, необходимых для удовлетворения запросов всех покупателей.

Примечание

В первом примере Хайди может хранить все книги постоянно. Следовательно, ей необходимо только купить книгу 1 перед первым днем и книгу 2 перед вторым днем.

Во втором примере в библиотеке может храниться только одна книга. Следовательно, Хайди необходимо купить книги перед первым днём, вторым днём и четвертым днём.

В третьем примере до покупки книги 3 перед третьим днём Хайди должна решить, от какой из книг избавиться (от 1-й или от 2-й). Конечно, Хайди должна оставить в библиотеке книгу 1, которая понадобится в четвёртый день.

B. Хайди и Библиотека (средняя)

жадные алгоритмы Структуры данных *1800

В то время как люди сегодня читают все меньше книг на бумаге, аудитория читателей среди сурков выросла. Хайди расширила хранилище библиотеки и теперь может обслуживать большее количество посетителей.

Входные данные

Входные данные те же, что и в простой версии задачи, но увеличены ограничения: 1 ≤ n, k ≤ 400 000.

Выходные данные

Выходные данные те же, что и в простой версии задачи.

M. Первоапрельская задача (простая)

жадные алгоритмы сортировки *1200

Сурки подготовили очень легкую задачу для HC2 этого года. В ней говорится о целых числах n, k и последовательности из n положительных чисел a1, a2, ..., an. Они также придумали красивую и захватывающую историю для условия задачи. Она объясняет, что означает ввод, что программа должна выводить, а также читается как хороший детектив.

Однако у меня, Хайди, этого не будет. В качестве моей сегодняшней шутки я удаляю историю из условия. И заменяю его этими двумя бесполезными абзацами. Теперь решите задачу, дураки!

Входные данные

В первая строке следует два целых числа n и k (1 ≤ k ≤ n ≤ 2200).

Во второй строке следует n целых чисел a1, ..., an (1 ≤ ai ≤ 104).

Выходные данные

Выведите число.

C. Максимальный НОД

жадные алгоритмы Конструктив математика *1900

Задано целое положительное число n. Ваша задача — составить такую строго возрастающую последовательность из k положительных чисел a1, a2, ..., ak, что их сумма равна n, а наибольший общий делитель максимален.

Наибольшим общим делителем последовательности называется такое наибольшее число, что каждый элемент последовательности делится на него нацело.

Если такую последовательность составить невозможно, то выведите -1.

Входные данные

В единственной строке записано два числа n и k (1 ≤ n, k ≤ 1010).

Выходные данные

Если ответ существует, то выведите k чисел — полученную последовательность. Иначе выведите -1. Если таких последовательностей несколько, выведите любую из них.

D. Объявление в журнал

Бинарный поиск жадные алгоритмы *1900

Главный журнал города предлагает своим читателям опцию публикации любого объявления на своих страницах. Отформатированное для журнала объявление выглядит следующим образом:

Через пробел записаны непустые слова из строчных и заглавных латинских букв.

В некоторых словах также стоят символы дефиса '-', означающие, что можно сделать перенос в данном слове сразу после дефиса. В слове может быть более одного дефиса.

Гарантируется, что никакие два пробела, два дефиса не стоят рядом. Пробел не стоит рядом с дефисом. Перёд первым словом и после последнего слова не стоят ни дефисы, ни пробелы.

При переносе часть слова до дефиса и сам дефис остаются на текущей строке, а оставшаяся часть слова переносится на следующую строку. Перенос также может осуществляться и между словами, тогда символ пробела остается на текущей строке. Смотрите примечание для лучшего понимания.

Объявление в журнале может занимать не более k строк и должно иметь наименьшую возможную ширину. Ширина объявления определяется максимальным количеством символов в строке (считаются буквы, пробелы и дефисы) в нем.

Напишите программу, которая определит минимальную ширину объявления.

Входные данные

В первой строке задано число k (1 ≤ k ≤ 105).

В следующей строке задан текст объявления — непустые слова из строчных и заглавных латинских букв и знаков дефиса, разделенные пробелами. Длина объявления не превосходит 106 символов.

Выходные данные

Выведите минимальную ширину объявления.

Примечание

Для наглядности все пробелы заменены точками.

В первом примере после применения всех переносов один из возможных вариантов объявления выглядит так:


garage.
for.
sa-
le

Во втором примере:


Edu-ca-
tion-al.
Ro-unds.
are.so.fun

A. Найти Амира

жадные алгоритмы Конструктив математика *1000

Несколько лет назад Саджад перешел из одной школы в другую. Теперь он хочет найти Амира — своего одноклассника и хорошего друга, но не знает, в какой школе он.

Всего есть n школ, они пронумерованы от 1 до n. Саджад может путешествовать между любой парой из них, чтобы это сделать, он должен купить билет. Билет между школами i и j стоит и может быть использован сколько угодно раз. Помогите Саджаду найти минимальную стоимость, которую он должен заплатить, чтобы посетить все школы. Он может начать в любой школе и закончить в любой школе.

Входные данные

Единственная строка содержит одно целое число n (1 ≤ n ≤ 105) — количество школ.

Выходные данные

Выведите одно целое число: минимальную стоимость билетов, необходимую для того, чтобы посетить все школы.

Примечание

В первом примере билет между двумя школами стоит .

B. Минимальное число шагов

жадные алгоритмы Комбинаторика математика реализация *1400

Дана строка из букв «a» и «b». Мы хотим произвести над ней некоторые операции. На каждом шагу мы выбираем одну из подстрок «ab» в данной строке и заменяем ее на строку «bba». Если в строке нет подстрок «ab», то мы останавливаемся. Выведите минимальное число шагов, которое требуется нам сделать перед тем, как мы остановимся, по модулю 109 + 7.

Строка «ab» встречается как подстрока, если где-то есть буква «b» сразу после буквы «a».

Входные данные

Единственная строка содержит изначальную строку, состоящую только из букв «a» и «b», имеющую длину от 1 до 106.

Выходные данные

Выведите минимальное число шагов по модулю 109 + 7.

Примечание

Первый пример: «ab»  →  «bba».

Второй пример: «aab»  →  «abba»  →  «bbaba»  →  «bbbbaa».

C. Раскраска мороженого

жадные алгоритмы Конструктив поиск в глубину и подобное *2200

Исарт и Модсарт пытались решить интересную задачу в момент, когда пришел Касра. Задыхаясь, он спросил: «Можете ли вы решить задачу, надо которой я думаю весь день?»

Дано дерево T из n вершин и m типов мороженого, типы пронумерованы от 1 до m. В каждая вершине дерева i есть набор из si типов мороженого. Вершины, в которых есть i-й (1 ≤ i ≤ m) тип мороженого, образуют связный подграф. Построим новый граф G из m вершин. Проведем ребро между вершинами v и u (1 ≤ u, v ≤ m, u ≠ v) в графе G, если и только если существует вершина в T такая, в ней есть и u-й, и v-й типы мороженого. Задача состоит в том, чтобы раскрасить вершины графа G в минимальное количество цветов так, чтобы никакие две соседние вершины не имели одинаковый цвет.

В этой задаче мы считаем, что пустое множество вершин образует связный подграф.

Модсарт не хочет прерывать размышления над предыдущей задачей, поэтому Исарт попросил вас решить эту новую задачу.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 3·105) — количество вершин в T и количество типов мороженого.

Далее следуют n строк, i-я из этих строк содержит сначала целое число si (0 ≤ si ≤ 3·105), а затем si различных целых чисел, каждое в пределах от 1 до m — типа мороженого в i-й вершине. Сумма величин si не превосходит 5·105.

Далее следуют n - 1 строк. Каждая из этих строк описывает очередное ребро дерева двумя целыми числами u и v (1 ≤ u, v ≤ n) — индексами вершин, соединенных этим ребром.

Выходные данные

В первой строке выведите одно целое число c — минимально возможное число цветов для раскраски графа G.

Во второй строке выведите m целых чисел, i-е из них должно быть номером цвета вершины номер i. Цвета должны быть в пределах от 1 до c.

Примечание

В первом примере первый тип мороженого присутствует только в первой вершине дерева, поэтому мы можем покрасить его в любой цвет. Второй и третий типы присутствуют оба во второй вершине, поэтому мы должны покрасить их в разные цвета.

Во втором примере цвета второго, четвертого и пятого типов мороженого обязательно должны быть различны.

A. Не NP

жадные алгоритмы математика *1000

Тавак И Саид — хорошие друзья. Саид очень смешной, сегодня он попросил Тавака решить следующую задачу вместо задачи о самом длинном пути.

Даны l и r. Для каждого целого числа между l и r, включительно, выпишем все их целочисленные делители кроме 1. Найдите число, которое мы выписали максимальное число раз.

Решите эту задачу, чтобы показать, что она не является NP-полной.

Входные данные

Первая строка содержит два целых числа l и r (2 ≤ l ≤ r ≤ 109).

Выходные данные

Выведите одно целое число: число, которое встречается в выписанных делителях максимальное число раз.

Если существует несколько ответов, выведите любой.

Примечание

Определение делителя: https://www.math10.com/ru/algebra/delimost/delimost.html

В первом примере среди чисел от 19 до 29 следующие делятся на 2: {20, 22, 24, 26, 28}.

Во втором примере среди чисел от 3 до 6 следующие делятся на 3: {3, 6}.

C. Чаепитие

жадные алгоритмы Конструктив сортировки *1400

Поликарп собрал всех своих друзей на чаепитие, чтобы отметить важное событие. У него есть n чашек, по одной для каждого из n друзей, объемами a1, a2, ..., an. Его чайник вмещает в себя w миллилитров чая (w ≤ a1 + a2 + ... + an). Поликарп хочет разлить чай по чашкам таким образом, чтобы:

  • Каждая чашка была заполнена не меньше, чем на половину своего объема
  • В каждой чашке было налито целое число миллилитров чая
  • Весь чай из чайника был разлит по чашкам
  • Ни один из друзей не расстроился

Известно, что обладатель чашки i расстроится, если существует такая чашка j, что в i налили меньше чая, чем в j, но ai > aj.

Для каждой чашки выведите, сколько миллилитров чая должно быть в нее налито. Если невозможно разлить весь чай таким образом, чтобы удовлетворить все условия, то выведите -1.

Входные данные

В первой строке записано два целых числа n и w (1 ≤ n ≤ 100, ).

Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100).

Выходные данные

Выведите для каждой чашки, сколько миллилитров чая должно быть в нее налито. Если ответов несколько, выведите любой из них.

Если невозможно разлить весь чай таким образом, чтобы удовлетворить все условия, то выведите -1.

Примечание

В третьем примере необходимо налить в первую чашку не меньше 5 миллилитров, во вторую — не меньше 4, в третью — не меньше 5. В сумме получается 14 миллилитров, что превосходит количество чая в чайнике.

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-го сувенира.

Выходные данные

Выведите единственное число — максимальную суммарную стоимость сувениров, которые Петя сможет донести на рынок.

C. Средний балл

жадные алгоритмы математика сортировки *1700

После реформы образования Поликарп изучает в школе всего два предмета — ОБЖ и физкультуру. За долгие месяцы четвертой четверти он получил n отметок по ним. Когда учителя ставили отметку в дневник, они не записывали за какой предмет оценка, а только ставили саму отметку.

Теперь пришла пора показывать дневник строгим родителям. Поликарп знает, что недавно на родительском собрании родителям сообщили, что он получил a отметок по ОБЖ и b отметок по физкультуре (a + b = n). Теперь Поликарп хочет вписать название предмета перед каждой отметкой так, чтобы:

  • было ровно a отметок по ОБЖ,
  • было ровно b отметок по физкультуре,
  • суммарный средний балл по обоим предметам был максимален.

Средним баллом по предмету называется сумма всех отметок по нему, деленных на их количество. Конечно, деление производится в вещественных числах без каких-либо округлений. Цель Поликарпа максимизировать x1 + x2, где x1 средний балл по первому предмету (ОБЖ), а x2 — по второму (физкультура).

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105), n — количество отметок в дневнике Поликарпа. Вторая строка содержит два целых положительных числа a, b (1 ≤ a, b ≤ n - 1, a + b = n). Третья строка содержит последовательность целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 5) — отметки Поликарпа.

Выходные данные

Выведите последовательность целых чисел f1, f2, ..., fn, где fi (1 ≤ fi ≤ 2) — номер предмета к которому следует отнести i-ую отметку. Если решений несколько, то выведите такое, что последовательность f1, f2, ..., fn — наименьшая лексикографически.

Последовательность p1, p2, ..., pn лексикографически меньше q1, q2, ..., qn, если существует такое j (1 ≤ j ≤ n), что pi = qi для всех 1 ≤ i < j, а pj < qj.

Примечание

В первом примере средний балл по первому предмету равен 4, а по второму — 4.5. Суммарный средний балл равен 8.5.

D. Фотогалерея Поликарпа

жадные алгоритмы Конструктив *2100

Поликарп любит не только фотографировать, но и показывать свои фотографии друзьям. На своем личном сайте недавно он установил виджет, который может отображать n фотографий с возможностью их прокрутки. В каждый момент времени виджет показывает ровно одну фотографию с возможностью перехода к предыдущей/следующей. С первой фотографии можно перейти на вторую или n-ую, со второй — на третью или первую и т.д. Таким образом навигация осуществляется по циклу.

Коллекция Поликарпа состоит из m фотоальбомов, i-ый фотоальбом содержит ai фотографий. Поликарп хочет, выбрать n фотографий и поместить их на новый виджет. Для того, чтобы посетителям сайта было интересно просматривать фото, он собирается разместить фотографии так, что никакие две фото с одного альбома не будут соседствовать (у каждой фотографии будет ровно два соседа, у первой — вторая и n-ая).

Помогите Поликарпу составить фотогалерею. Выберите n фотографий из его коллекции и разместите их в таком порядке, что никакие два фото из одного альбома не идут подряд.

Входные данные

В первой строке записаны два целых числа n и m (3 ≤ n ≤ 1000, 1 ≤ m ≤ 40), где n — количество фотографий на виджете, а m — количество альбомов. Вторая строка содержит m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 1000), где ai — количество фотографий в i-ом альбоме.

Выходные данные

Выведите единственное число -1, если решения не существует. В противном случае выведите n чисел t1, t2, ..., tn, где ti обозначает номер альбома i-ой фотографии на виджете. Альбомы нумеруются от 1 в порядке их задания во входных данных. Если решений несколько, то выведите любое.

B. Летняя распродажа

жадные алгоритмы сортировки *1300

Летом у школьников каникулы. Кто-то уезжает на отдых, кто-то — к бабушке или дедушке, а кто-то устраивается на подработку. Этим летом Нура решила, что хочет немного заработать, и устроилась в магазин продавцом-консультантом.

У магазина, где работает Нура, есть план на ближайшие n дней. Для каждого дня менеджер по продажам точно знает, что в i-й день будет выставлено на продажу ki единиц товара, и что ровно li покупателей придет за покупками в магазин в этот день. Кроме того, менеджер уверен, что каждый из пришедших покупателей покупает ровно одну единицу товара либо, если товаров в магазине не осталось, уходит из магазина без покупок. Более того, в связи с тем, что товары в магазине быстро портятся, менеджер установил следующее правило: если в какой-то из дней в магазине часть товаров осталась не купленной, то эти товары отправляются на свалку, а не остаются на следующий день.

В целях рекламы магазина менеджер предложил провести распродажу. Он дал Нуре задание выбрать из ближайших n дней любые f дней, в каждый из которых будет проведена распродажа. В каждый из этих f выбранных дней количество единиц товара, которое будет выставлено на продажу, будет удвоено. Таким образом, если в i-й день по плану магазин должен был выставить на продажу ki единиц товара, то, если сделать распродажу в этот день, на витрины магазина будет поставлено ki единиц товара. Следовательно, в дни распродажи существует возможность продать большее количество товара.

Задача Нуры — выбрать ровно f дней так, чтобы максимизировать суммарное количество проданных единиц товара. Она просит вас помочь ей с этой нелегкой задачей!

Входные данные

В первой строке следуют два целых числа n и f (1 ≤ n ≤ 105, 0 ≤ f ≤ n) — количество дней, на которые составлен план, а также количество дней, в которые будет проведена распродажа.

В следующих n строках следуют пары целых чисел ki, li (0 ≤ ki, li ≤ 109) — количество единиц товара, которое было запланировано выставить на продажу в i-й день, и количество покупателей, которые придут в магазин в i-й день.

Выходные данные

Выведите единственное число — максимальное количество единиц товара, которое сможет продать магазин.

Примечание

В первом примере можно выбрать для распродажи дни с номерами 2 и 4. В таком случае новые количества единиц товара будут равны [2, 6, 2, 2] соответственно. Тогда в первый день будет продана 1 единица товара, во второй — 5, в третий — 2, в четвертый — 2. Итого 1 + 5 + 2 + 2 = 10 единиц товара.

Во втором примере можно продать 5 единиц товара, если устроить распродажу в третий день.

A. Утраченное настроение прошлого

жадные алгоритмы Конструктив реализация сортировки *900

Несколько лет назад Хитаги встретила гигантского краба, которых украл весь ее вес. С тех пор она избегает контакта с кем-либо, так как боится, что ее секрет будет замечен.

Чтобы снова получить свой вес, необходима особая последовательность целых чисел. Эта последовательность была давно разрушена, однако, с помощью Каики, возможно, получится восстановить ее.

Необходимая последовательность a имеет длину n. Утерянные элементы в ней сейчас заменены нулями. У Каики есть еще одна последовательность b, длина которой k равна числу утерянных элементов в a (т.е. числу нулей). Хитаги должна заменить каждый ноль в a одним элементом из b так, что каждый элемент из b будет использован ровно один раз. Хитаги, однако, знает, что, кроме 0, ни одно число не встречается суммарно в a и b более одного раза.

Если получившаяся последовательность не является возрастающей, то она позволит вернуть Хитаги вес. Вам предстоит определить, возможно ли такое. Другими словами, вы должны определить, возможно ли заменить каждый ноль в последовательности a числом из последовательности b так, чтобы каждое число из b было использовано ровно единожды, и получившаяся последовательность не являлась возрастающей.

Входные данные

Первая строка содержит два положительных целых числа n (2 ≤ n ≤ 100) и k (1 ≤ k ≤ n) — длины последовательностей a и b, соответственно.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 200) — последовательность, имеющаяся у Хитаги и содержащая ровно k нулей.

Третья строка содержит k целых чисел b1, b2, ..., bk (1 ≤ bi ≤ 200) — элементы, которыми нужно заменить нули в последовательности Хитаги.

Гарантируется, что, кроме 0, ни одно целое число не встречается в a и b суммарно более чем один раз.

Выходные данные

Выведите «Yes», если возможно заменить нули в a элементами из b и сделать последовательность не возрастающей, и «No» иначе.

Примечание

В первом примере:

  • Последовательность a имеет вид 11, 0, 0, 14.
  • Два элемента последовательности утеряны, возможными кандидатами в b являются 5 и 4.
  • Возможно получить две последовательности: 11, 5, 4, 14 и 11, 4, 5, 14, они обе подходят. Поэтому ответ «Yes».

Во втором примере единственная возможная последовательность — 2, 3, 5, 8, 9, 10, которая является возрастающей, следовательно, не подходит.

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. Тогда ваш ответ будет зачтен, если .

Примечание

Первый пример соответствует рисунку из условия.

A. Карен и игра

жадные алгоритмы Перебор реализация *1700

На пути к школе Карен зациклилась на одной игре в телефоне!

Игра описывается следующими правилами. На каждом уровне есть таблица с n строками и m столбцами. Каждая ячейка содержит изначально число 0.

Ход состоит в выборе одной строки или одного столбца и прибавлении 1 ко всем ячейкам этого столбца или строки.

Чтобы пройти уровень, нужно, чтобы после всех ходов число в j-й ячейке i-го столбца равнялось gi, j.

Карен застряла на одном из уровней, и хочет пройти его за минимальное число ходов. Помогите ей!

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и количество столбцов в таблице, соответственно.

Следующие n строк содержат по m целых чисел каждая. Число j в i-й из этих строк равняется gi, j (0 ≤ gi, j ≤ 500).

Выходные данные

Если уровень нельзя пройти, выведите -1.

Иначе выведите на первой строке одно число k — минимальное число ходов, необходимое для прохождения уровня.

Каждая из следующих k строк должна содержать описание одного хода в одном из следующих форматов:

  • row x, (1 ≤ x ≤ n) — ход «выбрать строку x».
  • col x, (1 ≤ x ≤ m) — ход «выбрать столбец x».

Если есть несколько оптимальных решений, выведите любое.

Примечание

В первом примере таблица имеет 3 строки и 5 столбцов. Карен может выполнить следующие 4 хода, чтобы пройти уровень:

Во втором примере в таблице 3 строки и 3 столбца. Ясно, что невозможно пройти уровень, так как любой ход создаст три 1 в таблице, но необходимо получить только одну 1 по центру.

В третьем тесте у Карен таблица с 3 строками и 3 столбцами. Она может выполнить следующие 3 хода, чтобы пройти уровень:

Это не единственное решение, например, другое — выполнить ходы col 1, col 2, col 3.

A. Мистер Б и скучная игра

жадные алгоритмы игры *2200

К сожалению, была найдена ошибка в доказательстве авторского решения этой задачи. На данный момент нам неизвестно абсолютно верное решение. Тем не менее вы можете сдавать эту задачу, но в случае, если ваше решение пройдет все тесты, оно не будет гарантированно верным. Если ваше решение прошло все тесты и вы уверены в доказательстве его корректности, вы можете написать одному из авторов соревнования об этом.

Свободными вечерами Мистеру Б иногда нечем заняться, потому он ищет различные игры в интернете. И вот в один день он нашел интересную игру, в которой предлагалось сыграть против инопланетян.

Все символы в данной игре — строчные буквы английского алфавита. В данной игре участвуют два игрока: Мистер Б и его соперник.

Первоначально игрокам задана строка s из a первых символов английского алфавита в алфавитном порядке (при a = 5, например, строка s выглядит следующим образом: «abcde»).

Далее каждый игрок по очереди дописывает в конец строки s по несколько букв. Первым ходом ходит Мистер Б.

Мистер Б может добавить в конец строки ровно b произвольных букв. Его противник — ровно a букв.

Мистер Б быстро догадался, что его противник — никакой не инопланетянин, а компьютер, действующий по простой программе. Компьютер на очередном своем шаге рассматривает суффикс из последних a символов строки s и для своего хода выбирает строку t длины a такую, что все символы в t попарно различны, никакой из символов строки не встречается в рассматриваемом суффиксе, и из всех возможных вариантов t — лексикографически минимальный (при a = 4 и суффиксе «bfdd» компьютер выберет строку t, равную «aceg»). Далее выбранную строку t компьютер просто добавляет в конец строки s.

Мистеру Б уже надоело играть с компьютером, а потому его заинтересовал вопрос: какое минимальное количество различных символов могло быть в строке s на отрезке с символа номер l по символ номер r, включительно. Символы строки s нумеруется слева направо, начиная с 1.

Входные данные

В первой и единственной строке задано четыре натуральных числа через пробел: a, b, l и r (1 ≤ a, b ≤ 12, 1 ≤ l ≤ r ≤ 109) — количество букв, которые добавляют каждый из игроков, и границы интересующего Мистера Б отрезка, соответственно.

Выходные данные

Выведите единственное число — минимально возможное количество различных символов в отрезке с символа номер l по символ номер r в строке s.

Примечание

В первом примере одной из оптимальных стратегий будет такая, при которой s = "abababab...", поэтому ответ равен 2.

Во втором примере может быть получена строка s = "abcdbcaefg...", нужный отрезок имеет вид "bcdbc", поэтому ответ равен 3.

В третьем примере может быть получена строка s = "abczzzacad...", нужный отрезок имеет вид "zzz", поэтому ответ равен 1.

C. Окабэ и коробки

Деревья жадные алгоритмы Структуры данных *1500

Окабэ и хакер Дару складывают коробки в стопку одну поверх другой. Всего есть n коробок, пронумерованных от 1 до n. Изначально коробок в стопке нет.

Окабэ, любящий командовать, дает Дару 2n команд: n из них — добавить некоторую коробку на верх стопки, а n оставшихся — убрать верхнюю коробку из стопки и выкинуть ее. Окабэ хочет, чтобы Дару выкидывал коробки в порядке от 1 до n. Конечно, это означает, что возможно такое, что Дару не сможет выполнить некоторые из команд убрать, потому что необходимая коробка находится не наверху стопки.

Поэтому Дару может иногда, когда Окабэ отвернется, переупорядочить коробки в стопке как ему захочется. Он может сделать это в любой момент между командами Окабэ, но он не может добавлять или удалять коробки в процессе переупорядочивания.

Скажите Дару, сколько минимум раз ему необходимо переупорядочивать коробки, чтобы он мог успешно выполнить все команды Окабэ. Гарантируется, что каждая коробка добавляется в стопку раньше, чем потребуется ее убрать.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 3·105) — количество коробок.

Каждая из следующих 2n строк начинается со строки "add" или "remove". Если она начинается со строки "add", то далее следует целое число x (1 ≤ x ≤ n), и строка означает, что Дару должен добавить коробку с номером x на верх стопки. Иначе строка означает, что Дару должен убрать очередную коробку с верха стопки.

Гарантируется, что ровно n строк содержат операцию "add", все добавленные коробки различны, и ровно n строк содержат операцию "remove". Также гарантируется, что каждая коробка добавляется перед тем, как будет необходимо ее выкинуть.

Выходные данные

Выведите, какое минимальное число раз Дару должен переупорядочивать коробки, чтобы успешно выполнить все команды Окабэ.

Примечание

В первом примере Дару должен переупорядочивать коробки после добавления коробки 3 в стопку.

Во втором примере Дару должен переупорядочивать коробки после добавления коробки 4 и коробки 7 в стопку.

C. Хакер, собирай чемоданы!

Бинарный поиск жадные алгоритмы реализация сортировки *1600

Как известно, лучший способ отвлечься от чего-либо — заниматься своим любимым делом. Для хакера Лехи любимое дело это работа.

Чтобы не скучать, Леха начал усердно работать, то есть взламывать компьютеры по всему миру. За такое усердие начальство дало хакеру отпуск продолжительностью ровно x дней. Как известно, большинство людей предпочитают куда-нибудь уехать на время отпуска, поэтому Леха сразу пошёл в туристическое агенство. Там он выяснил, что осталось n непроданных путевок. i-я путевка характеризуется тремя числами li, ri, costi — день отъезда из Вичкополиса, день возврата в Вичкополис и стоимость путевки соответственно. Продолжительностью i-й путевки называют величину ri - li + 1.

При этом Леха хочет разделить свой отпуск на две части. Кроме того он хочет потратить как можно меньше денег. Более формально, Леха хочет выбрать ровно две путевки i и j (i ≠ j) так, чтобы они не пересекались, сумма их продолжительностей была равна ровно x, а суммарная стоимость была минимальна. Две путевки i и j не пересекаются, если выполняется хотя бы одно из условий: ri < lj или rj < li.

Помогите Лехе выбрать необходимые путевки!

Входные данные

В первой строке заданы два целых числа n и x (2 ≤ n, x ≤ 2·105) — количество путевок в туристическом агентстве и продолжительность отпуска соответственно.

В следующих n строках следуют по три целых числа li, ri и costi (1 ≤ li ≤ ri ≤ 2·105, 1 ≤ costi ≤ 109) — описание очередной путевки.

Выходные данные

Выведите одно целое число — минимальное количество денег, которые потратит Леха, либо  - 1, если невозможно выбрать две непересекающиеся путевки с суммарной продолжительностью ровно x.

Примечание

В первом примере примере Леха должен выбрать первую и третью путевки. Тогда их суммарная продолжительность будет равна (3 - 1 + 1) + (6 - 5 + 1) = 5, а суммарная стоимость будет равна 4 + 1 = 5.

Во втором примере продолжительность каждой из путевок равна 3, поэтому невозможно выбрать две путевки с суммарной продолжительностью равной 2.

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. Можно также в первом этапе оставить всех девушек в одной группе. Тогда произойдет сравнений. Очевидно, что лучше разбивать девушек на группы первым способом.

Тогда значение выражения это .

C. Multi-judge Solving

жадные алгоритмы реализация *1600

Макес решает задачи на Decoforces и множестве других онлайн платформ. Каждая задача характеризуется своей сложностью — целым положительным числом. Сложности измеряются одинаково на всех платформах (т.е. задача со сложностью d на Decoforces такая же трудная, как и задача со сложностью d на любой другой платформе).

Макес выбрал для решения n задач на Decoforces со сложностями a1, a2, ..., an. Он может решать задачи в произвольном порядке. Однако, чтобы решить задачу i со сложностью ai, надо заранее решить хотя бы одну задачу со сложностью (не имеет значения, на какой платформе).

Перед решением выбранного списка задач Макес уже решал задачи с максимальной сложностью k.

С заданными условиями легко заметить, что Макес не всегда может решить все выбранные задачи, какой бы порядок он не использовал. Поэтому он хочет решить некоторые задачи на других платформах так, чтобы завершить решение задач из своего списка.

Для каждого целого положительного y хотя бы на одной платформе помимо Decoforces существует задача со сложностью y.

Макес может решать задачи на любой платформе в любое время, не обязательно решать задачи из списка подряд одну за другой.

У Макеса не очень много свободного времени, поэтому он просит вас посчитать минимальное количество задач, которые ему потребуется решить на других платформах, чтобы решить все выбранные задачи на Decoforces.

Входные данные

В первой строке записаны два целых числа n, k (1 ≤ n ≤ 103, 1 ≤ k ≤ 109).

Во второй строке записаны n целых чисел, разделенных пробелами, a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите минимальное количество задач, которые Макесу потребуется решить на других платформах, чтобы решить все выбранные задачи на Decoforces.

Примечание

В первом примере Макес сначала решает задачи 1 и 2. Потом, чтобы решить задачу со сложностью 9, он должен сначала решить задачу со сложностью не меньше 5. Единственные доступные — сложности 5 и 6 на каких-то других платформах. Решение одной из этих задач даст Макесу возможность решить задачу 3.

Во втором примере он может решить каждую задачу с самого начала.

D. Подходящая замена

Бинарный поиск жадные алгоритмы реализация *1500

Даны две строки s и t, состоящие из строчных латинских букв, в строке s могут также встречаться символы '?'.

Пригодность строки s подсчитывается следующим способом:

Две любые буквы можно поменять местами, такую операцию можно проделывать неограниченное число раз над любой парой позиций. Среди всех полученных строк s выберите такую, что количество непересекающихся вхождений строки t в нее максимально. Пригодность — это полученное максимальное количество.

Замените все символы '?' строчными латинскими буквами таким образом, чтобы пригодность строки s была максимальна.

Входные данные

В первой строке записана строка s (1 ≤ |s| ≤ 106).

Во второй строке записана строка t (1 ≤ |t| ≤ 106).

Выходные данные

Выведите строку s с символами '?', замененными строчными латинскими буквами таким образом, чтобы пригодность этой строки была максимальна.

Если есть несколько строк с максимальной пригодностью, то выведите любую.

Примечание

В первом примере строка "baab" может быть преобразована в "abab", у которой пригодность равна 2. Значит и у строки "baab" такая же пригодность.

Во втором примере максимальная возможная пригодность равна 1, и таких строк несколько десятков, "azbz" — одна из них.

В третьем примере в строке нет символов '?', а ее пригодность равна 0.

E. Минимальные метки

графы жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

Задан ориентированный ацикличный граф из n вершин и m ребер. В нем нет петель и кратных ребер. Граф может быть несвязным.

Необходимо так расставить метки на вершинах, чтобы:

  • Метки образовывали корректную перестановку длины n. Это последовательность целых чисел, такая, что каждое число от 1 до n встречается в ней ровно один раз.
  • Если существует ребро от вершины v к вершине u, то labelv должно быть меньше labelu.
  • Перестановка должна быть лексикографически наименьшей среди всех подходящих.

Найдите последовательность, подходящую под все условия.

Входные данные

В первой строке записаны два целых числа n, m (2 ≤ n ≤ 105, 1 ≤ m ≤ 105).

В следующих m строках записаны по два целых числа v и u (1 ≤ v, u ≤ n, v ≠ u) — ребра в графе. Ребра ориентированы, граф не содержит циклов и кратных ребер.

Выходные данные

Выведите n чисел — лексикографически наименьшую корректную перестановку меток вершин.

A. Восстановление строки

жадные алгоритмы сортировки Строки Структуры данных *1700

У Ивана была строка s, состоящая из строчных букв латинского алфавита. Но его подруга Юля решила пошутить над ним и спрятала строку s. Иван решил, что не будет искать строку, а просто сделает новую.

Иван помнит о строке s следующую информацию. Он помнит, что строка ti встречается в строке s количество раз ki или больше, а также помнит ровно ki позиций, с которых начинается вхождение строки ti в строку s — это позиции xi, 1, xi, 2, ..., xi, ki. При этом количество строк ti, про которые помнит Иван, равно n.

Перед вами стоит задача восстановить лексикографически минимальную строку s такую, что она удовлетворяет всей информации, которую помнит Иван. Как строки ti, так и строка s могут содержать только строчные буквы латинского алфавита.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 105) — количество строк, о которых помнит Иван.

В следующих n строках следует информация о строках, которые помнит Иван. В i-й строке сначала следует непустая строка ti, затем следует положительное число ki, равное количество раз, которые строка ti встречается в строке s как минимум, а затем следует ki различных целых положительных чисел xi, 1, xi, 2, ..., xi, ki в возрастающем порядке — позиции, в которых начинаются вхождения строки ti в строку s. Гарантируется, что сумма длин строк ti не превосходит 106, 1 ≤ xi, j ≤ 106, 1 ≤ ki ≤ 106, а сумма всех ki не превосходит 106. Среди строк ti могут встречаться повторяющиеся.

Гарантируется, что входные данные непротиворечивы и ответ всегда существует.

Выходные данные

Выведите лексикографически минимальную строку, которая удовлетворяет всей информации, которую помнит Иван.

C. Трасса

графы жадные алгоритмы кратчайшие пути *2400

Вы уже точно знаете, что любимый спорт Валерия — биатлон. Благодаря Вашей помощи, он уже научился стрелять без промаха, и на огневом рубеже ему нет равных. Но теперь остается дело за малым — научиться быстрее всех преодолевать маршрут.

Карта трассы представляет собой прямоугольник размером n × m разбитый на клетки. Каждая клетка помечена маленькой латинской буквой (которая означает тип участка), исключение составляют клетка-старт (она помечена заглавной латинской буквой S) и клетка-финиш (она помечена заглавной латинской буквой T). Время перехода от одной клетки к другой равно 1 минуте, временем пути внутри клетки можно пренебречь. Из клетки можно перейти только в соседние по стороне, но запрещается выходить за пределы карты. Также на маршрут накладывается ограничение — запрещается посещать более k различных типов клеток (клетки одного типа можно посещать бесконечное количество раз). Клетки, помеченные символами S и T, не имеют типа, поэтому они не считаются. Но клетка S должна быть посещена ровно один раз — в самом начале, и клетка T должна быть посещена ровно один раз — в самом конце.

Ваша задача найти кратчайший по времени маршрут из клетки S в клетку T, а из всех кратчайших маршрутов нужно выбрать лексикографически минимальный. При сравнении маршрутов лексикографически следует их представлять как последовательность символов — типов участков.

Входные данные

В первой строке входного файла заданы три целых числа n, m и k (1 ≤ n, m ≤ 50, n·m ≥ 2, 1 ≤ k ≤ 4). Далее в n строках задана карта. Каждая строка имеет длину ровно m символов и состоит из строчных латинских букв и символов S и T. Гарантируется, что карта содержит ровно один символ S и ровно один символ T.

Претест 12 является одним из максимальных тестов в этой задаче.

Выходные данные

Если существует путь, удовлетворяющий условию, выведите его как последовательность символов — типов участков, символ S в начале и символ T в конце выводить не следует. Иначе выведите «-1» (без кавычек).

Обратите внимание, что эта последовательность может быть пустой. Этот случай присутствует в претестах. Вы можете ничего не выводить или выводить один символ конца строки. Оба варианта будут засчитаны за правильный ответ.

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 секунд все люди могут оказаться в офисе с ключами.

C. Прожорливая Кракозябра

жадные алгоритмы Комбинаторика математика Перебор *2700

Недавно в Мармеладном замке поселилась самая настоящая Кракозябра. И она постоянно не прочь чем-нибудь поживиться.

Любимым блюдом Кракозябры являются натуральные числа в медовом соусе, а точнее, нули в их десятичной записи. Другие цифры ей не по вкусу; мало того, от них у нее частенько случается несварение желудка. Поэтому прежде, чем приступить к трапезе, Кракозябра аккуратно раскладывает цифры числа в возрастающем порядке и съедает лишь нули (если они есть), а из оставшихся цифр формирует новое число, которое она презрительно отбрасывает как несъедобный хвост.

Так, например, если Кракозябра предпочтет полакомиться числом 57040, то несъедобный хвост будет равняться 457.

Сластене немного не по душе такое соседство, но ее природная гостеприимность не позволяет ей оставить Кракозябру без еды. У Сластены есть некоторый диапазон чисел от L до R, которыми она планирует накормить гостью. Помогите ей узнать, сколько различных несъедобных хвостов останется после ужина.

Входные данные

В первой строчке заданы два числа L и R — границы диапазона (1 ≤ L ≤ R ≤ 1018).

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В первом примере несъедобные хвосты — все числа от 1 до 9. Заметьте, что 10 и 1 дают одинаковые хвосты, равные 1.

Во втором примере Кракозябра сформирует уникальные несъедобные хвосты из всех чисел диапазона, кроме пары 45, 54. Таким образом, ответ равен (57 - 40 + 1) - 1 = 17.

B. Число на доске

жадные алгоритмы *1100

На доске было написано некоторое натуральное число, сумма цифр которого была не меньше k. Но вы немного отвлеклись, и кто-то изменил это число на n, заменив некоторые цифры другими. Известно, что длина числа не изменилась.

Вам необходимо определить минимальное количество цифр, в котором могут отличаться эти два числа.

Входные данные

Первая строка содержит целое число k (1 ≤ k ≤ 109).

Вторая строка содержит целое число n (1 ≤ n < 10100000).

Число n не содержит ведущих нулей. Гарантируется, что такая ситуация могла произойти.

Выходные данные

Выведите минимальное количество цифр, в котором могут отличаться изначальное число и n.

Примечание

В первом примере исходное число могло быть, например, 12.

Во втором примере сумма цифр n не меньше k. Исходное число могло не отличаться от n.

B. Игра рядов

жадные алгоритмы Перебор реализация *1900

Армия Дейенерис Таргариен состоит из k групп, i-я из групп состоит из ai солдат. Она хочет перевезти свою армию на другой берег моря, чтобы завладеть Железным троном. Для этого она купила самолет. В самолете n рядов по 8 мест. Будем называть места соседними, если они в одном ряду и это места {1, 2}, {3, 4}, {4, 5}, {5, 6}, {7, 8}.

Ряд в самолет

Дейенерис Таргариен хочет расположить свою армию так, чтобы солдаты из разных групп не сидели на соседних местах.

Ваша задача — определить, возможно ли рассадить её армию так, чтобы условие выше выполнялось.

Входные данные

Первоя строка содержит два целых числа n и k (1 ≤ n ≤ 10000, 1 ≤ k ≤ 100) — количество рядов и количество групп солдат, соответственно.

Вторая строка содержит k целых чисел a1, a2, a3, ..., ak (1 ≤ ai ≤ 10000), где ai обозначает количество солдат в i-й группе.

Гарантируется, что a1 + a2 + ... + ak ≤ 8·n.

Выходные данные

Если возможно расположить солдат в самолете, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете выводить каждую из букв в любом регистре.

Примечание

В первом примере Дейенерис может расположить солдат как показано на картинке.

Во втором примере невозможно рассадить солдат, так как солдат из первой группы всегда будет сидеть на соседнем месте с кем-то из второй группы.

В третьем примере Дейенерис может расположить первую группу на местах (1, 2, 7, 8), а второю группу — на оставшиеся места.

В четвертом примере она может расположить первые две группы на места (1, 2) и (7, 8), третью группу на место (3), а четвертую группу — на места (5, 6).

A. Леха и функция

жадные алгоритмы Комбинаторика математика сортировки теория чисел *1300

Леха очень любит всякие странности. Недавно ему понравилась функция F(n, k). Рассмотрим всевозможные k-элементные подмножества множества [1, 2, ..., n]. Для подмножества найдем минимальный элемент в нём. F(n, k) — это математическое ожидание минимального значения по всевозможным k-элементным подмножествам.

Но одна только функция его не интересует. Он хочет делать с ней интересные вещи. Мама принесла ему два массива A и B, каждый состоит из m целых чисел. Для всех i, j таких, что 1 ≤ i, j ≤ m, выполняется условие Ai ≥ Bj. Помогите Лехе переупорядочить числа в массиве A так, чтобы сумма была максимально возможной, где A' — уже переупорядоченный массив.

Входные данные

Первая строка входных данных содержит одно целое число m (1 ≤ m ≤ 2·105) — длина массивов A и B.

Следующая строка входных данных содержит m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 109) — описание массива A.

Следующая строка входных данных содержит m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 109) — описание массива B.

Выходные данные

Выведите m целых чисел a'1, a'2, ..., a'm — массив A', являющийся перестановкой массива A.

A. Разнообразие

жадные алгоритмы реализация Строки *1000

Вычислите, какое наименьшее число символов надо поменять в строке s, чтобы в ней стало не менее k различных букв, либо выведите, что это сделать невозможно.

Строка s состоит только из маленьких латинских букв, и заменять буквы можно также только на маленькие латинские.

Входные данные

Первая строка входных данных содержит строку s, состоящую только из маленьких латинских букв (1 ≤ |s| ≤ 1000, |s| означает длину строки s).

Вторая строка входных данных содержит целое число k (1 ≤ k ≤ 26).

Выходные данные

Выведите одну строчку с минимальным количеством букв, которые необходимо заменить, либо слово «impossible» (без кавычек), если это сделать невозможно.

Примечание

В первом примере в строке есть 6 различных букв, поэтому ничего менять не требуется.

Во втором примере в строке изначально есть 4 различных буквы: {'a', 'h', 'o', 'y'}. Для получения 5 различных букв необходимо заменить одну из букв 'o' на букву, которая в строке не встречается, например на {'b'}.

В третьем примере получить 7 различных букв невозможно, поскольку длина строки 6.

B. Люба и билет

жадные алгоритмы Перебор реализация *1600

У Любы есть билет, состоящий из 6 цифр. За один ход она может выбрать цифру в любой позиции и заменить её на произвольную другую цифру.

Люба хочет узнать, какое минимальное количество цифр в билете ей необходимо изменить, чтобы он стал счастливым.

Напомним, что билет является счастливым, если сумма первых трёх его цифр равняется сумме последних трёх его цифр.

Входные данные

Во входных данных задана строка, состоящая ровно из 6 символов, являющихся цифрами от 0 до 9 — номер билета Любы. Номер билета может начинаться с цифры 0.

Выходные данные

Выведите единственное число — минимальное количество цифр, которые необходимо изменить в билете, чтобы он стал счастливым.

Примечание

В первом примере билет уже является счастливым, поэтому ответ на тест — 0.

Во втором примере можно заменить цифры 4 и 5 на два нуля и получить счастливый билет. Можно легко увидеть, что ответа меньше добиться нельзя.

В третьем примере можно заменить любой ноль на 3. Очевидно, что невозможно добиться более оптимального ответа.

C. Два телевизора

жадные алгоритмы сортировки Структуры данных *1500

Поликарп — фанат телевидения.

Он выписал интересующие его передачи на сегодня. В его списке получилось n телешоу, i-е из них начинается в момент времени li и заканчивается в момент времени ri.

У Поликарпа есть два телевизора. Он может одновременно смотреть два различных телешоу по двум телевизорам, но каждый из телевизоров может показывать только одно шоу в один момент. Считайте, что если одно шоу заканчивается ровно в момент начала следующего, то на одном телевизоре их посмотреть не получится.

Поликарп хочет посмотреть все n телешоу! Достаточно ли ему двух телевизоров, чтобы осуществить задуманное?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 2·105) — количество телешоу в списке.

В следующих n строках заданы по два целых числа li и ri (0 ≤ li < ri ≤ 109) — время начала и конца шоу под номером i.

Выходные данные

Если Поликарп сможет посмотреть все шоу, используя только два телевизора, то выведите «YES» (без кавычек). В противном случае, выведите «NO» (без кавычек).

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.

Во втором примере Поликарп не совершил ни одного нарушения.

В третьем примере Поликарп должен не заметить ни одного знака «обгон запрещен», которые идут после знака «обгон разрешен».

B. Математическое телешоу

жадные алгоритмы Перебор *1800

Поликарп участвует в математическом телешоу. Ему предложены n задач, каждая из которых состоит из k подзадач, которые пронумерованы от 1 до k. За время tj минут он может решить подзадачу j любой из задач. Таким образом, время, которое необходимо на решение подзадачи зависит только от её номера, но не зависит от самой задачи. Поликарп может решать подзадачи в любом порядке.

За решение подзадачи произвольной задачи ему дается один балл. Таким образом, балл за задачу равен количеству её решенных подзадач. Кроме того, если Поликарп полностью решает задачу (то есть все её k подзадач), то он получает дополнительный балл. Таким образом, суммарный балл за полное решение задачи равен k + 1.

Всего у Поликарпа есть M минут. Какой наибольший балл он сможет набрать?

Входные данные

В первой строке записаны три целых числа n, k и M (1 ≤ n ≤ 45, 1 ≤ k ≤ 45, 0 ≤ M ≤ 2·109).

Следующая строка содержит k целых чисел — значения tj (1 ≤ tj ≤ 1000000), где tj — время решения j-й подзадачи в минутах для любой из задач.

Выходные данные

Выведите максимальное количество баллов, сколько сможет набрать Поликарп за M минут.

Примечание

В первом примере Поликарп может полностью справиться с первой задачей, потратив время 1 + 2 + 3 + 4 = 10 минут и еще успеть решить одну подзадачу второй задачи за одну минуту.

Во втором примере Поликарп может решить у всех пяти задач первую подзадачу, потратив на это 5·1 = 5 минут. У него еще останется 5 минут. За это время у двух задач он решит вторые подзадачи, потратив на это 2·2 = 4 минуты. Таким образом, суммарно он наберет 5 + 2 = 7 баллов.

E. Берляндская химия

Деревья жадные алгоритмы поиск в глубину и подобное *2300

Игорь — аспирант химического факультета Берляндского Государственного Университета (БерГУ). Он должен провести сложный эксперимент для написания научной работы, но в лаборатории БерГУ не хватает некоторых веществ для проведения эксперимента.

К счастью, законы химии позволяют преобразовывать одни вещества в другие (да, химия в Берляндии сильно отличается от химии в нашем мире). Но правила преобразования достаточно странные.

Берляндским химикам известно n веществ, пронумерованных в порядке их открытия. Каждый материал можно преобразовать в какой-то другой материал (и обратно). Формально, для каждого i (2 ≤ i ≤ n) существуют два числа xi и ki, обозначающие возможное преобразование: ki килограмма вещества xi можно превратить в 1 килограмм вещества i, а 1 килограмм вещества i можно превратить в 1 килограмм вещества xi. Химическое оборудование в БерГУ позволяет проводить только такие преобразования, в результате которых получается целое число килограммов нового вещества.

Для каждого i (1 ≤ i ≤ n) Игорю известно, что эксперимент требует ai килограммов вещества i, а в лаборатории есть bi килограммов этого вещества. Можно ли после некоторых преобразований (или вообще без них) провести эксперимент?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105) — количество веществ, известных берляндским химикам.

Во второй строке записаны n целых чисел b1, b2... bn (1 ≤ bi ≤ 1012) — запасы лаборатории БерГУ.

В третьей строке записаны n целых чисел a1, a2... an (1 ≤ ai ≤ 1012) — необходимый минимум для проведения эксперимента.

Затем следуют n - 1 строк. j-я из них содержит два целых числа xj + 1 и kj + 1, обозначающую преобразование (j + 1)-го вещества (1 ≤ xj + 1 ≤ j, 1 ≤ kj + 1 ≤ 109).

Выходные данные

Выведите YES, если Игорь сможет провести эксперимент. Иначе выведите NO.

D. Дог-шоу

жадные алгоритмы Конструктив Структуры данных *2200

Очень скоро на ТВ выйдет новое шоу с участием собак и их хозяев — Дог-Шоу. На шоу от собак требуется продемонстрировать бездонный желудок, стратегическое мышление и инстинкт самосохранения. Вы и ваша собака приглашены на шоу, и, конечно же, вы хотите выиграть!

Чтобы победить на шоу, собака должна съесть как можно больше мисок с едой (в чём поможет бездонный желудок). Собаки соревнуются отдельно друг от друга по следующим правилам:

В начале шоу на прямой находится собака в точке x = 0, а в точках x = 1, x = 2, ..., x = n находятся n мисок с едой. Миски пронумерованы от 1 до n слева направо. Как только начинается шоу, собака начинает бежать направо к ближайшей миске.

Еда в мисках в начале шоу слишком горячая и собака не может её съесть, пока она не остынет (инстинкт самосохранения мешает этому). Про i-ю из мисок известно, что еда в ней остынет через ti секунд после начала шоу, и в этот момент собака сможет её съесть.

Собака съедает миску еды мгновенно. Собака перемещается от точки x до точки x + 1 за одну секунду. При этом собаке запрещено двигаться влево, она перемещается исключительно вправо и всегда со скоростью 1 единица расстояния в секунду. Когда собака достигает миски с едой, возможны следующие варианты:

  • еда уже остыла, тогда собака мгновенно съедает еду и без какой-либо остановки продолжает двигаться вправо;
  • еда ещё не остыла, тогда собака либо останавливается и ожидает, пока еда остынет, затем съедает её и тут же начинает двигаться вправо, либо без какой-либо остановки продолжает двигаться вправо, пропустив миску с едой.

Шоу останавливается через T секунд после начала. Если собака достигает миски с едой в момент ровно T, то она уже не успевает её съесть. Если до истечения T секунд собака убежала за самую правую из мисок, шоу останавливают досрочно.

Вы должны помочь вашей собаке составить стратегию, которая позволит ей съесть максимальное количество мисок с едой за T секунд.

Входные данные

В первой строке даны два целых числа n и T (1 ≤ n ≤ 200 000, 1 ≤ T ≤ 2·109) — количество мисок с едой и время, по истечении которого собака будет остановлена.

Во второй строке дана последовательность t1, t2, ..., tn (1 ≤ ti ≤ 109), где ti равно моменту времени, когда еда в i-й миске остынет, и собака сможет её съесть.

Выходные данные

Выведите одно целое число — максимальное количество мисок с едой, которые собака сможет съесть за T секунд.

Примечание

В первом примере собака должна пропустить вторую миску, чтобы успеть поесть из двух — из первой и из третьей.

F. Выборы в Берляндии

жадные алгоритмы сортировки *2100

Сегодня — выборы в парламент Берляндии. Голосование в самом разгаре!

Всего в выборах принимают участие n кандидатов; будем считать, что они занумерованы числами от 1 до n. По результатам выборов k (1 ≤ k ≤ n) кандидатов, показавших наилучший результат на выборах, будут избраны в парламент.

Результаты выборов определяются следующим образом. По окончании голосования для каждого кандидата подсчитывается количество отданных за него голосов. Чем больше голосов набрал кандидат, тем выше место он займет в таблице результатов. Если два или более кандидатов набрали одинаковое количество голосов, то выше место в таблице результатов занимает кандидат, последний голос за которого был отдан раньше.

Таким образом, при формировании таблицы результатов кандидаты упорядочиваются по невозрастанию количества отданных за них голосов, а при равном количестве отданных за них голосов — по возрастанию времени, в которое был отдан последний голос за этого кандидата.

Если за кандидата не отдан ни один голос, то он не считается избранным ни при каких условиях. Таким образом, возможно что менее чем k кандидатов будут избраны в парламент.

В Берляндии m жителей имеют право голоса, и каждый из них обязательно примет участие в голосовании. Каждый из жителей отдаст свой голос за одного из n кандидатов. Варианта «против всех» в бюллетене нет, портить бюллетени или не ходить на выборы в Берляндии не принято. Таким образом, каждый из m жителей должен проголосовать за одного из n кандидатов.

К настоящему моменту уже проголосовали a (1 ≤ a ≤ m) жителей Берляндии. Бюллетени в Берляндии именные и мгновенно обрабатываются в момент голосования, поэтому для j-го проголосовавшего уже известен номер кандидата gj, за которого он отдал свой голос. Проголосовавшие жители нумеруются в хронологическом порядке; то есть (j + 1)-й житель голосовал позже j-го.

Оставшиеся m - a жителей проголосуют до окончания выборов, каждый из них отдаст голос за какого-то из n кандидатов.

Ваша задача — определить для каждого из n кандидатов один из трёх возможных исходов:

  • кандидат уже может считаться избранным в парламент независимо от распределения голосов оставшихся m - a жителей;
  • кандидат имеет возможность быть избранным в парламент после подведения итогов выборов;
  • кандидат не может быть избранным в парламент независимо от распределения голосов оставшихся m - a жителей.
Входные данные

В первой строке содержатся четыре целых числа n, k, m и a (1 ≤ k ≤ n ≤ 100, 1 ≤ m ≤ 100, 1 ≤ a ≤ m) — количество кандидатов, количество мест в парламенте, количество жителей Берляндии и количество уже проголосовавших жителей.

Во второй строке содержится последовательность из a целых чисел g1, g2, ..., ga (1 ≤ gj ≤ n), где gj — номер кандидата, за которого отдал голос j-й из уже проголосовавших жителей. Проголосовавшие жители нумеруются в порядке возрастания времени голосования.

Выходные данные

Выведите последовательность из n целых чисел r1, r2, ..., rn, где:

  • ri = 1, если i-й кандидат гарантированно будет избран в парламент независимо от распределения голосов оставшихся m - a жителей;
  • ri = 2, если i-й кандидат имеет шанс быть избранным в парламент, то есть оставшиеся m - a жителей могут проголосовать таким образом, что он будет избран в парламент;
  • ri = 3, если i-й кандидат не будет избран в парламент независимо от распределения голосов оставшихся m - a жителей.

H. Нагрузочное тестирование

жадные алгоритмы *1600

Поликарп планирует провести нагрузочное тестирование своего нового проекта Fakebook. Он уже договорился с друзьями, чтобы в определённые моменты времени они посылали запросы в Fakebook. Тестирование продлится n минут, в i-ю минуту друзья пошлют ai запросов.

Поликарп планирует протестировать Fakebook под особым видом нагрузки. В случае попадания информации о Fakebook в СМИ Поликарп надеется на монотонный рост нагрузки, который сменится монотонным убыванием интереса к сервису. Такой профиль нагрузки и собирается протестировать Поликарп во время нагрузочного теста.

Какое минимальное количество запросов придется дополнительно сделать Поликарпу, чтобы сначала нагрузка на сервер строго возрастала, а затем строго убывала? Как возрастающая часть, так и убывающая часть могут быть пустыми (то есть отсутствовать). Убывание должно сразу же сменить возрастание, например, участок одинаковых подряд значений нагрузки недопустим.

К примеру, если нагрузка описывается одним из массивов [1, 2, 8, 4, 3], [1, 3, 5] или [10], то такой профиль нагрузки устраивает Поликарпа (в каждом из этих случаев сначала идёт участок строгого возрастания, затем тут же строго убывания). Если нагрузка описывается одним из массивов [1, 2, 2, 1], [2, 1, 2] или [10, 10], то такой профиль нагрузки не устраивает Поликарпа.

Помогите Поликарпу сделать минимальное количество дополнительных запросов, чтобы получившийся профиль нагрузки его устраивал. Дополнительные запросы Поликарп может делать в любом количестве в любые минуты от 1 до n.

Входные данные

В первой строке содержится целое положительное число n (1 ≤ n ≤ 100 000) — продолжительность нагрузочного тестирования.

Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — количество запросов со стороны друзей в i-ю минуту тестирования.

Выходные данные

Выведите минимальное количество дополнительных запросов, которые надо сделать Поликарпу, чтобы нагрузка сначала строго возрастала, а затем сразу строго убывала.

Примечание

В первом примере Поликарп должен сделать два дополнительных запроса в третью минуту и четыре — в четвёртую. Тогда получившаяся нагрузка примет вид: [1, 4, 5, 6, 5]. Суммарно будет сделано 6 дополнительных запросов.

Во втором примере достаточно один раз сделать дополнительный запрос в третью минуту, поэтому ответ равен 1.

В третьем примере нагрузка уже удовлетворяет всем описанным в условии требованиям, поэтому ответ 0.

K. Проездные билеты

жадные алгоритмы реализация сортировки *1800

Вечером Поликарп решил проанализировать свои сегодняшние расходы на поездки в общественном транспорте.

Автобусная сеть в столице Берляндии устроена таким образом, что каждый автобус курсирует по маршруту между двумя конечными остановками. Промежуточных остановок у автобуса нет. Таким образом, каждый из автобусов непрерывно курсирует по маршруту от одной конечной остановки до другой и назад. Между парой остановок курсирует не более одного автобуса.

Поликарп совершил n поездок на автобусе, каждая из которых задается названием остановки, откуда он уехал, и названием остановки, куда он приехал. В записях Поликарпа поездки следуют в хронологическом порядке.

Известно, что одна поездка на автобусе любого маршрута стоит a бурлей. Однако, если пассажир совершает пересадку, то цена поездки уменьшается до b бурлей (b < a). Считается, что пассажир совершает пересадку, если остановка, на которой он садится в автобус, совпадает с остановкой, на которой он вышел из предыдущего автобуса. Очевидно, что первая поездка не может быть совершена после пересадки.

Например, если Поликарп совершил последовательно три поездки: «BerBank» «University», «University» «BerMall», «University» «BerBank», то он заплатит a + b + a = 2a + b бурлей. Из BerBank он приехал в University, там пересел и поехал в BerMall. Затем он прошёл пешком до University и вернулся в BerBank.

Поликарп мог купить не более чем k проездных по цене f бурлей за один проездной. Проездной покупается для одного автобусного маршрута и делает любую поездку по этому маршруту (в любом направлении) бесплатной. Единожды купленный проездной может использоваться неограниченное количество раз любом из двух направлений.

Какую наименьшую сумму денег мог потратить Поликарп сегодня, если бы приобрел не более k проездных оптимальным образом?

Входные данные

В первой строке записаны пять целых чисел n, a, b, k, f (1 ≤ n ≤ 300, 1 ≤ b < a ≤ 100, 0 ≤ k ≤ 300, 1 ≤ f ≤ 1000), где:

  • n — количество поездок Поликарпа,
  • a — цена одной обычной поездки,
  • b — цена одной поездки после пересадки,
  • k — максимальное количество проездных,
  • f — цена одного проездного.

Далее следуют n строк, описывающие поездки в порядке их совершения. Каждая строка содержит ровно два различных слова, разделенных единичным пробелом — название стартовой остановки и название финальной остановки для очередной поездки Поликарпа. Все названия состоят из прописных и строчных букв латинского алфавита, содержат от 1 до 20 букв. Прописные и строчные буквы следует считать различными.

Выходные данные

Выведите наименьшую сумму денег, которую Поликарп мог потратить сегодня, если бы приобрел не более k проездных оптимальным образом.

Примечание

В первом примере Поликарп может купить проездной на маршрут «BerBank University», потратив 8 бурлей. Заметим, что его вторая поездка «University» «BerMall» совершается после пересадки; следовательно, за эту поездку он заплатит 3 бурля. Таким образом, искомая сумма денег равна 8 + 3 = 11 бурлей.

Во втором примере Поликарпу невыгодно покупать проездные. Заметим, что каждая его поездка, кроме первой, совершена после пересадки. Следовательно, искомая сумма денег равна 2 + 1 + 1 + 1 = 5 бурлей.

B. Очередь в посольстве

жадные алгоритмы Структуры данных *1800

В посольстве одного немалоизвестного королевства организована электронная очередь. Каждому человеку, пришедшему в посольство, необходимо выполнить следующие три действия: подать документы, заплатить деньги в кассу и сдать отпечатки пальцев. При этом действия должны выполняться именно в указанном порядке.

Для каждого действия отведено несколько отдельных окон: k1 различных окон для первого действия, k2 для второго, и k3 для третьего. Время обслуживания одного человека в окне каждом из k1 окон для первого действия равно t1. Аналогично, время обслуживания одного человека в каждом из k2 окон для второго действия равно t2, а время обслуживания одного человека в каждом из k3 окон для третьего действия равно t3. Таким образом, время обслуживания зависит только от типа окна и никак не зависит от человека, подающего документы.

В некоторые моменты времени в посольство приходят n человек, i-ый человек приходит в момент времени ci. Человек регистрируется под некоторым номером, после чего сидит в зале и ожидает, пока его номер не высветится на специальном табло. На этом табло он видит номер окна, к которому ему нужно подойти и сразу же идет к нему. Будем считать, что время подхода включено во время обслуживания. Табло одновременно может показывать информацию более чем для одного человека. Электронная очередь работает таким образом, что подошедшего к окну человека немедленно начинают обслуживать, так как перед окном нет других людей.

Сотрудники инспекции по качеству обслуживания клиентов заметили, что некоторые люди проводят в посольстве слишком много времени (что при отсутствии там сигнала сотовой связи и 3G довольно удручает). Было принято решение, что система должна быть организована так, что наибольшее время проведенное человеком в посольстве оказалось минимально. Помогите сотрудникам инспекции организовать очередь. Считайте, что все действия, кроме обслуживания в окне, происходят мгновенно.

Входные данные

В первой строке записано три целых числа k1, k2, k3 (1 ≤ ki ≤ 109), разделенные пробелами — количество окон первого, второго и третьего типа соответственно.

Во второй строке записано три целых числа t1, t2, t3 (1 ≤ ti ≤ 105), разделенные пробелами — время обслуживания одного человека в окне первого, второго и третьего типа соответственно.

В третьей строке записано целое число n (1 ≤ n ≤ 105) — количество человек.

В четвертой строке записано n целых чисел ci (1 ≤ ci ≤ 109) в неубывающем порядке, разделенных пробелами; ci — время прихода в посольство человека с номером i.

Выходные данные

Выведите единственное число — наибольшее время, которое проведет человек в посольстве, при оптимальной организации очереди.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом тесте 5 человек приходят одновременно в момент времени 1. Каждого типа по одному окну, каждое окно обслуживает 1 единицу времени. Поэтому максимальное время нахождения в посольстве — это время обслуживания в окнах (3 единицы времени) плюс время простоя человека, вызванного к первому окну последним (4 единицы времени).

Во втором тесте окна работают следующим образом:

Первое окно первого действия: [1, 6) — первый человек, [6, 11) — третий человек, [11, 16) — пятый человек

Второе окно первого действия: [2, 7) — второй человек, [7, 12) — четвертый человек

Окно второго действия: [6, 7) — первый, [7, 8) — второй, [11, 12) — третий, [12, 13) — четвертый, [16, 17) — пятый

Окно третьего действия: [7, 8) — первый, [8, 9) — второй, [12, 13) — третий, [13, 14) — четвертый, [17, 18) — пятый

Видно, что дольше всех обслуживается пятый человек.

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 иначе. Главная диагональ должна содержать только нули.

C. Дом

жадные алгоритмы сортировки *2100

Билл — известный математик в стране. Благодаря его революционным открытиям в области математики, он заработал достаточно денег, чтобы построить прекрасный дом. К сожалению, за неуплату налогов на собственность, суд решил наказать Билла, убрав некоторые части он его дома

Дом Билла может быть представлен как выпуклый правильный 2n-угольник A0 A1... A2n - 1 A2n,  A2n =  A0, каждая сторона имеет длину ровно 1 метр.

Суд постановил следующие правила для удаления частей дома:

  1. Разделим каждую сторону Ak Ak + 1,  k = 0... 2n - 1 на n равных частей длины 1 / n точками P0, P1, ..., Pn - 1
  2. На каждом ребре A2k A2k + 1,  k = 0... n - 1 суд выберет одну точку B2k =  Pi для некоторого i = 0, ...,  n - 1 такую, что
  3. На каждом ребре A2k + 1A2k + 2,  k = 0...n - 1 Билл выберет одну точку B2k + 1 =  Pi для некоторого i = 0, ...,  n - 1 такую, что
  4. Биллу останется часть дома, ограниченная 2n-угольником B0 B1... B2n - 1

Билл узнал, какие точки B2k выбрал суд. Несмотря на то, что он великий математик, его дом очень большой и ему сложно все рассчитать. Поэтому он просит вас помочь ему выбрать точки так, чтобы максимизировать площадь дома, которая ему останется.

Входные данные

Первая строка содержит одно целое число n (2 ≤ n ≤ 50000), число сторон в доме равно 2n.

Вторая строка содержит n целых чисел B2k (0 ≤ B2k ≤ n - 1,  k = 0... n - 1), описывающих точки, выбранные судом. Если B2k = i, то суд выбрал точку Pi на стороне A2k A2k + 1.

Выходные данные

Выведите n различных целых чисел, описывающих точки B1, B3, ..., B2n - 1, которые Билл должен выбрать, чтобы оставить себе максимально возможную площадь дома.

Примечание

Чтобы максимизировать площадь в примере, Билл должен выбрать следующие точки: B1 = P0, B3 = P2, B5 = P1

A. Вопросы планирования

жадные алгоритмы *1500

Алёна работает в аэропорту Мегаполиса, составляя расписание отправления рейсов. Сегодня должны отправиться n рейсов, i-й из которых должен вылететь в минуту i.

Как вы помните из задачи вчерашнего дня, аэропорт Мегаполиса является основным транспортным узлом в Метрополии, а в высоконагруженных аэропортах нередко случаются накладки. Ровно так и произошло сегодня — из-за технических неполадок в течение первых k минут ни один рейс не смог вылететь из аэропорта.

Теперь все запланированные n рейсов должны вылететь в различные минуты от (k + 1)-й до (k + n)-й включительно. Однако рейсы не обязаны вылетать в исходном порядке — Алёна может составить любое расписание отправления рейсов. При этом должно быть выполнено важное условие: ни один рейс не может вылететь раньше своего изначально запланированного времени вылета.

Алёна знает, что задержка вылета i-го рейса на одну минуту стоит аэропорту ci бурлей. Помогите Алёне определить, в каком порядке следует вылетать рейсам, чтобы суммарная стоимость задержки оказалась минимально возможной.

Входные данные

В первой строке входных данных находятся два целых числа n и k (1 ≤ k ≤ n ≤ 300 000), где n — количество рейсов, а k — количество минут, в течение которых рейсы не вылетали из аэропорта.

Во второй строке находятся n чисел c1, c2, ..., cn (1 ≤ ci ≤ 107), где ci — стоимость задержки i-го рейса на одну минуту.

Выходные данные

В первой строке выведите минимальную возможную суммарную стоимость задержки всех рейсов.

Во второй строке выведите n различных целых чисел t1, t2, ..., tn (k + 1 ≤ ti ≤ k + n), где ti означает время вылета i-го рейса. Если расписаний с минимальной стоимостью несколько, разрешается вывести любое из них.

Примечание

Рассмотрим пример из условия. Если сдвинуть рейсы на 2 минуты, сохранив их порядок вылета, то суммарная стоимость задержки всех рейсов составит (3 - 1)·4 + (4 - 2)·2 + (5 - 3)·1 + (6 - 4)·10 + (7 - 5)·2 = 38 бурлей.

Если же изменить расписание так, как показано в ответе, то суммарная стоимость составит (3 - 1)·4 + (6 - 2)·2 + (7 - 3)·1 + (4 - 4)·10 + (5 - 5)·2 = 20 бурлей.

B. Встреча жюри

жадные алгоритмы сортировки *1800

В стране Мегаполия уже подходит время проведения олимпиады Мегаполисов, и все члены жюри должны собраться в главном городе страны — Мегаполисе, чтобы подготовить задачи соревнования.

Всего в стране есть n + 1 городов, пронумерованных числами от 0 до n. Город 0 — Мегаполис, в этом городе должны собраться все члены жюри. В городах с номерами от 1 до n живут члены жюри олимпиады, по одному в каждом городе. Подготовка олимпиады — долгий и ответственный процесс, занимающий k дней. Все эти k дней в работе над олимпиадой должны принимать участие все n членов жюри, и все они должны для этого быть в Мегаполисе во время подготовки.

Вам известно расписание ближайших рейсов (жюри олимпиады — люди серьёзные, а потому только летают самолётами). Все полёты в Мегаполии осуществляются только в Мегаполис и из него. В день своего прилёта и отлёта член жюри занят дорогой и не может участвовать в обсуждении олимпиады. Все рейсы в Мегаполии вылетают и прилетают в один и тот же день.

Собрать всех членов жюри вместе на k дней в столице — задача сложная, потратить при этом минимальное количество денег — почти невозможная. Тем не менее вам нужно найти самый дешёвый способ сначала собрать в Мегаполисе всех членов жюри, чтобы они могли работать вместе k дней, а затем отправить их обратно в родные города. Стоимостью способа называется суммарная стоимость билетов на все необходимые рейсы. При этом каждый член жюри в отдельности может пребывать в Мегаполисе и больше k дней.

Входные данные

В первой строке содержатся три целых числа n, m и k (1 ≤ n ≤ 105, 0 ≤ m ≤ 105, 1 ≤ k ≤ 106).

В i-й из последующих m строк находится описание i-го рейса, заданное четырьмя целыми числами di, fi, ti и ci (1 ≤ di ≤ 106, 0 ≤ fi ≤ n, 0 ≤ ti ≤ n, 1 ≤ ci ≤ 106, ровно одно из чисел fi и ti равно нулю) — днём отправления, городом отправления, городом прилёта и стоимостью билета на рейс соответственно.

Выходные данные

Выведите одно целое число — стоимость самого дешёвого способа собрать всех членов жюри в городе 0 на k дней и затем вернуть их всех в родные города.

Если собрать всех на k дней в Мегаполисе, а затем отправить всех обратно по домам невозможно, выведите «-1» (без кавычек).

Примечание

В первом примере оптимальный способ собрать всех в Мегаполисе — использовать рейсы, выполняемые в дни 1, 2, 8 и 9. Единственный альтернативный вариант, который заключается в том, чтобы отправить члена жюри из второго города домой в день 15, будет на 2500 дороже.

Во втором примере невозможно отправить домой из Мегаполиса члена жюри из города 2.

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 бонусных бурлей, которыми можно расплатиться в последний день, ничего не доплачивая.

F. Играть или не играть

жадные алгоритмы *3000

Вася и Петя играют в онлайн-игру. Как и во многих онлайн-играх, в этой есть своя схема прокачки, которая заключается в том, что чем больше опыта получил персонаж, тем он сильнее. Конечно, Вася хочет как можно быстрее получить максимальное количество опыта. Внимательно изучив правила игры, Вася понял, что если человек играет в игру один, то он получает одну единицу опыта каждую секунду, пока играет. Но если два игрока играют в одно время, и их текущий опыт отличается не больше, чем на число C, то они могут играть в команде, и тогда каждый из них будет получать по 2 единицы опыта в секунду.

Поскольку Вася и Петя еще учатся в школе, их родители не разрешают им играть круглые сутки, так что у каждого из друзей есть свое расписание: Вася может играть в какие-то промежутки времени [a1;b1], [a2;b2], ..., [an;bn], а Петя в [c1;d1], [c2;d2], ..., [cm;dm] (все промежутки рассчитаны точно в секундах от текущего момента). Наблюдательный Вася, успевающий в математике, заметил, что иногда может быть выгодно не играть, чтобы не сильно оторваться в полученном опыте от своего друга, и, когда он зайдет в сеть, играть вдвоем, получая больше опыта.

Помогите ребятам составить такое расписание для игры, чтобы в итоге Вася получил как можно больше опыта. Сейчас у их персонажей одинаковое количество набранного опыта. Считайте, что Петя готов скооперироваться с Васей и играть тогда, когда тот скажет, чтобы помочь Васе достичь максимального количества опыта.

Входные данные

В первой строке даны три целых числа n, m, C — количество непрерывных отрезков времени, в которые могут играть Вася и Петя, и максимальная допустимая разница опыта для удвоенного получения опыта, соответственно (1 ≤ n, m ≤ 2·105, 0 ≤ C ≤ 1018).

В следующих n строках дано по два числа ai, bi — промежутки времени, в которые может играть Вася (0 ≤ ai < bi ≤ 1018, bi < ai + 1).

В следующих m строках дано по два числа ci, di — промежутки времени, в которые может играть Петя (0 ≤ ci < di ≤ 1018, di < ci + 1).

Выходные данные

Выведите одно целое число — максимальное значение полученного опыта, которое может достичь Вася при правильной игре.

C. Возможно, вы имели в виду...

дп жадные алгоритмы реализация *1500

Текстовый редактор Beroffice имеет широкие возможности по работе с текстами. Одна из возможностей — автоматический поиск опечаток и формирование предложения по их исправлению.

При наборе текста в Beroffice используются только строчные буквы английского алфавита (то есть 26 букв от a до z). При наборе слова Beroffice предполагает, что слово набрано с опечаткой, если встречаются три или более согласные буквы подряд. Единственное исключение — если блок подряд идущих согласных букв состоит из одинаковых букв, то этот блок (даже если его длина больше или равна трём) не считается опечаткой. Формально, слово набрано с опечаткой, если в слове существует блок не менее чем из трёх согласных подряд и эти согласные — не одна и та же буква.

Например:

  • следующие слова набраны с опечатками: «hellno», «hackcerrs» и «backtothefutttture»;
  • следующие слова набраны без опечаток: «helllllooooo», «tobeornottobe» и «oooooo».

Редактор Beroffice при обнаружении слова с опечаткой вставляет минимальное количество пробелов в слово (разделяя его на несколько слов) так, что каждое из получившихся слов набрано без опечаток.

Реализуйте эту функциональность редактора Beroffice. Считайте гласными только буквы 'a', 'e', 'i', 'o' и 'u'. Все остальные буквы следует считать согласными.

Входные данные

В единственной строке входных данных содержится непустое слово, состоящее из строчных букв английского алфавита. Длина слова — от 1 до 3000 букв.

Выходные данные

Выведите заданное слово без изменений, если оно не содержит опечаток. Если слово содержит хотя бы одну опечатку, то вставьте в него наименьшее количество пробелов так, что каждое из получившихся слов не содержит опечаток. Если решений несколько, то выведите любое из них.

E. Перенумерация тестов

жадные алгоритмы реализация *2200

Совсем недавно завершилась Всеберляндская олимпиада по программированию! Теперь Владимир хочет добавить прошедшее соревнование в качестве тренировки на популярный сайт Codehorses.

К сожалению, в архиве олимпиады не царит идеальный порядок. Например, файлы с тестами названы не в соответствии с некоторой логикой, а произвольным образом.

Владимир хочет переименовать файлы с тестами так, чтобы их имена составляли различные целые числа от 1 без промежутков, то есть имели имена «1», «2», ..., «n», где n — общее количество файлов с тестами.

Некоторые из файлов содержат тесты из условия (примеры), а остальные — это просто файлы с обыкновенными тестами. Возможна ситуация, когда примеров нет, а также ситуация, когда все тесты являются примерами. Владимир хочет переименовать файлы так, чтобы примеры из условия составляли первые несколько тестов, а все следующие по порядку файлы содержали обыкновенные тесты.

Единственная операция, которую Владимир осуществляет — это переименование файлов с помощью операции командной строки «move». В результате своей работы Владимир хочет написать скрипт, каждая строка которого имеет вид «move file_1 file_2», которая обозначает, что файл «file_1» следует переименовать в файл «file_2». Если файл «file_2» существовал на момент выполнения строки скрипта, то этот файл будет затёрт. После строки «move file_1 file_2» файл «file_1» более не существует, но обязательно существует файл «file_2», содержащий содержимое файла «file_1» до этой команды «move».

Помогите Владимиру написать скрипт, который содержит минимальное количество строк, такой что после его выполнения:

  • все примеры составляют несколько первых тестов и файлы имеют названия «1», «2», ..., «e», где e — количество файлов с примерами;
  • остальные файлы содержат оставшиеся обыкновенные тесты и имеют названия «e + 1», «e + 2», ..., «n», где n — общее количество всех тестов.
Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество файлов с тестами.

Далее следует n строк, каждая описывает один файл с тестом. Строка имеет вид «name_i type_i», где «name_i» — имя файла, а «type_i» равно «1», если i-й файл содержит пример из условия и «0» — если обычный тест. Имя каждого файла — строка из цифр и строчных букв латинского алфавита, длина имени файла содержит от 1 до 6 символов. Гарантируется, что все имена файлов различны.

Выходные данные

В первую строку выведите минимальное количество строк в скрипте Владимира. Далее выведите сам скрипт, каждая строка должна иметь вид «move file_1 file_2», где «file_1» — название существующего в момент исполнения строки файла, а «file_2» — строка из цифр и строчных букв латинского алфавита, длина имени файла должна быть от 1 до 6 символов.

A. Отказавшиеся финалисты

жадные алгоритмы реализация *800

В этом году, как и в прошлых, MemSQL приглашает на финал 25 лучших участников из отборочного раунда Start[c]up для участия в финале в офисе компании. Однако не все, кто прошел в финал, могут позволить себе поездку в офис компании.

Изначально в офис компании приглашаются 25 лучших участников. Каждый приглашенный участник либо принимает, либо отклоняет приглашение. Если участник отклоняет приглашение, то вместо него приглашается еще не приглашенный участник, выступивший лучше всех других еще не приглашенных в отборочном раунде. Этот процесс продолжается до тех пор, пока приглашение не примут 25 участников.

После того, как квалификационный раунд закончился, и участники финального раунда в офисе компании выбраны, вы знаете K из финалистов, которые приняли приглашение, и места, которые они заняли в отборочном раунде (места нумеруются с 1, в отборочном раунде не было участников с одинаковыми местами). Определите минимально возможное количество участников, которые были приглашены, но отказались от участия в финале в офисе компании.

Входные данные

Первая строка содержит целое число K (1 ≤ K ≤ 25) — количество финалистов в офисе компании, о которых вы знаете. Вторая строка содержит целые числа r1, r2, ..., rK (1 ≤ ri ≤ 106) — места известных вам финалистов в отборочном раунде. Гарантируется, что все эти места различны.

Выходные данные

Выведите одно целое число: минимальное число участников, которые могли отказаться от участия в финале в офисе компании.

Примечание

В первом примере вы знаете всех 25 финалистов. Участники, занявшие 1, 13, и 27 места в отборочном раунде должны были отказаться, поэтому ответ равен 3.

F. Заказ футболок

жадные алгоритмы *2800

Это — очередной Start[c]up, а значит, нужно опять заказывать футболки. Чтобы доставить футболки как можно быстрее, мы решили в этом году заказать все необходимые футболки до начала соревнования. Лучшие C участников будут награждены футболками, но мы не знаем, кто это будет. Наш план — узнать размер футболок для всех участников до соревнования, и затем заказать достаточно футболок, чтобы кто бы ни оказался среди C лучших участников, у нас было бы достаточно футболок для них.

Чтобы узнать размеры футболок, мы проведем опрос. Опрос позволит участникам либо выбрать один желаемый размер футболки, либо два соседних. Если участник выберет два соседних размера, это означает, что что ему подойдет любой из них.

Как вы можете догадаться, может понадобиться заказать много лишних футболок. Мы хотим попросить вас определить минимальное число футболок, которое нам нужно заказать, чтобы быть уверенным в том, что нам хватит футболок при любом результате соревнования.

Входные данные

В первой строке находятся два целых числа N и C (1 ≤ N ≤ 2·105, 1 ≤ C) — количество размеров футболок и количество участников, которые будут награждены.

Вторая строка содержит N - 1 целых чисел с s1 по sN - 1 (0 ≤ si ≤ 108). Для нечетных i, si равно количеству участников, которые выбрали размер футболки ((i + 1) / 2). Для четных i, si равно количеству участников, которые согласны получить размер (i / 2) или размер (i / 2 + 1). Гарантируется, что C не превосходит полного числа участников.

Выходные данные

Выведите, какое минимальное число футболок мы должны купить.

Примечание

В первом примере мы можем купить 100 футболок каждого размера.

B. И снова тетрис

жадные алгоритмы Конструктив математика Паросочетания *2200

В редких перерывах между поисками теории всего физик Воль играет в расслабляющую игру — модифицированный им тетрис.

Компьютер выдает Волю прямоугольное игровое поле n × m, на котором некоторые клетки пустые, остальные же заполнены. Игровая панель рядом с полем содержит изображения всевозможных связных фигурок, содержащих от двух до пяти клеток. Здесь мы рассматриваем только связные по стороне фигурки. Фигурки можно копировать с игровой панели на поле, заполняя ими пустые клетки. Разумеется, каждую фигурку можно использовать сколько угодно раз.

Задача Воля — заполнить все поле так, чтобы на нем не осталось пустых клеток.

Каждая изначально свободная клетка должна оказаться покрыта ровно одной клеткой некоторой фигурки. Каждая фигурка должна полностью находиться на игровом поле.

На рисунке черные клетки — изначально заполненные клетки поля, а одноцветные связные области — фигурки.

Входные данные

Первая строка содержит целые числа n и m (1 ≤ n, m ≤ 1000), n и m — высота и ширина поля соответственно. Следующие n строк содержат по m символов каждая. Они естественным образом описывают поле: j-ый символ i-ой строки равен «#», если соответствующая клетка поля занята, и «.», если соответствующая клетка поля свободна и должна быть покрыта некоторой фигуркой.

Выходные данные

Если поле заполнить невозможно, выведите единственной число «-1» (без кавычек). Иначе выведите любое заполнение поля фигурками в формате, совпадающем с входным, где все «.» (пустые клетки) заменены описанием фигурок следующим образом (см. примеры): каждая фигурка должна быть выведена конкретной цифрой, при этом касающимся по стороне фигуркам должны соответствовать разные цифры.

Примечание

В третьем примере невозможно заполнить пустую клетку, у которой нет пустых соседей.

В четвертом примере ничего заполнять не нужно, поэтому надо вывести исходное поле.

A. Махмуд, Ехаб и MEX

жадные алгоритмы реализация *1000

Доктор Зло похитил Махмуда и Ехаба в злую страну из-за их плохого выступления на Всезлейской Олимпиаде по Информатике. Доктор согласился отпустить ребят, если они решат несколько задач.

Доктор Зло интересуется теорией множеств, поэтому у него есть множество из n целых чисел. Доктор Зло называет множество злым, если MEX от этого множества равен x. MEX множества чисел называется минимальное неотрицательное целое число, которое в нём не содержится. Например, MEX множества {0, 2, 4} равен 1, а MEX множества {1, 2, 3} равен 0.

Доктор Зло собирается сделать своё множество злым. Для этого он хочет проделать над ним некоторое количество операций. Во время каждой операции он может добавить в множество любое неотрицательное целое число или удалить из множества любое число, которое в нём содержится. Какое минимальное число операций ему придётся проделать, чтобы сделать массив злым?

Входные данные

В первой строке содержатся два целых числа n и x (1 ≤ n ≤ 100, 0 ≤ x ≤ 100) — размер множества Доктора Зло и необходимый MEX.

Во второй строке содержатся n различных целых неотрицательных чисел, не превосходящих 100 — элементы множества.

Выходные данные

Выведите единственное число — минимальное число операций, которое придётся сделать Доктору Зло.

Примечание

В первом тестовом примере Доктору Зло необходимо добавить в множества числа 1 и 2, используя 2 операции.

Во втором тестовом примере Доктору Зло необходимо удалить 0 из множества. После этого множество станет пустым, поэтому его MEX равен 0.

В третьем тестовом примере массив уже злой.

B. Сплав каякеров

жадные алгоритмы Перебор сортировки *1500

Вадим очень любит путешествовать. Недавно он услышал о том, что в его городке появился клуб каякеров, и его очень заинтересовал этот вид путешествия. Поэтому Вадим присоединился к группе каякеров и готов отправиться в сплав.

Сейчас группе нужно распределиться по каякам. В группе n человек (включая Вадима), и у них есть ровно n - 1 двухместных и 2 одноместных каяка. Вес i-го человека равен wi, и вес очень важен в сплаве — если разница весов двух человек, сидящих в двухместном каяке, слишком велика, то каяк становится неустойчивым и может перевернуться. И, конечно же, каякеры хотят распределиться по плавсредствам так, чтобы этого не произошло.

Формально, неустойчивость одноместного каяка всегда равна 0, а неустойчивость двухместного каяка равна модулю разности между весами людей, которые заняли этот каяк. Неустойчивость всей группы — это сумма неустойчивостей всех каяков.

Помогите группе определить минимально возможную суммарную неустойчивость!

Входные данные

В первой строке задано одно целое число n (2 ≤ n ≤ 50).

Во второй строке заданы n целых чисел w1, w2, ..., w2n, где wi — вес человека i (1 ≤ wi ≤ 1000).

Выходные данные

Выведите минимально возможную неустойчивость группы.

C. Автобус

жадные алгоритмы математика реализация *1500

Автобус курсирует по координатной прямой Ox от точки x = 0 до точки x = a. Выехав из точки x = 0, он доезжает до точки x = a, сразу разворачивается и едет обратно в точку x = 0. Вернувшись в точку x = 0, он сразу снова едет в точку x = a и так далее. Таким образом, автобус курсирует от x = 0 до x = a и обратно. Переезд из точки x = 0 в x = a или из точки x = a в x = 0 называется рейсом автобуса. Всего автобус должен совершить k рейсов.

Бензобак автобуса вмещает b литров бензина. На преодоление единицы расстояния автобус тратит ровно один литр бензина. Свой путь автобус начинает с полным бензобаком.

Между x = 0 и x = a в точке x = f находится заправка. Других заправок на пути автобуса нет. Проезжая мимо заправки в любом из двух направлений, автобус может остановиться и пополнить запас бензина в бензобаке. Таким образом, после остановки на заправку в бензобаке автобуса будет b литров бензина.

Какое минимальное количество раз автобус должен дозаправиться в точке x = f, чтобы начав путь в точке x = 0 совершить k рейсов?

Входные данные

В первой строке записаны четыре целых числа a, b, f, k (0 < f < a ≤ 106, 1 ≤ b ≤ 109, 1 ≤ k ≤ 104) — точка окончания первого автобусного рейса, вместимость бензобака автобуса, точка, в которой расположена заправка, а также требуемое количество рейсов.

Выходные данные

Выведите минимальное количество дозаправок автобуса, которые необходимы, чтобы совершить k рейсов. Если автобус не сможет совершить k рейсов, выведите -1.

Примечание

В первом примере автобус вынужден дозаправляться на каждом рейсе.

Во втором примере автобус может проехать без дозаправки 10 единиц расстояния. Это соответствует тому, что автобус проехал весь первый рейс, а затем 4 единицы расстояния второго рейса и оказался на заправке. Он может дозаправиться, закончить второй рейс и проехать 2 единицы расстояния от третьего рейса. В этом случае он снова окажется на заправке. Затем он может заполнить бак до 10 литров, закончить третий рейс и проехать полностью четвертый рейс. В конце пути у автобуса будет пустой бак.

В третьем примере автобус не может проехать все 3 рейса, так как если он заправится на втором рейсе, в баке будет только 5 литров бензина, а до следующей возможности заправиться автобус должен проехать 8 единиц расстояния.

D. Сделай перестановку!

жадные алгоритмы математика реализация *1500

У Ивана есть массив, состоящий из n элементов. Каждый из элементов — целое число от 1 до n.

Совсем недавно Иван узнал о перестановках и их лексикографическом порядке. Теперь он хочет изменить значения минимального количества элементов в своём массиве таким образом, чтобы его массив стал перестановкой (то есть каждое из целых чисел от 1 до n встречалось в его массиве ровно по одному разу). Если существует много способов сделать заданный массив перестановкой за минимальное количество изменений, то среди них Иван хочет выбрать такой, что полученная перестановка лексикографически минимальна.

Таким образом, в первую очередь Иван хочет минимизировать количество измененных элементов, а во вторую — минимизировать лексикографически полученную перестановку.

Для того, чтобы определить, какая из двух перестановок лексикографически меньше, они сначала сравниваются по первому элементу. При их равенстве — по второму, и так далее. Среди двух перестановок x и y лексикографически меньше будет x, если xi < yi, где i — первый индекс, в котором перестановки x и y различаются.

Определите, как будет выглядеть массив Ивана, если он осуществит задуманное.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 200 000) — количество элементов в массиве Ивана.

Во второй строке следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ n) — описание массива Ивана.

Выходные данные

В первую строку выведите q — минимальное количество элементов, которые нужно изменить в массиве Ивана для того, чтобы массив стал перестановкой. Во вторую строку выведите лексикографически минимальную перестановку, которая получается с помощью q изменений.

Примечание

В первом примере нужно заменить тройку, стоящую в позиции 1, на единицу, а двойку, стоящую в позиции 3, нужно заменить на четвёрку. Тогда мы получим перестановку [1, 2, 4, 3], изменив два числа — эта перестановка лексикографически минимальная из всех подходящих перестановок.

Во втором примере ничего изменять не нужно, так как данный массив является перестановкой.

D. Купи дешево, продай дорого

жадные алгоритмы Конструктив Структуры данных *2400

Вы можете идеально предсказать цену определенной акции на следующие N дней. Вы хотите заработать на этом знании, но хотите продавать или покупать не больше одной акции в день. Другими словами, каждый день вы будете либо покупать одну акцию, либо продавать одну акцию, либо ничего не делать. Изначально у вас нет акций, и вы не можете продать акцию, когда у вас их нет. В конце N дней вы хотите опять остаться без акций, но хотите заработать как можно больше.

Входные данные

В первой строке находится целое число N (2 ≤ N ≤ 3·105) — число дней.

Во второй строке находятся N целых чисел, p1, p2, ..., pN (1 ≤ pi ≤ 106). Цена одной акции в i-й день равна pi.

Выходные данные

Выведите максимальную сумму, которую вы можете заработать к концу N дней.

Примечание

В первом примере купите акцию за 5, еще одну за 4, продайте за 9 и другую за 12. Затем купите за 2 и продайте за 10. В итоге получите  - 5 - 4 + 9 + 12 - 2 + 10 = 20.

B. Максимум максимума из минимумов

жадные алгоритмы *1200

Дан массив a1, a2, ..., an из n чисел, а также число k. Массив нужно разбить на ровно k непустых подотрезков. На каждом подотрезке вычисляется минимум, а из полученных k минимумов берется максимум. А какое максимальное число можно таким образом получить?

Определения подотрезка и разбиения массива на подотрезки находятся в примечаниях.

Входные данные

В первой строке записаны через пробел два целых числа n и k (1 ≤ k ≤ n ≤  105) — размер массива a и количество подотрезков, на которые нужно разбить массив.

Во второй строке записано n целых чисел через пробел: a1,  a2,  ...,  an ( - 109  ≤  ai ≤  109).

Выходные данные

Выведите единственное число — максимальный максимум, который можно получить, разбив данный массив на k подотрезков и взяв максимум из минимумов на этих подотрезках.

Примечание

Подотрезок [l,  r] (l ≤ r) массива a — это последовательность al,  al + 1,  ...,  ar.

Разбиение массива a из n элементов на k подотрезков, [l1, r1], [l2, r2], ..., [lk, rk] (l1 = 1, rk = n, li = ri - 1 + 1 при i > 1), — k последовательностей (al1, ..., ar1), ..., (alk, ..., ark).

В первом примере вы должны разбить массив на подотрезки [1, 4] и [5, 5], тогда вы получите последовательности (1, 2, 3, 4) и (5). Минимумы равны min(1, 2, 3, 4) = 1 и min(5) = 5. Итоговый максимум равен max(1, 5) = 5. Очевидно, получить больший результат нельзя.

Во втором примере единственная ваша возможность — разбить массив на единственный подотрезок [1, 5], тогда вы получите последовательность ( - 4,  - 5,  - 3,  - 2,  - 1). Единственный минимум равен min( - 4,  - 5,  - 3,  - 2,  - 1) =  - 5. Итоговый максимум равен  - 5.

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 меньше любого составного числа, поэтому для них не существует корректных разбиений.

E. Восстановление дерева

графы Деревья жадные алгоритмы *2900

У Пети было дерево, состоящее из n вершин, пронумерованных целыми числами от 1 до n. Но по стечению обстоятельств он своё дерево потерял.

Петя помнит о k вершинах из своего дерева информацию о расстоянии от каждой из них до всех n вершин дерева.

Перед вами стоит задача восстановить любое дерево, удовлетворяющее информации, которую помнит Петя, либо сообщить, что это невозможно.

Входные данные

В первой строке следуют два целых числа n и k (2 ≤ n ≤ 30 000, 1 ≤ k ≤ min(200, n)) — количество вершин в дереве и количество вершин, о которых помнит Петя.

В следующих k строках содержится информация о вершинах, которую помнит Петя. В i-й строке содержится n целых чисел di, 1, di, 2, ..., di, n (0 ≤ di, j ≤ n - 1), где di, j — расстояние до j-й вершины от i вершины, которую помнит Петя.

Выходные данные

Если не существует подходящего дерева, выведите -1.

В противном случае, выведите в n - 1-й строке по два целых числа — концы очередного ребра. Вы можете выводить ребра и концы ребер в любом порядке. Вершины дерева пронумерованы от 1 до n.

Если ответов несколько, разрешается вывести любой из них.

Примечание

Иллюстрация к первому примеру:

C. Необычная игра на матрице

жадные алгоритмы *1600

Иван играет в необычную игру.

У него есть матрица a, состоящая из n строк и m столбцов. Каждый элемент матрицы — 0 или 1. Строки и столбцы нумеруются с 1. Иван может заменить любое количество единиц в данной матрице нулями. После этого его счет в игре будет определен следующим образом:

  1. Изначально счет равен 0;
  2. В каждом столбце Иван находит самую верхнюю 1 (то есть, если текущий столбец j, тогда он найдет такое минимальное i, что ai, j = 1). Если в столбце нет 1, то столбец пропускается;
  3. Иван смотрит на следующие min(k, n - i + 1) элементов в текущем столбце (начиная с позиции найденной единицы) и подсчитывает количество 1 среди этих элементов. Это число прибавляется к счету Ивана.

Разумеется, Иван хочет добиться максимального счета в необычной игре. К тому же он не хочет изменять очень много элементов, поэтому планирует заменить минимально возможное число единиц нулями. Помогите ему определить максимальный счет, которого он может достичь, и минимальное количество замен, которое придется сделать для получения такого счета.

Входные данные

В первой строке записаны три целых числа n, m и k (1 ≤ k ≤ n ≤ 100, 1 ≤ m ≤ 100).

Затем идут n строк, в i-й из них записаны m целых чисел — элементы i-й строки матрицы a. Все числа равны либо 0, либо 1.

Выходные данные

Выведите два числа: максимальный счет, которого Иван может достичь, и минимальное количество замен, которое придется сделать для получения такого счета.

Примечание

В первом примере Иван может заменить элемент a1, 2.

F. Королевские вопросы

графы жадные алгоритмы снм *2500

В одном средневековом королевстве бушует экономический кризис. Надои молока падают, экономические показатели каждый день пробивают новое дно, деньги из казны пропадают в неизвестном направлении. Чтобы исправить положение, король Карл Солнцеликий принял решение женить своих n сыновей-принцев на невестах с, по возможности, как можно б'{о}льшим приданым.

В поисках кандидаток король отправил гонцов в соседние королевства, в результате чего ко двору прибыли делегации с m незамужними принцессами. Принимая гостей, Карл узнал, что приданое i-й принцессы составляет wi золотых монет.

Хотя дело и происходит в средневековье, в обществе уже широко распространены прогрессивные представления, в соответствии с которыми никто не может заставить принцессу выйти замуж за принца, который ей не по нраву. Поэтому каждой принцессе была предоставлена возможность выбрать двух принцев, за каждого из которых она готова выйти замуж. Принцам повезло меньше, они в вопросе выбора невесты будут повиноваться воле своего отца.

Зная размер приданого и предпочтения каждой принцессы, Карл хочет сыграть свадьбы таким образом, чтобы суммарное приданое невест всех его сыновей было как можно больше. При этом женить всех принцев или выдавать всех принцесс замуж не обязательно. Каждый принц может жениться не более чем на одной принцессе, и наоборот каждая принцесса может быть выдана не более чем за одного принца.

Помогите королю организовать женитьбу своих сыновей наиболее выгодным для казны способом.

Входные данные

В первой строке находятся два целых числа n, m (2 ≤ n ≤ 200 000, 1 ≤ m ≤ 200 000) — количество принцев и количество принцесс соответственно.

В каждой из последующих m строк находится по три целых числа ai, bi, wi (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ wi ≤ 10 000) — номера принцев, за которых готова выйти замуж i-я принцесса и размер её приданого.

Выходные данные

Выведите единственное целое число — максимальное количество золотых монет, которое может получить король, сыграв нужные свадьбы.

B. Berland Army

графы жадные алгоритмы Конструктив *2600

There are n military men in the Berland army. Some of them have given orders to other military men by now. Given m pairs (xi, yi), meaning that the military man xi gave the i-th order to another military man yi.

It is time for reform! The Berland Ministry of Defence plans to introduce ranks in the Berland army. Each military man should be assigned a rank — integer number between 1 and k, inclusive. Some of them have been already assigned a rank, but the rest of them should get a rank soon.

Help the ministry to assign ranks to the rest of the army so that:

  • for each of m orders it is true that the rank of a person giving the order (military man xi) is strictly greater than the rank of a person receiving the order (military man yi);
  • for each rank from 1 to k there is at least one military man with this rank.
Input

The first line contains three integers n, m and k (1 ≤ n ≤ 2·105, 0 ≤ m ≤ 2·105, 1 ≤ k ≤ 2·105) — number of military men in the Berland army, number of orders and number of ranks.

The second line contains n integers r1, r2, ..., rn, where ri > 0 (in this case 1 ≤ ri ≤ k) means that the i-th military man has been already assigned the rank ri; ri = 0 means the i-th military man doesn't have a rank yet.

The following m lines contain orders one per line. Each order is described with a line containing two integers xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi). This line means that the i-th order was given by the military man xi to the military man yi. For each pair (x, y) of military men there could be several orders from x to y.

Output

Print n integers, where the i-th number is the rank of the i-th military man. If there are many solutions, print any of them.

If there is no solution, print the only number -1.

J. Renovation

жадные алгоритмы Конструктив сортировки *2400

The mayor of the Berland city S sees the beauty differently than other city-dwellers. In particular, he does not understand at all, how antique houses can be nice-looking. So the mayor wants to demolish all ancient buildings in the city.

The city S is going to host the football championship very soon. In order to make the city beautiful, every month the Berland government provides mayor a money tranche. The money has to be spent on ancient buildings renovation.

There are n months before the championship and the i-th month tranche equals to ai burles. The city S has m antique buildings and the renovation cost of the j-th building is bj burles.

The mayor has his own plans for spending the money. As he doesn't like antique buildings he wants to demolish as much of them as possible. For the j-th building he calculated its demolishing cost pj.

The mayor decided to act according to the following plan.

Each month he chooses several (possibly zero) of m buildings to demolish in such a way that renovation cost of each of them separately is not greater than the money tranche ai of this month (bj ≤ ai) — it will allow to deceive city-dwellers that exactly this building will be renovated.

Then the mayor has to demolish all selected buildings during the current month as otherwise the dwellers will realize the deception and the plan will fail. Definitely the total demolishing cost can not exceed amount of money the mayor currently has. The mayor is not obliged to spend all the money on demolishing. If some money is left, the mayor puts it to the bank account and can use it in any subsequent month. Moreover, at any month he may choose not to demolish any buildings at all (in this case all the tranche will remain untouched and will be saved in the bank).

Your task is to calculate the maximal number of buildings the mayor can demolish.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 100 000) — the number of months before the championship and the number of ancient buildings in the city S.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109), where ai is the tranche of the i-th month.

The third line contains m integers b1, b2, ..., bm (1 ≤ bj ≤ 109), where bj is renovation cost of the j-th building.

The fourth line contains m integers p1, p2, ..., pm (1 ≤ pj ≤ 109), where pj is the demolishing cost of the j-th building.

Output

Output single integer — the maximal number of buildings the mayor can demolish.

Note

In the third example the mayor acts as follows.

In the first month he obtains 6 burles tranche and demolishes buildings #2 (renovation cost 6, demolishing cost 4) and #4 (renovation cost 5, demolishing cost 2). He spends all the money on it.

After getting the second month tranche of 3 burles, the mayor selects only building #1 (renovation cost 3, demolishing cost 1) for demolishing. As a result, he saves 2 burles for the next months.

In the third month he gets 2 burle tranche, but decides not to demolish any buildings at all. As a result, he has 2 + 2 = 4 burles in the bank.

This reserve will be spent on the fourth month together with the 4-th tranche for demolishing of houses #3 and #5 (renovation cost is 4 for each, demolishing costs are 3 and 5 correspondingly). After this month his budget is empty.

Finally, after getting the last tranche of 3 burles, the mayor demolishes building #6 (renovation cost 2, demolishing cost 3).

As it can be seen, he demolished all 6 buildings.

K. Road Widening

жадные алгоритмы Конструктив реализация *1800

Mayor of city S just hates trees and lawns. They take so much space and there could be a road on the place they occupy!

The Mayor thinks that one of the main city streets could be considerably widened on account of lawn nobody needs anyway. Moreover, that might help reduce the car jams which happen from time to time on the street.

The street is split into n equal length parts from left to right, the i-th part is characterized by two integers: width of road si and width of lawn gi.

For each of n parts the Mayor should decide the size of lawn to demolish. For the i-th part he can reduce lawn width by integer xi (0 ≤ xi ≤ gi). After it new road width of the i-th part will be equal to s'i = si + xi and new lawn width will be equal to g'i = gi - xi.

On the one hand, the Mayor wants to demolish as much lawn as possible (and replace it with road). On the other hand, he does not want to create a rapid widening or narrowing of the road, which would lead to car accidents. To avoid that, the Mayor decided that width of the road for consecutive parts should differ by at most 1, i.e. for each i (1 ≤ i < n) the inequation |s'i + 1 - s'i| ≤ 1 should hold. Initially this condition might not be true.

You need to find the the total width of lawns the Mayor will destroy according to his plan.

Input

The first line contains integer n (1 ≤ n ≤ 2·105) — number of parts of the street.

Each of the following n lines contains two integers si, gi (1 ≤ si ≤ 106, 0 ≤ gi ≤ 106) — current width of road and width of the lawn on the i-th part of the street.

Output

In the first line print the total width of lawns which will be removed.

In the second line print n integers s'1, s'2, ..., s'n (si ≤ s'i ≤ si + gi) — new widths of the road starting from the first part and to the last.

If there is no solution, print the only integer -1 in the first line.

M. Quadcopter Competition

жадные алгоритмы математика *1100

Polycarp takes part in a quadcopter competition. According to the rules a flying robot should:

  • start the race from some point of a field,
  • go around the flag,
  • close cycle returning back to the starting point.

Polycarp knows the coordinates of the starting point (x1, y1) and the coordinates of the point where the flag is situated (x2, y2). Polycarp’s quadcopter can fly only parallel to the sides of the field each tick changing exactly one coordinate by 1. It means that in one tick the quadcopter can fly from the point (x, y) to any of four points: (x - 1, y), (x + 1, y), (x, y - 1) or (x, y + 1).

Thus the quadcopter path is a closed cycle starting and finishing in (x1, y1) and containing the point (x2, y2) strictly inside.

The picture corresponds to the first example: the starting (and finishing) point is in (1, 5) and the flag is in (5, 2).

What is the minimal length of the quadcopter path?

Input

The first line contains two integer numbers x1 and y1 ( - 100 ≤ x1, y1 ≤ 100) — coordinates of the quadcopter starting (and finishing) point.

The second line contains two integer numbers x2 and y2 ( - 100 ≤ x2, y2 ≤ 100) — coordinates of the flag.

It is guaranteed that the quadcopter starting point and the flag do not coincide.

Output

Print the length of minimal path of the quadcopter to surround the flag and return back.

C. Метро Бергорода

жадные алгоритмы математика поиск в глубину и подобное *1500

Строительство метро в Бергороде подходит к концу! Президент Берляндии решил посетить этот город и взглянуть на новое метро своими глазами.

Метро состоит из n станций. Оно построено по всем правилам Бергородского Транспортного Закона:

  1. Для каждой станции i существует ровно один поезд, идущий от этой станции. Его конечная станция — pi, возможно, что pi = i;
  2. Для каждой станции i существует ровно одна станция j такая, что pj = i.

Президент рассмотрит выгодность метро после посещения. Выгодность — это количество таких упорядоченных пар (x, y), что посетитель начнет на станции x, а после, воспользовавшись несколькими поездами (возможно нулевым количеством), прибудет на станцию y (1 ≤ x, y ≤ n).

Мэр Бергорода считает, что если выгодность метро недостаточно высока, то Президент может заменить мэра в городе (разумеется, текущий мэр не хочет, чтобы это произошло). Перед посещением Президентом города мэр успеет перестроить некоторые части метро, таким образом, изменяя значения pi для не более чем двух станций метро. Конечно, нарушать Бергородский Транспортный Закон недопустимо, поэтому метро должно подчиняться Закону и после изменений.

Мэр хочет перестроить такие части метро, чтобы выгодность метро стала максимальной возможной. Помогите ему посчитать, какую максимальную выгодность он может получить.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100000) — количество станций.

Во второй строке записаны n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — текущая структура метро. Все эти числа различны.

Выходные данные

Выведите одно число — максимальное возможное значение выгодности.

Примечание

В первом примере мэр может поменять p2 на 3 и p3 на 1, тогда будет 9 пар: (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3).

Во втором примере можно поменять p2 на 4 и p3 на 5.

D. Коробки и шары

жадные алгоритмы Структуры данных *2300

У Ивана есть n различных коробок. В первой из них лежат шары n различных цветов.

Иван планирует организовать следующую игру. Он хочет распределить шары по коробкам таким образом, чтобы для любого i (1 ≤ i ≤ n) i-я коробка содержала все шары цвета i.

Иван совершит некоторые ходы, чтобы добиться этого. В каждый ход он делает следующие шаги:

  1. Иван выбирает любую непустую коробку и вытаскивает все шары из нее;
  2. Потом Иван выбирает любые k пустых коробок (коробка из первого шага стала пустой, Иван может выбрать и ее), разделяет шары с предыдущего шага на k непустых групп и помещает каждую из групп в одну их этих коробок. Он обязан положить каждую группу шаров в отдельную коробку. Он может выбрать только k = 2 или k = 3.

За ход Ивану добавляется штраф, равный количеству шаров, которые он вытащил на первом шаге. Штраф за игру считается, как сумма штрафов за ходы, которые Иван совершил до распределения всех шаров по соответствующим коробкам.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 200000) — количество коробок и цветов.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — количество шаров цвета i.

Выходные данные

Выведите одно число — минимальный возможный штраф за игру.

Примечание

В первом примере стоит вытащить все шары из первой коробки, выбрать k = 3 и распределить все цвета по соответствующим коробкам. Штраф — 6.

Во втором примере надо сделать два хода:

  1. Взять все шары из первой коробки, выбрать k = 3, положить шары цвета 3 в третью коробку, цвета 4 — в четвертую коробку, а остальные вернуть в первую коробку. Штраф — 14;
  2. Взять все шары из первой коробки, выбрать k = 2, положить шары цвета 1 в первую коробку, а шары цвета 2 — во вторую коробку. Штраф — 5.

Суммарный штраф — 19.

F. Распалиндруй!

графы жадные алгоритмы Потоки *2500

Строка a длины m называется антипалиндромной тогда и только тогда, когда m четное, и для каждого i (1 ≤ i ≤ m) ai ≠ am - i + 1.

У Ивана есть строка s из n строчных латинских букв; n четно. Он хочет построить некоторую строку t, которая будет антипалидромной перестановкой букв строки s. Также Иван определяет красоту индекса i как bi, а красоту строки t как сумму bi по всем таким индексам i, что si = ti.

Помогите Ивану определить максимальную красоту строки t, которую он может получить.

Входные данные

В первой строке записано одно целое число n (2 ≤ n ≤ 100, n четно) — количество букв в s.

Вторая строка содержит саму строку s. В ней присутствуют только строчные латинские буквы. Гарантируется, что можно переставить в ней буквы так, чтобы получить антипалиндромную строку.

Третья строка содержит n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 100), где biкрасота индекса i.

Выходные данные

Выведите одно число — максимальную возможную красоту строки t.

C. Петя и катакомбы

Деревья жадные алгоритмы реализация снм *1300

Однажды Петя — очень храбрый исследователь — решил заняться изучением великих парижских катакомб. Так как Петя не очень опытный в этом деле, его исследование заключается в хождении по катакомбам.

Катакомбы представляют из себя набор комнат, некоторые из которых соединены переходами, переход может соединять комнату с самой собой, по переходам можно ходить в любую сторону. Переходы могут находиться на разных глубинах, что позволяет им не пересекаться. Каждую минуту Петя выбирает произвольным образом переход из комнаты, в которой он находится, и проходит его за одну минуту. Когда он заходит в комнату в минуту i, он делает в журнал запись — число ti:

  • Если Петя уже был в этой комнате, он записывает минуту, когда он был в этой комнате в предыдущий раз;
  • Иначе Петя записывает в журнал произвольное неотрицательное целое число, строго меньшее текущей минуты i.

Изначально Петя находился в какой-то из комнат в минуту 0, при этом число t0 он не записывал.

В какой-то момент Петя устал, бросил журнал и пошёл домой (не обязательно в той же комнате, из которой он начинал). Вася нашёл этот журнал, и теперь ему интересно: какое наименьшее количество комнат может быть в катакомбах, согласно журналу Пети?

Входные данные

В первой строке находится одно целое число n (1 ≤ n ≤ 2·105) — количество записей в журнале Пети.

Во второй строке находятся n целых чисел t1, t2, ..., tn (0 ≤ ti < i) — записи в журнале.

Выходные данные

В первой строке выведите единственное число — минимальное возможное количество комнат в парижских катакомбах.

Примечание

В первом тестовом примере последовательность комнат, по которым прошёл Петя, могла быть 1 → 1 → 2 или 1 → 2 → 1, или, например, 1 → 2 → 3. Минимальное число комнат равно 2.

Во втором тестовом примере эта последовательность могла быть 1 → 2 → 3 → 1 → 2 → 1.

F. Модельный ряд

жадные алгоритмы сортировки *2500

Завершающий акт показа мод устроен так: все модели выходят на сцену и встают в один ряд бок о бок, а справа от них всех встаёт модельер. На репетиции этого выхода Изабелле показалось, что ряд получился некрасивым, но она никак не может придумать, как его исправить.

Как и многие люди, долго находящиеся в мире искусства, Изабелла обладает своеобразным чувством прекрасного. Оценивая красоту ряда моделей, она руководствуется их ростом. Она считает ряд красивым, если для каждой модели расстояние до ближайшего более низкого человека (т.е. модели или модельера) справа не превосходит k (расстояние между соседними людьми равно 1, расстояние между людьми, между которыми стоит один человек, равно 2 и т.д.).

Она хочет сделать ряд красивым, но у режиссёра тоже есть своё чувство прекрасного, так что она может поменять местами не более одной пары людей, причем таких, что в изначальном ряду левый человек пары был строго выше правого человека пары.

Модельер (человек, стоящий справа от моделей) имеет рост строго меньший чем рост каждой модели и не может участвовать в смене мест.

Скажите можно ли оставить ряд неизменным или поменять местами пару людей так, чтобы ряд стал красивым для Изабеллы.

Входные данные

В первой строке даны два целых числа n и k (1 ≤ n ≤ 5·105, 1 ≤ k ≤ n) – число моделей и описанное выше расстояние.

Во второй строке даны n целых чисел ai (1 ≤ ai ≤ 109) — рост каждой модели. Обратите внимание на то, что рост модельера во входных данных не указан и может быть меньше 1.

Выходные данные

Выведите «YES» (без кавчек), если ряд можно оставить или сделать красивым, и «NO» (без кавчек) иначе.

B. Неисправный робот

жадные алгоритмы *1000

У Ивана есть робот, расположенный на бесконечной плоскости. Изначально робот находится в стартовой клетке (0, 0). Робот может выполнять команды. Существует четыре основных команды, доступные для выполнения:

  • U — перейти из клетки (x, y) в (x, y + 1);
  • D — перейти из (x, y) в (x, y - 1);
  • L — перейти из (x, y) в (x - 1, y);
  • R — перейти из (x, y) в (x + 1, y).

Иван ввёл последовательность из n команд, и робот обработал её. После обработки последовательности робот закончил свой путь в стартовой клетке (0, 0), но Иван сомневается, что после заданной им последовательности робот должен оставаться на месте. Он считает, что робот проигнорировал некоторые команды. Чтобы оценить, насколько серьёзный ремонт требуется роботу, Иван должен посчитать максимально возможное число команд, которое робот мог обработать правильно. Помогите Ивану провести необходимые вычисления!

Входные данные

В первой строке записано одно число n — длина последовательности команд, введённой Иваном (1 ≤ n ≤ 100).

Во второй строке записана сама последовательность — строка из n символов. Каждый символ — U, D, L или R.

Выходные данные

Выведите максимально возможное число команд из последовательности, которое робот мог выполнить и после этого остаться в стартовой клетке.

A. Ограбление

жадные алгоритмы *1800

Ночь. Неуловимый Джо пробрался внутрь сейфа главного банка страны. Здесь имеется n ячеек, расположенных в ряд, в каждой из которых лежит некоторое количество алмазов. Для удобства пронумеруем ячейки натуральными числами от 1 до n слева направо.

К сожалению, Джо не отключил последнюю из систем безопасности. Зато он знает как она устроена.

Каждую минуту система безопасности определяет для каждых двух соседних ячеек (разность номеров которых ровно 1) суммарное количество алмазов в них. В итоге получается n - 1 сумма. Если хотя бы одна из них отличается от соответствующей суммы, полученной при предыдущем измерении, система безопасности срабатывает.

Джо может перемещать алмазы между проверками системы безопасности. За минуту между двумя проверками он успевает сделать не более m перемещений. Перемещением считается одна из трех следующих операций: перемещение алмаза из любой ячейки в любую другую, перемещение алмаза из любой ячейки в карман Джо, перемещение алмаза из кармана в любую ячейку. Изначально карман Джо пуст, в любую ячейку и в карман помещается неограниченное количество алмазов. Считается, что до всех действий Джо система делает хотя бы одну проверку.

Утром в банк придут банковские служащие, поэтому Джо должен уйти из банка до этого момента. У Джо есть k перерывов между проверками системы безопасности перед тем, как нужно будет скрыться. Все, что останется при этом у Джо в кармане, считается его добычей.

Определите наибольшее количество алмазов, которые может унести с собой Джо. Система безопасности при этом не должна сработать (в том числе и после того, как Джо покинет банк), а скрыться Джо должен до наступления утра.

Входные данные

В первой строке находятся целые числа n, m и k (1 ≤ n ≤ 104, 1 ≤ m, k ≤ 109). В следующей строке находятся n чисел. i-ое из них равно количеству алмазов в i-ой ячейке — целое число от 0 до 105.

Выходные данные

Выведите одно целое число — максимальное количество алмазов, которые может унести с собой Джо.

Примечание

Во втором примере Джо может действовать следующим образом.

Изначально расположение алмазов 4 1 3.

За первый перерыв Джо перекладывает один алмаз из 1-ой ячейки во 2-ую и один алмаз из 3-ей ячейки себе в карман.

Расположение алмазов в конце первого перерыва 3 2 2. Проверка не находит изменений и система безопасности не срабатывает.

За второй перерыв Джо перекладывает один алмаз из 3-ей ячейки во 2-ую и один алмаз из 1-ой ячейки себе в карман.

Расположение алмазов в конце второго перерыва 2 3 1. Проверка опять не находит изменений и система безопасности не срабатывает.

Теперь Джо уходит с 2 алмазами в кармане.

E. Огонь и Лед

жадные алгоритмы *2900

Властелин Огня напал на Страну Холода. Он уже добрался до ледяной крепости, где живет Снежная Королева, и выстроил свое войско на отрезке длины n недалеко от стен замка. И только ледяной маг Соломон может спасти Страну Холода.

Отрезок длины n находится на расстоянии ровно 1 от стен замка. Его можно мысленно разделить на единичные отрезки. На некоторых из этих единичных отрезков находятся огненные демоны — не более одного демона на позицию. Каждый демон характеризуется силой — некоторым целых положительным числом. Можно считать, что огненные демоны неподвижны.

Изначально Соломон находится на стене крепости. Он может несколько раз подряд выполнять следующие действия:

  • «L» — Соломон перемещается на единицу влево. Это действие нельзя делать на стене замка.
  • «R» — Соломон перемещается на единицу вправо. Это действие нельзя делать если справа нет ледяного блока.
  • «A» — если справа от Соломона ничего нет, то Соломон создает ледяной блок, который сразу же примораживается к блоку, на котором Соломон сейчас стоит. Если же там уже есть ледяной блок, то Соломон его уничтожает. При этом могут остаться ледяные блоки правее только что уничтоженного и они остаются без опоры. Эти ледяные блоки падают вниз.

На каждое из этих действий Соломон тратит ровно одну секунду.

В результате действий Соломона вниз падают отрезки из ледяных блоков. Когда на огненного демона падает ледяной блок, блок превращается в пар, а сила демона уменьшается на 1. Когда сила огненного демона становится равной 0, огненный демон исчезает. Как это происходит, можно посмотреть на рисунке ниже. Ледяной блок, упавший на позицию, где нет демона, разбивается на множество мелких осколков и исчезает, не нанося никому повреждений.

Помогите Соломону за наименьшее время уничтожить все войско Властелина Огня.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 1000). В следующей строке находятся n чисел. i-ое из них означает силу огненного демона на i-ой позиции — целое число от 1 до 100. Если в i-ой позиции нет демона, то i-е число равно 0. Гарантируется, что во входных данных имеется хотя бы один огненный демон.

Выходные данные

Выведите строку наименьшей длины, состоящую из символов «L», «R» и «A» — последовательность действий, приводящую к искомому результату.

Если возможных ответов несколько — выведите любой.

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 операций.

B. Чревоугодие

жадные алгоритмы Конструктив *2000

Вам дан массив a, содержащий n различных целых чисел. Постройте массив b, который будет являться перестановкой a, такой, что для любого не пустого подмножества индексов S = {x1, x2, ..., xk} (1 ≤ xi ≤ n, 0 < k < n) сумма элементов на этих позициях в массивах a и b будет различна, т. е.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 22) — размер массива.

Вторая строка содержит n различных целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Если подходящего массива b не существует, выведите -1.

В противном случае выведите n целых чисел b1, b2, ..., bn. Обратите внимание, что b должен быть перестановкой a.

Если существуют несколько ответов, выведите любой.

Примечание

Массив x является перестановкой массива y, если в массиве y можно переставить элементы так, чтобы он совпал с x.

Обратите внимание, что пустое подмножество индексов и подмножество, содержащее все индексы, не учитываются.

A. Алчность

жадные алгоритмы реализация *900

У Жафара есть n банок колы. Каждую банку можно описать двумя числами: оставшимся объемом колы в ней ai и ее вместительностью bi (ai  ≤  bi).

Жафар решил перелить всю оставшуюся колу в 2 банки. Определите, может ли он это сделать, или нет.

Входные данные

Первая строка содержит одно целое число n (2 ≤ n ≤ 100 000) — количество банок колы.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — объем колы в каждой банке.

Третья строка содержит n целых чисел b1, b2, ..., bn (ai ≤ bi ≤ 109) — вместительности банок.

Выходные данные

Выведите «YES» (без кавычек), если возможно перелить всю оставшуюся колу в 2 банки. Иначе выведите «NO» (без кавычек).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере кола изначально в 2 банках, поэтому ответ «YES».

B. Гнев

жадные алгоритмы реализация *1200

Руки, проливающие кровь невинную.

В линию выстроены n виновных людей, i-й из них держит в руках коготь длины Li. По звонку каждый человек убивает нескольких людей перед собой. Все люди убивают одновременно. А именно, i-й человек убивает j-го человека если и только если j < i и j ≥ i - Li.

Вам даны длины когтей. Найдите число людей, которые останутся в живых после того, как прозвенит звонок.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 106) — количество виновных людей.

Вторая строка содержит n целых чисел L1, L2, ..., Ln (0 ≤ Li ≤ 109), где Li — длина когтя в руках i-го человека.

Выходные данные

Выведите одно число — количество человек, которые останутся в живых после того, как прозвенит звонок.

Примечание

В первом примере последний человек убьет всех перед собой.

C. Слух

графы жадные алгоритмы поиск в глубину и подобное *1300

Вова пообещал себе больше никогда не играть в игры... Но недавно компания Firestorm выпустила очень популярную игру — World of Farcraft, и Вова, конечно же, начал в неё играть.

Он впал в ступор при выполнении очередного квеста — необходимо было прийти в поселение Надгород и распространить там слух.

Вова знает, что в Надгороде живут n персонажей. Некоторые персонажи дружат между собой и готовы делиться информацией друг с другом. Также он знает, что i-й персонаж готов начать распространять слух за ci золота. Как только персонаж узнаёт слух, он рассказывает его всем своим друзьям, которые, в свою очередь, тоже начинают распространять этот слух (но уже бесплатно).

Вова хочет, чтобы слух узнали все n персонажей Надгорода. За какое минимальное количество золота он сможет это сделать?

Посмотрите примечание для лучшего понимания задачи.

Входные данные

В первой строке входных данных задано два целых числа n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ 105) — количество людей в Надгороде и количество дружеских связей между ними.

В следующей строке входных данных заданы n целых чисел ci (0 ≤ ci ≤ 109) — количество золота, за которое i-й персонаж готов начать распространять слух.

В следующих m строках заданы пары (xi, yi), обозначающие, что персонажи xi и yi дружат (1 ≤ xi, yi ≤ n, xi ≠ yi). Гарантируется, что никакая пара дружащих персонажей не повторяется.

Выходные данные

Выведите единственное число — минимальное количество золота, за которое Вова сможет выполнить квест.

Примечание

В первом тестовом примере Вове выгоднее всего заплатить первому персонажу (он узнает слух и расскажет его четвёртому персонажу, который в свою очередь расскажет его пятому персонажу). Также ему будет необходимо заплатить второму и третьему персонажам, чтобы они тоже узнали слух.

Во втором тестовом примере необходимо заплатить всем персонажам.

В третьем тестовом примере необходимо заплатить первому, третьему, пятому, седьмому и девятому персонажам, которые расскажут слух своим друзьям.

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» (без кавычек), если Люба не сможет класть деньги на карту так, чтобы удовлетворить всем вышеописанным ограничениям, либо же минимальное количество дней, необходимое для этого.

B. Айсея играет с Ктолли

Бинарный поиск жадные алгоритмы игры интерактив Конструктив *2000

Это интерактивная задача. Обратитесь к секции «Протокол взаимодействия» для лучшего понимания.

Айсея и Ктолли хотят сыграть в игру, чтобы определить, кто сможет воспользоваться кухней сегодня вечером.

Изначально Айсея выкладывает n листов бумаги в ряд. Они пронумерованы от 1 до n слева направо.

Во время игры будет проведено m раундов. В каждом раунде Айсея даст Ктолли целое число от 1 до c и Ктолли будет должена записать это число на одном из листов бумаги (если на этом листе уже было записано число, Ктолли сотрёт его и запишет на его месте новое).

Ктолли победит, если в какой-то момент на каждом листке будет записано число, и эти n чисел будут идти в неубывающем порядке, если смотреть на листы слева направо, начиная с листа 1 и заканчивая листом n, и проиграет, если за все m раундов игры такая ситуация не возникнет.

Ктолли очень хочет победить, потому что хочет приготовить еду для Уильяма, но не знает, как выиграть в эту игру. Поэтому Ктолли просит вас написать программу, которая будет получать числа, которые называет Айсея, и будет решать на какой лист записывать это число.

Гарантируется, что ходы Айсея выбраны заранее и что они не зависят от ходов вашей программы.

Входные данные

В первой строке содержатся три целых числа n, m и c (, означает число , округленное вверх) — количество листов бумаги, количество раундов и максимальное число, которое Айсея может сказать Ктолли, соответственно. Остальная часть ввода описана в разделе «Протокол взаимодействия».

Протокол взаимодействия

Во время каждого раунда ваша программа должна считать одно целое число pi (1 ≤ pi ≤ c), которое обозначает число, названное Айсеей.

Ваша программа должна вывести в новой строке одно целое число от 1 до n, обозначающее номер листа, на который необходимо записать число.

После вывода каждой строки не забудьте сбросить буфер вывода. Например:

  • fflush(stdout) в C/C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • flush(output) в Pascal;
  • Обратитесь к документации для других языков программирования.

Если Ктолли выигрывает после некоторого раунда, вашей программе больше не будет ничего подаваться на ввод и она должна завершиться. Можно доказать, что при заданных ограничениях Ктолли всегда может победить.

Примечание

В первом тестовом примере Айсея выкладывает 2 листа бумаги. После этого происходит 4 раунда игры, во время каждого из которых Айсея может назвать число от 1 до 4.

Затем Айсея называет число 2 и Ктолли записывает его на лист с номером 1. После этого Айсея называет число 1 и записывает на лист с номером 2. Наконец, Айсея называет число 3, после чего Ктолли заменяет число 1 на число 3 на листе с номером 2 и выигрывает, так как на каждом листе записано какое-то число и они упорядочены по неубыванию слева направо.

Обратите внимание, что Ваша программа должна немедленно завершиться после победы Чтолли и не должна читать числа из входного потока для последующих раундов. В противном случае вердикт программы не определён. В частности, учитывайте этот факт при взломах чужих решений. В тестовом примере Ктолли выиграла после раунда 3, поэтому требуется, чтобы Ваша программа не считывала число для раунда 4.

Формат ввода для взломов:

  • В первой строке записаны 3 целых числа n, m и c;
  • В последующих m строках записаны целые числа от 1 до c, обозначающие число, произнесённое Ктолли во время каждого раунда.

D. Будильник

жадные алгоритмы *1600

Каждый вечер Виталик заводит n будильников, чтобы не проспать потом весь день. Каждый будильник звенит ровно одну минуту и характеризуется целым числом ai — номер минуты после полуночи, когда он срабатывает. Каждый будильник срабатывает в начале соответствующей минуты, и звенит ровно минуту.

Виталик точно проснётся, если за некоторые m подряд идущих минут сработают хотя бы k будильников. Обратите внимание, что Виталик учитывает только те будильники, которые начали звонить в данном промежутке времени. Будильники, которые начали звонить раньше, но продолжают звенеть в течении рассматриваемого промежутка Виталик не учитывает.

Виталик настолько устал, что хочет проспать весь день и не просыпаться. Определите минимальное количество будильников, которые нужно выключить Виталику, чтобы проспать весь следующий день. Считайте, что изначально все будильники включены.

Входные данные

В первой строке следуют три целых числа n, m и k (1 ≤ k ≤ n ≤ 2·105, 1 ≤ m ≤ 106) — количество будильников и параметры (длительность и количество будильников) для пробуждения Виталика.

Во второй строке следует последовательность различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106), где ai равно минуте, в которую срабатывает i-й будильник. Числа заданы в произвольном порядке. Считайте, что Виталик живет в Берляндии, в которой день длится 106 минут.

Выходные данные

Определите минимальное количество будильников, которые нужно выключить Виталику, чтобы проспать весь следующий день.

Примечание

В первом примере Виталику достаточно выключить первый будильник, который звенит в минуту 3.

Во втором примере Виталику не нужно выключать ни одного будильника, так как ни за какие 10 подряд идущих минут не прозвенит 3 будильника.

В третьем примере Виталик должен выключить любые 6 будильников, чтобы продолжить сон.

E. Квадраты и не квадраты

жадные алгоритмы Конструктив *1600

У Ани и Бори есть n кучек с конфетами, причём n чётное число: i-я кучка содержит ai конфет.

Аня любит числа, которые являются квадратами целых чисел, а Боря любит числа, которые не являются квадратами целых чисел. За один ход ребята совместно договариваются выбрать какую-то кучку с конфетами и положить в неё одну новую конфету (которая до этого не лежала ни в одной кучке), либо взять из этой кучки конфету (если эта кучка не пуста), и съесть её.

Определите минимальное количество ходов, необходимых для того, чтобы ровно n / 2 кучек содержали количества конфет, являющиеся квадратами целых чисел, а оставшиеся n / 2 кучек содержали количества конфет, не являющиеся квадратами целых чисел.

Входные данные

В первой строке следует целое чётное число n (2 ≤ n ≤ 200 000) — количество кучек с конфетами.

Во второй строке следует последовательность a1, a2, ..., an (0 ≤ ai ≤ 109) — размеры кучек с конфетами.

Выходные данные

Выведите минимальное количество ходов, необходимых для того, чтобы ровно n / 2 кучек содержали количества конфет, являющиеся квадратами целых чисел, а другие n / 2 кучек содержали количества конфет, не являющиеся квадратами целых чисел. Если для выполнения этих условий не нужно делать ни одного хода, выведите 0.

Примечание

В первом примере достаточно двух ходов. На каждом ходу нужно класть новую конфету во вторую кучку. После этого её размер станет равным 16, поэтому у Ани и Бори станет две кучки, чьи размеры являются квадратами целых чисел (вторая и четвертая кучки), и две кучки, чьи размеры не являются квадратами целых чисел (первая и третья кучки).

Во втором примере необходимо добавить по две конфеты в любые три кучки.

A. Разбиение на команды

жадные алгоритмы Конструктив математика *800

На тренировку по программированию пришли n групп студентов. В каждой группе либо один человек, которому не важно, с кем писать контест, либо два человека, которые обязательно хотят писать контест в одной команде.

Тренер решил, что для тренировки соберёт команды ровно из трёх человек. Определите максимальное количество команд из трёх человек, которые смогут написать тренировку. Возможна ситуация, когда не все группы получится распределить в команды. Группы нужно брать целиком, т. е. в группе из двух человек либо оба пишут тренировку, либо оба не пишут. Если тренер берёт на тренировку группу из двух человек, то он обязательно должен определить их в одну команду.

Входные данные

В первой строке следует целое положительно число n (2 ≤ n ≤ 2·105) — количество групп студентов.

Во второй строке следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2), где ai равно количеству человек в i-й группе.

Выходные данные

Выведите максимальное количество команд из трёх человек, которые смогут написать контест.

Примечание

В первом примере тренер сможет набрать одну команду. Для этого он может, например, взять три группы из одного человека: группы с номерами один, два и четыре.

Во втором примере тренеру не удастся набрать ни одной команды.

В третьем примере тренер сможет собрать три команды. Например, он может сделать это так:

  • группа номер один (из двух человек) и группа номер семь (из одного человека)
  • группа номер два (из двух человек) и группа номер шесть (из одного человека)
  • группа номер три (из двух человек) и группа номер четыре (из одного человека)

A. Канатная дорога

жадные алгоритмы математика *1000

Группа студентов хочет подняться на вершину горы, чтобы там устроить пикник. Для этого они решили воспользоваться канатной дорогой.

Канатная дорога представляет собой некоторое количество кабинок, которые подвешены с помощью каната на специальные опоры. Канат циклически прокручивается между первой и последней опорами (первая из них находится у подножья горы, а последняя — на вершине), а вместе с ним движутся и прикрепленные к нему кабинки.

Количество кабинок кратно трем и они раскрашены в три цвета — красный, зеленый и синий — таким образом, что после каждой красной кабинки идет зеленая кабинка, после каждой зеленой — синяя, а после каждой синей — красная. В каждую кабинку помещается не более двух человек. Кабинки приходят с периодичностью в одну минуту, а поднимаются наверх ровно за 30 минут.

Все студенты делятся на три группы: r из них любят кататься только в красных кабинках, g — только в зеленых и b — только в синих. Студент никогда не садится в кабинку с цветом, который ему не нравится.

Первая пришедшая кабинка (в момент времени 0) имеет красный цвет. Определите наименьшее время, за которое вся группа студентов может подняться на вершину горы.

Входные данные

В первой строке находятся три целых числа — r, g и b (0 ≤ r, g, b ≤ 100). Гарантируется, что r + g + b > 0, то есть группа состоит хотя бы из одного студента.

Выходные данные

Выведите единственное число — наименьшее время, за которое вся группа студентов может подняться на вершину горы.

Примечание

Разберем первый пример.

В момент времени 0 приходит красная кабинка, в нее садится один студент из группы r и приезжает наверх в момент времени 30.

В момент времени 1 приезжает зеленая кабинка, в нее садятся два студента из группы g, которые приезжают наверх в момент времени 31.

В момент времени 2 приезжает синяя кабинка, в нее садятся два студента из группы b, которые приезжают наверх в момент времени 32.

В момент времени 3 приезжает красная кабинка, но одному оставшемуся студенту красный цвет не нравится и кабинка уезжает пустой.

В момент времени 4 приезжает зеленая кабинка, в нее садится один студент из группы g, который приезжает наверх в момент времени 34.

Итак, все студенты наверху, общее затраченное время равно 34 минутам.

A. Поход к другу

жадные алгоритмы реализация *1100

Свин решил сходить в гости к другу.

Оказалось, что дом Свина находится в точке 0, а дом его друга — в точке m на координатной прямой.

В мире, где живет Свин, можно перемещаться с помощью телепортов.

Чтобы воспользоваться телепортом, нужно прийти в определенную точку (туда, где этот телепорт находится) и выбрать, куда телепортироваться: для каждого телепорта известна самая правая точка, куда он может отправить посетителя, называемая пределом телепорта.

Формально, телепорт, расположенный в точке x с пределом y, может переместить из точки x до любой точки отрезка [x; y], включая границы.

Помогите Свину узнать, может ли он прийти к другу, используя только телепорты или сообщите, что ему придется поехать к другу на своем гоночном болиде.

Входные данные

На первой строке через пробел даны числа n и m (1 ≤ n ≤ 100, 1 ≤ m ≤ 100) — количество телепортов и координаты дома друга.

Следующие n строк содержат информацию о телепортах.

В i-й из этих строк содержится два целых числа ai, bi, (0 ≤ ai ≤ bi ≤ m), где ai — координата i-го телепорта, а bi — его предел.

Гарантируется, что ai ≥ ai - 1 для всех i (2 ≤ i ≤ n).

Выходные данные

Выведите «YES», если существует путь от дома Свина до дома друга, использующий только телепорты, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Первый пример изображен на следующей картинке:

Свин с помощью первого телепорта от своего дома (точки 0) добирается до точки 2, дальше с помощью второго от точки 2 до точки 3, и с помощью третьего от точки 3 до точки 5, где и живет друг.

Второй пример изображен на следующей картинке:

Как видно на картинке, добраться от дома Свина до дома друга нельзя.

B. Красим дерево

жадные алгоритмы поиск в глубину и подобное снм *1200

Задано корневое дерево, состоящее из n вершин. Будем считать, что вершины дерева пронумерованы целыми числами от 1 до n. Корнем дерева является вершина с номером 1.

Каждая вершина дерева имеет определенный цвет, цвет вершины v будем обозначать cv, изначально cv = 0.

В задаче вам требуется раскрасить дерево в заданные цвета с помощью минимального числа действий. За одно действие вы можете выбрать вершину v и цвет x, и покрасить все вершины поддерева v (включая v) в цвет x, то есть для всех вершин u таких, что путь от корня до u содержит вершину v, сделать cu = x.

Гарантируется, что все вершины надо покрасить в цвет, отличный от 0.

Определение корневого дерева можно прочитать по ссылке: https://ru.wikipedia.org/wiki/Дерево_(теория_графов).

Входные данные

В первой строке находится одно целое число n (2 ≤ n ≤ 104) — число вершин дерева.

В следующей строке следуют n - 1 целых чисел p2, p3, ..., pn (1 ≤ pi < i), где pi обозначает, что существует ребро в графе между вершинами i и pi.

В следующей строке следуют n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ n), где ci обозначает желаемый цвет вершины i.

Гарантируется, что заданный граф является деревом.

Выходные данные

На первой и единственной строке выведите одно целое число — минимальное число действий, за которое можно покрасить дерево в желаемые цвета.

Примечание

Первый пример расположен на следующей картинке (числа обозначают номера вершин):

Первым действием мы красим все вершины поддерева вершины 1 в цвет 2 (числа обозначают цвета):

Вторым действием мы красим все вершины поддерева вершины 5 в цвет 1:

Третьим действием мы красим все вершины поддерева вершины 2 в цвет 1:

Второй пример расположен на следующей картинке (числа обозначают номера вершин):

Первым действием мы красим все вершины поддерева вершины 1 в цвет 3 (числа обозначают цвета):

Вторым действием мы красим все вершины поддерева вершины 3 в цвет 1:

Третьим действием мы красим все вершины поддерева вершины 6 в цвет 2:

Четвертым действием мы красим все вершины поддерева вершины 4 в цвет 1:

Пятым действием мы красим все вершины поддерева вершины 7 в цвет 3:

A. Задача о голодном студенте

жадные алгоритмы реализация *900

Пары в университете только что закончились, и Иван решил пойти в местное кафе CFK поесть жареной курочки.

В CFK лакомство продается маленькими и большими порциями. В маленькой порции 3 куска курицы, в большой — 7 кусков. Иван хочет съесть ровно x кусков. Он интересуется, может ли он купить столько курицы.

Формально, Иван хочет узнать, можно ли выбрать два неотрицательных целых числа a и b такие, что при покупке a маленьких порций и b больших порций он в сумме получит ровно x кусков.

Помогите Ивану справиться с этим вопросом для нескольких вариантов значений x!

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100) — количество тестов.

В i-й из следующих n строк записано по одному целому числу xi (1 ≤ xi ≤ 100) — количество кусков курицы, которые Иван хочет съесть.

Выходные данные

Выведите n строк. В i-й строке выведите YES, если Иван может купить ровно xi кусков. В противном случае выведите NO.

Примечание

В первом примере Иван может купить две маленьких порции.

Во втором примере Иван не может купить ровно 5 кусков, так как маленькой порции недостаточно, а две маленькие или одна большая — уже слишком много.

B. Грязекраб

жадные алгоритмы реализация *1200

И опять Вова играет в компьютерную игру, теперь в ролевую. Герою Вовы поручили квест: расправиться с жестоким монстром грязекрабом.

На протяжении двух часов Вова преследовал краба и анализировал его тактику. У грязекраба h2 пунктов здоровья и сила атаки a2. Зная это, Вова решил купить очень много зелий для восстановления здоровья и подготовиться в битве.

У героя Вовы h1 пунктов здоровья и сила атаки a1. Также у него есть огромный запас зелий восстановления здоровья, каждое из которых увеличивают здоровье на c1 пунктов, когда Вова пьет зелье. Все зелья одинаковы. Гарантируется, что c1 > a2.

Сражение состоит из нескольких фаз. В начале каждой фазы Вова может либо атаковать монстра (уменьшая его здоровье на a1 пунктов), либо пить зелье восстановления здоровья (повышая здоровье Вовы на c1 пунктов; здоровье может превышать значение h1). Дальше, если сражение еще не окончено, грязекраб атакует Вову, уменьшая его здоровье на a2 пунктов. Сражение заканчивается, когда здоровье Вовы или грязекраба становится 0 пунктов или меньше. Возможно, сражение закончится в середине фазы после атаки Вовы.

Разумеется, Вова хочет победить в сражении. К тому же он хочет это сделать как можно быстрее. Поэтому он хочет придумать стратегию, которая позволит ему победить за наименьшее количество фаз.

Помогите Вове придумать стратегию! Считайте, что у Вовы никогда не закончатся зелья и что он всегда может победить.

Входные данные

В первой строке записаны три целых числа h1, a1, c1 (1 ≤ h1, a1 ≤ 100, 2 ≤ c1 ≤ 100) — здоровье Вовы, сила атаки Вовы и количество пунктов здоровья, которые восстанавливает зелье.

Во второй строке записаны два целых числа h2, a2 (1 ≤ h2 ≤ 100, 1 ≤ a2 < c1) — здоровье грязекраба и его сила атаки.

Выходные данные

В первой строке выведите одно целое число n — минимальное количество фаз, необходимых для победы.

Затем выведите n строк, в i-й строке должно быть либо слово HEAL, если Вова пьет зелье на i-й фазе, либо STRIKE, если атакует грязекраба.

Стратегия должна быть корректной: герой Вовы не должен быть побежден до победы над грязекрабом, и здоровье монстра должно быть равно 0 или меньше после последнего хода Вовы.

Если существуют несколько оптимальных ответов, выведите любой из них.

Примечание

В первом примере герой Вовы должен восстановить здоровье до или после своей первой атаки. В противном случае его здоровье будет равно нулю после 2 фаз, когда ему надо 3 атаки для победы.

Во втором примере не требуется никакого восстановления здоровья, двух ударов достаточно для того, чтобы оставить монстра с нулем здоровья и победить с 6 пунктами здоровья в остатке.

C. Упаковка коробок

жадные алгоритмы *1200

У Мишки есть n пустых коробок. Для каждого i (1 ≤ i ≤ n) i-я коробка — это куб со стороной длины ai.

Мишка может положить коробку i в другую коробку j, если соблюдаются следующие условия:

  • i-я коробка не лежит в другой коробке;
  • j-я коробка не содержит других коробок;
  • коробка i меньше коробки j (ai < aj).

Мишка может сколько угодно раз класть коробки друг в друга. Он хочет минимизировать количество видимых коробок. Коробка называется видимой, если она не лежит в какой-либо коробке.

Помогите Мишке определить минимальное возможное количество видимых коробок!

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 5000) — количество коробок у Мишки.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — длина стороны i-й коробки.

Выходные данные

Выведите минимальное количество видимых коробок.

Примечание

В первом примере можно поместить коробку 1 в коробку 2 и 2 в 3.

Во втором примере можно поместить коробку 2 в коробку 3 и 4 в 1.

F. Новый год и радужные развилки

графы жадные алгоритмы реализация *2400

У Роя и Бива есть множество из n точек на бесконечной числовой прямой.

Каждая точка имеет один из трех цветов: красный, зеленый или синий.

Рой и Бив хотят соединить все точки несколькими линиями. Линии могут быть проведены между любой парой данных точек. Стоимость линии равна расстоянию между точками, которые она соединяет.

Рой и Бив хотят провести линии так, чтобы они оба видели, что все точки соединены (напрямую или через несколько линий).

Однако, не все так просто: Рой не видит красный цвет, а Бив — синий.

Поэтому они хотят выбрать линии так, что если убрать все красные точки, то оставшиеся синие и зеленые точки будут соединены, и, аналогично, если убрать все синие точки, то оставшиеся красные и зеленые точки будут соединены.

Вычислите минимальную суммарную стоимость набора линий, который удовлетворяет вышеприведенным ограничениям.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 300 000) — количество точек.

Следующие n строк содержат по два объекта pi и ci (pi — целое число, 1 ≤ pi ≤ 109, ci — заглавная буква латинского алфавита «R», «G» или «B») — позиция i-й точки и цвет i-й точки. «R» обозначает красный цвет, «G» — зеленый, а «B» — синий. Позиции даны в строго возрастающем порядке.

Выходные данные

Выведите одно целое число: минимальную стоимость подходящего набора линий.

Примечание

В первом тесте из условия оптимально нарисовать линии между точками (1,2), (1,4), (3,4). Их стоимости равны 4, 14, 5, соответственно.

A. Генерация логина

жадные алгоритмы Перебор сортировки *1000

Логин пользователя в Полигоне состоит из префикса его имени и префикса его фамилии, соединенных последовательно в таком порядке. Каждый префикс должен быть непустым, но может совпадать с именем/фамилией. Обычно для пользователя существует несколько возможных логинов.

Вам даны имя и фамилия пользователя. Верните первый в алфавитном порядке логин, который может получить этот пользователь (предположите, что все возможные логины свободны).

Напомним, что префикс строки s — это любая подстрока, с которой начинается s: «a», «ab», «abc» и т.д. являются префиксами строки «abcdef», а «b» и «bc» — нет. Строка a следует в алфавитном порядке раньше строки b, если a является префиксом b, или a и b до некоторой позиции совпадают, а затем в a идет буква, стоящая в алфавите раньше, чем буква в b на той же позиции: «a» и «ab» следуют раньше строки «ac», а «b» и «ba» — позже.

Входные данные

В единственной строке входных данных записаны имя и фамилия пользователя, разделенные пробелами. Имя и фамилия состоят из строчных латинских букв и содержат от 1 до 10 символов, включительно.

Выходные данные

Выведите одну строку — первый по алфавиту логин, который может получить пользователь. Логин также записан строчными буквами.

D. Разноцветные точки

жадные алгоритмы реализация Структуры данных *2100

Вам дан набор разноцветных точек на прямой. Две точки считаются соседними, если между ними нет других точек. У каждой точки может быть не более двух соседних — одна слева и одна справа.

Вы выполняете последовательность действий над этим набором. За одно действие вы удаляете все точки a, у которых есть соседняя точка цвета, отличного от цвета точки a. Все точки удаляются одновременно, т.е. сначала вы определяете, какие точки следует удалить, и затем удаляете их. После этого вы выполняете следующее действие и т.д. Если действие не удалит ни одной точки, его невозможно выполнить.

Сколько действий можно будет выполнить на заданном наборе точек так, чтобы каждое из них удалило хотя бы одну точку?

Входные данные

Входные данные состоят из единственной строки строчных латинских букв. Буквы задают цвета точек в том порядке, в котором они расположены на прямой: первая буква задает цвет самой левой точки, вторая — цвет второй слева точки и т.д.

Строка содержит от 1 до 106 букв.

Выходные данные

Выведите одно число — количество действий, которые можно выполнить на заданном наборе точек так, чтобы каждое действие удалило хотя бы одну точку.

Примечание

В первом примере первое действие удалит две средние точки и оставит точки "ab", которые затем удалит второе действие. После этого не останется точек, над которыми можно было бы выполнить третье действие.

Во втором примере первое действие удалит четыре средние точки и оставит точки "aa". Ни у одной из них нет соседних точек другого цвета, поэтому второе действие невозможно выполнить.

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. Газетный заголовок

жадные алгоритмы Строки *1500

В Моржландии выпускается газета с названием s1, состоящем из строчных букв латинского алфавита. Маленький морж Клычок хочет купить несколько таких газет, вырезать из них названия, склеить их друг за другом и стереть некоторые буквы так, чтобы получилось слово s2. Считается, что когда Клычок стирает какую-то букву, на ее месте не образуется пустое место. То есть строка остается неразрывной и по-прежнему состоит только из маленьких букв латинского алфавита.

Например, заголовок газеты — «abc». Взяв два таких заголовка и склеив, получится «abcabc». Если стереть буквы на позициях 1 и 5 получится слово «bcac».

Какое наименьшее количество газетных заголовков s1 понадобится Клычку, чтобы он мог их склеить, стереть несколько букв и получить слово s2?

Входные данные

Входные данные содержат две строки. В первой строке записан заголовок s1, во второй строке записано слово s2. Строки состоят только из строчных латинских букв (1 ≤ |s1| ≤ 104, 1 ≤ |s2| ≤ 106).

Выходные данные

Если получить слово s2 описанным выше способом невозможно, выведите «-1» (без кавычек). Иначе выведите наименьшее количество газетных заголовков s1, которое понадобится, чтобы получить слово s2.

D. Задача бакалейщика

графы жадные алгоритмы Конструктив *2600

Вчера в бакалее супермаркета была ярмарка. На ярмарке было выставлено в ряд n баночек с приправами, баночки были пронумерованы числами от 1 до n слева направо. После мероприятия баночки перемешались и бакалейщику требуется упорядочить их в порядке возрастания номеров.

Бакалейщик имеет в распоряжении аппарат, который может взять 5 (или меньше) баночек, и переставить их между собой так, как захочет бакалейщик. При этом баночки не обязательно должны стоять подряд. Например из порядка баночек 2, 6, 5, 4, 3, 1 можно получить порядок 1, 2, 3, 4, 5, 6, если выбрать баночки на позициях 1, 2, 3, 5 и 6.

Какое наименьшее количество таких операций потребуется, чтобы упорядочить все баночки в порядке возрастания номеров?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке через пробел записано n целых чисел ai (1 ≤ ai ≤ n) — i-ое число задает номер баночки, стоящей на i-ой позиции. Гарантируется, что все номера различны.

Выходные данные

В первой строке выведите наименьшее количество операций для того, чтобы упорядочить все баночки в порядке возрастания номеров. Далее выведите описание всех действий в следующем формате.

В первой строке описания одного действия укажите сколько баночек нужно взять (k), во второй строке — баночки на каких позициях выбрать (b1, b2, ..., bk), в третьей — новый порядок баночек (c1, c2, ..., ck). После выполнения операции баночка с позиции bi будет стоять на позиции ci. Набор (c1, c2, ..., ck) должен являться перестановкой набора (b1, b2, ..., bk).

Если решений несколько, выведите любое.

Примечание

Рассмотрим первый пример. Баночки можно упорядочить за две операции.

Во время перво операции мы возьмем баночки на позициях 1, 3, 6 и 4 и поставим их таким образом, что баночка, которая была на позиции 1 будет после завершения операции находиться на позиции 3, баночка с позиции 3 окажется на позиции 6, баночка с позиции 6 будет находиться на позиции 4, а баночка с позиции 4 переместится на позицию 1.

После первой операции порядок будет выглядеть так: 1, 5, 3, 4, 2, 6.

Во время второй операции баночки на позициях 2 и 5 поменяются местами.

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 (длина прыжка равна четырём).

Во втором примере лягушка не сможет добраться до дома, так как ей нужно для этого прыгнуть на расстояние три, а максимальная длина её прыжка равна двум.

B. Обрамление дверей

жадные алгоритмы реализация *1600

У Пети есть одинаковые деревянные бруски длины n. Он хочет сделать обрамление для двух дверей. Каждое обрамление имеет две боковые стороны длины a и одну верхнюю сторону длины b. Для каждой из сторон нужен цельный кусок бруска.

Определите минимальное количество брусков, которые необходимы для двух дверей. Петя может резать бруски на любые части, но каждая из сторон двери должна быть цельным куском бруска (или целиком одним бруском).

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1 000) — длина брусков.

Во второй строке следует целое число a (1 ≤ a ≤ n) — длина боковых сторон обрамления дверей.

В третьей строке следует целое число b (1 ≤ b ≤ n) — длина верхней стороны обрамления дверей.

Выходные данные

Выведите минимальное количество брусков длины n, которые необходимы для обрамления двух дверей.

Примечание

В первом примере достаточно одного бруска, так как суммарная длина всех сторон обрамления для двух дверей равна 8.

Во втором примере нужно 6 брусков, так как для каждой из сторон обрамления нужен новый брусок.

C. Минимальная сумма

жадные алгоритмы Конструктив математика *1700

У Пети есть n целых положительных чисел a1, a2, ..., an.

Его друг Вася решил пошутить и решил заменить все цифры в числах на буквы. Причём использовал он строчные буквы латинского алфавита от 'a' до 'j' и заменил все цифры 0 на одну букву, все все цифры 1 на другую букву, все цифры 2 на третью букву и так далее. Для любых двух разных цифр Вася использовал разные буквы от 'a' до 'j'.

Перед вами стоит задача восстановить числа Пети. Восстановленные числа должны быть целыми положительными без лидирующих нулей. Так как ответов может быть много, определите минимальную сумму всех чисел Пети после восстановления. Гарантируется, что все числа Пети изначально не имели лидирующих нулей.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1 000) — количество чисел Пети.

В каждой из следующих строк следует непустая строка si, состоящая из строчных латинских букв от 'a' до 'j' — числа Пети после замены цифр на буквы. Длина каждой строки не превосходит шести символов.

Выходные данные

Определите минимальную сумму всех чисел Пети после восстановления. Числа после восстановления должны быть целыми положительными и не должны иметь лидирующих нулей. Гарантируется, что тесты таковы, что корректное восстановление без лидирующих нулей всегда найдётся.

Примечание

В первом примере нужно заменить букву 'a' на цифру 1, букву 'b' на цифру 0, букву 'd' на цифру 2, букву 'e' на цифру 3, а букву 'j' на цифру 4. Тогда получатся числа [10, 23, 14]. Сумма этих чисел равна 47, что является минимально возможной суммой чисел после корректного восстановления.

Во втором примере числа после восстановления могут выглядеть, например, следующим образом: [120468, 3579, 2468, 10024, 3].

В третьем примере числа после восстановления могут выглядеть, например, следующим образом: [11, 22, 11].

E. Сортировка стеком

жадные алгоритмы Конструктив реализация Структуры данных *2000

Предположим, дан массив a, стек s (изначально пустой) и массив b (также пустой).

Можно производить следующие операции, пока a или s непусты:

  • Взять первый элемент a, положить его на верхушку s и удалить из a (если a не пустой);
  • Взять элемент с верхушки s, добавить его в конец массива b и удалить из s (если s не пустой).

Операции можно осуществлять в произвольном порядке.

Если существует способ проделать операции в таком порядке, что массив b отсортирован в неубывающем порядке в конце процесса, то назовем массив a стек-сортируемым.

Например, [3, 1, 2]стек-сортируемый, потому что b будет отсортированным после следующих операций:

  1. Удалить 3 из a и положить на верхушку s;
  2. Удалить 1 из a и положить на верхушку s;
  3. Удалить 1 из s и добавить в конец b;
  4. Удалить 2 из a и положить на верхушку s;
  5. Удалить 2 из s и добавить в конец b;
  6. Удалить 3 из s и добавить в конец b.

После всех операций b = [1, 2, 3], поэтому [3, 1, 2]стек-сортируемый. [2, 3, 1] — не стек-сортируемый.

Заданы первые k элементов некоторой перестановки p размера n (напоминаем, что перестановка размера n — это такой массив размера n, где каждое число от 1 до n встречается ровно один раз). Необходимо восстановить оставшиеся n - k элементов этой перестановки, так чтобы она стала стек-сортируемой. Если существует несколько ответов, то выберите такой, что p лексикографически максимальна (массив q лексикографически больше массива p тогда и только тогда, когда существует такое целое число k, что для всех i < k qi = pi, and qk > pk). Запрещено как-то переставлять или менять первые k элементов.

Выведите лексикографически максимальную перестановку p, которую можно получить.

Если ответа не существует, то выведите -1.

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 200000, 1 ≤ k < n) — размер желаемой перестановки и количество элементов, которые уже заданы.

Во второй строке записаны k чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — первые k элементов перестановки p. Эти числа попарно различны.

Выходные данные

Если возможно восстановить стек-сортируемую перестановку p размера n такую, что первые k элементов перестановки p совпадают с заданными, выведите максимальную лексикографически из таковых.

В противном случае выведите -1.

F. Разрушение дерева

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2400

Задано невзвешенное дерево с n вершинами. С ним производят n - 1 операцию. Каждая из операций состоит в следующем:

  1. выбирается два листа в дереве;
  2. к ответу добавляется длина простого пути между этими листами;
  3. выбирается один из этих двух листов и удаляется из дерева.

До проведения операций ответ равен 0. Очевидно, что после n - 1 проведённой операции в дереве останется одна вершина.

Вам необходимо посчитать, какого максимального ответа можно добиться, если действовать оптимально, и вывести, каким образом необходимо действовать.

Входные данные

В первой строке задано одно целое число n (2 ≤ n ≤ 2·105) — количество вершин в дереве.

В следующих n - 1 строках заданы рёбра дерева в формате ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Гарантируется, что заданный граф является деревом.

Выходные данные

В первой строке выведите одно целое число — максимальный ответ, которого можно достигнуть.

В следующих n - 1 строках выведите действия в порядке их совершения в формате ai, bi, ci, где ai, bi — пара листов, выбранных на текущем шаге (1 ≤ ai, bi ≤ n), ci (1 ≤ ci ≤ n, ci = ai или ci = bi) — выбранный лист, который удаляется на текущем шаге.

Посмотрите в примеры для лучшего понимания.

C. Перун, ультуй!

жадные алгоритмы Перебор сортировки *2500

Многие студенты с пользой проводят новогодние каникулы. Влад особенно преуспевает в этом! Третьи сутки напролет, держась на салатах и мандаринах, оставшихся с новогоднего стола, он калибрует ранг в своей любимой MOBA-игре, играя за героя по имени Перун.

Абсолютная способность Перуна — «Гнев грома» — при применении мгновенно отнимает у каждого из n врагов на карте по очков здоровья в качестве единовременного эффекта. У нее есть ограничение — она может быть активирована только в момент времени, являющийся целым числом. Награда за убийство врага изначально равна и увеличивается каждую секунду на . Формально, если после применения «Гнева грома» в секунду t здоровье врага i станет меньшим или равным нулю, то Влад получит золота за его убийство.

Каждый враг может получать урон, а может восполнять здоровье — и все это множеством различных способов. Влада, впрочем, не интересуют детали; для каждого из n героев он лишь знает:

  •  — максимальное количество очков здоровья героя i;
  •  — количество очков здоровья героя в секунду 0;
  •  — количество очков здоровья, которое герой i восстанавливает за одну секунду (очки добавляются сразу же по наступлении следующей секунды).

Еще Влад знает о m изменениях здоровья в ходе игры:

  •  — секунда, в которую изменяется здоровье врага;
  •  — враг, у которого изменяется здоровье;
  •  — новое количество очков здоровья врага enemyj.

Естественно, из игры Влад хочет вынести максимум пользы и, если потребуется, он, забыв об учебе, будет выжидать годы и годы в ожидании подходящего момента для активации суперспособности. Помогите ему найти секунду от 0 включительно до  + ∞ включительно (напомним, что номер секунды должен быть целым числом), чтобы активация «Гнева грома» помогла ему получить максимальное количество золота, и выведите это количество.

Входные данные

В первой строке заданы два целых числа, разделенных пробелами — n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ 105).

Во второй строке заданы три целых числа, разделенных пробелами — , , (, ).

В последующих n строках заданы три целых числа, разделенных пробелами — , , (, ).

В последующих m строках заданы три целых числа, разделенных пробелами — , , (, , ). Гарантируется, что в одну секунду для одного врага известно не более одного изменения здоровья: формально для любых a, b таких, что 1 ≤ a, b ≤ m, a ≠ b верно, что если , то .

Выходные данные

Выведите в одной строке единственное число — максимальное количество золота, которое Влад может получить в результате единовременного применения способности «Гнев грома», или -1, если количество золота, которое он может получить, может быть бесконечно большим.

Примечание

На графиках ниже изображены очки здоровья каждого из врагов в зависимости от времени в примерах.

Желтым цветом обозначено время, в течение которого Влад может убить одного врага.

Фиолетовым цветом обозначено время, в течение которого Влад может убить двух врагов.

В первом примере можно применить «Гнев грома» в 50-ю секунду: погибнут враги 2 и 3, так как у них будет 40 и 50 очков здоровья соответственно, и Влад получит награду в 2·(1000 + 50·10) = 3000 золота.

Во втором примере максимальное здоровье врага 1 меньше урона, наносимого способностью, поэтому его можно будет убить в любой момент времени, а поскольку награда увеличивается каждую секунду на 50 золота, то максимально возможная награда будет увеличиваться до бесконечности.

D. Рыбки

графы жадные алгоритмы кратчайшие пути Структуры данных Теория вероятностей *2100

Пока Гриша встречает Новый Год в компании Деда Мороза, Миша дарит Саше небольшой прямоугольный прудик размера n × m, поделенный на клеточки размера 1 × 1, в которых обитают маленькие злобные рыбки (не более одной рыбки на клеточку, иначе они подерутся!).

Вместе с прудиком в комплекте идет квадратный сачок размера r × r, предназначенный для рыбной ловли. Так, если поместить левый нижний угол сачка клеточку с координатами (x, y), будут пойманы все рыбки в квадрате (x, y)...(x + r - 1, y + r - 1). Отметим, что в процессе сачок должен полностью находиться внутри прудика.

К сожалению, Саша совсем не искушена в благородном искусстве рыбной ловли, поэтому закидывает сачок случайным образом. Чтобы та не расстраивалась из-за плохих результатов, Миша решил выпустить в различные клеточки изначально пустого прудика k рыбок так, чтобы математическое ожидание количества пойманных сачком рыбок было бы максимально. Помогите ему этого достигнуть и обрадовать Сашу! А именно, расположите k рыбок в различных клетках так, чтобы при забрасывании сачка в случайное из (n - r + 1)·(m - r + 1) положений среднее количество рыбок в сачке было максимально возможным.

Входные данные

В единственной строчке заданы четыре целых числа — n, m, r, k (1 ≤ n, m ≤ 105, 1 ≤ r ≤ min(n, m), 1 ≤ k ≤ min(n·m, 105)).

Выходные данные

Выведите одно число — максимально возможное математическое ожидание числа пойманных рыбок.

Ваш ответ будет зачтен, если его относительная или абсолютная ошибка не превосходит 10 - 9. А именно, пусть ваш ответ равен a, а ответ жюри — b. Ваш ответ будет зачтен, если .

Примечание

В первом примере можно выпустить рыбок в клетки (2, 1), (2, 2), (2, 3). В таком случае для любой из четырех возможных конфигураций сачка (выделены салатовым) количество рыбок внутри будет равняться двум, как и математическое ожидание.

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 рублей.

D. Слишком простые задачи

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1800

Вы готовитесь к экзамену по теории расписаний. Экзамен продлится ровно T миллисекунд. На экзамене вас ждут n задач. Каждую задачу номер i вы сможете либо полностью решить, затратив на это ti миллисекунд, либо не решить вовсе, не потратив на нее ни миллисекунды. Времени на отдых после решения задачи вам не потребуется.

К несчастью, ваш преподаватель считает, что некоторые задачи слишком просты для вас, поэтому каждой задаче i сопоставил целое число ai, обозначающее, что задача i может принести балл за ее решение только в том случае, если вы решите не более ai задач всего (включая задачу i).

Формально, пусть за экзамен вы решите некоторое множество задач p1, p2, ..., pk. Ваш итоговый балл за экзамен s будет равен количеству таких j от 1 до k, что k ≤ apj.

Догадавшись, что настоящая первая задача экзамена уже перед вами, вы хотите заранее выбрать подмножество задач для решения на экзамене, которое принесет вам наибольший возможный итоговый балл. Не забудьте, что экзамен ограничен по времени, и вам должно хватить времени на решение всех выбранных задач. Если существуют разные множества задач, ведущие к наибольшему итоговому баллу, вас устроит любое из них.

Входные данные

Первая строка содержит два целых числа n и T (1 ≤ n ≤ 2·105; 1 ≤ T ≤ 109) — количество задач на экзамене и длительность экзамена в миллисекундах, соответственно.

Каждая из следующих n строк содержит пару целых чисел ai и ti (1 ≤ ai ≤ n; 1 ≤ ti ≤ 104). Задачи пронумерованы от 1 до n.

Выходные данные

В первой строке выведите целое число s — наибольший возможный итоговый балл.

Во второй строке выведите целое число k (0 ≤ k ≤ n) — количество задач, которые вам следует решить.

В третьей строке выведите k различных целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — номера задач, которые вам следует решить, в любом порядке.

Если наилучших множеств задач несколько, выведите любое из них.

Примечание

В первом примере следует решить задачи с номерами 3, 1 и 4. В таком случае вы потратите 80 + 100 + 90 = 270 миллисекунд, уложившись в длительность экзамена, 300 миллисекунд (и даже оставив себе 30 миллисекунд на отдых). Задачи 3 и 1 принесут вам по одному баллу, а задача 4 — не принесет. В итоге вы наберете два балла.

Во втором примере катастрофически не хватает времени на решение даже одной задачи.

В третьем примере вы идеально успеваете решить обе задачи за 42 + 58 = 100 миллисекунд и с улыбкой сдать работу преподавателю.

B. Конан и Агаса играют в карточную игру

жадные алгоритмы игры реализация *1200

Эдогава Конан устал разбираться со своими делами и пригласил своего друга, профессора Агасу, в гости. Они решили сыграть в карточную игру. У Конана есть n карт, на i-й из которых записано число ai.

Игроки ходят по очереди, первым ходит Конан. На каждом ходу игрок выбирает карту и выбрасывает её. Кроме того, он выбрасывает все карты, на которых число меньше, чем на выбранной. Формально, если игрок выбирает карту с номером i, он выбрасывает эту карту, а также все карты с номерами j для всех j таких, что aj < ai.

Игрок проигрывает, если он не может сделать ход, то есть если не осталось карт. Определите победителя, если игроки играют оптимально.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество карт Конана.

Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105), где ai обозначает число, записанное на карте с номером i.

Выходные данные

Если победит Конан, выведите "Conan" (без кавычек), иначе выведите "Agasa" (без кавычек).

Примечание

В первом тестовом примере Конан может выбрать карту с числом 7 и тем самым выкинуть все карты. После этого Агаса проиграет.

Во втором тестовом примере вне зависимости от хода Конана останется одна карта, которую выбросит Агава, после чего карт не останется и Конан проиграет.

C. Переставь цифры

дп жадные алгоритмы *1700

Даны два натуральных числа a и b. Вам необходимо переставить цифры числа a таким образом, чтобы получилось наибольшее возможное число, не превосходящее b. Никакое из входных или выходных чисел не может начинаться с нуля.

Допустимо оставить число a без изменений.

Входные данные

В первой строке входных данных записано натуральное число a (1 ≤ a ≤ 1018). Во второй строке записано натуральное число b (1 ≤ b ≤ 1018). Числа не содержат лидирующих нулей. Гарантируется, что ответ существует.

Выходные данные

Выведите наибольшее число, не превосходящее b, полученное перестановкой цифр числа a. Ответ не может начинаться с нуля. Гарантируется, что такое число существует.

Число в выводе должно иметь в точности ту же длину, что и число a. Оно должно являться перестановкой цифр числа a.

B. Джейми и двоичная последовательность (изменена после раунда)

битмаски жадные алгоритмы математика *2000

Джейми готовит раунд на Codeforces. Он придумал задачу, но не знает, как её решить. Помогите ему решить следующую задачу:

Найдите k целых чисел таких, что суммы степеней двойки с такими показателями равны n и наибольшее число среди них минимально. Так как ответ может быть не единственен, найдите лексикографически максимальный ответ.

Более формально, рассмотрим все последовательности целых чисел длины k (a1, a2, ..., ak) такие, что . Для каждой последовательности вычислим . Среди всех последовательностей с минимальным y выведите лексикографически наибольшую.

Определения степеней двойки и лексикографического порядка смотрите в примечаниях.

Входные данные

В первой строке содержатся два целых числа n и k (1 ≤ n ≤ 1018, 1 ≤ k ≤ 105) — требуемая сумма и длина последовательности.

Выходные данные

Выведите «No» (без кавычек), если требуемой последовательности не существует. Иначе выведите в первой строке «Yes» (без кавычек), а во второй строке k чисел через пробел — элементы последовательности.

Гарантируется, что числа в ответе принадлежат отрезку [ - 1018, 1018].

Примечание

В первом тестовом примере:

23 + 23 + 22 + 21 + 20 = 8 + 8 + 4 + 2 + 1 = 23

Последовательности (3, 3, 2, 0, 1) и (0, 1, 2, 3, 3) не являются правильным ответом, так как правильный ответ лексикографически больше, чем каждая из них.

Последовательность (4, 1, 1, 1, 0) не является правильным ответом, так как в правильном ответе значение y меньше.

Во втором тестовом примере можно показать, что требуемой последовательности не существует.

В третьем тестовом примере .

По определению:

Если x > 0, то 2x = 2·2·2·...·2 (x раз).

Если x = 0, то 2x = 1.

Если x < 0, то .

Лекксикографический порядок:

Для двух последовательностей одинаковой длины (a1, a2, ... , ak) и (b1, b2, ... , bk) первая последовательность лексикографически меньше второй тогда и только тогда когда, ai < bi, для первого i такого, что ai и bi различаются.

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. «??()??», которая может быть преобразована в «()()()».

A. Супермаркет

жадные алгоритмы Перебор реализация *800

Зачастую, придя в магазин, на ценнике фруктов или овощей вы увидите цену за килограмм. Однако в некоторых магазинах, если вы спросите о цене, вам ответят, что она составляет \(a\) юаней за \(b\) килограмм (вам не нужно знать, что такое «юань»), или, что то же самое, \(a/b\) юаней за килограмм.

Вы хотите купить \(m\) килограмм яблок. Вы узнали цены в \(n\) магазинах. Найдите минимальную стоимость, по которой вы можете купить эти яблоки.

Вы можете считать, что в любом магазине достаточно яблок для вас.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 5\,000\), \(1 \leq m \leq 100\)), означающие, что вы узнали цены в \(n\) магазинах и хотите купить \(m\) килограмм яблок.

Следующие \(n\) строк описывают цены в магазинах. Каждая строка содержит два целых числа \(a, b\) (\(1 \leq a, b \leq 100\)), означающие, что в этом супермаркете вы должны заплатить \(a\) юаней за \(b\) килограмм яблок.

Выходные данные

В единственной строке выведите минимальную стоимость \(m\) килограмм яблок. Ваш ответ будет считаться правильным, если абсолютная или относительная его ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(x\), а ответ жюри равен \(y\). Ваш ответ будет считаться правильным, если \(\frac{|x - y|}{\max{(1, |y|)}} \le 10^{-6}\).

Примечание

В первом примере необходимо купить \(5\) килограмм яблок в магазине \(3\). Стоимость равна \(5/3\) юаней.

Во втором примере необходимо купить \(1\) килограмм яблок в магазине \(2\). Стоимость равна \(98/99\) юаней.

B. Двоичное число

жадные алгоритмы *1300

Маленький морж Клычок очень любит математику. Поэтому, когда ему скучно, он играет с числом, выполняя некоторые операции.

Клычок берет некоторое положительное целое число x, и хочет получить из него единицу. Пока x не равно 1, Клычок повторяет следующее действие: если x нечетное, то он прибавляет к нему 1, иначе он делит x на 2. Клычок знает, что для любого целого положительного числа этот процесс завершается за конечное время.

Сколько действий нужно Клычку, чтобы получить из числа x единицу?

Входные данные

В первой строке записано целое положительное число x в двоичной системе счисления. Гарантируется, что первая цифра x отлична от нуля и количество разрядов в нем не превышает 106.

Выходные данные

Выведите необходимое количество действий.

Примечание

Рассмотрим третий пример. Число 101110 четно, значит разделим его на 2. После деления Клычок получает нечетное число 10111 и прибавляет к нему единицу. Число 11000 можно поделить на 2 три раза подряд, и получить число 11. Осталось увеличить число на единицу (получим 100), и затем два раза поделить его на 2. В итоге получается 1.

C. Обмен соседних элементов

жадные алгоритмы математика поиск в глубину и подобное сортировки *1400

Задан массив a, состоящий из n элементов. Каждое число от 1 до n встречается в этом массиве ровно один раз.

Для некоторых позиций i (1 ≤ i ≤ n - 1) разрешается поменять местами i-й элемент и (i + 1)-й, для остальных запрещается. Можно совершать произвольное количество операций в любом порядке. Можно менять местами i-й элемент и (i + 1)-й произовольное количество раз (если позиция разрешена).

Можно ли привести массив к отсортированному в возрастающем порядке при помощи таких операций?

Входные данные

В первой строке записано одно целое число n (2 ≤ n ≤ 200000) — количество чисел в массиве.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 200000) — элементы массива. Каждое число от 1 до n встречается в нем ровно один раз.

Третья строка состоит из n - 1 символа, каждый символ — либо 0, либо 1. Если i-й символ равен 1, то разрешается менять местами i-й элемент и (i + 1)-й любое количество раз, в противном случае i-й элемент и (i + 1)-й менять местами запрещено.

Выходные данные

Если возможно отсортировать массив в возрастающем порядке с помощью любой последовательности операций, то выведите YES. В противном случае выведите NO.

Примечание

В первом примере можно поменять местами a3 и a4, потом a4 и a5.

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.

D. Робот-пылесос

жадные алгоритмы сортировки *1800

Пес Пушок уже который час гоняется за Импом по всему дому.

По счастью, Имп хорошо осведомлен о главном страхе Пушка — жутком роботе-пылесосе.

При передвижении по дому робот-пылесос генерирует строку t из букв «s» and «h», производящую много шума. Определим шум строки t как количество вхождений строки «sh» в нее как подпоследовательность, иными словами, количество таких пар (i, j), что i < j и и .

В данный момент робот неактивен. Имп знает, что в памяти робота лежит набор строк ti, которые можно переставлять произвольным образом. При запуске эти строки склеиваются в выбранном порядке и получается строка t; итоговый шум получается равным шуму этой склейки.

Помогите Импу найти максимальное значение шума, которое он может получить, переставляя строки произвольным образом.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 105) — количество строк в памяти робота-пылесоса.

В следующих n строках заданы сами строки t1, t2, ..., tn, по одной в строке. Гарантируется, что они непусты, состоят только из букв латинского алфавита «s» и «h», а суммарная длина набора строк не превосходит 105.

Выходные данные

Выведите одно число — максимальный уровень шума, который можно достичь оптимальным переупорядочиванием набора строк.

Примечание

В первом примере оптимальной склейкой является ssshhshhhs.

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. Идеальная защита

Деревья жадные алгоритмы Строки Структуры данных *1800

У Алисы есть важное сообщение M, состоящее из нескольких неотрицательных целых чисел, которое она хочет сохранить в тайне от Евы. Алиса знает, что единственный теоретически защищенный способ шифрования — использование одноразового ключа. Алиса сгенерировала случайный ключ K с длиной, равной длине сообщения. Алиса затем вычислила побитовое исключающее ИЛИ каждого соответствующего элемента массива и ключа (, где обозначает операцию побитового исключающего ИЛИ) и сохранила зашифрованное сообщение A. Алиса умная. Будь как Алиса.

Например, пусть Алиса хочет сохранить сообщение M = (0, 15, 9, 18), и она сгенерировала ключ K = (16, 7, 6, 3). Тогда зашифрованное сообщение равно A = (16, 8, 15, 17).

Алиса понимает, что она не может хранить ключ вместе с зашифрованным сообщением. Поэтому Алиса послала ключ K Бобу и удалила свою копию. Алиса умная. Действительно, будь как Алиса.

Боб понимает, что зашифрованное сообщение защищено только до тех пор, пока ключ является секретным. Поэтому Боб случайным образом поменял местами элементы ключа перед тем, как сохранить его. Боб думает, что в таком случае, даже если Ева получит и зашифрованное сообщение, и ключ, она не сможет прочитать исходное сообщение. Боб не умный. Не будь как Боб.

В примере выше Боб мог, например, выбрать перестановку (3, 4, 1, 2), перемешать элементы в соответствии с ней и сохранить ключ P = (6, 3, 16, 7).

Прошел год, и Алиса теперь хочет расшифровать свое сообщение. Только сейчас Боб понял, что это невозможно. Так как он поменял местами элементы ключа случайным образом, сообщение утеряно навсегда. Мы уже сказали, что Боб не очень умный?

Боб хочет получить хотя бы какую-то информацию из сообщения. Так как он не очень умный, он попросил у вас помощи. Вам известны зашифрованное сообщение A и произвольно перемешанный ключ P. Каково лексикографически минимальное сообщение, которое могло быть зашифровано подобным образом?

Формально, по данным A и P найдите лексикографически минимальное сообщение O такое, что существует перестановка π такая, что для всех i.

Напомним, что последовательность S лексикографически меньше последовательности T, если существует такая позиция i, что Si < Ti, а для всех j < i выполняется Sj = Tj.

Входные данные

Первая строка содержит одно целое число N (1 ≤ N ≤ 300000) — длину сообщения.

Вторая строка содержит N целых чисел A1, A2, ..., AN (0 ≤ Ai < 230) — зашифрованное сообщение.

Третья строка содержит N целых чисел P1, P2, ..., PN (0 ≤ Pi < 230) — ключ шифрования, элементы которого переставлены произвольным образом.

Выходные данные

Выведите одну строку с N целыми числами — лексикографически минимально возможное сообщение O. Напомним, что все числа в нем должны быть неотрицательны.

Примечание

В первом примере решением является (10, 3, 28), потому что , и . Другие возможные перестановки ключа дают сообщения (25, 6, 10), (25, 3, 15), (10, 21, 10), (15, 21, 15) и (15, 6, 28), все из которых лексикографически больше, чем оптимальное решение.

A. Мистическая мозаика

жадные алгоритмы реализация *1300

У Аркадия была прямоугольная таблица из n строк и m столбцов, при этом каждая клетка изначально была покрашена в белый.

Аркадий выполнил несколько (возможно, ноль) операций на ней. На i-й операции он выбрал непустое подмножество строк Ri и непустое подмножество столбцов Ci. Для каждой строки r в Ri и каждого столбца c в Ci он закрасил пересечение строки r и столбца c в черный цвет.

Кроме того, есть дополнительное ограничение: строка или столбец могут выбраны в течение всех операций не более раза. Другими словами, не существует пары (i, j) (i < j) такой, что или , где обозначает пересечение множеств, а  — пустое множество.

Вам дана некоторая таблица. Определите, могла ли она получиться после применения таких операций.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 50) — количество строк и столбцов в таблице, соответственно.

Каждая из следующих n строк содержит строку из m символов, каждый из которых либо «.» (обозначает белую клетку), либо «#» (обозначает черную клетку). Эти строки описывают финальную таблицу.

Выходные данные

Если данная таблица может быть получена некоторой корректной последовательностью операций, выведите «Yes»; в противном случае выведите «No» (без кавычек).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере таблицу можно получить за 3 операции, как показано на рисунке ниже.

Во втором примере невозможно получить заданную таблицу, так как для того, чтобы закрасить центральную строку, нужно выбрать третью строку и все столбцы в одной операции, но после этого невозможно будет выбрать ни один столбец еще раз, поэтому нельзя будет покрасить оставшиеся клетки в центральном столбце.

B. Трехуровневый лазер

Бинарный поиск жадные алгоритмы *1600

Атом вещества X может находиться в n различных состояниях с энергиями E1 < E2 < ... < En. Аркадий хочет построить лазер на этом веществе по трехуровневой схеме. Опишем упрощенно эту схему.

Выбираются три различных состояния атома i, j и k, где i < j < k. Затем происходит следующий процесс:

  1. изначально атом находится в состоянии i,
  2. затрачивается энергия Ek - Ei для перевода атома в состояние k,
  3. атом испускает фотон с полезной энергией Ek - Ej и переходит в состояние j,
  4. атом самопроизвольно переходит в состояние i, теряя энергию Ej - Ei,
  5. процесс повторяется с пункта 1.

Коэффициентом полезного действия (КПД) процесса назовем величину , то есть отношение полезной энергии фотона к затраченной энергии.

Из-за некоторых ограничений Аркадий может выбрать лишь такие три состояния, для которых Ek - Ei ≤ U.

Помогите Аркадию найти максимально возможный КПД процесса среди таких вариантов.

Входные данные

В первой строке следуют два целых числа n и U (3 ≤ n ≤ 105, 1 ≤ U ≤ 109) — количество состояний и максимальная допустимая разность между Ek и Ei.

Во второй строке следует последовательность целых чисел E1, E2, ..., En (1 ≤ E1 < E2... < En ≤ 109). Гарантируется, что все Ei заданы в порядке возрастания.

Выходные данные

Если не существует ни одного способа для выбора состояний, выведите -1.

В противном случае выведите одно вещественное число η — максимально возможный КПД.

Ваш ответ будет зачтен, если его относительная или абсолютная погрешность не превосходит 10 - 9.

Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет зачтен, если .

Примечание

В первом примере можно выбрать уровни 1, 2 и 3. В этом случае КПД равен .

Во втором примере можно выбрать уровни 4, 5 и 9. В этом случае КПД равен .

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].

Во втором примере нужно обязательно поставить невысокий ящик под высокий.

A. Прокат велосипедов

*особая задача жадные алгоритмы реализация *1400

Как известно, в теплую погоду многие жители крупных городов пользуются сервисами городского велопроката. Вот и Аркадий сегодня будет добираться от школы до дома, используя городские велосипеды.

Школа и дом находятся на одной прямой улице, кроме того, на той же улице есть n точек, где можно взять велосипед в прокат или сдать его. Первый велопрокат находится в точке x1 километров вдоль улицы, второй — в точке x2 и так далее, n-й велопрокат находится в точке xn. Школа Аркадия находится в точке x1 (то есть там же, где и первый велопрокат), а дом — в точке xn (то есть там же, где и n-й велопрокат). Известно, что xi < xi + 1 для всех 1 ≤ i < n.

Согласно правилам пользования велопроката, Аркадий может брать велосипед в прокат только на ограниченное время, после этого он должен обязательно вернуть его в одной из точек велопроката, однако, он тут же может взять новый велосипед, и отсчет времени пойдет заново. Аркадий может брать не более одного велосипеда в прокат одновременно. Если Аркадий решает взять велосипед в какой-то точке проката, то он сдаёт тот велосипед, на котором он до него доехал, берёт ровно один новый велосипед и продолжает на нём своё движение.

За отведенное время, независимо от выбранного велосипеда, Аркадий успевает проехать не больше k километров вдоль улицы.

Определите, сможет ли Аркадий доехать на велосипедах от школы до дома, и если да, то какое минимальное число раз ему необходимо будет взять велосипед в прокат, включая первый велосипед? Учтите, что Аркадий не намерен сегодня ходить пешком.

Входные данные

В первой строке следуют два целых числа n и k (2 ≤ n ≤ 1 000, 1 ≤ k ≤ 100 000) — количество велопрокатов и максимальное расстояние, которое Аркадий может проехать на одном велосипеде.

В следующей строке следует последовательность целых чисел x1, x2, ..., xn (0 ≤ x1 < x2 < ... < xn ≤ 100 000) — координаты точек, в которых находятся велопрокаты. Гарантируется, что координаты велопрокатов заданы в порядке возрастания.

Выходные данные

Если Аркадий не сможет добраться от школы до дома только на велосипедах, выведите -1. В противном случае, выведите минимальное количество велосипедов, которые Аркадию нужно взять в точках проката.

Примечание

В первом примере Аркадий должен взять первый велосипед в первом велопрокате и доехать на нём до второго велопроката. Во втором велопрокате он должен взять новый велосипед, на котором он сможет добраться до четвертого велопроката, рядом с которым и находится его дом. Поэтому Аркадию нужно всего два велосипеда, чтобы добраться от школы до дома.

Во втором примере всего два велопроката, расстояние между которыми 10. Но максимальное расстояние, которое можно проехать на одном велосипеде, равно 9. Поэтому Аркадий не сможет добраться от школы до дома только на велосипедах.

B. Окончание сессии

жадные алгоритмы *1900

Студенты любят весело отмечать праздники. Особенно если праздник — день окончания сессии!

Несмотря на то, что Игорь К. в отличие от своих одногруппников так и не сдал зачет по математическому моделированию, он решил позвать их в кафе — выпить по бутылочке... свежего коровьего молока. Придя в кафе, m друзей обнаружили в меню n различных сортов молока, поэтому они заказали n бутылок — по одной бутылке каждого сорта. Известно, что объем молока в каждой бутылке равен w.

Когда бутылки принесли, они решили разлить все молоко поровну по m кружкам — каждому по одной. В качестве штрафа за несданный зачет разливающим был назначен Игорь К. Он заявил, что очень боится все перепутать, поэтому предложил распределить напиток так, чтобы молоко из каждой бутылки было не более чем в двух различных кружках. Друзья согласились, но внезапно столкнулись с проблемой — а как, собственно, это сделать?

Помогите им и напишите программу, которая поможет распределить молоко по кружкам и поскорее выпить!

Учтите, что благодаря идеальному глазомеру и твердости руки Игоря К., он может налить любое дробное количество молока из любой бутылки в любую кружку.

Входные данные

В единственной строке входного файла записаны три целых числа n, w и m (1 ≤ n ≤ 50, 100 ≤ w ≤ 1000, 2 ≤ m ≤ 50), где n — количество заказанных бутылок, w — объем каждой из них, а m — количество друзей в компании.

Выходные данные

Выведите в первую строку «YES», если возможно разлить напиток так, чтобы молоко из каждой бутылки оказалось не более чем в двух различных кружках. Если решения не существует, то выведите «NO».

В случае существования решения выведите еще m строк, где i-ая из них описывает содержимое в кружке i-го студента. Строка должна состоять из одной или более пар вида «b v». Каждая такая пара обозначает, что в i-ую кружку было перелито v (v > 0) единиц объема молока из b-ой бутылки (1 ≤ b ≤ n). Все числа b в каждой строке должны быть различны.

Если решений несколько, выведите любое. Вещественные числа выводите не менее чем с 6 знаками после десятичной точки.

A. Встреча друзей

жадные алгоритмы математика Перебор реализация *800

Два друга находятся на координатной прямой Ox в целочисленных точках. Один из них находится в точке x1 = a, а другой — в точке x2 = b.

Каждый из друзей может перемещаться на единицу влево и на единицу вправо неограниченное количество раз. При перемещении усталость мальчика увеличивается по следующим правилам: после первого перемещения усталость увеличивается на 1, после второго перемещения — на 2, после третьего — на 3 и так далее. Например, если мальчик сначала пойдёт влево на единицу, затем вправо на единицу (то есть вернётся в исходную точку) и после этого влево на единицу, его усталость будет равна 1 + 2 + 3 = 6.

Друзья хотят встретиться в одной точке. Определите минимальную суммарную усталость друзей при условии, что они должны оказаться в одной точке.

Входные данные

В первой строке следует целое число a (1 ≤ a ≤ 1000) — начальная позиция первого из друзей.

Во второй строке следует целое число b (1 ≤ b ≤ 1000) — начальная позиция второго из друзей.

Гарантируется, что a ≠ b.

Выходные данные

Выведите минимальную суммарную усталость обоих друзей при условии, что они должны оказаться в одной точке.

Примечание

В первом примере либо первый друг должен переместиться на единицу вправо (тогда встреча произойдёт в точке 4), либо второй друг должен переместиться на единицу влево (тогда встреча друзей произойдет в точке 3). В обоих случаях суммарная усталость равна 1.

Во втором примере первый друг должен переместиться на единицу влево, а второй друг — на единицу вправо. Тогда они встретятся в точке 100, при этом суммарная усталость будет равна 1 + 1 = 2.

В третьем примере один из оптимальных способов перемещения следующий. Первый друг должен три раза переместиться на единицу вправо, а второй друг — два раза на единицу влево. Таким образом, друзья встретятся в точке 8, и суммарная усталость будет равна 1 + 2 + 3 + 1 + 2 = 9.

F. Фафа и массив

жадные алгоритмы Структуры данных *2600

У Фафы есть массив A из n положительных чисел, определим функцию f(A) как . Он хочет обработать q запросов двух типов:

  • 1 lrx — найти максимальное возможное значение f(A), если к одному из элементов отрезка [l,  r] предварительно добавить x. Вы можете выбирать, к какому элементу добавить x.
  • 2 lrx — прибавить ко всем элементам на отрезке [l,  r] число x.

Обратите внимание, что запросы типа 1 не изменяют массив.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 105) — длину массива.

Вторая строка содержит n положительных целых чисел a1, a2, ..., an (0 < ai ≤ 109) — элементы массива.

Третья содержит целое число q (1 ≤ q ≤ 105) — количество запросов.

В следующих q строках описываются запросы, i-я из этих строк описывает i-й запрос и содержит четыре целых числа tilirixi .

Гарантируется, что есть хотя бы один запрос типа 1.

Выходные данные

Для каждого запроса типа 1 выведите ответ на него.

B. В погоне за призом

жадные алгоритмы Перебор *1100

Вы и ваш друг участвуете в телешоу «В погоне за призом».

В начале шоу n призов располагаются на прямой. i-й приз находится в позиции ai. Позиции всех призов различны. Вы начинаете в позиции 1, ваш друг — на позиции 106 (в этих двух позициях нет призов). Вам необходимо, работая сообща, собрать все призы в любом порядке за минимальное время.

Известно, что переход из x в x + 1 или x - 1 занимает ровно 1 секунду как у вас, так и у вашего друга. Вы достаточно тренировались, так что приз поднимаете мгновенно, если его позиция совпадает с вашей текущей (то же верно и для вашего друга). Количество взятых призов никак не влияет на вашу скорость (и скорость вашего друга).

Теперь вы обсуждаете стратегию, решаете, кто какие призы будет брать. Обратите внимание, что каждый приз должен быть взят либо вами, либо вашим другом.

За какое наименьшее число секунд можно собрать все призы?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105) — количество призов.

Во второй строке записаны n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 106 - 1) — позиции призов. Никакие два приза не стоят на одной позиции. Позиции заданы в возрастающем порядке.

Выходные данные

Выведите одно целое число — минимальное число секунд, за которое удастся собрать все призы.

Примечание

В первом примере вы забираете все призы: берете первый в секунду 1, второй — в 2 и третий — в 8.

Во втором примере вы берете первый приз за 1 секунду, ваш друг берет другой за 5 секунд, вы делаете это одновременно, так что итоговое время получается 5.

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.

D. Спасение любви

графы жадные алгоритмы поиск в глубину и подобное снм Строки *1600

Валя и Толя — идеальная пара, но даже у них бывают ссоры. Недавно Валя обиделась на своего кавалера, так как он пришел к ней в футболке, надпись на которой отличается от надписи на ее свитере. Теперь она не хочет с ним видеться, а Толя сидит целыми днями в своей комнате и плачет над ее фотографиями.

Эта история так и осталась бы такой печальной, если бы в нее не вмешалась добрая швея-волшебница (бабушка Толи). Ее сердце разрывается, когда она видит молодых людей в ссоре, и поэтому она срочно хочет все исправить. Бабушка уже тайно забрала Валин свитер и Толину футболку, осталось только сделать надписи на них одинаковыми. Для этого она может за одну единицу маны купить заклинание, которое позволяет менять некоторые буквы на одежде. Ваша задача — рассчитать, какое минимальное количество маны придется потратить бабушке Толи для спасения любви молодых людей.

Более формально, надписи на Валином свитере и Толиной футболке — это две строчки одинаковой длины n, состоящие только из строчных букв латинского алфавита. За одну единицу маны бабушка может купить заклинание вида (c1, c2) (где c1 и c2 — произвольные строчные буквы латинского алфавита), с помощью которого она может сколько угодно раз менять букву c1 на c2 (и наоборот) как на Валином свитере, так и на Толиной футболке. Вам требуется найти минимальное количество маны, позволяющее приобрести набор заклинаний, с помощью которого можно сделать надписи одинаковыми. Также вам необходимо вывести соответствующий набор заклинаний.

Входные данные

В первой строке дано единственное число n (1 ≤ n ≤ 105) — длина надписей.

Во второй строке дана строка длины n, состоящая только из маленьких букв латинского алфавита — надпись на Валином свитере.

В третьей строке в таком же формате задана надпись на Толиной футболке.

Выходные данные

В первой строке выведите одно целое число — минимальное количество маны t для спасения любви молодых.

В следующих t строках выведите по две строчные буквы латинского алфавита через пробел — заклинания, которые нужно приобрести бабушке Толи. Заклинания и буквы в заклинаниях можно выводить в любом порядке.

Если оптимальных ответов несколько, выведите любой.

Примечание

В первом примере достаточно купить два заклинания: («a»,«d») и («b»,«a»). Тогда первые буквы совпадут, когда мы поменяем букву «a» на «d». Вторые совпадут, когда поменяем «b» на «a». Третьи совпадут, когда поменяем сначала «b» на «a», потом «a» на «d».

E. Максимизируй!

Бинарный поиск жадные алгоритмы Тернарный поиск *1800

Дано мультимножество S из натуральных чисел, изначально пустое. С ним производятся операции двух типов:

  1. Добавить в S натуральное число, не меньшее всех уже лежащих в множестве элементов.
  2. Найти непустое подмножество s множества S такое, что значение максимально. Здесь max(s) обозначает максимум среди всех элементов s,  — среднее арифметическое всех элементов s. Вывести величину .
Входные данные

В первой строке задано единственное натуральное число Q (1 ≤ Q ≤ 5·105) — количество операций. В каждой из следующих Q строк следует описание очередной операции. Для операций типа 1 в строке будут записаны два числа вида 1 и x, где x (1 ≤ x ≤ 109) — число, которое нужно добавить в S. Гарантируется, что x будет не меньше любого элемента S на данный момент. Для операции типа 2 в соответствующей строке будет записано ровно одно число 2.

Гарантируется, что первая операция будет иметь тип 1, то есть множество S не будет пустым при поступлении операций типа 2.

Выходные данные

Выведите ответ на каждую операцию второго типа в том порядке, в котором эти операции шли во входных данных. Каждое число должно располагаться на отдельной строке.

Ваш ответ будет считаться правильным, если каждый из ваших ответов имеет абсолютную или относительную ошибку не больше 10 - 6.

Формально, пусть ваш ответ равен a, а ответ жюри — b. Ваш ответ будет считаться правильным, если .

A. Точки на прямой

жадные алгоритмы Перебор сортировки *1200

Наши тесты не готовы. Впереди крупная олимпиада. Но ведь самая главная цель авторов контеста  — сделать еще одну задачу.

Назовём диаметром мультимножества точек на прямой максимальное расстояние между двумя точками этого множества. Например, диаметр мультимножества {1, 3, 2, 1} равен 2.

Диаметр мультимножества, состоящего из одной точки, равен 0.

Даны n точек на прямой. Какое минимальное число точек необходимо убрать, чтобы диаметр мультимножества оставшихся точек не превосходил d?

Входные данные

В первой строке заданы два целых числа n и d (1 ≤ n ≤ 100, 0 ≤ d ≤ 100) — количество точек и ограничение на диаметр, соответственно.

Во второй строке через пробел заданы n целых чисел (1 ≤ xi ≤ 100) — координаты точек.

Выходные данные

Выведите одно целое число — минимальное количество удалённых точек.

Примечание

В первом тестовом примере выгодно удалить точку с координатой 4. Оставшиеся точки будут иметь координаты 1 и 2, поэтому диаметр оставшегося мультимножества будет равен 2 - 1 = 1.

Во втором тестовом примере диаметр равен 0, поэтому удалять точки не потребуется.

В третьем тестовом примере выгодно удалить точки с координатами 1, 9 и 10. Оставшиеся точки будут иметь координаты 3, 4 и 6, поэтому диаметр будет равен 6 - 3 = 3.

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 соответственно.

A. Разделение

жадные алгоритмы *800

Задана последовательность a, состоящая из n целых чисел. Можно разделить эту последовательность на две последовательности b и c таким образом, чтобы каждый элемент принадлежал ровно одной из последовательностей.

Пусть B — сумма элементов, принадлежащих последовательности b, а C — сумма элементов, принадлежащих последовательности c (если какая-либо из последовательностей пуста, то ее сумма равна 0). Чему равно максимальное значение B - C?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100) — количество элементов в последовательности a.

Во второй строке записаны n чисел a1, a2, ..., an ( - 100 ≤ ai ≤ 100) — элементы последовательности a.

Выходные данные

Выведите максимальное возможное значение B - C, где B — сумма элементов последовательности b, а C — сумма элементов последовательности c.

Примечание

В первом примере можем выбрать b = {1, 0}, c = { - 2}. Тогда B = 1, C =  - 2, B - C = 3.

Во втором примере выбираем b = {16, 23, 16, 15, 42, 8}, c = {} (пустая последовательность). Тогда B = 120, C = 0, B - C = 120.

C. Преобразование строки

жадные алгоритмы Строки *1300

Вам задана строка s, состоящая из |s| строчных латинских букв.

За один ход вы можете заменить любой символ строки на следующий в алфавитном порядке (a будет заменена на b, s будет заменена на t и так далее). Вы не можете заменить букву z ни на какую другую.

Ваша задача состоит в том, чтобы за какое-то количество ходов (не обязательно минимальное) получить строку abcdefghijklmnopqrstuvwxyz (английский алфавит) как подпоследовательность. Подпоследовательностью строки является такая строка, которая получена удалением символов на некоторых позициях. Вы должны вывести строку, которая получается из исходной и содержит в себе английский алфавит в качестве подпоследовательности, либо же сказать, что это невозможно.

Входные данные

Единственная строка входных данных содержит строку s, состоящую из |s| (1 ≤ |s| ≤ 105) строчных латинских букв.

Выходные данные

Если вы можете получить строку, которая получается из исходной и содержит в себе английский алфавит в качестве подпоследовательности, выведите её. Иначе выведите «-1» (без кавычек).

E. Наибольшее красивое число

жадные алгоритмы реализация *2200

Ага, это очередная задача с определением «красивых» чисел.

Назовем положительное целое число x красивым, если его десятичное представление без лидирующих нулей содержит четное количество цифр, и существует перестановка этого представления, которая является палиндромом. Например, число 4242 красивое, так как оно содержит 4 цифры, и существует перестановка 2442, которая является палиндромом.

Для заданного положительного целого числа s, найдите наибольшее красивое число, которое строго меньше s.

Входные данные

В первой строке записано одно целое число t (1 ≤ t ≤ 105) — количество наборов входных данных, которые вам предстоит решить.

Затем следуют t строк, каждая содержит десятичное представление очередного числа s. Гарантируется, что это — строка четной длины, не содержащая лидирующих нулей, а также существует хотя бы одно красивое число строго меньше s.

Сумма длин s по всем наборам входных данных не превосходит 2·105.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке наибольшее красивое число, которое строго меньше s (гарантируется, что ответ существует).

A. Зебры

жадные алгоритмы *1600

Олег ведёт историю прожитых им дней, отмечая в ней каждый день либо как хороший, либо как плохой. Олег называет зеброй непустую последовательность дней, начинающуюся и заканчивающуюся плохим днём, в которой хорошие и плохие дни чередуются. Будем обозначать плохие дни за 0, а хорошие за 1. Тогда, например, последовательности дней 0, 010, 01010 являются зебрами, а последовательности 1, 0110 и 0101 не являются.

Олег сообщил вам историю прожитых им дней в хронологическом порядке в виде строки из символов 0 и 1, и теперь вас интересует, можно ли разбить историю Олега на несколько подпоследовательностей, каждая из которых является зеброй, и, если да, то как это можно сделать. Каждый день должен попасть ровно в одну подпоследовательность. Дни в каждой подпоследовательности должны следовать в хронологическом порядке. Обратите внимание, что подпоследовательность не обязана образовывать группу подряд идущих дней.

Входные данные

В единственной строке входных данных записана непустая строка s, состоящая из символов 0 и 1, которая описывает историю дней, прожитых Олегом. Длина строки (обозначаемая дальше как |s|) не превосходит 200 000 символов.

Выходные данные

Если существует способ разбить историю дней на подпоследовательности, являющиеся зебрами, то в первой строке выведите число k (1 ≤ k ≤ |s|) — получившееся количество подпоследовательностей. В i-й из k последующих строк выведите сперва целое число li (1 ≤ li ≤ |s|) — длину i-й подпоследовательности, а затем li индексов, обозначающих номера дней в истории, составляющих подпоследовательность. Номера должны следовать в порядке возрастания, нумерация начинается с единицы. Каждый номер от 1 до n должен попасть ровно в одну подпоследовательность. Если разбиения на подпоследовательности-зебры не существует, то выведите -1.

Подпоследовательности можно выводить в любом порядке. Если возможных разбиений на подпоследовательности-зебры несколько, то разрешается вывести любое из них. Минимизировать или максимизировать величину k не требуется.

D. Отбой

Бинарный поиск жадные алгоритмы Перебор сортировки *2300

Преподаватели Летней Какой-нибудь Школы укладывают учащихся спать.

Домик состоит из n комнат, в каждой из которых должны жить ровно b школьников. Однако к моменту отбоя оказалось, что далеко не каждый школьник находится в своей комнате. Комнаты расположены в ряд и пронумерованы по порядку от 1 до n, изначально в i-й комнате находятся ai школьников. При этом, в домике находятся все проживающие в нём школьники и только они, то есть, a1 + a2 + ... + an = nb. В домике также живут 2 преподавателя.

Процесс укладывания школьников спать устроен следующим образом. Первый преподаватель встаёт у комнаты 1 и движется в направлении комнаты n, а второй преподаватель — у комнаты n и движется в сторону комнаты 1. Закончив укладывать очередную комнату, преподаватель переходит к следующей, если n нечётно, то среднюю комнату укладывает спать только первый преподаватель. Как только все школьники уложены спать, процесс заканчивается.

Когда преподаватель заходит в комнату, он считает количество школьников внутри, затем тушит свет и закрывает комнату. Дополнительно, если количество школьников внутри не совпадает с b, этот преподаватель записывает номер комнаты в свою записную книжку и всё равно тушит свет и закрывает комнату. Преподаватели очень торопятся составить учебный план на завтра, поэтому игнорируют, кто именно находится в комнате, считая только количество школьников.

Пока преподаватели находятся в комнатах, школьники могут перебегать между ещё не закрытыми и не укладываемыми прямо сейчас комнатами, причём школьник успевает перебежать не более чем на d комнат (то есть, перемещается в комнату с номером, который отличается не более чем на d). Также, после (или вместо) перемещения любой школьник может спрятаться под кровать в той комнате, в которой находится, тогда преподаватель его не заметит при подсчёте. В любой комнате под кроватями могут спрятаться сколько угодно школьников одновременно.

Формально говоря, происходит следующий процесс:

  • Объявляется отбой, к этому моменту в комнате i находится ai школьников.
  • Каждый школьник может переместиться в другую комнату, но не далее, чем на d от изначального положения, либо остаться в текущей комнате. После этого желающие спрятаться под кровать прячутся.
  • В комнату 1, а также в комнату n заходят преподаватели и укладывают спать всех находящимся там школьников, после чего запирают комнату (после этого нельзя ни войти в комнату, ни выйти из неё).
  • Школьники из комнат с номерами от 2 до n - 1 могут переместиться в другие комнаты, убегая не далее, чем на d комнат от своего текущего местоположения, либо остаться в текущей комнате. Желающие спрятаться под кровать прячутся.
  • Из комнаты 1 в комнату 2, и из комнаты n в комнату n - 1 переходит преподаватель.
  • Процесс продолжается, пока во всех комнатах школьники не будут уложены спать.

Пусть первый преподаватель записал x1 комнат с видимым нарушением численности (комнат, где число не спрятавшихся школьников не равно b), а второй x2. Школьники знают, что директор смены будет слушать жалобы на безобразие во время отбоя не более, чем от одного преподавателя домика, поэтому хотят действовать таким образом, чтобы максимальное из чисел xi было как можно меньше. Помогите им определить, какое минимальное значение эта величина может принимать при оптимальных действиях школьников.

Входные данные

В первой строке записаны три целых числа n, d и b (2 ≤ n ≤ 100 000, 1 ≤ d ≤ n - 1, 1 ≤ b ≤ 10 000) — количество комнат в домике, максимальное количество комнат, которые успевает пробежать школьник, пока преподавателя нет в коридоре, и требуемое количество школьников в одной комнате.

Во второй находятся n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109), i-е из которых соответствует количеству школьников в i-й комнате перед объявлением отбоя.

Гарантируется, что a1 + a2 + ... + an = nb.

Выходные данные

Выведите одно число — минимальное возможное значение максимального xi.

Примечание

В первом примере первые три комнаты посетит первый преподаватель, а последние две — второй. Одним из оптимальных решений является следующее: на первом шаге три школьника должны перебежать из комнаты 5 в комнату 4, на втором шаге два из них должны перебежать в комнату 3 и одному из них следует там спрятаться. Тем самым недовольство первого преподавателя вызовет только комната 2, а второй преподаватель и вовсе не встретит никаких нарушений.

Во втором примере одной из оптимальных стратегий является следующая: на первом шаге все школьники из комнаты 1 прячутся, а все школьники из комнаты 2 перебегают в комнату 3. На втором шаге один школьник перебегает из комнаты 3 в комнату 4, а ещё 5 прячутся. Тем самым первый преподаватель будет недоволен комнатами 1 и 2, а второй — комнатами 5 и 6.

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.

B. Перехваченное сообщение

жадные алгоритмы реализация *1100

Хакер Жорик пытается расшифровать два перехваченных им накануне секретных сообщения. Каждое секретное сообщения представляет из себя набор зашифрованных блоков, состоящих из некоторого количества байт информации.

Жорик знает, что каждое из этих сообщений является архивом, состоящим из одного или нескольких файлов. Также Жорик знает принцип, который использовался для передачи каждого из этих архивов по сети: если архив состоит из k файлов размерами l1, l2, ..., lk байт, то при передаче i-й файл разбивается на один или несколько блоков bi, 1, bi, 2, ..., bi, mi (при этом суммарная длина блоков bi, 1 + bi, 2 + ... + bi, mi совпадает с длиной исходного файла li), после чего по сети передаются все блоки каждого из файлов в порядке следования файлов в архиве.

Жорик подозревает, что два перехваченных сообщения на самом деле кодируют один и тот же архив, потому что размеры сообщений равны, однако, файлы могут быть разбиты на блоки разными способами.

Вам даны длины блоков каждого из сообщений, перехваченных Жориком в оригинальном порядке следования. Помогите Жорику определить, какое максимальное количество файлов может быть в перехваченном архиве, если предположение Жорика верно.

Входные данные

В первой строке находятся два целых числа n, m (1 ≤ n, m ≤ 105) — количество блоков в первом и втором сообщениях соответственно.

Во второй строке находятся n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 106) — длины блоков, составляющих первое сообщение.

В третьей строке находятся m целых чисел y1, y2, ..., ym (1 ≤ yi ≤ 106) — длины блоков, составляющих второе сообщение.

Гарантируется, что x1 + ... + xn = y1 + ... + ym. Кроме того, гарантируется, что x1 + ... + xn ≤ 106.

Выходные данные

Выведите максимальное количество файлов, из которого может состоять перехваченный архив.

Примечание

В первом тесте из условия максимальное возможное число файлов в архиве — 3. Например, возможно, что в архиве находилось три файла размеров 2 + 5 = 7, 15 = 3 + 1 + 11 = 8 + 2 + 4 + 1 и 4 + 4 = 8.

Во втором тесте из условия возможно, что архив состоит из двух файлов размеров 1 и 110 = 10 + 100 = 100 + 10. Обратите внимание, что при передаче по сети файлы внутри архивов не переставляются, поэтому нельзя считать, что бы передан архив из трёх файлов размерами 1, 10 и 100.

В третьем тесте из условия оказывается, что сообщение состоит из единственного файла размером 4.

E. Краны с водой

Бинарный поиск жадные алгоритмы сортировки *2000

Рассмотрим систему из n кранов, наполняющих некоторую емкость водой. Кран i может быть настроен на подачу любого объема воды от 0 до ai мл в секунду (это число может быть действительным). Вода в i-м кране имеет температуру ti.

Если для каждого выставить, чтобы i-й кран наливал ровно xi мл воды в секунду, то температура воды в результате будет (если , то во избежание деления на ноль считаем температуру равной 0).

Вам необходимо выставить все краны таким образом, чтобы полученная температура была ровно T. Какой максимальный объем воды в секунду температуры T можно получить?

Входные данные

В первой строке записаны два целых числа n и T (1 ≤ n ≤ 200000, 1 ≤ T ≤ 106) — количество кранов с водой и желаемая температура воды соответственно.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106), где ai — максимальный объем воды, который i-й кран может выдавать в секунду.

В третьей строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 106) — температура воды в каждом кране.

Выходные данные

Выведите максимальный возможный объем воды температуры T, который можно получить в секунду (если невозможно получить воду желаемой температуры, то ответ равен 0).

Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

G. Оборона крепости

Бинарный поиск жадные алгоритмы Структуры данных *2000

Сегодня вам предстоит руководить эльфами-лучниками при обороне крепости от нападения толпы злых орков. С трёх сторон крепость защищена непроходимыми горами, а с оставшейся стороны расположена стена, состоящая из n секций. На текущий момент на i-й секции находится ai лучников. Известно, что каждый лучник, находящийся на секции i может поражать орков, атакующих секции на расстоянии не более r от данной, то есть секции с номерами j, такие что |i - j| ≤ r. В частности, если r = 0, то лучник может стрелять только в орков, атакующих секцию i.

Защищённостью секции i назовём суммарное количество лучников, которые могут стрелять в орков, атакующих данную секцию. Надёжностью плана обороны называется минимальная величина защищённости какой-либо из секций стены.

До атаки осталось совсем мало времени, и вы не успеваете перерасставить стрелков, уже расположенных на стене. Тем не менее, у вас имеется резерв из k лучников, которых можно распределить по секциям прозвольным образом. Вас интересует, какое максимальное значение надёжности плана обороны можно получить.

Входные данные

В первой строке входных данных записаны три целых числа n, r и k (1 ≤ n ≤ 500 000, 0 ≤ r ≤ n, 0 ≤ k ≤ 1018) — количество секций, из которых состоит стена, максимальное расстояние до других секций, на которое может стрелять каждый лучник и количество лучников в резерве соответственно. Во второй строке записаны n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — текущее количество лучников на каждой из секций.

Выходные данные

Выведите одно целое число — максимально возможное значение надёжности плана обороны, то есть максимально возможное минимальное значение защищённости секции стены при оптимальной расстановке имеющихся в резерве k лучников.

A. Покормите кота

жадные алгоритмы математика *1100

Проснувшись в hh:mm, Андрей осознал, что не давало ему покоя все это время: он в очередной раз забыл покормить своего единственного кота (неудивительно, что остался лишь один кот). Текущий уровень голода кота равняется H единиц, при этом Андрей знает, что за каждую минуту без еды кот становится голоднее на D единиц.

В любой момент времени Андрей может сходить в магазин (можно считать, что перемещения в магазин и обратно происходят мгновенно), где продаются вкусные булочки. Одна такая булочка стоит C рублей и утоляет голод на N единиц. В силу того, что к вечеру спрос на выпечку падает, начиная с 20:00 можно приобрести булочки со скидкой в 20% (заметьте, стоимость не обязана быть целым числом). Разумеется, по частям булочки не продаются.

Какое минимальное количество рублей придется потратить Андрею, чтобы покормить кота? Кот считается покормленным, если его уровень голода меньше или равен нулю.

Входные данные

В первой строке заданы два числа hh и mm (00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59) — время пробуждения Андрея.

Во второй строке содержатся четыре числа H, D, C и N (1 ≤ H ≤ 105, 1 ≤ D, C, N ≤ 102).

Выходные данные

Выведите единственное число — минимальную стоимость, за которую можно покормить кота, с точностью до трех знаков после запятой. Ответ будет считаться верным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

Формально, пусть ваш ответ равен a, а ответ жюри — b. Ваш ответ считается правильным, если .

Примечание

В первом примере можно пойти в магазин ровно в 20:00. Голод кота к тому моменту достигнет значения в 315 единиц, поэтому потребуется купить ровно 315 булочек. С учетом скидки это обойдется в 25200 рублей.

Во втором примере разумнее пойти в магазин сразу после пробуждения. Тогда придется купить 91 булочку по 15 рублей каждая и затратить 1365 рублей суммарно.

B2. Maximum Control (medium)

графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2200

The Resistance is trying to take control over as many planets of a particular solar system as possible. Princess Heidi is in charge of the fleet, and she must send ships to some planets in order to maximize the number of controlled planets.

The Galaxy contains N planets, connected by bidirectional hyperspace tunnels in such a way that there is a unique path between every pair of the planets.

A planet is controlled by the Resistance if there is a Resistance ship in its orbit, or if the planet lies on the shortest path between some two planets that have Resistance ships in their orbits.

Heidi has not yet made up her mind as to how many ships to use. Therefore, she is asking you to compute, for every K = 1, 2, 3, ..., N, the maximum number of planets that can be controlled with a fleet consisting of K ships.

Input

The first line of the input contains an integer N (1 ≤ N ≤ 105) – the number of planets in the galaxy.

The next N - 1 lines describe the hyperspace tunnels between the planets. Each of the N - 1 lines contains two space-separated integers u and v (1 ≤ u, v ≤ N) indicating that there is a bidirectional hyperspace tunnel between the planets u and v. It is guaranteed that every two planets are connected by a path of tunnels, and that each tunnel connects a different pair of planets.

Output

On a single line, print N space-separated integers. The K-th number should correspond to the maximum number of planets that can be controlled by the Resistance using a fleet of K ships.

Note

Consider the first example. If K = 1, then Heidi can only send one ship to some planet and control it. However, for K ≥ 2, sending ships to planets 1 and 3 will allow the Resistance to control all planets.

E1. Guard Duty (easy)

геометрия жадные алгоритмы математика Перебор *1600

The Rebel fleet is afraid that the Empire might want to strike back again. Princess Heidi needs to know if it is possible to assign R Rebel spaceships to guard B bases so that every base has exactly one guardian and each spaceship has exactly one assigned base (in other words, the assignment is a perfect matching). Since she knows how reckless her pilots are, she wants to be sure that any two (straight) paths – from a base to its assigned spaceship – do not intersect in the galaxy plane (that is, in 2D), and so there is no risk of collision.

Input

The first line contains two space-separated integers R, B(1 ≤ R, B ≤ 10). For 1 ≤ i ≤ R, the i + 1-th line contains two space-separated integers xi and yi (|xi|, |yi| ≤ 10000) denoting the coordinates of the i-th Rebel spaceship. The following B lines have the same format, denoting the position of bases. It is guaranteed that no two points coincide and that no three points are on the same line.

Output

If it is possible to connect Rebel spaceships and bases so as satisfy the constraint, output Yes, otherwise output No (without quote).

Note

For the first example, one possible way is to connect the Rebels and bases in order.

For the second example, there is no perfect matching between Rebels and bases.

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].

B. Махмуд, Эхаб и сообщение

жадные алгоритмы реализация снм *1200

Махмуд хочет послать сообщение своему другу Эхабу. Их язык состоит из n слов, пронумерованных с 1 по n. У некоторых слов совпадают значения, поэтому существует k групп слов таких, что у всех слов в одной группе значение одинаковое.

Махмуд знает, что стоимость посылки i-го слова равна ai. Каждое слово в сообщении Махмуд может оставить неизменным или заменить его другим словом с тем же значением. Можете ли вы помочь Махмуду определить минимальную стоимость посылки сообщения?

Стоимость посылки сообщения равна сумме стоимостей отправки всех слов в сообщении.

Входные данные

В первой строке ввода содержатся три целых числа n, k и m (1 ≤ k ≤ n ≤ 105, 1 ≤ m ≤ 105) — число слов в языке, число групп слов с одинаковым значением и число слов в сообщении Махмуда соответственно.

Во второй строке содержится n строк, разделённых пробелами, состоящих из строчных (маленьких) английских букв, длиной не более 20 символов — слова языка Махмуда. Гарантируется, что слова различны.

В третьей строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — стоимость посылки i-го слова.

Далее следуют k строк, описывающих группы слов, одинаковых по значению. Каждая из следующих k строк начинается с целого числа x (1 ≤ x ≤ n), что означает, что в данной группе синонимов x слов, после чего следует x целых чисел — номера слов, имеющих одинаковое значение в языке Махмуда. Гарантируется, что каждое слово встречается ровно в одной группе.

Следующая строка содержит m слов, разделённых пробелами — сообщение, которое хочет послать Махмуд. Каждое из этих слов встречается в списке слов языка.

Выходные данные

Единственная строка вывода должна содержать минимальную стоимость посылки сообщения после замены нескольких (возможно, ни одного) слова другими словами с таким же значением.

Примечание

В первом примере Махмуд должен заменить слово «second» на слово «loser», поскольку оно стоит меньше, и тогда стоимость посылки будет равна 100+1+5+1=107.

Во втором примере Махмуд не должен совершать никаких замен, поэтому стоимость будет равна 100+1+5+10=116.

D. Махмуд, Эхаб и еще одна игра про построение массива

жадные алгоритмы Конструктив математика теория чисел *1900

У Махмуда есть массив a, состоящий из n целых чисел. Он попросил Эхаба найти такой массив b такой же длины, что:

  • b лексикографически больше или равен a.
  • bi ≥ 2.
  • Все числа в b попарно взаимно просты: для любых 1 ≤ i < j ≤ n, bi и bj взаимнопросты, то есть GCD(bi, bj) = 1, где GCD(w, z) — наибольший общий делитель чисел w и z.

Эхаб хочет выбрать особый массив, поэтому среди всех возможных вариантов он хочет выбрать лексикографически минимальный массив. Можете ли вы его найти?

Массив x лексикографически больше, чем массив y, если существует индекс i такой, что xi > yi и xj = yj для всех 1 ≤ j < i. Массив x равен массиву y, если xi = yi для всех 1 ≤ i ≤ n.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — число элементов в массивах a и b.

Вторая строка содержит n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 105) — элементы a.

Выходные данные

Выведите n целых чисел, разделённых пробелами, i-е из которых равно bi.

Примечание

Заметьте, что во втором примере все числа в массиве уже попарно взаимнопросты, поэтому мы и выводим его.

B. Минимизация ошибки

жадные алгоритмы сортировки Структуры данных *1500

Вам заданы два массива A и B, размер каждого из которых равен n. Величина ошибки E между этими массивами определятся как . Вы должны выполнить ровно k1 операций с массивом A и ровно k2 операций с массивом B. За одну операцию вы можете выбрать один элемент массива и увеличить или уменьшить его значение на 1.

Выведите минимально возможную величину ошибки после выполнения k1 операций с массивом A и k2 операций с массивом B.

Входные данные

В первой строке находятся три целых числа n (1 ≤ n ≤ 103), k1 и k2 (0 ≤ k1 + k2 ≤ 103, k1 и k2 неотрицательны) — размер массивов и количество операций, которые нужно произвести с массивом A и с массивом B, соотвественно.

Во второй строке заданы n целых чисел a1, a2, ..., an ( - 106 ≤ ai ≤ 106) — массив A.

В третьей строке заданы n целых чисел b1, b2, ..., bn ( - 106 ≤ bi ≤ 106) — массив B.

Выходные данные

Выведите единственное число — минимально возможное значение после выполнения ровно k1 операций с массивом A и ровно k2 операций с массивом B.

Примечание

В первом тестовом примере, мы не можем применить никаких операций к A или к B. Следовательно, E = (1 - 2)2 + (2 - 3)2 = 2.

Во втором тестовом примере, нам необходимо применить ровно одну операцию к A. Чтобы минимизировать величину ошибки, мы увеличим первый элемент A на 1. Таким образом, A = [2, 2]. Получившаяся величина ошибки E = (2 - 2)2 + (2 - 2)2 = 0. Это минимальная величина ошибки, которую можно получить.

В третьeм тестовом примере, мы можем увеличить первый элемент A до 8, используя все 5 доступных операций. Также первый элемент B можно превратить в 8, используя 6 из 7 доступных операций. Таким образом получаем, A = [8, 4] и B = [8, 4]. Получившаяся величина ошибки равна E = (8 - 8)2 + (4 - 4)2 = 0. Однако, мы должны сделать еще 1 действие над массивом B. Увеличим второй элемент B до 5, получим B = [8, 5] и E = (8 - 8)2 + (4 - 5)2 = 1.

C. Подсчет подпоследовательностей

битмаски жадные алгоритмы Конструктив реализация *1700

У Пикачу есть массив. Он выписал все непустые подпоследовательности своего массива на бумажный лист. Обратите внимание, что у массива длины n есть 2n - 1 непустых подпоследовательностей.

Пикачу всегда был озорным, поэтому он удалил все подпоследовательности, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ d

В итоге, у Пикачу осталось X подпоследовательностей.

Но Пикачу случайно потерял свой массив и сейчас у Пикачу из-за этого серьезные проблемы. Он до сих пор помнит числа X и d и хочет построить любой массив, который удовлетворяет описанным условиям. Все числа в его новом массиве должны быть целыми, положительными и должны быть меньше, чем 1018.

Обратите внимание, что количество элементов в выведенном массиве не должно превышать 104. Если невозможно построить ни одного такого массива, выведите  - 1.

Входные данные

В единственной строке следуют два целых числа X и d (1 ≤ X, d ≤ 109).

Выходные данные

Выведите две строки.

В первой строке должно содержаться целое число n (1 ≤ n ≤ 10 000)— количество элементов в новом массиве Пикачу.

Во второй строке должно содержаться n целых чисел через пробел — a1, a2, ... , an (1 ≤ ai < 1018).

Если ответа не существует, выведите одно число -1. Если существуют несколько ответов, выведите любой.

Примечание

В первом тестовом примере, подпоследовательности, оставшиеся при удалении всех подпоследовательностей, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ 5 это [5], [5, 7], [5, 6], [5, 7, 6], [50], [7], [7, 6], [15], [6], [100]. Этих подпоследовательностей ровно 10. Таким образом, массив [5, 50, 7, 15, 6, 100] подходит.

Похожим образом, во втором тестовом примере, подпоследовательности, оставшиеся при удалении всех подпоследовательностей, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ 2 это [10], [100], [1000], [10000]. Этих подпоследовательностей ровно 4. Таким образом, массив [10, 100, 1000, 10000] подходит.

B. Студенты в вагоне

жадные алгоритмы Конструктив реализация *1300

В вагоне есть \(n\) последовательных мест. Каждое место либо пустое, либо занято пассажиром.

Университетская команда на олимпиаду состоит из \(a\) студентов-программистов и \(b\) студентов-спортсменов. Определите наибольшее количество студентов из всех \(a+b\), которых можно посадить в вагон так, чтобы никакой студент-программист не сидел рядом со студентом-программистом и никакой студент-спортсмен не сидел рядом со студентом-спортсменом. Иными словами, не должно быть двух подряд идущих мест, на которых сидят два студента-спортсмена или два студента-программиста.

Считайте, что изначально занятые пассажирами места заняты членами жюри (которые, очевидно, вообще не являются студентами).

Входные данные

В первой строке следует три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 2\cdot10^{5}\), \(0 \le a, b \le 2\cdot10^{5}\), \(a + b > 0\)) — общее количество мест в вагоне, количество студентов-программистов и количество студентов-спортсменов.

Во второй строке следует строка длины \(n\), состоящая из символов «.» и «*». Точка означает, что соответствующее место свободно. Звездочка означает, что соответствующее место занято членом жюри.

Выходные данные

Выведите наибольшее количество студентов, которых можно посадить в вагон так, чтобы никакой студент-программист не сидел рядом со студентом-программистом и никакой студент-спортсмен не сидел рядом со студентом-спортсменом.

Примечание

В первом примере можно посадить всех студентов, например, следующим образом: *.AB*

Во втором примере можно посадить четырех студентов, например, следующим образом: *BAB*B

В третьем примере можно посадить семерых студентов, например, следующим образом: B*ABAB**A*B

Буквой A обозначены студенты-программисты, а буквой B — студенты-спортсмены.

E. Байтландия, Берляндия и спорные города

жадные алгоритмы Конструктив *2200

Страны Байтландия и Берляндия расположены на прямой \(Ox\). Кроме этого на этой прямой расположены и спорные города, которые принадлежат каждой из стран по их мнению. Таким образом, на прямой \(Ox\) расположены города трёх типов:

  • города Байтландии,
  • города Берляндии,
  • спорные города.

Недавно был запущен проект BNET — компьютерная сеть нового поколения. Теперь задача обоих государств соединить города так, чтобы сеть этой страны была связной.

Страны договорились соединить пары городов кабелями BNET таким образом, чтобы:

  • если рассмотреть только города Байтландии и спорные города, то в получившимся наборе городов любой город был достижим из любого другого по одному или нескольким кабелям,
  • если рассмотреть только города Берляндии и спорные города, то в получившимся наборе городов любой город был достижим из любого другого по одному или нескольким кабелям.

Таким образом, надо выбрать набор пар городов так, чтобы, соединив их, выполнялись оба условия одновременно. Кабели осуществляют двунаправленную передачу данных. Каждый кабель соединяет ровно два различных города.

Стоимость прокладки кабеля из одного города в другой равна расстоянию между городами. Найдите минимальную суммарную стоимость прокладки набора кабелей, чтобы два подмножества городов (Байтландии и спорных городов, Берляндии и спорных городов) были связны.

Каждый город является точкой на прямой \(Ox\). Технически возможно соединить города \(a\) и \(b\) кабелем так, что город \(c\) (\(a < c < b\)) не подключен к этому кабелю, где \(a\), \(b\) и \(c\) — одновременно координаты городов \(a\), \(b\) и \(c\).

Входные данные

В первой строке записано целое число \(n\) (\(2 \le n \le 2 \cdot 10^{5}\)) — количество городов.

Далее следует \(n\) строк, в каждой из которых задано целое число \(x_i\) и буква \(c_i\) (\(-10^{9} \le x_i \le 10^{9}\)) — координаты очередного города и его тип. Если город принадлежит Байтландии, то \(c_i\) равно «B». Если город принадлежит Берляндии, то \(c_i\) равно «R». Если город является спорным между странами, то \(c_i\) равно «P».

Все города имеют различные координаты. Гарантируется, что города заданы в порядке увеличения их координат.

Выходные данные

Выведите минимальную суммарную длину такого набора кабелей, что если удалить все города Берляндии (\(c_i\)R»), можно будет найти путь от любого оставшегося города до любого другого оставшегося города, двигаясь только по кабелям. Аналогично, если удалить все города Байтландии (\(c_i\)B»), можно будет найти путь от любого оставшегося города до любого другого оставшегося города, двигаясь только по кабелям.

Примечание

В первом примере нужно соединить первый город со вторым, второй с третьим, а третий с четвертым. Суммарная длина кабелей будет равна \(5 + 3 + 4 = 12\).

Во втором примере нет спорных городов, поэтому нужно соединить все соседние города Байтландии и все соседние города Берляндии. Города Берляндии имеют координаты \(10, 21, 32\), поэтому для их соединения нужно два кабеля длины \(11\) и \(11\). Города Байтландии имеют координаты \(14\) и \(16\), поэтому для их соединения нужен один кабель длины \(2\). Таким образом, суммарная длина всех кабелей равна \(11 + 11 + 2 = 24\).

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)). После этого в дереве не остается ребер, поэтому оставшиеся вершины можно уничтожать в любом порядке.

D. Одноразовые камни

Бинарный поиск жадные алгоритмы Потоки *1900

Много лягушек хотят пересечь реку. Река имеет ширину \(w\), но лягушки могут прыгать только на расстояние \(l\), причём \(l < w\). Кроме того, лягушки могут прыгать на расстояния, меньшие \(l\), но не на расстояния большие. К счастью, в реке есть камни, которые могут помочь пересечь реку.

Камни расположены на целых расстояниях от берегов. На расстоянии \(i\) от берега, на котором сейчас находятся лягушки, находится \(a_i\) камней. Каждый камень может быть использован только одной лягушкой, после чего он тонет.

Какое максимальное количество лягушек может пересечь реку, если они могут прыгать только по камням?

Входные данные

Первая строка содержит два целых числа \(w\) и \(l\) (\(1 \le l < w \le 10^5\)) — ширина реки и максимальный размер прыжка лягушки.

Вторая строка содержит \(w - 1\) целых чисел \(a_1, a_2, \ldots, a_{w-1}\) (\(0 \le a_i \le 10^4\)), где \(a_i\) — число камней на расстоянии \(i\) от того берега, на котором изначально находятся лягушки.

Выходные данные

Выведите одно целое число — максимальное количество лягушек, которые могут пересечь реку.

Примечание

В первом примере две лягушки могут использовать два разных камня на расстоянии \(5\), а ещё одна может использовать камни на расстояниях \(3\) и \(8\).

Во втором примере то, что на расстоянии \(5\) находятся два разных камня, не улучшает ответ. Есть три разных пути: \(0 \to 3 \to 6 \to 9 \to 10\), \(0 \to 2 \to 5 \to 8 \to 10\), \(0 \to 1 \to 4 \to 7 \to 10\).

E. Короткий код

Деревья дп жадные алгоритмы Строки Структуры данных *2200

Код Аркадия содержит \(n\) переменных. Каждая переменная имеет уникальное имя, состоящее только из английских строчных (маленьких) букв. Однажды Аркадий решил укоротить свой код.

Он хочет заменить имя каждой переменной его непустым префиксом таким образом, что новые имена останутся попарно различными (но новое имя какой-либо переменной может совпадать со старым именем этой или другой переменной). Среди всех таких возможных замен он хочет найти такую, для которой суммарная длина названий переменных будет минимальной.

Строка \(a\) является префиксом строки \(b\), если вы можете удалить несколько (возможно, ни одного) символа с конца строки \(b\) и получить \(a\).

Найдите минимальную возможную суммарную длину новых имён.

Входные данные

В первой строке содержится одно целое число \(n\) (\(1 \le n \le 10^5\)) — число переменных в коде Аркадия.

Следующие \(n\) строк содержат названия переменных по одному на строку. Каждое название не является пустой строкой и содержит только лишь строчные (маленькие) английские буквы. Суммарная длина всех этих строк не больше \(10^5\). Все названия переменных различны.

Выходные данные

Выведите одно целое число — минимально возможную суммарную длину новых названий переменных.

Примечание

В первом примере одним из наилучших вариантов будет сокращение имён в порядке их ввода до "cod", "co", "c".

Во втором примере можно укоротить последнее имя до "aac" и первое имя до "a" без изменения других имён переменных.

C. Вложенные отрезки

жадные алгоритмы реализация сортировки *1500

Задана последовательность a1, a2, ..., an одномерных отрезков, пронумерованных от 1 до n. Ваша задача — найти два различных индекса i и j таких, что отрезок ai лежит внутри отрезка aj.

Отрезок [l1, r1] лежит внутри отрезка [l2, r2] тогда и только тогда, когда l1 ≥ l2 и r1 ≤ r2.

Выведите позиции i и j. Если существует несколько возможных ответов, выведите любой из них. Если ответа не существует, то выведите -1 -1.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 3·105) — количество отрезков.

В каждой из следующих n строк записаны по два целых числа li и ri (1 ≤ li ≤ ri ≤ 109) — i-й отрезок.

Выходные данные

Выведите две различные позиции i и j такие, что отрезок ai лежит внутри отрезка aj. Если существует несколько возможных ответов, выведите любой из них. Если ответа не существует, то выведите -1 -1.

Примечание

В первом примере следующие пары считаются валидными:

  • (2, 1), (3, 1), (4, 1), (5, 1) — не касаются даже границами;
  • (3, 2), (4, 2), (3, 5), (4, 5) — касаются только в одной границе;
  • (5, 2), (2, 5) — полностью совпадают.

E. Неплохо сыграно!

жадные алгоритмы сортировки *2100

Недавно Максим увлекся известной ККИ «BrainStone». Так как «BrainStone» весьма интеллектуальная игра, в её процессе Максиму постоянно приходится решать сложные задачи. Вот одна из них:

Всего у Максима n существ, i-е характеризуется двумя числами – своим здоровьем hpi и своим уроном dmgi. Также у Максима есть в запасе заклинания двух типов:

  1. Удваивает здоровье существа (hpi := hpi·2);
  2. Приравнивает урон существа к его здоровью (dmgi := hpi).

Заклинание первого типа можно использовать не более a раз суммарно, второго не более b раз суммарно. Заклинание может быть использовано на одном существе несколько раз. Заклинания можно использовать в любом порядке. Также не обязательно использовать все заклинания.

Так как Максим слишком занят подготовкой к сессии, он просит вас посчитать, какой максимальный суммарный урон существ можно получить, если оптимально применять заклинания.

Входные данные

Первая строка содержит три целых числа n, a, b (1 ≤ n ≤ 2·105, 0 ≤ a ≤ 20, 0 ≤ b ≤ 2·105) — количество существ, заклинаний первого и второго типа соответственно.

i-я из следующих n строк содержат два числа hpi и dmgi (1 ≤ hpi, dmgi ≤ 109) — характеристики i-го существа.

Выходные данные

В единственной строке выведите одно число — максимальный урон, который могут нанести существа.

Примечание

В первом примере Максиму нужно использовать заклинание первого типа на второе существо, а затем заклинание второго типа на него же. Тогда суммарный урон существ будет равен 15 + 6·2 = 27.

Во втором примере Максиму нужно использовать заклинание второго типа на первое существо и заклинание второго типа на третье существо. Суммарный урон существ получится 10 + 11 + 5 = 26.

G. Сессия Пети

жадные алгоритмы реализация сортировки *1700

Сессия Пети продлится \(n\) дней и за это время ему нужно сдать \(m\) экзаменов. Дни сессии пронумерованы от \(1\) до \(n\).

Про каждый экзамен известно три величины:

  • \(s_i\) — день, когда выдадут билеты для \(i\)-го экзамена.
  • \(d_i\) — день, когда состоится \(i\)-й экзамен (\(s_i < d_i\)).
  • \(c_i\) — сколько дней нужно Пете, чтобы подготовиться к \(i\)-му экзамену. К \(i\)-му экзамену Петя может готовиться только в дни с номерами от \(s_i\) до \(d_i-1\), включительно.

В каждый из дней сессии Петя будет либо весь день отдыхать, либо весь день сдавать один экзамен, либо весь день готовится к одному из экзаменов, для которого уже выданы билеты. Смешивать виды активностей в один день Петя не может. Если в день \(j\) Петя готовится к экзамену \(i\), то \(s_i \le j < d_i\).

Петя может иметь перерывы между днями подготовки к одному экзамену, он может чередовать по дням подготовку к разным экзаменам. Таким образом, подготовка к одному экзамену не обязательно должна осуществляться в последовательные дни.

Определите расписание подготовки Пети, в соответствии с которым, он успешно сможет подготовиться ко всем экзаменам и сдать их, либо сообщите, что это невозможно.

Входные данные

В первой строке следуют два целых числа \(n\) и \(m\) \((2 \le n \le 100, 1 \le m \le n)\) — количество дней сессии и количество экзаменов.

В следующих \(m\) строках следуют по три целых числа \(s_i\), \(d_i\), \(c_i\) \((1 \le s_i < d_i \le n, 1 \le c_i \le n)\) — день, когда будут выданы билеты для \(i\)-го экзамена, день, когда состоится \(i\)-й экзамен, а также количество дней, которые нужны Пете, чтобы подготовиться к \(i\)-му экзамену.

Гарантируется, что все экзамены состоятся в разные дни. Билеты для разных экзаменов могут быть выданы в один и тот же день. В день экзамена могут быть выданы билеты для одного или нескольких других экзаменов, которые Петя сможет узнать, но начать готовиться он сможет начать только в следующий день, так как в текущий сдаёт экзамен.

Выходные данные

Если Петя не сможет подготовиться и сдать все экзамены, выведите -1.

В случае положительного ответа выведите \(n\) целых чисел, где \(j\)-е число равно:

  • \((m + 1)\), если в \(j\)-й день проводится экзамен (напомним, что в каждый день сессии проводится не более одного экзамена),
  • нулю, если в \(j\)-й день Петя будет отдыхать,
  • равно \(i\) (\(1 \le i \le m\)), если в \(j\)-й день Петя будет готовиться к \(i\)-му экзамену (суммарное количество дней подготовки к каждому экзамену согласно расписанию должно быть в точности равно количеству дней, необходимых для подготовки к нему).

Экзамены нумеруются в том же порядке, в котором встречаются во входных данных, начиная с \(1\).

Если возможных ответов (расписаний) несколько, то выведите любой из них.

Примечание

В первом примере Петя может, например, готовиться к экзамену \(1\) в первый день, готовиться к экзамену \(2\) во второй день, в третий день сдать экзамен \(1\), в четвертый день отдыхать, а в пятый день сдать экзамен \(2\). Таким образом, он сумеет подготовиться и сдать все экзамены.

Во втором примере сессия длится три дня и состоится два экзамена. Таким образом, на подготовку остаётся всего один день (так как два других дня заняты сдачей экзаменов). Поэтому Петя не сможет сдать все экзамены.

B. Охота за сокровищами

жадные алгоритмы *1800

После празднования дня рождения Кэти решила, что Широ надо ещё повеселиться. Поэтому она придумала игу про охоту за сокровищами и пригласила её лучших подруг Куро и Широ поиграть вместе с ней.

Поскольку подруги достаточно умны, они быстро прошли все испытания и достигли цели. Но, к сожалению, сокровище достанется только одной из них, поэтому им необходимо было придумать метод, как выявить среди них победителя. Для этого Куро придумала метод с цветными лентами.

Каждой из трёх подруг даётся по случайной многоцветной ленте. Каждый цвет на ленте обозначается большой или маленькой буквой английского алфавита. Назовём непрерывный подотрезок цветов, встречающийся на ленте, подлентой. Красота ленты будет определяться как максимальное количество раз, которое одна из его подлент встречается в ленте. Чем чаще встречается подлента, тем красивее лента. Например, красота ленты aaaaaaa равна \(7\), так как подлента a встречается в ней \(7\) раз, а красота ленты abcdabc равна \(2\), поскольку подлента abc встречается в ней дважды.

Правила просты: в игре будет \(n\) ходов. Каждый ход каждая из подруг обязана поменять ровно один участок цвета в её ленте на любой другой цвет, выбранный ей. Например, ленту aaab можно за один ход поменять на acab. Сокровища получает та, чья лента после \(n\) ходов будет наиболее красивой.

Можете ли вы определить, кто победит при наилучшей возможной игре каждого игрока?

Входные данные

В первой строке содержится целое число \(n\) (\(0 \leq n \leq 10^{9}\)) — количество ходов.

В следующих 3 строках содержатся 3 ленты Куро, Широ и Кэти, каждая в отдельной строке, соответственно. Каждая лента — непустая строка, содержащая не более \(10^{5}\) прописных и строчных (маленьких и больших) букв английского алфавита. Гарантируется, что длины всех лент равны для честности состязания. Обратите внимание, что прописные и строчные буквы обозначают разные цвета.

Выходные данные

Выведите имя победителя на латинице — «Kuro», «Shiro» или «Katie». Если после окончания игры максимальное значение красоты будет хотя бы у двух лент, выведите «Draw».

Примечание

В первом примере после \(3\) ходов Куро может преобразовать свою ленту в ooooo, имеющую красоту \(5\), в то время как достижение такой красоты невозможно для Кэти и Широ (и Широ, и Кэти могут максимум достичь красоты \(4\), например, превратив ленту Широ в SSiSS и превратив ленту Кэти в Kaaaa). Поэтому победит Куро.

В четвёртом примере, так как длина каждой строки равна \(9\), а количество ходов равно \(15\), все могут превратить свои ленты таким путём, чтобы достичь максимальной красоты \(9\), например, превратив свои строки в zzzzzzzzz после 9 ходов, и поочерёдно превращая свои строки в azzzzzzzz, а потом обратно в zzzzzzzzz, трижды. Поэтому игра закончится ничьёй.

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 как ответ на этот запрос.

C. Постеризация

жадные алгоритмы игры *1700

Профессор Ибрагим подготовил последнее домашнее задание для его курса алгоритмов. Он хочет, чтобы его студенты написали постеризационный фильтр для изображений.

Этот алгоритм будет тестироваться на массиве целых чисел, в котором \(i\)-е число обозначает цвет \(i\)-го пикселя в изображении. Изображение чёрно-белое, поэтому цвет каждого пикселя будет целым числом между 0 и 255 (включительно).

Для реализации алгоритма фильтра студенты должны разделить чёрно-белую гамму [0, 255] на группы последовательных цветов и выбрать в каждой группе один ключевой цвет. Для сохранения деталей изображения размер каждой группы не может быть больше \(k\) и каждый цвет должен принадлежать ровно одной группе. После этого студенты должны заменить цвет каждого пикселя в массиве на ключевой цвет группы, в которую он входит.

Для лучшего понимания эффекта снизу приведено несколько изображений греющейся на солнце черепахи, к каждому из которых был применён постеризационный фильтр, причём \(k\) для них растёт слева направо.

Для упрощения процесса проверки профессор Ибрагим хочет, чтобы студенты разбили цвета на группы и выбрали ключевые цвета таким образом, что результирующий массив будет лексикографически наименьшим из всех возможных.

Входные данные

В первой строке ввода содержится два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\), \(1 \leq k \leq 256\)) — число пикселей в изображении и максимальный размер группы цветов соответственно.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(0 \leq p_i \leq 255\)), где \(p_i\) — цвет \(i\)-го пикселя.

Выходные данные

Выведите \(n\) целых чисел, разделённых пробелами — лексикографически наименьший массив, являющийся результатом применения постеризационного фильтра к исходному изображению.

Примечание

Один из возможных методов выбора групп и ключевых цветов для первого примера таков:

Цвет \(2\) принадлежит группе \([0,2]\) с ключевым цветом \(0\).

Цвет \(14\) принадлежит группе \([12,14]\) с ключевым цветом \(12\).

Цвета \(3\) и \(4\) принадлежат группе \([3, 5]\) с ключевым цветом \(3\).

Остальные группы не повлияют на результат, поэтому они не выписаны.

E. Народные игры

Деревья жадные алгоритмы Структуры данных *2200

Государство Панел проводит ежегодное шоу «Народные игры», в котором каждый дистрикт будет представлять один участник. В государстве \(n\) дистриктов, пронумерованных от \(1\) до \(n\), причём от каждого дистрикта до любого другого есть ровно один путь. Число фанатов участника игр из дистрикта \(i\) равно \(2^i\).

В этом году президент решил снизить затраты на проведение Народных игр. По этой причине он хочет убрать \(k\) участников из соревнования, но есть проблема — дистрикты, участники из которых будут убраны из соревнования, будут в бешенстве и не дадут никому пересекать их границы.

Президент хочет, чтобы все оставшиеся в играх участники были из дистриктов, которые можно достичь друг из друга. Он также хочет, чтобы суммарное количество фанатов оставшихся участников было максимальным. Каких участников должен убрать президент?

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(k\) (\(1 \leq k < n \leq 10^6\)) — число дистриктов в Панеле и число участников, которое хочет убрать президент соответственное.

В каждой из следующих \(n-1\) строк содержится два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq n\), \(a \ne b\)), описывающих дорогу, соединяющую два разных дистрикта \(a\) и \(b\). Гарантируется, что существует ровно один путь между любыми двумя дистриктами.

Выходные данные

Выведите \(k\) целых чисел, разделённых пробелами — номера дистриктов, участники из которых должны быть убраны, в порядке возрастания номера дистрикта.

Примечание

В первом примере максимально достижимое число фанатов равно \(2^2 + 2^5 + 2^6 = 100\). Этого можно достичь, убрав участников из кварталов 1, 3 и 4.

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.\(\)

F. Круговой марьяж

Бинарный поиск жадные алгоритмы Паросочетания *2500

В прекрасной стране Кругляндии объявили брачный сезон!

Страна Кругляндия представляет собой окружность длины \(L\). В стране есть \(n\) кавалеров и \(n\) дам, и кавалеры решили выбрать себе дам в пары.

Конечно, каждый кавалер должен выбрать себе в жены ровно одну даму, а каждая дама должна быть выбрана ровно одним кавалером.

Все объекты в Кругляндии находятся на окружности, в том числе столица, а также замки кавалеров и особняки дам. Замок \(i\)-го кавалера находится на расстоянии \(a_i\) от столицы при движении по часовой стрелке, а особняк \(i\)-й дамы на расстоянии \(b_i\) от столицы при движении по часовой стрелке.

Назовем неудобством женитьбы максимальное расстояние, которое придется пройти даме от своего особняка до замка своего кавалера по кратчайшему пути (по или против часовой стрелки).

Помогите кавалерам страны Кругляндия выбрать себе жен так, чтобы неудобство женитьбы было минимально возможным.

Входные данные

В первой строке находятся два целых числа \(n\) и \(L\) (\(1 \leq n \leq 2 \cdot 10^{5}\), \(1 \leq L \leq 10^{9}\)) — количество кавалеров и дам, а также длина окружности Кругляндии.

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < L\)) — расстояния от столицы до замков кавалеров при движении по часовой стрелке.

В следующей строке расположено \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \leq b_i < L\)) — расстояния от столицы до особняков дам при движении по часовой стрелке.

Выходные данные

В единственной строке выведите минимальное возможное неудобство женитьбы, где неудобство равно максимальному расстоянию, которое придется пройти какой-либо даме.

Примечание

В первом тестовом примере чтобы минимизировать женитьбу первому кавалеру следует жениться на второй даме, а второму кавалеру на первой даме. Таким образом, второй даме до замка первого жениха потребуется пройти расстояние \(1\), и то же расстояние понадобиться пройти первой даме до замка второго жениха. Таким образом, неудобство женитьбы равно \(1\).

Во втором примере обозначим за \(p_i\) даму, которая досталась \(i\)-у кавалеру. Тогда одно из \(p\), принимающее минимальное возможное неудобство женитьбы это \((6,8,1,4,5,10,3,2,7,9)\).

B. Автобус характеров

жадные алгоритмы реализация Структуры данных *1300

В автобусе характеров есть \(n\) рядов сидений, в каждом по \(2\) места. В \(i\)-м ряду ширина обоих сидений равна \(w_i\) сантиметров. Все числа \(w_i\) различны.

Изначально автобус пустой. На каждой из \(2n\) остановок в автобус садится ровно один человек одного из двух характеров:

  • интроверт всегда выбирает ряд, где оба места свободны, при этом из таких рядов он выбирает ряд с самыми узкими сидениями, и занимает одно место;
  • экстраверт всегда выбирает ряд, где уже сидит один человек (интроверт), при этом из таких рядов он выбирает ряд с самыми широкими сидениями, и занимает оставшееся в выбранном ряду место.

Вам дана ширина сидений в каждом ряду, а также порядок, в котором входили пассажиры. Определите, на какой ряд сядет каждый из пассажиров.

Входные данные

В первой строке следует целое число \(n\) (\(1 \le n \le 200\,000\)) — количество рядов сидений в автобусе.

Во второй строке следует последовательность целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^{9}\)), где \(w_i\) равно ширине каждого из двух сидений в \(i\)-м ряду. Гарантируется, что все \(w_i\) различны.

В третьей строке следует строка длины \(2n\), состоящая из символов «0» и «1» — описание порядка, в котором пассажиры заходят в автобус. Если \(j\)-й символ строки равен «0», то на \(j\)-й остановке в автобус зашел интроверт. Если \(j\)-й символ строки равен «1», то на \(j\)-й остановке в автобус зашел экстраверт. Гарантируется, что интровертов и экстравертов, которые зашли в автобус, поровну (то есть по \(n\)), и для каждого экстраверта всегда найдется подходящий ряд.

Выходные данные

Выведите \(2n\) целых чисел — номера рядов, в которые сели пассажиры. Номера рядов для пассажиров должны быть выведены в том же порядке, в котором пассажиры заданы во входных данных.

Примечание

В первом примере первый пассажир (интроверт) выберет ряд номер \(2\), так как в нем самые узкие сиденья. Второй пассажир (интроверт) выберет ряд номер \(1\), так как это единственный оставшийся пустой ряд. Третий пассажир (экстраверт) выберет ряд номер \(1\), так как в нем уже сидит один пассажир и этот ряд самый широкий. Четвертый пассажир (экстраверт) выберет ряд номер \(2\), так как это единственный ряд, в котором осталось свободное место.

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\).

C. Бочки Либиха

жадные алгоритмы *1500

Даны m = n·k деревянных досок. i-я доска имеет длину ai. Необходимо собрать n бочек, каждая из k досок, для сборки можно использовать любые k досок. Каждая доска должна принадлежать ровно одной бочке.

Объемом vj бочки j назовем длину минимальной доски в ней.

Вы хотите собрать ровно n бочек с максимальным суммарным объемом. Однако их требуется сделать достаточно схожими, разница между объемами любых двух полученных бочек не должна превосходить l, это значит, что |vx - vy| ≤ l для любых 1 ≤ x ≤ n и 1 ≤ y ≤ n.

Выведите максимальную возможную сумму объемов достаточно схожих бочек или 0, если невозможно удовлетворить условие.

Входные данные

В первой строке записаны три целых числа n, k и l (1 ≤ n, k ≤ 105, 1 ≤ n·k ≤ 105, 0 ≤ l ≤ 109).

Во второй строке записаны m = n·k целых чисел a1, a2, ..., am (1 ≤ ai ≤ 109) — длины досок.

Выходные данные

Выведите одно целое число — максимальную сумму объемов бочек или 0, если невозможно собрать ровно n бочек, удовлетворяющих условию |vx - vy| ≤ l для любых 1 ≤ x ≤ n и 1 ≤ y ≤ n.

Примечание

В первом примере можно собрать следующие бочки: [1, 2], [2, 2], [2, 3], [2, 3].

В втором примере можно собрать следующие бочки: [10], [10].

В третьем примере можно собрать следующие бочки: [2, 5].

В четвертом примере разница между объемами бочек в любом разделении кк минимум 2, так что невозможно сделать бочки достаточно схожими.

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 и положить оставшиеся в еще одну коробку.

A. Ярмарка

графы жадные алгоритмы кратчайшие пути теория чисел *1600

В Байтландии собираются провести ярмарку. В Байтландии \(n\) городов, которые соединены \(m\) двухсторонними дорогами, причём из любого города можно доехать до любого другого, передвигаясь только по дорогам.

В Байтландии производят \(k\) различных товаров, причём каждый город специализируется на одном товаре. Чтобы ярмарка состоялась, на неё нужно привезти хотя бы \(s\) различных товаров. Чтобы привезти товары из города \(u\) в город \(v\) нужно потратить \(d(u,v)\) монет, где \(d(u,v)\) — длина кратчайшего пути между городами \(u\) и \(v\). Длина пути — это количество дорог, которые входят в этот путь.

Организаторы ярмарки оплатят перевозку товаров, однако они сами могут выбрать, производителей из каких городов пригласить на ярмарку. Теперь организаторы хотят для каждого из \(n\) городов посчитать, какое минимальное количество монет нужно потратить на перевозку товаров, чтобы провести ярмарку в этом городе.

Входные данные

В первой строке записаны \(4\) целых числа \(n\), \(m\), \(k\), \(s\) (\(1 \le n \le 10^{5}\), \(0 \le m \le 10^{5}\), \(1 \le s \le k \le min(n, 100)\)) — количество городов, количество дорог, количество различных товаров, количество различных товаров необходимых для проведения ярмарки.

В следующей строке записаны \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_{i} \le k\)), где \(a_i\) — номер товара, который производится в \(i\)-м городе. Гарантируется, что среди чисел \(a_{i}\) встречаются все числа от \(1\) до \(k\).

В следующих \(m\) строках описываются дороги. Каждая дорога описывается парой \(u\) \(v\) городов, которые она соединяет (\(1 \le u, v \le n\), \(u \ne v\)). Гарантируется, что между любой парой городов не более одной дороги. Гарантируется, что можно доехать из любого города в любой, двигаясь только по дорогам.

Выходные данные

Выведите \(n\) чисел, \(i\)-е из которых — минимальное количество монет на перевозку товаров при проведении ярмарки в городе \(i\). Разделяйте числа пробелами.

Примечание

Рассмотрим первый пример.

Чтобы провести ярмарку в городе \(1\), можно привезти товары из городов \(1\) (\(0\) монет), \(2\) (\(1\) монета) и \(4\) (\(1\) монета). Суммарное количество монет равно \(2\).

Город \(2\): Товары из городов \(2\) (\(0\)), \(1\) (\(1\)), \(3\) (\(1\)). Сумма \(2\).

Город \(3\): Товары из городов \(3\) (\(0\)), \(2\) (\(1\)), \(4\) (\(1\)). Сумма \(2\).

Город \(4\): Товары из городов \(4\) (\(0\)), \(1\) (\(1\)), \(5\) (\(1\)). Сумма \(2\).

Город \(5\): Товары из городов \(5\) (\(0\)), \(4\) (\(1\)), \(3\) (\(2\)). Сумма \(3\).

E. Делимость на 25

жадные алгоритмы Перебор *2100

Задано целое число \(n\) от \(1\) до \(10^{18}\), записанное без лидирующих нулей.

За один ход можно поменять в нём любую такую пару соседних цифр местами, что в результате получается число без лидирующих нулей. Иными словами, после каждого хода должно получаться число без лидирующих нулей.

Какое наименьшее количество ходов надо последовательно совершить, чтобы получилось число, которое делится на \(25\)? Выведите -1, если не существует такой последовательности ходов, которая приводит к числу, кратному \(25\).

Входные данные

В первой строке входных данных задано целое число \(n\) (\(1 \le n \le 10^{18}\)). Гарантируется, что первая (левая) цифра числа \(n\) отлична от нуля.

Выходные данные

Если не существует такой последовательности ходов, которая приводит к числу, кратному \(25\), выведите -1. В противном случае выведите минимальное количество ходов в такой последовательности.

Обратите внимание, что вы можете менять местами только соседние цифры.

Примечание

В первом тестовом примере одна из возможных последовательностей ходов следующая: 5071 \(\rightarrow\) 5701 \(\rightarrow\) 7501 \(\rightarrow\) 7510 \(\rightarrow\) 7150.

B. Микромир

жадные алгоритмы сортировки *1200

У Вас есть чаша Петри с бактериями, и теперь Вы решили окунуться в этот опасный микромир. К сожалению, у Вас нет микроспопа поблизости, поэтому Вы не можете наблюдать за ними.

Вы знаете, что в чаше \(n\) бактерий и размер \(i\)-й бактерии равен \(a_i\). Также Вы знаете межгалактическую целую положительную константу \(K\).

Бактерия \(i\) может поглотить \(j\)-ю бактерию тогда и только тогда, когда \(a_i > a_j\) и \(a_i \le a_j + K\). \(j\)-я бактерия исчезает, а \(i\)-я не меняет своего размера. Бактерия может поглощать любое количество других бактерий. В каждой операции поглощения любая бактерия \(i\) может поглотить любую другую бактерию \(j\) если \(a_i > a_j\) и \(a_i \le a_j + K\). Поглощения происходят последовательно.

Например, пусть размеры бактерий \(a=[101, 53, 42, 102, 101, 55, 54]\) и \(K=1\). Одна из возможных последовательностей поглощений следующая: \([101, 53, 42, 102, \underline{101}, 55, 54]\) \(\to\) \([101, \underline{53}, 42, 102, 55, 54]\) \(\to\) \([\underline{101}, 42, 102, 55, 54]\) \(\to\) \([42, 102, 55, \underline{54}]\) \(\to\) \([42, 102, 55]\). В результате \(3\) бактерии останутся в чаше Петри.

Так как у Вас нет микроскопа, Вы можете только гадать, какое минимальное возможное количество бактерий может остаться в Вашей чашке Петри, когда Вы наконец найдете себе какой-нибудь микроскоп.

Входные данные

Первая строка содержит два целых положительных числа через пробел \(n\) и \(K\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le K \le 10^6\)) — количество бактерий и межгалактическая константа \(K\).

Вторая строка содержит \(n\) целых чисел через пробел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — размеры бактерий в Вашей чашке.

Выходные данные

Выведите единственное число — наименьшее возможное количество оставшихся бактерий.

Примечание

Первый пример описан в условии задачи.

Во втором примере одно из оптимальных решений следующее: \([20, 15, 10, 15, \underline{20}, 25]\) \(\to\) \([20, 15, 10, \underline{15}, 25]\) \(\to\) \([20, 15, \underline{10}, 25]\) \(\to\) \([20, \underline{15}, 25]\) \(\to\) \([\underline{20}, 25]\) \(\to\) \([25]\).

В третьем примере никакая бактерия не может поглотить никакую другую.

E. Уличные фонари

жадные алгоритмы Перебор *2100

Дом Адилбека расположен на улице, которая может быть представлена, как ось OX. На этой улице очень темно, поэтому Адилбек хочет установить фонари, чтобы осветить ее. На улице есть \(n\) позиции для установки фонарей, они соответствуют целым числам от \(0\) до \(n - 1\) на оси OX. Однако, некоторые позиции заблокированы, в них нельзя установить фонари.

Существуют фонари различных типов, они отличаются только своей мощностью. Когда фонарь мощности \(l\) устанавливают на позицию \(x\), сегмент улицы \([x; x + l]\) становится освещен. Мощность любого фонаря — это положительное целое число.

Магазин по продаже фонарей имеет ассортимент из бесконечного количество фонарей мощности от \(1\) до \(k\). Однако, каждый покупатель может купить фонари ровно одного типа. Каждый фонарь мощности \(l\) стоит \(a_l\).

Какую минимальную цену придется заплатить Адилбеку за покупку фонарей ровно одного типа таких, что они могут осветить весь отрезок улицы \([0; n]\)? Некоторые фонари могут освещать и другие отрезки улицы, эти отрезки Адилбеку не важны. Например, он может поставить фонарь мощности \(3\) в позицию \(n - 1\) (даже несмотря на то, что он освещает участок, который не полностью принадлежит \([0; n]\)).

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(1 \le k \le n \le 10^6\), \(0 \le m \le n\)) — длина отрезка улицы, который Адилбек хочет осветить, количество заблокированных позиций и максимальная доступная мощность фонарей.

Во второй строке записаны \(m\) целых чисел \(s_1, s_2, \dots, s_m\) (\(0 \le s_1 < s_2 < \dots s_m < n\)) — заблокированные позиции.

В третьей строке записаны \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \le a_i \le 10^6\)) — цены фонарей.

Выходные данные

Выведите минимальную цену придется заплатить Адилбеку за покупку фонарей ровно одного типа таких, что они могут осветить весь отрезок улицы \([0; n]\).

Если невозможно осветить весь отрезок улицы \([0; n]\), то выведите -1.

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» в единственной строке.

B. Отлично!

жадные алгоритмы сортировки *900

Семестр подходит к концу и пора бы уже задумываться об оценках. Сегодня на занятии преподаватель сказал, что оценки за экзамен будут выставляться автоматически — нужно посчитать среднее арифметическое оценок за лабораторные работы и округлить до ближайшего целого числа. При этом округление производится в пользу студента — \(4.5\) будет округлено до \(5\) (см. пример 3), но \(4.4\) — уже до \(4\).

Для Васи данная новость стала полной неожиданностью — он хотел просто ответить всё на экзамене и получить заслуженную «отлично», а лабораторные делал спустя рукава. Может оказаться, что у Васи не выходит \(5\), а может и вообще текущие оценки вынуждают преподавателя поставить \(2\). К счастью, преподаватель разрешил переделать лабораторные и тем самым исправить оценки перед подсчетом среднего арифметического. Вася хочет переделать минимальное количество лабораторных работ так, чтобы в итоге преподаватель выставил оценку \(5\). Вася может сам выбрать, какие оценки надо исправлять, более того, Вася постарается, и переделанные работы будут идеальными — он точно получит за них \(5\).

Помогите Васе — посчитайте, какое наименьшее количество лабораторных работ ему придется переделать.

Входные данные

В первой строке находится единственное число \(n\) — количество оценок Васи (\(1 \leq n \leq 100\)). Во второй строке заданы \(n\) натуральных чисел от \(2\) до \(5\) — оценки Васи за лабораторные работы.

Выходные данные

Выведите единственное число — минимальное количество оценок, которое придется исправить Васе. Можно показать, что всегда можно исправить достаточное количество оценок, чтобы получить \(5\).

Примечание

В первом примере Васе достаточно исправить две оценки \(4\) на \(5\).

Во втором примере у Васи уже выходит \(5\) (среднее арифметическое \(4.75\)), исправлять ничего не нужно.

В третьем примере Васе нужно исправить одну из оценок \(3\), тогда среднее арифметическое будет ровно \(4.5\) и за семестр Вася получит \(5\).

D. Слонопотамы

дп жадные алгоритмы *1500

Слонопотам — фигура, состоящая из трёх клеток, образующих «уголок». Эту фигуру можно поворачивать на 90, 180 и 270 градусов, так что получаются 4 возможных положения:


XX XX .X X.
X. .X XX XX

Слонопотамы — мирные фигуры, в отличие от классических шахматных фигур, они не бьют никакие клетки, два слонопотама могут стоять даже рядом друг с другом — главное, чтобы они занимали разные клетки.

У Васи есть доска \(2\times n\) клеток, на которой он хочет разместить несколько слонопотамов. К сожалению, часть клеток доски уже заняты пешками, на эти клетки ставить другие фигуры нельзя. С другой стороны, пешки дружат со слонопотамами, поэтому тоже не бьют слонопотамов, даже если они стоят рядом.

Зная расположение пешек на доске, подскажите Васе, какое наибольшее количество слонопотамов он может одновременно разместить на доске так, чтобы они не пересекались друг с другом и не занимали клетки с пешками.

Входные данные

Входной файл содержит две непустые строки, задающие доску Васи. Строки состоят только из символов «0» (ноль), обозначающих свободные клетки доски, и символов «X» (заглавная латинская буква), соответствующих клеткам, занятым пешками. Строки непустые, имеют одинаковую длину, не превышающую \(100\).

Выходные данные

Вывести единственное число — наибольшее количество слонопотамов, которое можно разместить на заданной доске.

F. Отобразить число

жадные алгоритмы математика Перебор реализация *2700

Вася регулярно участвует в соревнованиях по программированию. Он уже привык к достаточно длинным условиям задач и научился быстро выделять важные предложения среди множества слов. Разумеется, ограничения на входные данные и другие числа в описании задачи — очень важная часть условий, например, разложить на простые множители число до 1000000 проще, чем число до 1000000000. Однако, Вася заметил, что зачастую запись числа получается очень длинной и сложной для восприятия. Может, авторы задачи могли ее сократить? Например, вместо 1000000 можно написать \(10^{6}\), вместо 1000000000\(10^{9}\), а вместо 1000000007\(10^{9}+7\).

Вася решил, что запись числа для удобства восприятия должна подчиняться следующим правилам:

  • запись должна содержать только числа, операции сложения («+»), умножения («*») и возведения в степень («^»), в частности, использование скобок не допускается;
  • нельзя использовать несколько операций возведения в степень подряд, например, запись «2^3^4» недопустима;
  • значение записанного выражения должно равняться исходному числу;
  • запись должна содержать наименьшее возможное количество символов.

По заданному числу \(n\) найдите для него эквивалентную запись, удобную для восприятия.

Входные данные

Единственная строка содержит натуральное число \(n\) (\(1 \leq n \leq 10\,000\,000\,000\)).

Выходные данные

Вывести удобную для восприятия запись числа \(n\). Если существует несколько таких записей, выведите любую из них.

Примечание

В третьем примере так же допустим ответ 10^10, тоже имеющий длину \(5\).

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.

B. Рыцари многоугольного стола

жадные алгоритмы реализация сортировки *1400

В отличие от Рыцарей Круглого Стола, Рыцари Многоугольного Стола обделены благородством и с радостью убьют друг друга. Однако каждый рыцарь обладает своей силой, и один рыцарь может убить другого только если его сила больше, чем сила жертвы. Однако даже такого рыцаря будет мучить совесть, поэтому рыцарь может убить максимум \(k\) других рыцарей.

Также у каждого рыцаря есть некоторое количество монет. При убийстве рыцарь может забрать все монеты своей жертвы.

Сейчас каждый рыцарь задумался: а какое наибольшее количество монет у него может оказаться, если убивать других рыцарей будет только он?

Вам предстоит ответить на этот вопрос для каждого рыцаря.

Входные данные

В первой строке даны два числа \(n\) и \(k\) \((1 \le n \le 10^5, 0 \le k \le \min(n-1,10))\) — количество рыцарей и число \(k\), описанное в условии.

Во второй строке записаны \(n\) чисел \(p_1, p_2 ,\ldots,p_n\) \((1 \le p_i \le 10^9)\) — силы рыцарей. Все \(p_i\) различны.

В третьей строке записаны \(n\) чисел \(c_1, c_2 ,\ldots,c_n\) \((0 \le c_i \le 10^9)\) — количества монет у рыцарей.

Выходные данные

Выведите \(n\) чисел — наибольшее количество монет у каждого рыцаря.

Примечание

Рассмотрим первый пример.

  • Первый рыцарь самый слабый, он не может никого убить, поэтому у него максимум может быть только одна монета.
  • Второй рыцарь может убить первого и забрать его монету в дополнение к двум своим.
  • Третий рыцарь сильнее всех, но так как он максимум может убить \(k = 2\) рыцарей, то выгоднее всего забрать монеты у второго и четвертого рыцаря: \(2+11+33 = 46\).
  • Четвертый рыцарь должен забрать монеты у первого и второго: \(33+1+2 = 36\).

Во втором примере первый рыцарь не может никого убить, а все остальные должны убить одного рыцаря, имеющего номер, на один меньший.

В третьем примере всего один рыцарь, он не может никого убить, хотя очень хочет.

B. Костюм с галстуком

жадные алгоритмы математика реализация *1400

Аллен собрал вечеринку в формальном стиле. Пришло \(2n\) человек, образующих \(n\) пар. После веселья Аллен хочет выстроить всех в ряд, чтобы сделать общую фотографию. \(2n\) гостей встали в ряд, но Аллену не нравится порядок. Аллен хочет, чтобы каждая пара располагалась рядом, это сделает фотографию более эстетичной.

Определите для Аллена минимальное число обмена мест людей на соседних позициях, необходимое для того, чтобы каждая пара занимала соседние места в ряду.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество пар людей.

Вторая строка содержит \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\). Для каждого \(i\), удовлетворяющего \(1 \le i \le n\), \(i\) встречается в этом списке ровно два раза. Если \(a_j = a_k = i\), то люди на \(j\)-м и на \(k\)-м местах образуют пару.

Выходные данные

Выведите одно целое число — минимальное число обменов местами соседних людей для того, чтобы каждая пара занимала соседние позиции.

Примечание

В первом примере можно добиться результата следующим образом: \(1 1 2 3 3 2 4 4 \rightarrow 1 1 2 3 2 3 4 4 \rightarrow 1 1 2 2 3 3 4 4\) за два шага. Обратите внимание, что последовательность \(1 1 2 3 3 2 4 4 \rightarrow 1 1 3 2 3 2 4 4 \rightarrow 1 1 3 3 2 2 4 4\) тоже подходит.

Во втором примере все пары уже стоят рядом, поэтому ответ \(0\).

C. Из бара домой

геометрия жадные алгоритмы математика Перебор сортировки Структуры данных *2300

Для вектора \(\vec{v} = (x, y)\), определим длину \(|v| = \sqrt{x^2 + y^2}\).

Аллен немного перебрал в баре, который находится в начале координат. Существуют \(n\) векторов \(\vec{v_1}, \vec{v_2}, \cdots, \vec{v_n}\). Аллен сделает \(n\) шагов. Так как Аллен дезориентирован, на \(i\)-м шаге он либо сделает шаг на вектор \(\vec{v_i}\), либо на вектор \(-\vec{v_i}\). Другими словами, если его позиция сейчас равна \(p = (x, y)\), то он окажется либо в \(p + \vec{v_i}\), либо в \(p - \vec{v_i}\).

Аллен не хочет уйти далеко от дома (он также находится в баре). Помогите ему найти последовательность шагов (последовательность знаков векторов) такую, чтобы его финальная позиция \(p\) удовлетворяла ограничению \(|p| \le 1.5 \cdot 10^6\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество шагов.

В каждой из следующих строк содержится два целых числа \(x_i\) и \(y_i\), описывающих вектор \(\vec{v_i} = (x_i, y_i)\). Гарантируется, что \(|v_i| \le 10^6\) выполняется для всех \(i\).

Выходные данные

Выведите единственною строку, содержащую \(n\) целых чисел \(c_1, c_2, \cdots, c_n\), каждое из которых равно либо \(1\), либо \(-1\). Ваше решение будет зачтено, если финальная позиция \(p = \sum_{i = 1}^n c_i \vec{v_i}\) удовлетворяет \(|p| \le 1.5 \cdot 10^6\).

Можно показать, что решение всегда существует при данных ограничениях.

A. Выиграть в лотерею

дп жадные алгоритмы *800

У Аллена много денег, а именно, на счету в банке у него \(n\) долларов. По соображениям безопасности он хочет снять всю сумму наличными, мы не будет здесь описывать эти соображения. Номиналы долларовых купюр равны \(1\), \(5\), \(10\), \(20\), \(100\). Какое минимальное число купюр должен получить Аллен после того, как снимет все деньги?

Входные данные

Первая и единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Выведите минимальное число купюр, которые должен получить Аллен.

Примечание

В первом примере Аллен может получить одну \(100\)-долларовую купюру, одну купюру в \(20\) долларов и одну купюру в \(5\) долларов. Нельзя получить \(125\) долларов с помощью одной или двух купюр.

Во втором примере Аллен может получить две \(20\)-долларовые купюры и три купюры в \(1\) доллар.

В третьем примере Аллен может снять \(100000000\) (десять миллионов!) \(100\)-долларовых купюр.

A. Превратить в единицы

жадные алгоритмы математика Перебор реализация *1500

Вам дана строка \(a_1, a_2, \dots, a_n\), состоящая из нулей и единиц.

Назовем последовательность подряд идущих элементов \(a_i, a_{i + 1}, \ldots, a_j\) (\(1\leq i\leq j\leq n\)) подстрокой строки \(a\).

К строке можно неограниченное количество раз последовательно применять следующие операции:

  • выбрать любую подстроку (в частности, допустимо выбрать всю строку) строки \(a\) и развернуть ее, заплатив за это \(x\) монет (например, «0101101» \(\to\) «0111001»);
  • выбрать любую подстроку (в частности, допустимо выбрать всю строку или один символ) строки \(a\) и заменить каждый символ на противоположный ему (то есть нули заменяются на единицы, а единицы — на нули), заплатив за это \(y\) монет (например, «0101101» \(\to\) «0110001»).

Вы можете применять операции в любом порядке. Допустимо к одной и той же подстроке применять любую или обе операции неоднократно.

Какое минимальное количество монет потребуется потратить, чтобы получить строку, состоящую только из единиц?

Входные данные

В первой строке записаны целые числа \(n\), \(x\) и \(y\) (\(1 \leq n \leq 300\,000, 0 \leq x, y \leq 10^9\)) — длина строки, стоимость первой операции (разворота подотрезка) и стоимость второй операции (инвертирования всех элементов некоторого подотрезка) соответственно.

Во второй строке записана строка \(a\) длины \(n\), состоящая из нулей и единиц.

Выходные данные

Выведите единственное целое число — минимальную суммарную стоимость изменений, необходимых для получения строки, состоящей только из единиц. Выведите \(0\), если не требуется совершать никаких изменений.

Примечание

В первом примере нужно сначала перевернуть подстроку \([1 \dots 2]\), а затем инвертировать подстроку \([2 \dots 5]\).

Тогда строка изменялась так:

«01000» \(\to\) «10000» \(\to\) «11111».

И затраченная стоимость соответственно равна \(1 + 10 = 11\).

Во втором примере нужно сначала инвертировать подстроку \([1 \dots 1]\), а затем инвертировать подстроку \([3 \dots 5]\).

Тогда строка изменялась так:

«01000» \(\to\) «11000» \(\to\) «11111».

И затраченная стоимость соответственно равна \(1 + 1 = 2\).

В третьем примере строка уже состоит только из единиц, поэтому ответ \(0\).

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\) биткоина.

D. Уравняй остатки

жадные алгоритмы реализация Структуры данных *1900

Задан массив, состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\), и натуральное число \(m\). Гарантируется, что \(m\) делит \(n\) без остатка.

За один ход можно выбрать произвольный индекс \(i\) от \(1\) до \(n\) и увеличить элемент \(a_i\) на \(1\).

Пусть \(c_r\) (\(0 \le r \le m-1)\) — количество элементов, которые имеют остаток \(r\) при делении на \(m\). Иными словами, подсчитаем количество элементов массива \(a\) для каждого остатка.

Ваша задача — изменить массив так, чтобы \(c_0 = c_1 = \dots = c_{m-1} = \frac{n}{m}\).

Выведите минимальное количество ходов, которое необходимо чтобы удовлетворить требование выше.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le n\)). Гарантируется, что \(m\) делит \(n\) без остатка.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

В первую строку выведите одно целое число — минимальное количество ходов, необходимое, чтобы для каждого остатка от \(0\) до \(m - 1\) количество элементов с таким остатком было равно \(\frac{n}{m}\).

Во вторую строку выведите любой удовлетворяющий условию массив, получаемый из заданного минимальным количеством ходов. Значения элементов полученного массива не должны превышать \(10^{18}\).

E. Достижимость из столицы

графы жадные алгоритмы поиск в глубину и подобное *2000

В Берляндии \(n\) городов и \(m\) дорог, каждая из дорог соединяет пару городов. Дороги в Берляндии — односторонние.

Какое наименьшее количество новых дорог надо построить, чтобы из столицы Берляндии по дорогам стали достижимы все города страны?

Построенные новые дороги тоже будут односторонними.

Входные данные

В первой строке задано три целых числа \(n\), \(m\) и \(s\) (\(1 \le n \le 5000, 0 \le m \le 5000, 1 \le s \le n\)) — количество городов, количество дорог и номер столицы. Города пронумерованы от \(1\) до \(n\).

В следующих \(m\) строках заданы дороги: \(i\)-я дорога задается парой номеров соединяемых городов \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)). Для каждой пары городов \((u, v)\) может быть не более одной дороги из \(u\) в \(v\), но существование встречных дорог (из \(u\) в \(v\) и одновременно из \(v\) в \(u\)) допустимо. Все дороги в Берляндии — односторонние.

Выходные данные

Выведите одно целое число — минимальное количество дорог, которое необходимо построить, чтобы из города \(s\) стали достижимы все остальные города. Если во входных данных уже все города достижимы из \(s\), то выведите 0.

Примечание

Первый пример изображен на следующем рисунке:

Для того, чтобы все города стали достижимы из \(s = 1\), можно добавить, например, дороги (\(6, 4\)), (\(7, 9\)), (\(1, 7\)).

Второй пример:

В этом примере можно добавить любую из дорог (\(5, 1\)), (\(5, 2\)), (\(5, 3\)), (\(5, 4\)), чтобы все остальные города стали достижимы из \(s = 5\).

Разбираем задачу про MEX

жадные алгоритмы игры

Пирожки не должны остыть

реализация жадные алгоритмы сортировки *1300

В пекарне «У Матроны» работает один пекарь, и за утро он должен испечь n заказов пирожков. Для каждого заказа известно время ti — сколько минут займёт его приготовление.

Пирожки нельзя долго держать на прилавке: клиент заберёт свой заказ горячим, только если время ожидания не превысило времени его приготовления. Иначе пирожки остынут — и клиент уйдёт расстроенным.

Временем ожидания клиента считается суммарное время приготовления всех заказов, которые пекарь взял в работу до его заказа. Клиент остаётся доволен, если это время не больше времени приготовления его собственного пирожка.

Матрона может сама решать, в каком порядке брать заказы в работу. Помогите ей выбрать такой порядок, чтобы максимальное число клиентов ушло довольными.

 

Формат входных данных

В первой строке — целое число n (1 ≤ n ≤ 105) — количество заказов.

Во второй строке — n целых чисел ti (1 ≤ ti ≤ 109), разделённых пробелами, — время приготовления каждого заказа.

 

Формат выходных данных

Одно целое число — максимальное количество довольных клиентов.

Ёлочная гирлянда

Строки дп жадные алгоритмы *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.

Размен купюр

жадные алгоритмы

В банкомате имеется неограниченный запас купюр номиналами \(1, 5, 10, 50, 100, 500, 1000\) и \(5000\) рублей. Клиент хочет снять со счёта сумму в \(N\) рублей и получить её наличными.

Банкомат настроен так, чтобы выдавать клиенту как можно меньше купюр в сумме — это экономит физические купюры в кассете. Разумеется, выданные купюры должны в сумме составлять ровно \(N\) рублей.

Определите, какое минимальное количество купюр выдаст клиенту банкомат.

Формат входных данных

Одно целое число \(N\) (\(0 \le N \le 10^9\)) — сумма, которую нужно выдать.

Формат выходных данных

Одно целое число — минимальное количество купюр.

Примечание

В первом примере \(6250 = 5000 + 1000 + 100 + 100 + 50\) — итого 5 купюр.

Во втором примере \(N = 0\) — клиент снимает ноль рублей, купюр не нужно выдавать вообще.

Load Balancing

Перебор жадные алгоритмы

Коровы Фермера Джона стоят в различных точках \((x_1, y_1) \ldots (x_n, y_n)\) его поля (\(1 \leq N \leq 1000\), все \(x_i\) и \(y_i\) - положительные нечётные целые числа, не превышающие \(1,000,000\). ФД хочет разделить своё поле изгородью бесконечной длины с севера на юг, описываемой уравнением \(x=a\) (\(a\) - чётное целое, так обеспечивается, что изгородь не пройдёт через позицию ни одной коровы). Также он хочет построить изгородь бесконечной длины с востока на запад, которая описывается уравнением \(y=b\), где \(b\) - чётное целое. Эти две изгороди пересекаются в точке \((a,b)\), и вместе делят поле на четыре региона.

ФД хочет выбрать \(a\) и \(b\) так, чтобы получить "сбалансированное" количество коров во всех регионах, т.е. чтобы не было региона, который содержит слишком много коров. Пусть \(M\) - максимальное количество коров в этих четырёх регионах, ФД хочет, чтобы \(M\) было как можно меньше. Помогите ФД определить это минимально возможное значение для \(M\).

ФОРМАТ ВВОДА (файл balancing.in):

Первая строка ввода содержит два целых числа, \(N\) и \(B\). Каждая из следующих \(n\) строк содержит местоположение одной коровы, указанное её координатами \(x\) и \(y\).

ФОРМАТ ВЫВОДА (файл balancing.out):

Выведите минимально возможное значение \(M\), которое может достичь ФД оптимальным расположением изгородей.

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):

Выведите минимальное суммарное расстояние пройденное коровами.

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\) роботов.

True or False Test

Жадный алгоритм жадные алгоритмы реализация

**Замечание: Время на тест для этой задачи 3сек, в 1.5 большее чем по умолчанию. Память на тест для этой задачи 512MB, в два раза больше чем по умолчанию.**

Беси проходит тест вида да/нет из \(N\) вопросов (\(1\le N\le 2\cdot 10^5\)). За \(i\)-ый вопрос она может добавить \(a_i\) баллов если ответит правильно, и отнять \(b_i\) баллов, если ответит неправильно или не изменить сумму, если не ответит вообще на вопрос (\(0<a_i,b_i\le 10^9\)).

Беси знает ответы на все вопросы, но боится, что администратор теста Эльза подменит до \(k\) вопросов так, чтоб получилось, что Беси ответила неправильно.

Заданы \(Q\) (\(1\le Q\le N+1\)) кандидатов величин \(k\) (\(0\le k\le N\)), определите количество баллов, которые Беси гарантированы для каждого \(k\), зная, что она должна ответить не менее чем на \(k\) вопросов.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(Q\).

Каждая из следующих \(N\) строк содержит \(a_i\) и \(b_i\).

Каждая из следующих \(Q\) строк содержит значение \(k\). Ни одно из значений \(k\) не появится более одного раза.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите ответ для каждого \(k\) на отдельной строке.

Cowdependence

жадные алгоритмы Задачи на моделирование

\(N\) \((1 \leq N \leq 10^5)\) коров Фермера Джона выстроены в ряд. \(i\)-ая корова имеет метку \(a_i\) (\(1 \leq a_i \leq N\)). Группа коров может сформировать дружескую группу, если все они имеют одну и ту же метку и каждая корова находится в пределах \(x\) коров от остальных коров группы, где \(x\) - целое число из интервала \([1,N]\). Каждая корова должна быть точно в одной дружеской группе.

Для каждого \(x\) от \(1\) до \(N\), посчитайте минимальное количество дружеских групп, которые могу быть сформированы.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит целое число \(N\).

Следующая строка содержит \(a_1 ... a_N\), метки каждой из коров.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого \(x\) от \(1\) до \(N\), выведите минимальное количество дружеских групп для каждого \(x\) в отдельной строке.

It's Mooin' Time

жадные алгоритмы

Фермер Джон пытается описать свой любимый USACO-контест Эльзе, но она не понимает, почему он любит так сильно.

ФД загрузил контест как текстовый файл и старается объяснить, что он имеет ввиду. Контест определяется как строка маленьких латинских букв длины \(N\) (\(3 \leq N \leq 20\,000\)). "moo" определяется как подстрока \(c_ic_jc_j\) где за некоторым символом \(c_i\) следуют два символа \(c_j\), где \(c_i \neq c_j\). По словам фермера Джона, Беси много мычит, поэтому, если какое-то мычание появляется хотя бы \(F\) (\(1\le F\le N\)) раз в контесте, это может быть от Бесси.

Однако загрузка ФД может быть испорчена, и текстовый файл может иметь до одного символа, отличающегося от оригинального файла. Выведите все возможные moo, которые Беси могла бы сделать, с учетом потенциальной ошибки, в алфавитном порядке.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(F\), представляющие длину строки и порог частоты moo от Беси.

Вторая строка содержит строку маленьких латинских букв длиной \(N\), представляющую контест.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество различных moo, которые Беси сделала, за которым последует лексикографически упорядоченный список moo. Каждое moo появляется на отдельной строке.

Leaders

жадные алгоритмы Задачи на моделирование

У Фермера Джона есть \(N\) коров (\(2 \leq N \leq 10^5\)). Каждая корова имеет породу Guernsey или Holstein. Коровы стоят в ряд пронумерованные \(1 \ldots N\).

Каждая корова записала свой список коров. А именно, список коровы \(i\) содержит диапазон коров, начиная с неё самой (коровы \(i\)) и до коровы \(E_i\) (\(i \leq E_i \leq N\)) включительно.

ФД недавно обнаружил, что каждая порода коров имеет ровно одного лидера. Он не знает точно, кто эти лидеры, но знает, что каждый лидер должен иметь список, который включает всех коров этой породы, или лидера коров другой породы, или и то, и другое.

Помогите ФД посчитать количество пар коров, которые могут быть лидерами. Гарантируется, что имеется, как минимум, одна возможная пара.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Вторая строка содержит строку длиной \(N\), в который \(i\)-ый символ обозначает породу \(i\)-ой коровы (G для Guernsey и H для Holstein).

Третья строка содержит \(E_1 \dots E_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество возможных пар лидеров.

Cow Frisbee

жадные алгоритмы

Коровы Фермера Джона имеют высоты \(1, 2, \ldots, N\). Однажды выстроились в ряд в некотором порядке для игры в фрисби. Пусть \(h_1 \ldots h_N\) обозначают высоты этих коров в заданном порядке (поэтому \(h\)'-ки есть перестановка чисел \(1 \ldots N\)).

Две коровы на позициях \(i\) и \(j\) в строке могут успешно бросить фрисби друг другу, если и только если все коровы между ними имеют рост меньше чем \(\min(h_i, h_j)\).

Вычислите сумму расстояний между всеми парами позиций \(i<j\), которые ограничены парой коров, которые могут бросить которые могу успешно бросать фрисби друг другу. Расстояние между позициями \(i\) и \(j\) есть \(j-i+1\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит одно целое число \(N\). Следующая строка ввода содержит \(h_1 \ldots h_N\), разделённые одиночными пробелами.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите сумму расстояний для всех пар позиций в которых коровы могут бросить фрисби друг другу. Для ответа используйте 64-битное целое (например, "long long" в C/C++).

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 и мороженые.

Delegation

графы Деревья жадные алгоритмы

Ферма Джона состоит из \(N\) пастбищ (\(1 \leq N \leq 10^5\)), соединённых \(N-1\) дорогой, так что любое пастбище достижимо из любого другого. То есть ферма представляет собой дерево.

ФД хочет разбить множество дорог на несколько путей. Его не беспокоит количество путей. Однако он хочет чтобы все эти пути максимально возможными.

Помогите ФД определить максимальное положительное целое \(K\) такое, что дороги могут быть разделены на пути длины не менее \(K\).

ОЦЕНИВАНИЕ:

  • В тестах 2-4 дерево формирует звезду; не более чем одна вершина имеет степень больше чем 2.
  • В тестах 5-8 \(N\le 10^3\).
  • В тестах 9-15 нет дополнительных ограничений.

ФОРМАТ ВВОДА (файл deleg.in):

Первая строка содержит \(N\).

Каждая из следующих \(N-1\) строк содержит по два целых числа \(a\) и \(b\), описывающих ребро между вершинами \(a\) и \(b\). Оба числа \(a\) и \(b\) в интервале \(1 \ldots N\).

ФОРМАТ ВЫВОДА (файл deleg.out):

Выведите \(K\).

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.

Meetings

жадные алгоритмы

Два амбара расположены в позициях \(0\) и \(L\) \((1\le L\le 10^9)\) на одномерной числовой прямой. Также имеется \(N\) коров \((1\le N\le 5\cdot 10^4)\) в различных точках этой числовой прямой (и амбар и коровы представляем точками).

Каждая корова \(i\) изначально расположена в некоторой позиции \(x_i\) и двигается в положительном или отрицательном направлении со скоростью одна единица в секунду, представленной целым числом \(d_i\), которое равно либо \(1\) либо \(-1\).

Каждая корова имеет вес \(w_i\) в интервале \([1,10^3]\). Все коровы всегда движутся с постоянной скоростью, пока не произойдёт одно из следующих событий:

  • Если корова \(i\) достигает амбара, то она прекращает движение.
  • Поисходит встреча, когда две коровы \(i\) и \(j\) находятся в одной точке, которая не является амбаром. В этом случае корове \(i\) назначается скорость коровы \(j\) и наоборот. Заметим, что коровы могут встретится в точке, которая не является целым числом.

Пусть \(T\) - самое раннее время, когда сума весов всех коров, которые перестали двигаться (достигнув одного из амбаров) составляет как минимум половину суммы весов всех коров. Определите общее количеаство встреч между парами коров, которое состоится в интервале времени от \(0 \ldots T\) (включая время \(T\)).

ОЦЕНИВАНИЕ:

  • Тесты 2-4 удовлетворяют \(N\le 10^2\) и \(w_i=1\) для всех \(i.\)
  • Тесты 5-7 удовлетворяют \(N\le 10^2.\)

ФОРМАТ ВВОДА (файл meetings.in):

Первая строка содержит два разделённых пробелом целых числа \(N\) и \(L\).

Каждая из последующих \(N\) строк содержит тра разделённых пробелом целых числа \(w_i\), \(x_i\), \(d_i.\) Все \(x_i\) различные и удовлетворяют \(0<x_i<L.\)

Формат вывода (файл meetings.out):

Выведите одно целое число - ответ задачи.

Snow Boots

жадные алгоритмы

На ферме зима и много снега. Имеется \(N\) фрагментов на пути от фермы к амбару, последовательно пронумерованных \(1 \dots N\), и фрагмент \(i\) покрыт \(f_i\) футами снега.

В подвале у ФД имеется \(B\) пар ботов, пронумерованных \(1 \dots B\). Некоторые потяжелее, а некоторые полегче. Пара \(i\) позволяет ФД идти по снегу не более \(s_i\) футов глубиной и позволяет ФД сделать шаг длиной не более \(d_i\).

ФД начинает на фрагменте \(1\) и должен достичь фрагмента \(N\) чтобы разбудить коров. Фрагмент \(1\) защищён крышей фермы, а фрагмент \(N\) защищён крышей амбара, поэтому на них нет снега. Помогите ФД определить какую пару ботинок надеть, чтобы пройти от фермы к амбару.

ФОРМАТ ВВОДА (файл snowboots.in):

Первая строка содержит два разделённых пробелом целых числа \(N\) и \(B\) (\(1 \leq N,B \leq 10^5\)).

Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами. \(i\)-ое число есть \(f_i\) - глубина снега на фрагменте \(i\) (\(0 \leq f_i \leq 10^9\)). Гарантируется, что \(f_1 = f_N = 0\).

Каждая из следующих \(B\) строк содержат два разделённых пробелом целых числа. Первое целое число есть \(s_i\) - максимальная глубина снега, в которую может ступить пара \(i\). Второе целое число есть \(d_i\) - максимальный размер шага для пары \(i\). Гарантируется, что \(0 \leq s_i \leq 10^9\) и \(1 \leq d_i \leq N-1\).

ФОРМАТ ВЫВОДА (файл snowboots.out):

Вывод должен состоять из \(N\) строк. Строка \(i\) должна содержать одно целое число \(1\), если ФД может пройти от фрагмента \(1\) до фрагмента \(N\) надев \(i\)-ую пару ботинок, и \(0\) в противном случае.

Partitioning the Farm

Бинарный поиск по ответу жадные алгоритмы Задачи на моделирование


Ферма Джона разделена на N x N квадратов пастбищ (2<=N<=15). Снаружи есть изгородь, но между пастбищами коровы могут переходить свободно.
ФД решил построить изгороди, чтобы отделить коров друг от друга. Каждая изгородь может быть горизонтальной или вертикальной через всю ферму, и изгороди не могут проходить через пастбища. По финансовым соображениям ФД может построить не более чем K изгородей (1 <= K <= 2N - 2).
ФД хочет построить изгороди так, чтобы минимизировать размер наибольшей из получившихся в результате групп коров (две коровы находятся в одной группе, если они могут посетить друг друга, не пересекая никакую изгородь).
По заданным количествам коров на пастбищах, вычислите размер наибольшей группы коров, если ФД построит изгороди оптимально.

PROBLEM NAME: partition
Формат входных данных
* Строка 1: Два целых числа, N and K
* Строки 2..1+N: Имеется N чисел на каждой строке, описывающих количества коров в каждом пастбище одной строки фермы. На каждом пастбище не менее 0 и не более 1000 коров.


Формат выходных данных
* Строка 1: Минимально возможный размер наибольшей группы коров.
Примечание
ФД должен построить изгороди между колонками 2 и 3 и между строками 2 и 3. В результате получится 4 группы по 4 коровы в каждой.

Running Laps

жадные алгоритмы


Фермер Джон заставил N своих коров (1 <= N <= 100,000) бежать L раз по круглому треку длиной C. Все коровы начинают в одной точке трека и бегут с разными скоростями. Гонка заканчивается, когда самая быстрая корова достигнет финиша (пробежав общее расстояние LC).
ФД заметил несколько случаев, когда одна корова обгоняла другую, и хочет узнать, сколько раз такой обгон случился за все время гонки.
Более строго, событие для подсчета определяется парой коров (x,y) и временем t (меньшим или равным времени конца гонки), когда корова X обгоняла корову y в момент времени t. Помогите ФД подсчитать общее количество таких обгонов за все время гонки.
PROBLEM NAME: running
Формат входных данных
* Строка 1: Три разделенных пробелами целых числа: N, L, C. (1 <= L,C <= 25,000).
* Строки 2..1+N: Строка i+1 содержит скорость коровы i, целое число в диапазоне 1..1,000,000.
Формат выходных данных
* Строка 1: Общее количество обгонов во время гонки.
Примечание
Гонка длится 2 единицы времени, поскольку именно столько времени нужно самой быстрой корове (с номером 2) добраться до финиша. За это время случится 4 обгона: корова 2 обгонит коров 1 и 4, и корова 3 обгонит коров 1 и 4.

Three Lines

жадные алгоритмы


Фермер Джон хочет отслеживать свои N коров (1 <= N <= 50,000), используя свою новую систему наблюдения, которую он купил.
I-ая корова расположена в позиции (xi, yi) с целочисленными координатами (в диапазоне 0...1,000,000,000); никакие две коровы не расположены в одной и той же позиции.
Система наблюдения ФД имеет три специальные камеры, каждая из которых способна отслеживать всех коров вдоль некоторой вертикальной или горизонтальной оси. Пожалуйста, помогите ФД определить, возможно ли установить эти три камеры так, чтобы отслеживать всех его коров. То есть, Определите, могут ли все N позиций коров быть покрыты некоторым множеством из трех прямых, каждая из которых ориентирована горизонтально или вертикально.
Замечание: программы, которые не делают ничего, кроме угадывания ответа, могут быть дисквалифицированы.
PROBLEM NAME: 3lines
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Строка i+1 содержит разделенные пробелом целые числа xi yi , определяющие положение коровы i.
Формат выходных данных
* Строка 1: Выведите 1, ели возможно отслеживать всех коров тремя камерами и выведите 0 в противном случае.
Примечание
Прямые y=0, x=1, y=4 отслеживают все N коров.

Запрещенный подграф

Обход в глубину графы жадные алгоритмы реализация

Два неориентированных графа G и H называются изоморфными , если:

  • они имеют одинаковое количество вершин;
  • существует такое однозначное соответствие между их вершинами, что любые две различные вершины графа G соединены ребром тогда и только тогда, когда соединены ребром соответствующие вершины графа H.
Например, следующие два графа изоморфны, хотя выглядят по-разному:


 

Возможным однозначным соответствием, показывающим, что эти два графа изоморфны, является {a-1, b-6, c-8, d-3, g-5, h-2, i-4, j-7}, хотя существуют и другие подобные соответствия.

Подграфом графа называется граф, множества вершин и ребер которого являются подмножествами множеств вершин и ребер графа G. Заметьте, что граф является также и своим подграфом. На рисунке показаны граф и один из его подграфов:



Говорят, что граф G содержит другой граф H , если существует хотя бы один подграф H ’ графа G , который изоморфен H . Следующий рисунок показывает граф G , который содержит граф H .



ЗАДАНИЕ

По двум заданным неориентированным графам G и H постройте подграф G’ графа G такой, что:

количество вершин в графах G и G’ одинаково;
H не содержится в G’ .
Естественно, может быть много подграфов графа G’ с перечисленными свойствами. Постройте подграф с как можно большим количеством ребер.

БАЗОВЫЙ АЛГОРИТМ

Возможно, наиболее простой стратегией при решении этой задачи будет следующая: рассматривать ребра графа G в порядке, в котором они представлены во входных данных, после чего пытаться добавлять ребра одно за другим в граф G’, проверяя на каждом шаге, входит ли граф H в граф G’ или нет. Правильная реализация этого жадного алгоритма наберет некоторое количество очков, хотя существуют гораздо лучшие стратегии.

ОГРАНИЧЕНИЯ

3 ≤ m ≤ 4    m – количество вершин в H.
3 ≤ n ≤ 1000    n – количество вершин в G .

ВВОД

Вы получите 10 тестов каждый со следующими данными:
 

Пример ввода

ОПИСАНИЕ

3 5
0 1 0
1 0 1
0 1 0
0 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 0 1 0 1
0 0 0 1 0

СТРОКА 1: Содержит два целых числа, разделенных пробелом, соответственно и n.

СЛЕДУЮЩИЕ СТРОККаждая строка содержит целых чисел, разделенных пробелами, и представляет одну вершину из в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в , и равняется 0 в противном случае.

СЛЕДУЮЩИЕ СТРОК Каждая строка содержит целых чисел, разделенных пробелами, и представляет одну вершину из в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в и равняется 0 в противном случае.

 

Заметьте, что за исключением строки 1, приведенные входные данные представляют собой матрицы смежности графов и .

ВЫВОД

Вы должны создать 10 выводов по одному на каждый входной. Каждый тест должен содержать следующие данные:

Пример вывода

ОПИСАНИЕ

#FILE forbidden K
5
0 1 0 0 0
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

СТРОКА 1: Заголовок файла. Заголовок файла должен содержать

#FILE forbidden K

где K – это число между 1 и 10, которое соответствует решенному входному файлу.

СТРОКА 2: Содержит одно целое число : .

СЛЕДУЮЩИЕ СТРОК Каждая строка содержит целых чисел, разделенных пробелом, и представляет одну вершину из G’ в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в G’ , и равняется 0 в противном случае.

Заметьте, что за исключением строк 1 и 2, приведенные входные данные представляют собой матрицу смежности графа G’. Обратите внимание, что есть много вариантов ответа, и приведенный вариант является корректным, но не оптимальным.

Трансформация массива

реализация жадные алгоритмы

Вам дано \(t\) пар массивов \(a_i\) и \(b_i\) равной длины.

За одну операцию модификации можно:

  • Поменять местами любые два элемента массива \(a_i\), но каждый элемент массива может участвовать не более чем в одном обмене.

  • Вычесть из любого элемента массива \(a_i\) единицу. Данную операцию можно применять неограниченное число раз к любому элементу массива.

Для каждой пары массивов найдите минимальное число операций, которые необходимо применить к массиву \(a_i\), чтобы получить массив \(b_i\), или определите, что это невозможно.

Входные данные
В первой строке дано число \(t\) — число пар массивов (\(1 \le t \le 40\)).

В следующих \(3t\) строках содержатся описания пар массивов. Каждая пара описывается тремя строками.

В первой из них дано число \(n_i\) — количество элементов в каждом массиве \(i\)-й пары(\(1 \le n_i \le 10\)). Во второй строке заданы \(n_i\) чисел \(a_{i,j}\) — элементы массива \(a_i\) (\(1 \le a_{i,j} \le 1000\)). В третьей строке заданы \(n_i\) чисел \(b_{i,j}\) — элементы массива \(b_i\) (\(1 \le b_{i,j} \le 1000\)).

Гарантируется, что сумма \(n_i\) по всем тестовым наборам не превосходит \(150\).

Выходные данные
Для каждого пары массивов выведите одно число — минимальное число операций, которые необходимо применить к массиву \(a_i\), чтобы получить массив \(b_i\), или \(-1\), если для данной пары это невозможно.

 

Сын маминой подруги

жадные алгоритмы реализация

Вася уже в десятом классе. После месяца ежедневных заруб в доту со своими товарищами, он начал замечать, что его оценки начали проседать. Исправлять их он, конечно же не собирается, но есть один нюанс...
Вместе с Васей в классе учится сын маминой подруги — Петя. Вася очень не любит его, потому что мама Васи дружит с мамой Пети и знает про него почти всё. В конце триместра у васиной мамы есть традиция садиться и сравнивать оценки Васи с оценками Пети. За каждый случай, когда у Васи оценка ниже, чем у Пети, мама выдаёт ему наряд вне очереди! — мыть весь день посуду, пропылесосить во всём доме, помыть окна или отвести/забрать младшую сестру из детского сада.
Конечно же, эта ситуация Васе не очень нравится, потому что в среднем Вася умнее Пети. Вася хочет минимизировать количество штрафных нарядов, поэтому он собирается перемешать оценки.
Помимо оценок в журнале встречается метка n. Она означает, что ученика на уроке не было. Если кого-то из учеников не было на уроке, то мама Васи не может сравнить успехи своего сына и сына своей подруги, поэтому штрафной наряд выписан быть не может
Помогите Васе перемешать свои оценки и n-ки так, чтобы получить как можно меньше штрафных нарядов. Если существует несколько решений, выведите любое.
В школе N различных предметов, и по каждому из них Вася должен перемешать оценки.
В каждом тесте первое число N — это количество предметов, за которые получены оценки в этом триместре. В следующих 2N строках находятся N блоков по 2 строки. В каждом блоке в первой строке находятся оценки Васи, а во второй — оценки Пети. Для каждого блока в новой строчке нужно вывести такую перестановку номеров оценок и меток n, что ai означает, что Васина оценка под номером i должна занять позицию ai.
В первом тесте N = 30. Оценка за этот тест: 30 баллов. За каждый предмет, за который получено больше штрафных нарядов, чем могло бы быть, снимается 1 балл. Проверка осуществляется в режиме online (результат виден сразу).
Во втором тесте N = 35. Оценка за этот тест: 70 баллов. За каждый предмет, за который получено больше штрафных нарядов, чем могло бы быть, снимается 2 балла. Во время тура проверяется, что по каждому предмету сдана корректная перестановка. Проверка правильности ответа осуществляется в режиме offline (результат виден после окончания тура).

Примеры
Входные данные Выходные данные
1 3
5
4 4 3 4 4
5 5 4 5 5
4
n 3 4 n
4 n 4 n
4
1 3 2 4
3 2 1 5
5 1 2 4 3
1 2 3 4
3 4 2 1

В первом примере Вася получит 4 наряда вне очереди. Во втором примере ничего никуда переставлять не надо, потому что на единственном уроке, на котором присутствовали оба ученика, они получили по 4 балла. В третьем примере Вася переставит оценки вот так: 4, 2, 1, 3 и получит один наряд вне очереди

 

Tripleswap - 1

реализация жадные алгоритмы

Компания ADM представила новый квантовый процессор. Благодаря нему очень быстро можно применять функцию «tripleswap» к некоторому массиву a.

tripleswap(i, j, k, x, y, z) — переставляет элемент, который стоит на позиции i на позицию x, элемент с позиции j на позицию y и элемент с позиции k на позицию z. При этом i, j, k, x, y и z — корректные индексы массива, множество {i,j,k} совпадает с множеством {x,y,z}, а также выполняется условие, что i, j, k различны между собой и x, y, z различны между собой.

Таким, образом, пусть есть массив, содержащий первую перестановку из пяти элементов [1,2,3,4,5]. Если применить к нему tripleswap(1, 5, 4, 5, 1, 4) получится массив [5,2,3,4,1]. При этом, выполнить tripleswap(1, 5, 4, 5, 2, 4) или tripleswap(1, 5, 1, 5, 1, 1) нельзя, так как такие наборы аргументов считаются некорректными.

Вас пригласили протестировать возможности нового процессора. Для первого теста вам дана перестановка из n чисел, нужно отсортировать ее по возрастанию при помощи функции tripleswap, вызвав данную функцию не более, чем n/2 раз (деление целочисленное, 5/2=2).

Входные данные

В первой строке дано одно натуральное число n — размер перестановки (3≤n≤100).

Во второй строке заданы n чисел ai — элементы перестановки (1≤ai≤n). Гарантируется, что все ai попарно различны.

Выходные данные

В первой строке выведите одно число m — число вызов функции tripleswap, которые сортируют данную перестановку требуемым способом.

В каждой из следующих m строк выведите по шесть чисел — аргументы для каждого вызова функции.

Если есть несколько решений, разрешается вывести любое.
 

Ввод Вывод
5
1 2 3 4 5
0
5
5 4 3 2 1
2
2 4 5 4 5 2
1 2 5 5 1 2


Примечание
В первом тесте последовательность уже отсортирована, поэтому потребуется ноль вызовов данной функции. Во втором тесте изменение элементов массива будет выглядеть следующим образом: [5,4,3,2,1]⇒[5,1,3,4,2]⇒[1,2,3,4,5].